diff --git a/.gitattributes b/.gitattributes index 979db5b55faf6ec4cdc3368a3b4894a15d234d31..34b481fb5e6538e49c54771a39d8520c46e02728 100644 --- a/.gitattributes +++ b/.gitattributes @@ -151,3 +151,4 @@ plugins/SecurityInfo/tests/UI/expected-ui-screenshots/SecurityInfoReport_admin_s plugins/TasksTimetable/screenshots/Timetable.png filter=lfs diff=lfs merge=lfs -text plugins/VisitorGenerator/data/ecommerce.log filter=lfs diff=lfs merge=lfs -text tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf filter=lfs diff=lfs merge=lfs -text +tests/UI/resources/piwik1.0.sql.gz filter=lfs diff=lfs merge=lfs -text diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getCountry_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getCountry_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getCountry_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getNumberOfDistinctCountries_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getNumberOfDistinctCountries_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getNumberOfDistinctCountries_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getNumberOfDistinctCountries_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getNumberOfDistinctCountries_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getNumberOfDistinctCountries_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getRegion_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getRegion_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getRegion_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getRegion_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getRegion_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserCountry.getRegion_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserId.getUsers_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserId.getUsers_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserId.getUsers_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserId.getUsers_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserId.getUsers_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserId.getUsers_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitFrequency.get_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitFrequency.get_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..2cc0e6ed4e24b399449c2eb1bff03b72d004d08e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitFrequency.get_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitFrequency.get_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitFrequency.get_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..e0d8bf88a01d4768beaf7a5aaee5b7fcb74f878b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitFrequency.get_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getByDayOfWeek_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getByDayOfWeek_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..547baf7416a18c8ab1be969cf97d909e1330016e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getByDayOfWeek_day.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getByDayOfWeek_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getByDayOfWeek_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..547baf7416a18c8ab1be969cf97d909e1330016e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getByDayOfWeek_week.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getVisitInformationPerLocalTime_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getVisitInformationPerLocalTime_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getVisitInformationPerLocalTime_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getVisitInformationPerLocalTime_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getVisitInformationPerLocalTime_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getVisitInformationPerLocalTime_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getVisitInformationPerServerTime_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getVisitInformationPerServerTime_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getVisitInformationPerServerTime_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getVisitInformationPerServerTime_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getVisitInformationPerServerTime_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitTime.getVisitInformationPerServerTime_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsByDaysSinceLast_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsByDaysSinceLast_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsByDaysSinceLast_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsByDaysSinceLast_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsByDaysSinceLast_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsByDaysSinceLast_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsByVisitCount_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsByVisitCount_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsByVisitCount_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsByVisitCount_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsByVisitCount_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsByVisitCount_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsPerPage_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsPerPage_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsPerPage_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsPerPage_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsPerPage_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsPerPage_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsPerVisitDuration_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsPerVisitDuration_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsPerVisitDuration_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsPerVisitDuration_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsPerVisitDuration_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitorInterest.getNumberOfVisitsPerVisitDuration_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getActions_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getActions_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getActions_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getActions_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getActions_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getActions_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getBounceCount_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getBounceCount_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getBounceCount_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getBounceCount_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getBounceCount_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getBounceCount_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getMaxActions_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getMaxActions_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getMaxActions_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getMaxActions_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getMaxActions_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getMaxActions_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getSumVisitsLengthPretty_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getSumVisitsLengthPretty_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c908c9a75de925061fd59c6a5dde6d4d81c4e63b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getSumVisitsLengthPretty_day.xml @@ -0,0 +1,10 @@ + + + 0s + 0s + 0s + 0s + 0s + 0s + 0s + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getSumVisitsLengthPretty_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getSumVisitsLengthPretty_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..fb10fa8906162e015342d6c84f1852f975ff1c75 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getSumVisitsLengthPretty_week.xml @@ -0,0 +1,10 @@ + + + 0s + 0s + 0s + 0s + 0s + 0s + 0s + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getSumVisitsLength_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getSumVisitsLength_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getSumVisitsLength_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getSumVisitsLength_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getSumVisitsLength_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getSumVisitsLength_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getUniqueVisitors_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getUniqueVisitors_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getUniqueVisitors_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getUniqueVisitors_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getUniqueVisitors_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getUniqueVisitors_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getUsers_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getUsers_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getUsers_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getUsers_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getUsers_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getUsers_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getVisitsConverted_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getVisitsConverted_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getVisitsConverted_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getVisitsConverted_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getVisitsConverted_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getVisitsConverted_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getVisits_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getVisits_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getVisits_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getVisits_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getVisits_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.getVisits_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.get_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.get_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..106f23f16bb7dddc98ac7def1dd2c59d64a48127 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.get_day.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.get_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.get_week.xml new file mode 100644 index 0000000000000000000000000000000000000000..867400a47a1a5311ed181e6c0c06887a03136311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__VisitsSummary.get_week.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__AIAgents.get_day.xml b/tests/PHPUnit/System/expected/test_noVisit__AIAgents.get_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..15baec940b28b15706aa13fb6ca9e4e681e16311 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__AIAgents.get_day.xml @@ -0,0 +1,25 @@ + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0% + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0% + 0 + 0 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getDownload_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getDownload_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getDownload_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getDownloads_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getDownloads_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getDownloads_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getEntryPageTitles_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getEntryPageTitles_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getEntryPageTitles_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getEntryPageUrls_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getEntryPageUrls_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getEntryPageUrls_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getExitPageTitles_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getExitPageTitles_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getExitPageTitles_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getExitPageUrls_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getExitPageUrls_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getExitPageUrls_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getOutlink_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getOutlink_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getOutlink_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getOutlinks_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getOutlinks_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getOutlinks_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageTitle_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageTitle_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageTitle_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageTitlesFollowingSiteSearch_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageTitlesFollowingSiteSearch_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageTitlesFollowingSiteSearch_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageTitles_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageTitles_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageUrl_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageUrl_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageUrl_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageUrlsFollowingSiteSearch_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageUrlsFollowingSiteSearch_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageUrlsFollowingSiteSearch_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageUrls_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getPageUrls_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getSiteSearchCategories_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getSiteSearchCategories_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getSiteSearchCategories_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getSiteSearchKeywords_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getSiteSearchKeywords_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getSiteSearchKeywords_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.getSiteSearchNoResultKeywords_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.getSiteSearchNoResultKeywords_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.getSiteSearchNoResultKeywords_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Actions.get_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Actions.get_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..69e448e490f4c2d23d1dfca9d896138ab39863e3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Actions.get_day.xml @@ -0,0 +1,12 @@ + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Bandwidth.get_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Bandwidth.get_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..e250ef2286b033f75e7672cf12e29daf43b8d638 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Bandwidth.get_day.xml @@ -0,0 +1,6 @@ + + + 0 + 0 + 0 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Contents.getContentNames_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Contents.getContentNames_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Contents.getContentNames_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Contents.getContentPieces_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Contents.getContentPieces_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Contents.getContentPieces_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__CoreAdminHome.getTrackingFailures.xml b/tests/PHPUnit/System/expected/test_noVisit__CoreAdminHome.getTrackingFailures.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__CoreAdminHome.getTrackingFailures.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getNumberOfPluginUpdates.xml b/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getNumberOfPluginUpdates.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getNumberOfPluginUpdates.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml b/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f15c78e785eefd0830ff08a31ddd0a038ef296e6 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml @@ -0,0 +1,889 @@ + + + + CoreAdminHome + + + + trusted_hosts + + <value> + </value> + <defaultValue> + </defaultValue> + <type>array</type> + <uiControl>field-array</uiControl> + <uiControlAttributes> + <field> + <title>Valid Matomo Hostname + text + + + + + + + + + Trusted Matomo Hostname + + + + cors_domains + + <value> + </value> + <defaultValue> + </defaultValue> + <type>array</type> + <uiControl>field-array</uiControl> + <uiControlAttributes> + <field> + <title>Domain + text + + + + + + + You can define domains or subdomains like http://example.com or http://stats.example.com. Or to allow cross domain requests for all domains simply add a * + + Cross-Origin Resource Sharing (CORS) domains + + + + + + GeoIp2 + Configuration for server variables used by GeoIP 2 server modules + + + geoip2usecustom + I use the Geoip2 server module (Nginx, Apache...) and want to configure server variables + 0 + 0 + boolean + checkbox + + + + + + + + + + + geoip2var_continent_code + Server variable for <strong>continent code</strong> + MM_CONTINENT_CODE + MM_CONTINENT_CODE + string + text + + + + + + + + geoip2usecustom==1 + + + geoip2var_continent_name + Server variable for <strong>continent name</strong> + MM_CONTINENT_NAME + MM_CONTINENT_NAME + string + text + + + + + + + + geoip2usecustom==1 + + + geoip2var_country_code + Server variable for <strong>country code</strong> + MM_COUNTRY_CODE + MM_COUNTRY_CODE + string + text + + + + + + + + geoip2usecustom==1 + + + geoip2var_country_name + Server variable for <strong>country name</strong> + MM_COUNTRY_NAME + MM_COUNTRY_NAME + string + text + + + + + + + + geoip2usecustom==1 + + + geoip2var_region_code + Server variable for <strong>region code</strong> + MM_REGION_CODE + MM_REGION_CODE + string + text + + + + + + + + geoip2usecustom==1 + + + geoip2var_region_name + Server variable for <strong>region name</strong> + MM_REGION_NAME + MM_REGION_NAME + string + text + + + + + + + + geoip2usecustom==1 + + + geoip2var_lat + Server variable for <strong>lat</strong> + MM_LATITUDE + MM_LATITUDE + string + text + + + + + + + + geoip2usecustom==1 + + + geoip2var_long + Server variable for <strong>long</strong> + MM_LONGITUDE + MM_LONGITUDE + string + text + + + + + + + + geoip2usecustom==1 + + + geoip2var_postal_code + Server variable for <strong>postal code</strong> + MM_POSTAL_CODE + MM_POSTAL_CODE + string + text + + + + + + + + geoip2usecustom==1 + + + geoip2var_city_name + Server variable for <strong>city name</strong> + MM_CITY_NAME + MM_CITY_NAME + string + text + + + + + + + + geoip2usecustom==1 + + + geoip2var_isp + Server variable for <strong>isp</strong> + MM_ISP + MM_ISP + string + text + + + + + + + + geoip2usecustom==1 + + + geoip2var_org + Server variable for <strong>org</strong> + MM_ORG + MM_ORG + string + text + + + + + + + + geoip2usecustom==1 + + + + + TwoFactorAuth + TwoFactorAuth + + + twoFactorAuthRequired + Require two-factor authentication for everyone + 0 + 0 + boolean + checkbox + + + + When enabled, every user has to enable two factor authentication. + + + + + + + twoFactorAuthName + Two-factor authentication title + Analytics - localhost + Analytics - localhost + string + text + + + + The name of the title to display that will be displayed in the Authenticator app. + + + + + + + + + CoreUpdater + Update settings + + + release_channel + + <value>latest_stable</value> + <defaultValue>latest_stable</defaultValue> + <type>string</type> + <uiControl>radio</uiControl> + <uiControlAttributes> + </uiControlAttributes> + <availableValues> + <latest_stable>Latest stable release (Recommended)</latest_stable> + <latest_beta>Latest beta release</latest_beta> + <latest_4x_stable>Latest stable 3.X (Long Term Support version)</latest_4x_stable> + <latest_4x_beta>Latest beta 3.X (Long Term Support version)</latest_4x_beta> + </availableValues> + <description /> + <inlineHelp>While our development process includes thousands of automated tests, Beta Testers play a key role in achieving the "No bug policy" in Matomo.<br/>If Matomo is a critical part of your business, we recommend you use the latest stable release. If you use the latest beta and you find a bug or have a suggestion, please <a target='_blank' rel='noreferrer noopener' href='https://developer.matomo.org/guides/core-team-workflow#influencing-piwik-development'>see here</a>.<br />LTS (Long Term Support) versions receive only security and bug fixes.</inlineHelp> + <templateFile /> + <introduction>Release channel</introduction> + <condition /> + </row> + <row> + <name>enable_plugin_update_communication</name> + <title /> + <value>1</value> + <defaultValue>1</defaultValue> + <type>boolean</type> + <uiControl>radio</uiControl> + <uiControlAttributes> + </uiControlAttributes> + <availableValues> + <row key="1">Yes (Default)</row> + <row key="0">No</row> + </availableValues> + <description /> + <inlineHelp>An email will be sent to Super Users when there is a new version available for a plugin.</inlineHelp> + <templateFile /> + <introduction>Send an email when a plugin update is available</introduction> + <condition /> + </row> + </settings> + </row> + <row> + <pluginName>PrivacyManager</pluginName> + <title>PrivacyManager + + + imprintUrl + Imprint URL + + + string + text + + + + A link to your Imprint page. If you set this, it will be displayed at the bottom of the login page and on pages that the 'anonymous' user can access. + + + + + + + privacyPolicyUrl + Privacy Policy URL + + + string + text + + + + A link to your Privacy Policy page. If you set this, it will be displayed at the bottom of the login page and on pages that the 'anonymous' user can access. + + + + + + + termsAndConditionUrl + Terms & Conditions URL + + + string + text + + + + A link to your Terms & Conditions page. If you set this, it will be displayed at the bottom of the login page and on pages that the 'anonymous' user can access. + + + + + + + showInEmbeddedWidgets + Show in embedded widgets + 0 + 0 + boolean + checkbox + + + + If checked, a link to your Privacy Policy and your Terms & Conditions will be displayed at the bottom of embedded widgets. + + + + + + + + + ExampleSettingsPlugin + ExampleSettingsPlugin + + + metric + Metric to display + nb_visits + nb_visits + string + select + + + + Visits + Actions + Visitors + + Choose the metric that should be displayed in the browser tab + + + + + + + browsers + Supported Browsers + + firefox + chromium + safari + + + firefox + chromium + safari + + array + multiselect + + + + Firefox + Chromium + safari + + The value will be only displayed in the following browsers + + + + + + + description + Description for value + This is the value: +Another line + This is the value: +Another line + string + textarea + + + + This description will be displayed next to the value + + + + + + + password + API password + + + string + password + + + + Password for the 3rd API where we fetch the value + + + + + + + + + AnonymousPiwikUsageMeasurement + AnonymousPiwikUsageMeasurement + + + canUserOptOut + Let users disable anonymous tracking + 1 + 1 + boolean + checkbox + + + + If enabled, logged in users can opt out in their plugin settings. Anonymous users cannot opt out. + + + + + + + trackToPiwik + Send usage data to Matomo.org + 0 + 1 + boolean + checkbox + + + + If enabled, anonymized usage data will be sent to demo-anonymous.matomo.org and the tracked data can be viewed there (the data is public). The collected data is used to improve Matomo. Thank you for making Matomo better! + + + Send anonmyized usage data to the creators of Matomo + + + + ownPiwikSiteId + Site Id + 0 + 0 + integer + text + + + + If specified, anonymized usage data will be sent to the specified site in this Matomo. This lets you analyze how you and your colleagues are using Matomo. + + + Send usage data to this Matomo + + + + anonymizeSelfPiwik + Anonymize tracking requests + 1 + 1 + boolean + checkbox + + + + + + + + + + + customSiteUrl + Matomo Url + + + string + text + + eg. http://example.com/matomo + + + + + + Send usage data to a custom Matomo + + + + customSiteId + Site Id + 0 + 0 + integer + text + + eg. "2" + + + If a URL and Site Id is specified, usage data will be sent to the custom Matomo instance. + + + + + + + anonymizeCustomPiwik + Anonymize tracking requests + 1 + 1 + boolean + checkbox + + + + + + + + + + + + + QueuedTracking + QueuedTracking + + + backend + Backend + redis + redis + string + select + + + + Redis + MySQL + + + Select the backend you want to use for this feature. If you do not have any experience with Redis or it is not available on your server, we recommend to use Mysql. + + + + + + useSentinelBackend + Enable Redis Sentinel + 0 + 0 + boolean + checkbox + + 3 + + + + If enabled, the Redis Sentinel feature will be used. Make sure to update host and port if needed. Once you have enabled and saved the change, you will be able to specify multiple hosts and ports comma separated. + + + backend=="redis" + + + sentinelMasterName + Redis Sentinel Master name + mymaster + mymaster + string + text + + 200 + + + + The sentinel master name only needs to be configured if Sentinel is enabled. + + + backend=="redis" + + + redisHost + Redis host or unix socket + 127.0.0.1 + 127.0.0.1 + string + text + + 500 + + + + Remote host or unix socket of the Redis server. Max 500 characters are allowed. + + + backend=="redis" + + + redisPort + Redis port + 6379 + 6379 + string + text + + 100 + + + + Port the Redis server is running on. Value should be between 1 and 65535. Use 0 if you are using unix socket to connect to Redis server. + + + backend=="redis" + + + redisDatabase + Redis database + 15 + 0 + integer + text + + 5 + + + + In case you are using Redis for caching make sure to use a different database. + + + backend=="redis" + + + redisPassword + Redis password + + + string + password + + 100 + + + + Password set on the Redis server, if any. Redis can be instructed to require a password before allowing clients to execute commands. + + + backend=="redis" + + + queueEnabled + Queue enabled + 0 + 0 + boolean + checkbox + + + + + If enabled, all tracking requests will be written into a queue instead of the directly into the database. Requires a Redis server and phpredis PHP extension. + + + + + + numQueueWorkers + Number of queue workers + 4 + 1 + integer + text + + 5 + + + + Number of allowed maximum queue workers. Accepts a number between 1 and 16. Best practice is to set the number of CPUs you want to make available for queue processing. Be aware you need to make sure to start the workers manually. We recommend to not use 9-15 workers, rather use 8 or 16 as the queue might not be distributed evenly into different queues. DO NOT USE more than 1 worker if you make use the UserId feature when tracking see https://github.com/piwik/piwik/issues/7691 + + + + + + numRequestsToProcess + Number of requests that are processed in one batch + 25 + 25 + integer + text + + 3 + + + + Defines how many requests will be picked out of the queue and processed at once. Enter a number which is >= 1. + + + + + + processDuringTrackingRequest + Process during tracking request + 1 + 1 + boolean + checkbox + + + + + If enabled, we will process all requests within a queue during a normal tracking request once there are enough requests in the queue. This will not slow down the tracking request. If disabled, you have to setup a cronjob that executes the "./console queuedtracking:process" console command eg every minute to process the queue. + + + + + + + + TagManager + TagManager + + + restrictCustomTemplates + Restrict usage of custom templates + admin + admin + string + select + + + + Disabled, nobody can use them + Users with at last admin permission can use them + Only Super Users can use them + + This setting defines who can use custom templates or whether they should be completely disabled. Changing this setting can improve the security on your website. When you configure a trigger, tag, or a variable, some of them may allow a Matomo user to enter HTML or JavaScript which will be executed on your website. Entering custom code cannot only break the container in case there is an error, but also allows them to execute any JavaScript code on your website. This can be misused to steal for example sensitive information on your website. If you do not want to allow your team members to enter any JavaScript code, you may want to disable this setting. + + + + + + + environments + Environments + + + dev + + + staging + + + + + dev + + + staging + + + array + multituple + + + environment + Environment + text + + + + + + Define one or multiple additional environments. Please note that if you remove any environment, generated container files that exist for a specific environment will be removed and will be no longer available. + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getUserSettings.xml b/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getUserSettings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9307a2c743c5f4407a3631535190395edae8458e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getUserSettings.xml @@ -0,0 +1,84 @@ + + + + ExampleSettingsPlugin + ExampleSettingsPlugin + + + autoRefresh + Auto refresh + 0 + 0 + boolean + checkbox + + + + If enabled, the value will be automatically refreshed depending on the specified interval + + + + 0 + + + refreshInterval + Refresh Interval + 30 + 30 + integer + text + + 3 + + + Defines how often the value should be updated + Enter a number which is >= 15 + + + 0 + + + color + Color + red + red + string + radio + + + + Red + Blue + Green + + Pick your favourite color + + + + 0 + + + + + AnonymousPiwikUsageMeasurement + AnonymousPiwikUsageMeasurement + + + userTrackingEnabled + Matomo usage tracking enabled + 1 + 1 + boolean + checkbox + + + + If enabled, anonymous usage data will be tracked. For example which pages are viewed and which reports are used most often. For more information contact your system administrator. + + + + 0 + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__CustomDimensions.getAvailableExtractionDimensions.xml b/tests/PHPUnit/System/expected/test_noVisit__CustomDimensions.getAvailableExtractionDimensions.xml new file mode 100644 index 0000000000000000000000000000000000000000..7a397597a0aacfd97d7cf23e0878b632d2c9a36b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__CustomDimensions.getAvailableExtractionDimensions.xml @@ -0,0 +1,15 @@ + + + + url + Page URL + + + urlparam + Page URL Parameter + + + action_name + Page Title + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__CustomDimensions.getAvailableScopes.xml b/tests/PHPUnit/System/expected/test_noVisit__CustomDimensions.getAvailableScopes.xml new file mode 100644 index 0000000000000000000000000000000000000000..149cf8b31c946ff2733882ccf47b8e409437df9d --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__CustomDimensions.getAvailableScopes.xml @@ -0,0 +1,19 @@ + + + + visit + Visit + 5 + 0 + 5 + 0 + + + action + Action + 5 + 0 + 5 + 1 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__CustomDimensions.getConfiguredCustomDimensions.xml b/tests/PHPUnit/System/expected/test_noVisit__CustomDimensions.getConfiguredCustomDimensions.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__CustomDimensions.getConfiguredCustomDimensions.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__CustomVariables.getCustomVariables_day.xml b/tests/PHPUnit/System/expected/test_noVisit__CustomVariables.getCustomVariables_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__CustomVariables.getCustomVariables_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__CustomVariables.getUsagesOfSlots.xml b/tests/PHPUnit/System/expected/test_noVisit__CustomVariables.getUsagesOfSlots.xml new file mode 100644 index 0000000000000000000000000000000000000000..81163427e5931b802fd0011c70cc3706ce2dd5b9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__CustomVariables.getUsagesOfSlots.xml @@ -0,0 +1,63 @@ + + + + visit + 1 + + + + + visit + 2 + + + + + visit + 3 + + + + + visit + 4 + + + + + visit + 5 + + + + + page + 1 + + + + + page + 2 + + + + + page + 3 + + + + + page + 4 + + + + + page + 5 + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__DevicePlugins.getPlugin_day.xml b/tests/PHPUnit/System/expected/test_noVisit__DevicePlugins.getPlugin_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__DevicePlugins.getPlugin_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrand_day.xml b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrand_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrand_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrowserEngines_day.xml b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrowserEngines_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrowserEngines_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrowserFamilies_day.xml b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrowserFamilies_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrowserFamilies_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrowserVersions_day.xml b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrowserVersions_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrowserVersions_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrowsers_day.xml b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrowsers_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getBrowsers_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getModel_day.xml b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getModel_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getModel_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getOsFamilies_day.xml b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getOsFamilies_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getOsFamilies_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getOsVersions_day.xml b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getOsVersions_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getOsVersions_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getType_day.xml b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getType_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__DevicesDetection.getType_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Events.getAction_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Events.getAction_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Events.getAction_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Events.getCategory_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Events.getCategory_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Events.getName_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Events.getName_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Events.getName_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__ExamplePlugin.getAnswerToLife.xml b/tests/PHPUnit/System/expected/test_noVisit__ExamplePlugin.getAnswerToLife.xml new file mode 100644 index 0000000000000000000000000000000000000000..36a787c47a4e180ca01d5fd662a31483ef5e93b6 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__ExamplePlugin.getAnswerToLife.xml @@ -0,0 +1,2 @@ + +42 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__ExamplePlugin.getExampleArchivedMetric_day.xml b/tests/PHPUnit/System/expected/test_noVisit__ExamplePlugin.getExampleArchivedMetric_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c82a27e7636815b364e2f60acd452b5b1d580d52 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__ExamplePlugin.getExampleArchivedMetric_day.xml @@ -0,0 +1,5 @@ + + + 0 + 0 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__ExamplePlugin.getExampleReport_day.xml b/tests/PHPUnit/System/expected/test_noVisit__ExamplePlugin.getExampleReport_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..49765ba76ca9854461e3bd480d86415a71f8e816 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__ExamplePlugin.getExampleReport_day.xml @@ -0,0 +1,11 @@ + + + + + 1 + + + + 5 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Goals.getDaysToConversion_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Goals.getDaysToConversion_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Goals.getDaysToConversion_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Goals.getGoals.xml b/tests/PHPUnit/System/expected/test_noVisit__Goals.getGoals.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Goals.getGoals.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Goals.getItemsCategory_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Goals.getItemsCategory_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Goals.getItemsCategory_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Goals.getItemsName_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Goals.getItemsName_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Goals.getItemsName_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Goals.getItemsSku_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Goals.getItemsSku_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Goals.getItemsSku_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Goals.getMetrics_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Goals.getMetrics_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..2cb7df5a9ebb487bf6f925832c407ac95331e313 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Goals.getMetrics_day.xml @@ -0,0 +1,7 @@ + + + 0 + 0 + 0 + 0% + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Goals.getVisitsUntilConversion_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Goals.getVisitsUntilConversion_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Goals.getVisitsUntilConversion_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Goals.get_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Goals.get_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..36db013c1a9aafbc3ed08f31d7f0fd697f02a236 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Goals.get_day.xml @@ -0,0 +1,15 @@ + + + 0 + 0 + 0 + 0% + 0 + 0 + 0 + 0% + 0 + 0 + 0 + 0% + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__JsTrackerInstallCheck.getJsTrackerInstallTestResult.xml b/tests/PHPUnit/System/expected/test_noVisit__JsTrackerInstallCheck.getJsTrackerInstallTestResult.xml new file mode 100644 index 0000000000000000000000000000000000000000..a2bc4a557652f1354900c9f43a218b3a0364db8e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__JsTrackerInstallCheck.getJsTrackerInstallTestResult.xml @@ -0,0 +1,6 @@ + + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getAllWithGroups_day.xml b/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getAllWithGroups_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..cea36a9e696713299b9919af86c3f9289bb58d3e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getAllWithGroups_day.xml @@ -0,0 +1,21 @@ + + + 1 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 2009-01-03 + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getAll_day.xml b/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getAll_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getAll_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getOne_day.xml b/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getOne_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..6b9abf619b675a479124b7c867f6ff9377605542 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getOne_day.xml @@ -0,0 +1,21 @@ + + + 0 + 0 + 0 + 0 + 0 + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 0% + 0 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__PagePerformance.get_day.xml b/tests/PHPUnit/System/expected/test_noVisit__PagePerformance.get_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..156c1ad7d8495ee1d8aed02fc032752ee562d54c --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__PagePerformance.get_day.xml @@ -0,0 +1,10 @@ + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__PrivacyManager.getAnonymisationSettings.xml b/tests/PHPUnit/System/expected/test_noVisit__PrivacyManager.getAnonymisationSettings.xml new file mode 100644 index 0000000000000000000000000000000000000000..feea909569c8f94880ef4d7db5fbb6abab24f7d9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__PrivacyManager.getAnonymisationSettings.xml @@ -0,0 +1,55 @@ + + + 0 + 2 + 0 + 1 + 0 + 0 + 0 + + 0 + 0 + + + 1 + 1 byte(s) - e.g. 192.168.100.xxx + + + + 2 + 2 byte(s) - e.g. 192.168.xxx.xxx + Recommended + + + 3 + 3 byte(s) - e.g. 192.xxx.xxx.xxx + + + + 4 + Fully mask IP address + + + + + + 1 + Yes + higher privacy, lower geolocation accuracy + + + 0 + No + lower privacy, higher geolocation accuracy + + + + Don't anonymize the referrer + Remove query parameters from referrer URL + Keep only the domain of a referrer URL + Don't record the referrer URL but still detect the type of referrer + + matomo.js + 1 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__PrivacyManager.getAvailableLinkVisitActionColumnsToAnonymize.xml b/tests/PHPUnit/System/expected/test_noVisit__PrivacyManager.getAvailableLinkVisitActionColumnsToAnonymize.xml new file mode 100644 index 0000000000000000000000000000000000000000..7ef63fc612fcf7fc1fa2670491a667c81bcd7284 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__PrivacyManager.getAvailableLinkVisitActionColumnsToAnonymize.xml @@ -0,0 +1,191 @@ + + + + bandwidth + + + + custom_dimension_1 + + + + custom_dimension_2 + + + + custom_dimension_3 + + + + custom_dimension_4 + + + + custom_dimension_5 + + + + custom_float + + + + custom_var_k1 + + + + custom_var_k2 + + + + custom_var_k3 + + + + custom_var_k4 + + + + custom_var_k5 + + + + custom_var_v1 + + + + custom_var_v2 + + + + custom_var_v3 + + + + custom_var_v4 + + + + custom_var_v5 + + + + idaction_content_interaction + + + + idaction_content_name + + + + idaction_content_piece + + + + idaction_content_target + + + + idaction_event_action + + + + idaction_event_category + + + + idaction_name + + + + idaction_name_ref + + + + idaction_product_cat + + + + idaction_product_cat2 + + + + idaction_product_cat3 + + + + idaction_product_cat4 + + + + idaction_product_cat5 + + + + idaction_product_name + + + + idaction_product_sku + + + + idaction_url + + + + idaction_url_ref + 0 + + + idpageview + + + + pageview_position + + + + product_price + + + + search_cat + + + + search_count + + + + time_dom_completion + + + + time_dom_processing + + + + time_network + + + + time_on_load + + + + time_server + + + + time_spent + + + + time_spent_ref_action + + + + time_transfer + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__PrivacyManager.getAvailableVisitColumnsToAnonymize.xml b/tests/PHPUnit/System/expected/test_noVisit__PrivacyManager.getAvailableVisitColumnsToAnonymize.xml new file mode 100644 index 0000000000000000000000000000000000000000..e4a0b745b69f1ec0956d3078aba7e31c91ec18f0 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__PrivacyManager.getAvailableVisitColumnsToAnonymize.xml @@ -0,0 +1,255 @@ + + + + ai_agent_name + + + + config_browser_engine + + + + config_browser_name + + + + config_browser_version + + + + config_client_type + + + + config_cookie + + + + config_device_brand + + + + config_device_model + + + + config_device_type + + + + config_flash + + + + config_java + + + + config_os + + + + config_os_version + + + + config_pdf + + + + config_quicktime + + + + config_realplayer + + + + config_resolution + + + + config_silverlight + + + + config_windowsmedia + + + + custom_dimension_1 + + + + custom_dimension_2 + + + + custom_dimension_3 + + + + custom_dimension_4 + + + + custom_dimension_5 + + + + custom_var_k1 + + + + custom_var_k2 + + + + custom_var_k3 + + + + custom_var_k4 + + + + custom_var_k5 + + + + custom_var_v1 + + + + custom_var_v2 + + + + custom_var_v3 + + + + custom_var_v4 + + + + custom_var_v5 + + + + last_idlink_va + + + + location_browser_lang + + + + location_city + + + + location_country + + + + location_latitude + + + + location_longitude + + + + location_region + + + + profilable + + + + referer_keyword + + + + referer_name + + + + referer_type + + + + referer_url + + + + user_id + + + + visit_entry_idaction_name + + + + visit_entry_idaction_url + + + + visit_exit_idaction_name + + + + visit_exit_idaction_url + 0 + + + visit_goal_buyer + + + + visit_goal_converted + + + + visit_total_actions + + + + visit_total_events + + + + visit_total_interactions + 0 + + + visit_total_searches + + + + visitor_count_visits + 0 + + + visitor_localtime + + + + visitor_returning + + + + visitor_seconds_since_first + + + + visitor_seconds_since_last + + + + visitor_seconds_since_order + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__PrivacyManager.getCompliancePolicies.xml b/tests/PHPUnit/System/expected/test_noVisit__PrivacyManager.getCompliancePolicies.xml new file mode 100644 index 0000000000000000000000000000000000000000..26d7bf5dfdd731e27877dc50e5a683dc13024997 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__PrivacyManager.getCompliancePolicies.xml @@ -0,0 +1,8 @@ + + + + cnil_v1 + CNIL Website Analytics Compliance + This table shows how specific Matomo configuration settings align with <a href="https://matomo.org/faq/how-to/how-do-i-configure-matomo-without-tracking-consent-for-french-visitors-cnil-exemption/?mtm_campaign=Matomo_App&mtm_source=Matomo_App_OnPremise&mtm_medium=App.PrivacyManager.compliance" target="_blank" rel="noreferrer noopener">CNIL guidance</a> on consent-exempt audience measurement. It is provided for <b>informational purposes only</b> and does not constitute legal advice or guarantee full compliance. To rely on CNIL's consent exemption, <b>all</b> required configurations must be correctly implemented.<br/><br/><ul class='browser-default'><li>If a setting is marked <b>non-compliant</b>, the exemption conditions are not satisfied and valid user consent must be obtained.</li><li>If a setting is marked <b>unknown</b>, Matomo cannot determine whether the requirement has been met; these items must be verified manually by you, the publisher/controller.</li></ul><br/>To assess your overall compliance make sure you consult your legal advisors for a definitive compliance assessment.<br/>Click <a href="https://matomo.org/faq/how-to/how-do-i-configure-matomo-without-tracking-consent-for-french-visitors-cnil-exemption/?mtm_campaign=Matomo_App&mtm_source=Matomo_App_OnPremise&mtm_medium=App.PrivacyManager.compliance" target="_blank" rel="noreferrer noopener">here</a> to access the Matomo Self-Assessment, learn more about the CNIL criteria for consent-exempt analytics and understand how to configure Matomo for CNIL exemption.<br/><b>Compliance cannot be guaranteed with the use of third-party plugins.</b> + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Provider.getProvider_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Provider.getProvider_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Provider.getProvider_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getAIAssistants_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getAIAssistants_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getAIAssistants_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getAll_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getAll_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getAll_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getCampaigns_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getCampaigns_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getCampaigns_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getEntryPageTitlesForAIAssistant_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getEntryPageTitlesForAIAssistant_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getEntryPageTitlesForAIAssistant_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getEntryPageUrlsForAIAssistant_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getEntryPageUrlsForAIAssistant_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getEntryPageUrlsForAIAssistant_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getKeywordsForPageUrl_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getKeywordsForPageUrl_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getKeywordsForPageUrl_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getKeywords_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getKeywords_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getKeywords_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctAIAssistants_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctAIAssistants_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctAIAssistants_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctCampaigns_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctCampaigns_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctCampaigns_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctKeywords_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctKeywords_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctKeywords_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctSearchEngines_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctSearchEngines_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctSearchEngines_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctSocialNetworks_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctSocialNetworks_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctSocialNetworks_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctWebsitesUrls_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctWebsitesUrls_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctWebsitesUrls_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctWebsites_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctWebsites_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getNumberOfDistinctWebsites_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getReferrerType_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getReferrerType_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getReferrerType_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getSearchEngines_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getSearchEngines_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getSearchEngines_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getSocials_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getSocials_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getSocials_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getUrlsForSocial_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getUrlsForSocial_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getUrlsForSocial_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.getWebsites_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getWebsites_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.getWebsites_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Referrers.get_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Referrers.get_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..61690a628e6e6b0e67510129566f71d0d1ce5f31 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Referrers.get_day.xml @@ -0,0 +1,22 @@ + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0% + 0% + 0% + 0% + 0% + 0% + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Resolution.getConfiguration_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Resolution.getConfiguration_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Resolution.getConfiguration_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Resolution.getResolution_day.xml b/tests/PHPUnit/System/expected/test_noVisit__Resolution.getResolution_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Resolution.getResolution_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableComparisons.xml b/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableComparisons.xml new file mode 100644 index 0000000000000000000000000000000000000000..0f53cab9b58b3c5de2057fef1d33ca6905175ddd --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableComparisons.xml @@ -0,0 +1,91 @@ + + + + equals + equals + + + not_equals + not equals + + + equals_exactly + equals exactly + + + not_equals_exactly + not equals exactly + + + contains + contains + + + not_contains + not contains + + + starts_with + starts with + + + not_starts_with + not starts with + + + ends_with + ends with + + + not_ends_with + not ends with + + + lower_than + is lower than + + + not_lower_than + not is lower than + + + lower_than_or_equals + is lower than or equals + + + not_lower_than_or_equals + not is lower than or equals + + + greater_than + is greater than + + + not_greater_than + not is greater than + + + greater_than_or_equals + is greater than or equals + + + not_greater_than_or_equals + not is greater than or equals + + + regexp + matches the regular expression + + + not_regexp + not matches the regular expression + + + regexp_ignore_case + matches the regular expression (ignore case) + + + not_regexp_ignore_case + not matches the regular expression (ignore case) + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableContexts.xml b/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableContexts.xml new file mode 100644 index 0000000000000000000000000000000000000000..b510944645b3c11e449d5777631403ba23565fe9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableContexts.xml @@ -0,0 +1,7 @@ + + + + web + Web + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableEnvironments.xml b/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableEnvironments.xml new file mode 100644 index 0000000000000000000000000000000000000000..36fa243ebd003422d77046494e728aafe68357c8 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableEnvironments.xml @@ -0,0 +1,15 @@ + + + + live + Live + + + dev + Dev + + + staging + Staging + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableEnvironmentsWithPublishCapability.xml b/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableEnvironmentsWithPublishCapability.xml new file mode 100644 index 0000000000000000000000000000000000000000..36fa243ebd003422d77046494e728aafe68357c8 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableEnvironmentsWithPublishCapability.xml @@ -0,0 +1,15 @@ + + + + live + Live + + + dev + Dev + + + staging + Staging + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableTagFireLimits.xml b/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableTagFireLimits.xml new file mode 100644 index 0000000000000000000000000000000000000000..860e04512235858b0c0ef3e31cff4a94559e2948 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__TagManager.getAvailableTagFireLimits.xml @@ -0,0 +1,19 @@ + + + + unlimited + Unlimited + + + once_page + Once per pageview + + + once_24hours + Once per 24 hours + + + once_lifetime + Once in lifetime + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__TagManager.getContainers.xml b/tests/PHPUnit/System/expected/test_noVisit__TagManager.getContainers.xml new file mode 100644 index 0000000000000000000000000000000000000000..501c2ecf8628664c3fe7ea320adc5c24ff4739a2 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__TagManager.getContainers.xml @@ -0,0 +1,59 @@ + + + + kSRALajy + 1 + web + Default Container + This container was auto generated when the website was created. + active + today-date-removed-in-tests + today-date-removed-in-tests + Sep 10, 2018 04:46:49 + Sep 10, 2018 04:46:49 + + + 2 + kSRALajy + 1 + active + 1 + 0.1.0 - Auto generated + + today-date-removed-in-tests + today-date-removed-in-tests + Sep 10, 2018 04:46:49 + Sep 10, 2018 04:46:49 + + + + + + + 1 + kSRALajy + 1 + 1 + active + live + superUserLogin + today-date-removed-in-tests + Sep 10, 2018 04:46:49 + + + + + 1 + kSRALajy + 1 + active + 0 + + + today-date-removed-in-tests + today-date-removed-in-tests + Sep 10, 2018 04:46:49 + Sep 10, 2018 04:46:49 + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Tour.getChallenges.xml b/tests/PHPUnit/System/expected/test_noVisit__Tour.getChallenges.xml new file mode 100644 index 0000000000000000000000000000000000000000..76cb83fccf13c0e21fa5866f887cc41be5882f40 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Tour.getChallenges.xml @@ -0,0 +1,155 @@ + + + + track_data + Embed a tracking code + Matomo offers you various ways to embed the tracking code for your website, mobile app, and even for any device or application. + 0 + 0 + index.php?module=CoreAdminHome&action=trackingCodeGenerator + + + define_goal + Add a goal + Conversion tracking is a great way to identify whether you are meeting your current objectives, to identify new ones, view and analyse performance. You can also learn to increase your conversions, conversion rates, and revenue per visit. + 0 + 0 + index.php?module=Goals&action=manage + + + custom_logo + Upload your logo + You can customize the Matomo logo which will be displayed in the user interface and email reports. + 0 + 0 + index.php?module=CoreAdminHome&action=generalSettings#/#useCustomLogo + + + add_user + Invite a user + Users Management lets you add new users, edit existing users and give them access to view or administrate websites. + 0 + 0 + index.php?module=UsersManager&action=index + + + add_website + Add another website + Websites management lets you add a new website and edit existing websites. + 0 + 0 + index.php?module=SitesManager&action=index + + + flatten_actions + Flatten a page report + Go to Behaviour → Pages and click the cog icon in the bottom of the report to flatten it. This changes the hierarchy from a grouped report to a list. + 0 + 0 + https://matomo.org/faq/reports/graphs-and-visualisations-in-matomo/#flattening-reports + + + change_visualisations + Change a visualisation + Browse a report and select the visualisation icon at the bottom of a report to change its visualisation. + 0 + 0 + https://matomo.org/faq/reports/graphs-and-visualisations-in-matomo/ + + + add_scheduled_report + Add a scheduled report + Create custom reports and schedule them to be emailed daily, weekly or monthly to one or several people. Several report formats are supported (html, pdf, csv, images). + 0 + 0 + index.php?module=ScheduledReports&action=index + + + customise_dashboard + Set up your dashboard + Add widgets to your dashboard to ensure it reports all your most important metrics. + 0 + 0 + https://matomo.org/faq/dashboards/create-dashboards-and-customise-widgets-and-layout/ + + + add_segment + Add a segment + A segment is a set of criteria used to select only a part of the entire set of visits. Using segments you can inject arbitrary context back into your reports. + 0 + 0 + https://matomo.org/docs/segmentation/ + + + add_annotation + Add an annotation + Allows you to attach notes to different days to mark changes made to your website, save analyses you make regarding your data and share your thoughts with your colleagues. By annotating your data, you will make sure you remember why your data looks the way it does. + 0 + 0 + https://matomo.org/docs/annotations/ + + + setup_twofa + Setup Two-factor authentication + Two-factor authentication increases account security by also asking you for a code generated on a mobile device, or one of the remaining recovery codes (in addition to your password) to log in. + 0 + 0 + https://matomo.org/faq/general/faq_27245 + + + disable_browser_archiving + Turn off web-browser archiving for better performance + + 0 + 0 + https://matomo.org/docs/setup-auto-archiving/ + + + configure_geolocation + Set up geolocation + Ensure the location of your visitors is correctly detected. + 0 + 0 + index.php?module=UserCountry&action=adminIndex + + + select_date_range + Select a date range + Select a time span in the calendar. + 0 + 0 + https://matomo.org/faq/reports/data-selectors-in-matomo/ + + + view_visits_log + View Visits Log + Shows all the individual visits and actions each visitor made on your website. + 0 + 0 + https://matomo.org/faq/reports/the-visits-log-report/ + + + view_visitor_profile + View Visitor profile + Understand your visitors’ individual behavior by summarizing and listing your visitors’ visits. + 0 + 0 + https://matomo.org/docs/user-profile/ + + + view_row_evolution + View Row evolution + Shows the current and past metric data for any row in any report. + 0 + 0 + https://matomo.org/docs/row-evolution/ + + + browse_marketplace + Browse the marketplace + Extend and expand the functionality of Matomo via the Marketplace by downloading plugins and themes. + 0 + 0 + index.php?module=Marketplace&action=overview + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__Tour.getLevel.xml b/tests/PHPUnit/System/expected/test_noVisit__Tour.getLevel.xml new file mode 100644 index 0000000000000000000000000000000000000000..0fd47c9b8aa82f1cd58f09ce0c7cf68a613ec60c --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__Tour.getLevel.xml @@ -0,0 +1,11 @@ + + + + Welcome to Matomo superUserLogin. This widget helps you become a Matomo expert. + 1 + Matomo beginner + Matomo intermediate + 5 + 5 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getCity_day.xml b/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getCity_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getCity_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getContinent_day.xml b/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getContinent_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getContinent_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getCountry_day.xml b/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getCountry_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getCountry_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getNumberOfDistinctCountries_day.xml b/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getNumberOfDistinctCountries_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getNumberOfDistinctCountries_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getRegion_day.xml b/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getRegion_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__UserCountry.getRegion_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__UserId.getUsers_day.xml b/tests/PHPUnit/System/expected/test_noVisit__UserId.getUsers_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__UserId.getUsers_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguageCode_day.xml b/tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguageCode_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguageCode_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguage_day.xml b/tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguage_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguage_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitFrequency.get_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitFrequency.get_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..656497eb89399ea9dc177e4cbfd0a79e9661427c --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitFrequency.get_day.xml @@ -0,0 +1,25 @@ + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0% + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0% + 0 + 0 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitTime.getByDayOfWeek_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitTime.getByDayOfWeek_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitTime.getByDayOfWeek_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitTime.getVisitInformationPerLocalTime_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitTime.getVisitInformationPerLocalTime_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitTime.getVisitInformationPerLocalTime_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitTime.getVisitInformationPerServerTime_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitTime.getVisitInformationPerServerTime_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitTime.getVisitInformationPerServerTime_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitorInterest.getNumberOfVisitsByDaysSinceLast_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitorInterest.getNumberOfVisitsByDaysSinceLast_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitorInterest.getNumberOfVisitsByDaysSinceLast_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitorInterest.getNumberOfVisitsByVisitCount_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitorInterest.getNumberOfVisitsByVisitCount_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitorInterest.getNumberOfVisitsByVisitCount_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitorInterest.getNumberOfVisitsPerPage_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitorInterest.getNumberOfVisitsPerPage_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitorInterest.getNumberOfVisitsPerPage_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitorInterest.getNumberOfVisitsPerVisitDuration_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitorInterest.getNumberOfVisitsPerVisitDuration_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitorInterest.getNumberOfVisitsPerVisitDuration_day.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getActions_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getActions_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getActions_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getBounceCount_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getBounceCount_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getBounceCount_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getMaxActions_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getMaxActions_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getMaxActions_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getSumVisitsLengthPretty_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getSumVisitsLengthPretty_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..6b13a17caa54325131d61884d5d443bf01482d35 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getSumVisitsLengthPretty_day.xml @@ -0,0 +1,2 @@ + +0s \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getSumVisitsLength_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getSumVisitsLength_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getSumVisitsLength_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getUniqueVisitors_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getUniqueVisitors_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getUniqueVisitors_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getUsers_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getUsers_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getUsers_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getVisitsConverted_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getVisitsConverted_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getVisitsConverted_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getVisits_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getVisits_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5722c2b947ae81c5390b2448986be96d1bf4ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.getVisits_day.xml @@ -0,0 +1,2 @@ + +0 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.get_day.xml b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.get_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..32b66284bedbe458384d8a08a7b9a61b9d01f775 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_noVisit__VisitsSummary.get_day.xml @@ -0,0 +1,14 @@ + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0% + 0 + 0 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_Flattened__Referrers.getSocials_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_Flattened__Referrers.getSocials_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..72630e83ffbf5e49118636eb5a5b61cad37862c8 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_Flattened__Referrers.getSocials_range.xml @@ -0,0 +1,163 @@ + + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + facebook.com + plugins/Morpheus/icons/dist/socials/facebook.com.png + referrerType==social;referrerName==Facebook + Facebook + http://facebook.com/whatever + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + facebook.com + plugins/Morpheus/icons/dist/socials/facebook.com.png + referrerType==social;referrerName==Facebook + Facebook + http://fb.me/?q=sdlfjs&n=slfjsd + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + facebook.com + plugins/Morpheus/icons/dist/socials/facebook.com.png + referrerType==social;referrerName==Facebook + Facebook + http://www.facebook.com/another/path + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + flickr.com + plugins/Morpheus/icons/dist/socials/flickr.com.png + referrerType==social;referrerName==Flickr + Flickr + http://www.flickr.com + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + mixi.jp + plugins/Morpheus/icons/dist/socials/mixi.jp.png + referrerType==social;referrerName==Mixi + Mixi + http://mixi.jp + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + skyrock.com + plugins/Morpheus/icons/dist/socials/skyrock.com.png + referrerType==social;referrerName==Skyrock + Skyrock + http://skyrock.com + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + twitter.com + plugins/Morpheus/icons/dist/socials/twitter.com.png + referrerType==social;referrerName==Twitter + Twitter + http://t.co/id/?y=dsfs + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + twitter.com + plugins/Morpheus/icons/dist/socials/twitter.com.png + referrerType==social;referrerName==Twitter + Twitter + http://twitter.com/whatever2 + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + twitter.com + plugins/Morpheus/icons/dist/socials/twitter.com.png + referrerType==social;referrerName==Twitter + Twitter + http://www.twitter.com/index?a=2334 + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + xanga.com + plugins/Morpheus/icons/dist/socials/xanga.com.png + referrerType==social;referrerName==Xanga + Xanga + http://xanga.com + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_IndexedByDate__MultiSites.getAll_day.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_IndexedByDate__MultiSites.getAll_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..b7917358f701e18151fc2e324f8885e50e46f1f9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_IndexedByDate__MultiSites.getAll_day.xml @@ -0,0 +1,37 @@ + + + + + 2 + 3 + 3 + 3 + 0 + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 1 + 1 + $ + 2 + day + Tue, Dec 14 + 3 + 3 + 3 + 0 + 0 + + http://piwik.net + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_IndexedByDate__Referrers.getSocials_day.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_IndexedByDate__Referrers.getSocials_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..e975a74be69ceb65d3259c2c5d74e0f5a0147b59 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_IndexedByDate__Referrers.getSocials_day.xml @@ -0,0 +1,171 @@ + + + + + + + + + + + 2 + 2 + 3 + 0 + 2 + 361 + 1 + 0 + facebook.com + plugins/Morpheus/icons/dist/socials/facebook.com.png + referrerType==social;referrerName==Facebook + + + + 1 + 1 + 2 + 0 + 2 + 361 + 0 + 0 + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + + + 1 + 1 + 2 + 0 + 2 + 361 + 0 + 0 + facebook.com + plugins/Morpheus/icons/dist/socials/facebook.com.png + referrerType==social;referrerName==Facebook + + + + 1 + 1 + 2 + 0 + 2 + 361 + 0 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + twitter.com + plugins/Morpheus/icons/dist/socials/twitter.com.png + referrerType==social;referrerName==Twitter + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + + + + + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + facebook.com + plugins/Morpheus/icons/dist/socials/facebook.com.png + referrerType==social;referrerName==Facebook + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + twitter.com + plugins/Morpheus/icons/dist/socials/twitter.com.png + referrerType==social;referrerName==Twitter + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_MultipleDatesNotSupported__MultiSites.getAll_day.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_MultipleDatesNotSupported__MultiSites.getAll_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..b0a72e0990ce5d5a1af4defab1c4046870e50990 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_MultipleDatesNotSupported__MultiSites.getAll_day.xml @@ -0,0 +1,208 @@ + + + + + + 2 + 3 + 3 + 3 + 0 + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 1 + 1 + $ + 2 + day + Tue, Dec 14 + 3 + 3 + 3 + 0 + 0 + + http://piwik.net + + + + 1 + 1 + 1 + 1 + 0 + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 0% + 0 + 2 + 1 + $ + 1 + day + Tue, Dec 14 + 1 + 1 + 1 + 0 + 0 + + http://piwik.net + + + + + + + + + + + + + + + 2 + 3 + 3 + 3 + 0 + 0 + 100% + 1 + 100% + 1 + 100% + 1 + 100% + 1 + 0% + 0 + 0% + 0 + 1 + 1 + $ + 0 + day + Fri, Dec 24 + 0 + 0 + 0 + 0 + 0 + + http://piwik.net + + + + 1 + 1 + 1 + 1 + 0 + 0 + 100% + 1 + 100% + 1 + 100% + 1 + 100% + 1 + 0% + 0 + 0% + 0 + 2 + 1 + $ + 0 + day + Fri, Dec 24 + 0 + 0 + 0 + 0 + 0 + + http://piwik.net + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + 3 + 3 + 3 + 0 + 0 + 100% + 1 + 100% + 1 + 100% + 1 + 100% + 1 + 0% + 0 + 0% + 0 + 1 + 1 + $ + 0 + day + Fri, Jan 14 + 0 + 0 + 0 + 0 + 0 + + http://piwik.net + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_Truncated__MultiSites.getAll_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_Truncated__MultiSites.getAll_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..b27766ea5e7d53354d092f01f3790a349be0e2fc --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_Truncated__MultiSites.getAll_range.xml @@ -0,0 +1,34 @@ + + + + + 8 + 11 + 11 + 11 + 0 + 0 + 100% + 1 + 100% + 1 + 100% + 1 + 100% + 1 + 0% + 0 + 0% + 0 + 1 + USD + 0 + range + Nov 13 – Dec 14, 2010 + 0 + 0 + 0 + 0 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__Actions.getPageUrls_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__Actions.getPageUrls_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..6212931ab71839b06ea6444552a0a45a29afc039 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__Actions.getPageUrls_range.xml @@ -0,0 +1,68 @@ + + + + + 3 + 3 + 1080 + 0 + 0 + + + 3 + 6 + 1083 + 0 + 3 + 3 + 0 + 0 + 360 + 0% + 0% + http://example.org/homepage + pageUrl==http%253A%252F%252Fexample.org%252Fhomepage + + + + 3 + 3 + 0 + 0 + 0 + + + 3 + 3 + 0 + 3 + 3 + 3 + 3 + 3 + 0 + 0 + 0 + 100% + 100% + http://example.org/news + pageUrl==http%253A%252F%252Fexample.org%252Fnews + + + + 3 + 3 + 0 + 0 + 0 + + + 3 + 0 + 0 + 0 + 0% + 100% + pageUrl=^http%253A%252F%252Fpiwik.net%252Fsub1 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getAll_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getAll_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..1363321323e6c568d9892bc9aa3f63d53e4742cc --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getAll_range.xml @@ -0,0 +1,71 @@ + + + + + 6 + 9 + 9 + 9 + 0 + 0 + 200% + 1 + 200% + 1 + 200% + 1 + 200% + 1 + 0% + 0 + 0% + 0 + 1 + 1 + $ + 2 + range + Nov 13 – Dec 14, 2010 + 3 + 3 + 3 + 0 + 0 + + http://piwik.net + + + + 2 + 2 + 2 + 2 + 0 + 0 + 100% + 1 + 100% + 1 + 100% + 1 + 100% + 1 + 0% + 0 + 0% + 0 + 2 + 1 + $ + 1 + range + Nov 13 – Dec 14, 2010 + 1 + 1 + 1 + 0 + 0 + + http://piwik.net + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getOne_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getOne_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..0216405540f5ace2cd6275d704c8632ad3e3fc4f --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getOne_range.xml @@ -0,0 +1,21 @@ + + + 6 + 9 + 9 + 9 + 0 + 0 + 200% + 1 + 200% + 1 + 200% + 1 + 200% + 1 + 0% + 0 + 0% + 0 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__Referrers.getSocials_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__Referrers.getSocials_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..54acdfa0fd43178fae6622ef03e61c396956c32f --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__Referrers.getSocials_range.xml @@ -0,0 +1,278 @@ + + + + + + 3 + 5 + 2 + 722 + 1 + 0 + 3 + 0 + facebook.com + plugins/Morpheus/icons/dist/socials/facebook.com.png + referrerType==social;referrerName==Facebook + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 3 + 4 + 2 + 361 + 2 + 0 + 3 + 0 + twitter.com + plugins/Morpheus/icons/dist/socials/twitter.com.png + referrerType==social;referrerName==Twitter + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + + + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + flickr.com + plugins/Morpheus/icons/dist/socials/flickr.com.png + referrerType==social;referrerName==Flickr + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + mixi.jp + plugins/Morpheus/icons/dist/socials/mixi.jp.png + referrerType==social;referrerName==Mixi + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + skyrock.com + plugins/Morpheus/icons/dist/socials/skyrock.com.png + referrerType==social;referrerName==Skyrock + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + xanga.com + plugins/Morpheus/icons/dist/socials/xanga.com.png + referrerType==social;referrerName==Xanga + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + + + 2 + 2 + 1 + 0 + 2 + 0 + 2 + 0 + twitter.com + plugins/Morpheus/icons/dist/socials/twitter.com.png + referrerType==social;referrerName==Twitter + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + facebook.com + plugins/Morpheus/icons/dist/socials/facebook.com.png + referrerType==social;referrerName==Facebook + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__Referrers.getUrlsForSocial_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__Referrers.getUrlsForSocial_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..1ed4db4a841ad86083a30688fcc9e55ba5c59b9e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__Referrers.getUrlsForSocial_range.xml @@ -0,0 +1,42 @@ + + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Ffacebook.com%2Fwhatever + http://facebook.com/whatever + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Ffb.me%2F%3Fq%3Dsdlfjs%26n%3Dslfjsd + http://fb.me/?q=sdlfjs&n=slfjsd + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Fwww.facebook.com%2Fanother%2Fpath + http://www.facebook.com/another/path + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__Resolution.getResolution_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__Resolution.getResolution_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..ec3805d0ff26b6ca42d9765a945ba908bfce89d4 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__Resolution.getResolution_range.xml @@ -0,0 +1,15 @@ + + + + + 6 + 9 + 2 + 1083 + 3 + 0 + 3 + 0 + resolution==1024x768 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__UserCountry.getCountry_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__UserCountry.getCountry_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..c8075791022f377da391e400fac8c6c2a2eca8ed --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__UserCountry.getCountry_range.xml @@ -0,0 +1,18 @@ + + + + + 8 + 12 + 2 + 1444 + 4 + 0 + 4 + 0 + fr + plugins/Morpheus/icons/dist/flags/fr.png + countryCode==fr + 16 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitFrequency.get_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitFrequency.get_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..cfd103e6ad84fded84ce6dee334a80700d9b0d91 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitFrequency.get_range.xml @@ -0,0 +1,21 @@ + + + 3 + 6 + 0 + 0 + 1083 + 2 + 0% + 2 + 361 + 3 + 3 + 0 + 3 + 0 + 1 + 100% + 1 + 0 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitTime.getVisitInformationPerServerTime_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitTime.getVisitInformationPerServerTime_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..95fde209fa58ca62e3cb3f70b610f2f87c584009 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitTime.getVisitInformationPerServerTime_range.xml @@ -0,0 +1,291 @@ + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==0 + + + + 3 + 6 + 2 + 1083 + 0 + 0 + 3 + 0 + visitStartServerHour==1 + + + + 3 + 3 + 1 + 0 + 3 + 0 + 3 + 0 + visitStartServerHour==2 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==3 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==4 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==5 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==6 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==7 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==8 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==9 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==10 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==11 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==12 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==13 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==14 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==15 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==16 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==17 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==18 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==19 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==20 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==21 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==22 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + visitStartServerHour==23 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitsSummary.get_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitsSummary.get_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..29d972ff8a683191f2b46c3ab994e37b6aa185af --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitsSummary.get_range.xml @@ -0,0 +1,12 @@ + + + 6 + 9 + 0 + 3 + 1083 + 2 + 50% + 1.5 + 181 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_noIdSubtable__Referrers.getUrlsForSocial_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_noIdSubtable__Referrers.getUrlsForSocial_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..d85c6fa7fa4bebb3f7dcea2cac68729b06a4ad6a --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_noIdSubtable__Referrers.getUrlsForSocial_range.xml @@ -0,0 +1,176 @@ + + + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Ffacebook.com%2Fwhatever + http://facebook.com/whatever + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Ffb.me%2F%3Fq%3Dsdlfjs%26n%3Dslfjsd + http://fb.me/?q=sdlfjs&n=slfjsd + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Fmixi.jp + http://mixi.jp + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Fskyrock.com + http://skyrock.com + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Ft.co%2Fid%2F%3Fy%3Ddsfs + http://t.co/id/?y=dsfs + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Ftwitter.com%2Fwhatever2 + http://twitter.com/whatever2 + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Fwww.facebook.com%2Fanother%2Fpath + http://www.facebook.com/another/path + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Fwww.flickr.com + http://www.flickr.com + + + + 1 + 2 + 2 + 361 + 0 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Fwww.twitter.com%2Findex%3Fa%3D2334 + http://www.twitter.com/index?a=2334 + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Fxanga.com + http://xanga.com + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Ft.co%2Fid%2F%3Fy%3Ddsfs + http://t.co/id/?y=dsfs + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Ftwitter.com%2Fwhatever2 + http://twitter.com/whatever2 + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerUrl==http%3A%2F%2Fwww.facebook.com%2Fanother%2Fpath + http://www.facebook.com/another/path + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_periodIsRange_expanded___Actions.getPageUrls_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_periodIsRange_expanded___Actions.getPageUrls_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..1ef045bcb038d047bf91ba44550af8aa614d59dd --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_periodIsRange_expanded___Actions.getPageUrls_range.xml @@ -0,0 +1,122 @@ + + + + + 2 + 2 + 720 + 0 + 0 + + + 2 + 4 + 722 + 0 + 2 + 2 + 0 + 0 + 360 + 0% + 0% + http://example.org/homepage + pageUrl==http%253A%252F%252Fexample.org%252Fhomepage + + + + 2 + 2 + 0 + 0 + 0 + + + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 100% + 100% + http://example.org/news + pageUrl==http%253A%252F%252Fexample.org%252Fnews + + + + 2 + 2 + 0 + 0 + 0 + + + 2 + 0 + 0 + 0 + 0% + 100% + pageUrl=^http%253A%252F%252Fpiwik.net%252Fsub1 + + + + 2 + 2 + 0 + 0 + 0 + + + 2 + 0 + 0% + 100% + pageUrl=^http%253A%252F%252Fpiwik.net%252Fsub1%252Fsub2 + + + + 2 + 2 + 0 + 0 + 0 + + + 2 + 0 + 0% + 100% + pageUrl=^http%253A%252F%252Fpiwik.net%252Fsub1%252Fsub2%252Fsub3 + + + + 2 + 2 + 0 + 0 + 0 + + + 2 + 2 + 2 + 0 + 0% + 100% + http://example.org/sub1/sub2/sub3/news + pageUrl==http%253A%252F%252Fexample.org%252Fsub1%252Fsub2%252Fsub3%252Fnews + + + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_periodIsRange_flattened___Actions.getPageUrls_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_periodIsRange_flattened___Actions.getPageUrls_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..760844c429ef5719c933f3fcb54146a4b45e1013 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_periodIsRange_flattened___Actions.getPageUrls_range.xml @@ -0,0 +1,74 @@ + + + + + 2 + 2 + 720 + 0 + 0 + + + 2 + 4 + 722 + 0 + 2 + 2 + 0 + 0 + 360 + 0% + 0% + http://example.org/homepage + /homepage + pageUrl==http%253A%252F%252Fexample.org%252Fhomepage + + + + 2 + 2 + 0 + 0 + 0 + + + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 100% + 100% + http://example.org/news + /news + pageUrl==http%253A%252F%252Fexample.org%252Fnews + + + + 2 + 2 + 0 + 0 + 0 + + + 2 + 2 + 2 + 0 + 0 + 0 + 0% + 100% + http://example.org/sub1/sub2/sub3/news + /sub1/sub2/sub3/news + pageUrl==http%253A%252F%252Fexample.org%252Fsub1%252Fsub2%252Fsub3%252Fnews + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_showColumns__MultiSites.getAll_day.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_showColumns__MultiSites.getAll_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..ae23cd01c0b6d69db4eb7501f7658538159dfd8f --- /dev/null +++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_showColumns__MultiSites.getAll_day.xml @@ -0,0 +1,29 @@ + + + + + 2 + 0% + 1 + 1 + $ + 2 + day + Tue, Dec 14 + + http://piwik.net + + + + 1 + 0% + 2 + 1 + $ + 1 + day + Tue, Dec 14 + + http://piwik.net + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__API.getProcessedReport_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__API.getProcessedReport_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..e81294db961341f0fefab6f08c476a07121ae092 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__API.getProcessedReport_range.xml @@ -0,0 +1,112 @@ + + + Piwik test + + + Visitors + Locations + Country + UserCountry + getCountry + Country + Shows which country your visitors connected from when accessing your website. + + Visits + Actions + + + If a visitor comes to your website for the first time or if they visit a page more than 30 minutes after their last page view, this will be recorded as a new visit. + The number of unduplicated visitors coming to your website. Every user is only counted once, even if they visit the website multiple times a day. + The number of actions performed by your visitors. Actions can be page views, internal site searches, downloads or outlinks. + The number of users logged in your website. It is the number of unique active users that have a User ID set (via the Tracking code function 'setUserId'). + The average number of actions (page views, site searches, downloads or outlinks) that were performed during the visits. + The average duration of a visit. + The percentage of visits that only had a single pageview. This means, that the visitor left the website directly from the entrance page. + The percentage of visits that triggered a conversion. The conversion rate is calculated using the number of visits that converted at least one goal. Visits converting multiple goals are only counted once in the conversion rate. + + + Actions per Visit + Avg. Time on Website + Bounce Rate + + + number + number + number + number + number + duration_s + percent + percent + + + Conversions + Revenue + + + Revenue per Visit + + + money + number + percent + money + + index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=UserCountry&apiAction=getCountry&period=range&date= + index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=UserCountry&apiAction=getCountry&period=day&date= + UserCountry_getCountry + + + + Visits + Actions + Actions per Visit + Avg. Time on Website + Bounce Rate + Revenue + + + + + 3 + 5 + $1,000 + 1.7 + 00:04:02 + 67% + + + + + fr + plugins/Morpheus/icons/dist/flags/fr.png + countryCode==fr + 16 + + + + 3 + 5 + 3 + 727 + 2 + 2 + + + 2 + 2 + 1000 + + + 1 + 1 + 0 + + + 3 + 1000 + 2 + 0 + 1.7 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Actions.getPageUrls_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Actions.getPageUrls_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..0b9cefe00c4fd6ebb7e1c10ffa90169faec6a895 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Actions.getPageUrls_range.xml @@ -0,0 +1,115 @@ + + + + + 2 + 2 + 359 + 0 + 0 + + + 2 + 4 + 727 + 1 + 1 + + + 1 + 0 + 3 + 0.3333 + 0.5 + 1 + 0 + 1000 + 1 + 500 + 2 + + + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0.5 + 0 + 1 + + + 2 + 2 + 1 + 0 + 0 + 180 + 50% + 50% + http://example.org/homepage + pageUrl==http%253A%252F%252Fexample.org%252Fhomepage + + + + 1 + 2 + 1 + 0 + 0 + + + 1 + + + 2 + 0 + 3 + 0.6666 + 1 + 2 + 0 + + + 0 + 0 + 1 + 0% + 100% + pageUrl=^http%253A%252F%252Fpiwik.net%252Fuser + + + + 1 + 2 + 1 + 0 + 0 + + + 1 + + + 2 + 0 + 3 + 0.6666 + 1 + 2 + 0 + + + 1 + 1 + 1 + 0% + 100% + http://example.org/user/profile + pageUrl==http%253A%252F%252Fexample.org%252Fuser%252Fprofile + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__CustomVariables.getCustomVariables_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__CustomVariables.getCustomVariables_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..9c61c4e2e77b54fface30d7efa0b3622aec33922 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__CustomVariables.getCustomVariables_range.xml @@ -0,0 +1,296 @@ + + + + + 3 + 5 + 3 + 727 + 2 + 2 + + + 2 + 2 + 1000 + + + 1 + 1 + 0 + + + 3 + 1000 + 2 + 0 + + + visit + 1 + + + customVariableName==VisitorType + + + + 1 + 3 + 3 + 366 + 0 + 1 + + + 1 + 1 + 0 + + + 1 + 0 + 1 + 0 + + + + 2 + 2 + 1 + 361 + 2 + 1 + + + 1 + 1 + 1000 + + + 1 + 1 + 0 + + + 2 + 1000 + 1 + 0 + + + + + + 1 + 3 + 3 + 366 + 0 + 1 + + + 1 + 1 + 0 + + + 1 + 0 + 1 + 0 + + + visit + 2 + + + customVariableName==SET+WITH+EMPTY+VALUE + + + + 1 + 3 + 3 + 366 + 0 + 1 + + + 1 + 1 + 0 + + + 1 + 0 + 1 + 0 + + + + + + 1 + 3 + 3 + 366 + 0 + 1 + + + 1 + 1 + 0 + + + 1 + 0 + 1 + 0 + + + visit + 3 + + + customVariableName==Value+will+be+VERY+long+and+truncated + + + + 1 + 3 + 3 + 366 + 0 + 1 + + + 1 + 1 + 0 + + + 1 + 0 + 1 + 0 + + + + + + 3 + + + page + 4 + + + page + 5 + + + customVariableName==Status+user + + + + 2 + 2 + 2 + + + + 1 + 1 + 1 + + + + + + 2 + 2 + 1 + 361 + 2 + 1 + + + 1 + 1 + 1000 + + + 1 + 1000 + 1 + 0 + + + visit + 2 + + + customVariableName==Othercustom+value+which+should+be+truncated+abcdefghijklmnopqrstuvwxyz + + + + 2 + 2 + 1 + 361 + 2 + 1 + + + 1 + 1 + 1000 + + + 1 + 1000 + 1 + 0 + + + + + + 1 + + + page + 1 + + + customVariableName==Language + + + + 1 + 1 + 1 + + + + + + 1 + + + page + 2 + + + customVariableName==SET+WITH+EMPTY+VALUE+PAGE+SCOPE + + + + 1 + 1 + 1 + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Goals.get_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Goals.get_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..11192511004d4edead059860255971c2d5f8fb23 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Goals.get_range.xml @@ -0,0 +1,15 @@ + + + 3 + 2 + 1000 + 66.67% + 3 + 2 + 1000 + 100% + 0 + 0 + 0 + 0% + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getCounters.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getCounters.xml new file mode 100644 index 0000000000000000000000000000000000000000..ba6489a54cde26c534678d769058370621777603 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getCounters.xml @@ -0,0 +1,9 @@ + + + + 3 + 5 + 2 + 3 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getFirstVisitForVisitorId.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getFirstVisitForVisitorId.xml new file mode 100644 index 0000000000000000000000000000000000000000..4da34c3d70ce6b79d78482cc710ec35eab763294 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getFirstVisitForVisitorId.xml @@ -0,0 +1,106 @@ + + + + 1 + 2 + 156.5.3.2 + + d5089722a4391cf9 + + + 1 + USD + $ + 1 + Piwik test + + new + + 1 + plugins/Morpheus/images/goal.svg + 1 + none + + 0 + 0 + 0 + + 361 + 6 min 1s + 0 + 1 + 1 + direct + Direct Entry + + + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 0 + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml new file mode 100644 index 0000000000000000000000000000000000000000..01b8d3f0c51d3f04614be91596008b53e12f67ab --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml @@ -0,0 +1,486 @@ + + + + 1 + 3 + 156.5.3.2 + + d5089722a4391cf9 + + + outlink + http://test.com + + 6 + + + 5 + + + plugins/Morpheus/images/link.png + plugins/Morpheus/images/link.svg + Outlink + http://test.com + + 0 M + + + 0 + USD + $ + + Piwik test + + returning + plugins/Live/images/returningVisitor.png + 0 + + 2 + none + + 0 + 3600 + 0 + + 0 + 0s + 0 + 1 + 0 + campaign + Campaigns + campaign name - yeah! + campaign keyword - right... + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 3600 + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + 1 + 2 + 156.5.3.2 + + d5089722a4391cf9 + + + goal + triggered js + 1 + + 1000 + + + http://example.org/homepage + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + triggered js ($1,000 revenue) + + + + action + http://example.org/homepage + Homepage + 2 + + + 4 + + 1 + Homepage + http://example.org/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + 1 + USD + $ + + Piwik test + + new + + 1 + plugins/Morpheus/images/goal.svg + 1 + none + + 0 + 0 + 0 + + 361 + 6 min 1s + 0 + 1 + 1 + campaign + Campaigns + campaign name - yeah! + campaign keyword - right... + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 0 + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + 1 + 1 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + goal + second goal + 2 + + 0 + + + http://example.org/homepage + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + second goal + + + + action + http://example.org/homepage + Homepage + 2 + + + 1 + + 360 + 6 min 0s + 1 + Homepage + http://example.org/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + goal + triggered js + 1 + + 0 + + + http://example.org/user/profile + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + triggered js + + + + action + http://example.org/user/profile + Profile page + 4 + + + 2 + + 0 + 0s + 2 + Profile page + http://example.org/user/profile + + plugins/Morpheus/images/action.svg + + + + Status user + Loggedin + + + Status user + looking at "profile page" + + + 0 M + + + action + http://example.org/user/profile + Profile page for user *_)% + 4 + + + 3 + + 3 + Profile page for user *_)% + http://example.org/user/profile + + plugins/Morpheus/images/action.svg + + + + Language + FR + + + SET WITH EMPTY VALUE PAGE SCOPE + + + + Status user + looking at "profile page" + + + 0 M + + + 2 + USD + $ + + Piwik test + + new + + 1 + plugins/Morpheus/images/goal.svg + 1 + none + + 0 + 0 + 0 + + 364 + 6 min 4s + 0 + 3 + 3 + search + Search Engines + Google + this keyword should be ranked + 1 + http://www.google.com/url?source=web&cd=1&url=http://piwik.org/&rct=j&q=this keyword should be ranked&sig2=BvKAdCtNixsmfNWXjsNyMw + http://google.com + plugins/Morpheus/icons/dist/searchEngines/google.com.png + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 0 + + + VisitorType + LoggedIn + + + SET WITH EMPTY VALUE + + + + Value will be VERY long and truncated + abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrst + + + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..7c2520e6d7529f5572e9096f8e6a8c895b5d6b05 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml @@ -0,0 +1,479 @@ + + + + 1 + 3 + 156.5.3.2 + + d5089722a4391cf9 + + + outlink + http://test.com + + 6 + + 5 + + + plugins/Morpheus/images/link.png + plugins/Morpheus/images/link.svg + Outlink + http://test.com + + 0 M + + + 0 + USD + $ + + Piwik test + + returning + plugins/Live/images/returningVisitor.png + 0 + + 2 + none + + 0 + 3600 + 0 + + 0 + 0s + 0 + 1 + 0 + direct + Direct Entry + + + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 3600 + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + + + 1 + 2 + 156.5.3.2 + + d5089722a4391cf9 + + + goal + triggered js + 1 + + 1000 + + http://example.org/homepage + campaign + campaign name - yeah! + campaign keyword - right... + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + triggered js ($1,000 revenue) + + + + action + http://example.org/homepage + Homepage + 2 + + 4 + + 0 + 0s + 1 + Homepage + http://example.org/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + 1 + USD + $ + + Piwik test + + new + + 1 + plugins/Morpheus/images/goal.svg + 1 + none + + 0 + 0 + 0 + + 361 + 6 min 1s + 0 + 1 + 1 + direct + Direct Entry + + + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 0 + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + + + 1 + 1 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + action + http://example.org/homepage + Homepage + 2 + + 1 + + 359 + 5 min 59s + 1 + Homepage + http://example.org/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + goal + second goal + 2 + + 0 + + http://example.org/homepage + search + Google + piwik + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + second goal + + + + action + http://example.org/user/profile + Profile page + 4 + + 2 + + 1 + 1s + 2 + Profile page + http://example.org/user/profile + + plugins/Morpheus/images/action.svg + + 0 M + + + Status user + Loggedin + + + Status user + looking at "profile page" + + + + + action + http://example.org/user/profile + Profile page for user *_)% + 4 + + 3 + + 0 + 0s + 3 + Profile page for user *_)% + http://example.org/user/profile + + plugins/Morpheus/images/action.svg + + 0 M + + + Language + FR + + + SET WITH EMPTY VALUE PAGE SCOPE + + + + Status user + looking at "profile page" + + + + + goal + triggered js + 1 + + 0 + + http://example.org/user/profile + search + Google + piwik + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + triggered js + + + + 2 + USD + $ + + Piwik test + + new + + 1 + plugins/Morpheus/images/goal.svg + 1 + none + + 0 + 0 + 0 + + 366 + 6 min 6s + 0 + 3 + 3 + search + Search Engines + Google + this keyword should be ranked + 1 + http://www.google.com/url?source=web&cd=1&url=http://piwik.org/&rct=j&q=this keyword should be ranked&sig2=BvKAdCtNixsmfNWXjsNyMw + http://google.com + plugins/Morpheus/icons/dist/searchEngines/google.com.png + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 0 + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + VisitorType + LoggedIn + + + SET WITH EMPTY VALUE + + + + Value will be VERY long and truncated + abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrst + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getMostRecentVisitorId.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getMostRecentVisitorId.xml new file mode 100644 index 0000000000000000000000000000000000000000..943e78b64e72250f291f56816ebd13224eb0f3eb --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getMostRecentVisitorId.xml @@ -0,0 +1,2 @@ + +61e8cc2d51fea26d \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml new file mode 100644 index 0000000000000000000000000000000000000000..a1514984907a725d2e64b2f2475d0fa47f3b2a37 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml @@ -0,0 +1,384 @@ + + + + 0 + 2 + 361 + 2 + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + 1 + + 1 + + 0 + 0 + + 1000 + + + + 1 + 3 + 156.5.3.2 + + d5089722a4391cf9 + + + outlink + http://test.com + + 6 + + + 5 + + + plugins/Morpheus/images/link.png + plugins/Morpheus/images/link.svg + Outlink + http://test.com + + 0 M + + + 0 + USD + $ + + + + + Piwik test + + + + + + + + returning + plugins/Live/images/returningVisitor.png + 0 + + 2 + none + + 0 + 3600 + 0 + + 0 + 0s + 0 + 1 + 0 + direct + Direct Entry + + + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 3600 + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + + + 1 + 2 + 156.5.3.2 + + d5089722a4391cf9 + + + goal + triggered js + 1 + + 1000 + + + http://example.org/homepage + campaign + campaign name - yeah! + campaign keyword - right... + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + triggered js ($1,000 revenue) + + + + action + http://example.org/homepage + Homepage + 2 + + + 4 + + 0 + 0s + 1 + Homepage + http://example.org/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + 1 + USD + $ + + + + + Piwik test + + + + + + + + new + + 1 + plugins/Morpheus/images/goal.svg + 1 + none + + 0 + 0 + 0 + + 361 + 6 min 1s + 0 + 1 + 1 + direct + Direct Entry + + + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 0 + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + + + + + 6 min 1s + 0 + + + + + direct + + Direct Entry + + + + + + direct + + Direct Entry + + 2 + + + http://example.org/homepage + 1 + + + + + Desktop + 2 + plugins/Morpheus/icons/dist/devices/desktop.png + + + Generic Desktop + 2 + + + + + + + eur + 2 + Europe + + + + + fr + 2 + plugins/Morpheus/icons/dist/flags/fr.png + France + + + + + + VisitorType + + + LoggedOut + 2 + + + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + + + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + 2 + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Referrers.getCampaigns_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Referrers.getCampaigns_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..566315146e79b486198e015cb26516e36a6aa0b3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Referrers.getCampaigns_range.xml @@ -0,0 +1,32 @@ + + + + + + + 1 + 1 + 1000 + + + 1 + 1000 + 0 + referrerType==campaign;referrerName==campaign+name+-+yeah%21 + + + + + + 1 + 1 + 1000 + + + 1 + 1000 + 0 + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Referrers.getKeywords_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Referrers.getKeywords_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..40662f8095a356797da60cbc17e70794a021456b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Referrers.getKeywords_range.xml @@ -0,0 +1,47 @@ + + + + + 1 + 3 + 3 + 366 + 0 + 1 + 1 + 0 + referrerType==search;referrerKeyword==this+keyword+should+be+ranked + + + + 1 + 3 + 3 + 366 + 0 + 1 + 1 + 0 + + + + + + + + 1 + 1 + 0 + + + 1 + 1 + 0 + + + 2 + 0 + 0 + referrerType==search;referrerKeyword==piwik + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__VisitsSummary.get_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__VisitsSummary.get_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..fb680d3186d30f381182cd417bba1c153b4fcec5 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__VisitsSummary.get_range.xml @@ -0,0 +1,12 @@ + + + 3 + 5 + 2 + 2 + 727 + 3 + 67% + 1.7 + 242 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__API.getProcessedReport_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__API.getProcessedReport_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..e81294db961341f0fefab6f08c476a07121ae092 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__API.getProcessedReport_range.xml @@ -0,0 +1,112 @@ + + + Piwik test + + + Visitors + Locations + Country + UserCountry + getCountry + Country + Shows which country your visitors connected from when accessing your website. + + Visits + Actions + + + If a visitor comes to your website for the first time or if they visit a page more than 30 minutes after their last page view, this will be recorded as a new visit. + The number of unduplicated visitors coming to your website. Every user is only counted once, even if they visit the website multiple times a day. + The number of actions performed by your visitors. Actions can be page views, internal site searches, downloads or outlinks. + The number of users logged in your website. It is the number of unique active users that have a User ID set (via the Tracking code function 'setUserId'). + The average number of actions (page views, site searches, downloads or outlinks) that were performed during the visits. + The average duration of a visit. + The percentage of visits that only had a single pageview. This means, that the visitor left the website directly from the entrance page. + The percentage of visits that triggered a conversion. The conversion rate is calculated using the number of visits that converted at least one goal. Visits converting multiple goals are only counted once in the conversion rate. + + + Actions per Visit + Avg. Time on Website + Bounce Rate + + + number + number + number + number + number + duration_s + percent + percent + + + Conversions + Revenue + + + Revenue per Visit + + + money + number + percent + money + + index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=UserCountry&apiAction=getCountry&period=range&date= + index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=UserCountry&apiAction=getCountry&period=day&date= + UserCountry_getCountry + + + + Visits + Actions + Actions per Visit + Avg. Time on Website + Bounce Rate + Revenue + + + + + 3 + 5 + $1,000 + 1.7 + 00:04:02 + 67% + + + + + fr + plugins/Morpheus/icons/dist/flags/fr.png + countryCode==fr + 16 + + + + 3 + 5 + 3 + 727 + 2 + 2 + + + 2 + 2 + 1000 + + + 1 + 1 + 0 + + + 3 + 1000 + 2 + 0 + 1.7 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Actions.getPageUrls_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Actions.getPageUrls_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..0b9cefe00c4fd6ebb7e1c10ffa90169faec6a895 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Actions.getPageUrls_range.xml @@ -0,0 +1,115 @@ + + + + + 2 + 2 + 359 + 0 + 0 + + + 2 + 4 + 727 + 1 + 1 + + + 1 + 0 + 3 + 0.3333 + 0.5 + 1 + 0 + 1000 + 1 + 500 + 2 + + + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0.5 + 0 + 1 + + + 2 + 2 + 1 + 0 + 0 + 180 + 50% + 50% + http://example.org/homepage + pageUrl==http%253A%252F%252Fexample.org%252Fhomepage + + + + 1 + 2 + 1 + 0 + 0 + + + 1 + + + 2 + 0 + 3 + 0.6666 + 1 + 2 + 0 + + + 0 + 0 + 1 + 0% + 100% + pageUrl=^http%253A%252F%252Fpiwik.net%252Fuser + + + + 1 + 2 + 1 + 0 + 0 + + + 1 + + + 2 + 0 + 3 + 0.6666 + 1 + 2 + 0 + + + 1 + 1 + 1 + 0% + 100% + http://example.org/user/profile + pageUrl==http%253A%252F%252Fexample.org%252Fuser%252Fprofile + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__CustomVariables.getCustomVariables_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__CustomVariables.getCustomVariables_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..9c61c4e2e77b54fface30d7efa0b3622aec33922 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__CustomVariables.getCustomVariables_range.xml @@ -0,0 +1,296 @@ + + + + + 3 + 5 + 3 + 727 + 2 + 2 + + + 2 + 2 + 1000 + + + 1 + 1 + 0 + + + 3 + 1000 + 2 + 0 + + + visit + 1 + + + customVariableName==VisitorType + + + + 1 + 3 + 3 + 366 + 0 + 1 + + + 1 + 1 + 0 + + + 1 + 0 + 1 + 0 + + + + 2 + 2 + 1 + 361 + 2 + 1 + + + 1 + 1 + 1000 + + + 1 + 1 + 0 + + + 2 + 1000 + 1 + 0 + + + + + + 1 + 3 + 3 + 366 + 0 + 1 + + + 1 + 1 + 0 + + + 1 + 0 + 1 + 0 + + + visit + 2 + + + customVariableName==SET+WITH+EMPTY+VALUE + + + + 1 + 3 + 3 + 366 + 0 + 1 + + + 1 + 1 + 0 + + + 1 + 0 + 1 + 0 + + + + + + 1 + 3 + 3 + 366 + 0 + 1 + + + 1 + 1 + 0 + + + 1 + 0 + 1 + 0 + + + visit + 3 + + + customVariableName==Value+will+be+VERY+long+and+truncated + + + + 1 + 3 + 3 + 366 + 0 + 1 + + + 1 + 1 + 0 + + + 1 + 0 + 1 + 0 + + + + + + 3 + + + page + 4 + + + page + 5 + + + customVariableName==Status+user + + + + 2 + 2 + 2 + + + + 1 + 1 + 1 + + + + + + 2 + 2 + 1 + 361 + 2 + 1 + + + 1 + 1 + 1000 + + + 1 + 1000 + 1 + 0 + + + visit + 2 + + + customVariableName==Othercustom+value+which+should+be+truncated+abcdefghijklmnopqrstuvwxyz + + + + 2 + 2 + 1 + 361 + 2 + 1 + + + 1 + 1 + 1000 + + + 1 + 1000 + 1 + 0 + + + + + + 1 + + + page + 1 + + + customVariableName==Language + + + + 1 + 1 + 1 + + + + + + 1 + + + page + 2 + + + customVariableName==SET+WITH+EMPTY+VALUE+PAGE+SCOPE + + + + 1 + 1 + 1 + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Goals.get_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Goals.get_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..11192511004d4edead059860255971c2d5f8fb23 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Goals.get_range.xml @@ -0,0 +1,15 @@ + + + 3 + 2 + 1000 + 66.67% + 3 + 2 + 1000 + 100% + 0 + 0 + 0 + 0% + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getCounters.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getCounters.xml new file mode 100644 index 0000000000000000000000000000000000000000..ba6489a54cde26c534678d769058370621777603 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getCounters.xml @@ -0,0 +1,9 @@ + + + + 3 + 5 + 2 + 3 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getFirstVisitForVisitorId.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getFirstVisitForVisitorId.xml new file mode 100644 index 0000000000000000000000000000000000000000..4da34c3d70ce6b79d78482cc710ec35eab763294 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getFirstVisitForVisitorId.xml @@ -0,0 +1,106 @@ + + + + 1 + 2 + 156.5.3.2 + + d5089722a4391cf9 + + + 1 + USD + $ + 1 + Piwik test + + new + + 1 + plugins/Morpheus/images/goal.svg + 1 + none + + 0 + 0 + 0 + + 361 + 6 min 1s + 0 + 1 + 1 + direct + Direct Entry + + + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 0 + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml new file mode 100644 index 0000000000000000000000000000000000000000..01b8d3f0c51d3f04614be91596008b53e12f67ab --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml @@ -0,0 +1,486 @@ + + + + 1 + 3 + 156.5.3.2 + + d5089722a4391cf9 + + + outlink + http://test.com + + 6 + + + 5 + + + plugins/Morpheus/images/link.png + plugins/Morpheus/images/link.svg + Outlink + http://test.com + + 0 M + + + 0 + USD + $ + + Piwik test + + returning + plugins/Live/images/returningVisitor.png + 0 + + 2 + none + + 0 + 3600 + 0 + + 0 + 0s + 0 + 1 + 0 + campaign + Campaigns + campaign name - yeah! + campaign keyword - right... + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 3600 + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + 1 + 2 + 156.5.3.2 + + d5089722a4391cf9 + + + goal + triggered js + 1 + + 1000 + + + http://example.org/homepage + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + triggered js ($1,000 revenue) + + + + action + http://example.org/homepage + Homepage + 2 + + + 4 + + 1 + Homepage + http://example.org/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + 1 + USD + $ + + Piwik test + + new + + 1 + plugins/Morpheus/images/goal.svg + 1 + none + + 0 + 0 + 0 + + 361 + 6 min 1s + 0 + 1 + 1 + campaign + Campaigns + campaign name - yeah! + campaign keyword - right... + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 0 + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + 1 + 1 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + goal + second goal + 2 + + 0 + + + http://example.org/homepage + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + second goal + + + + action + http://example.org/homepage + Homepage + 2 + + + 1 + + 360 + 6 min 0s + 1 + Homepage + http://example.org/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + goal + triggered js + 1 + + 0 + + + http://example.org/user/profile + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + triggered js + + + + action + http://example.org/user/profile + Profile page + 4 + + + 2 + + 0 + 0s + 2 + Profile page + http://example.org/user/profile + + plugins/Morpheus/images/action.svg + + + + Status user + Loggedin + + + Status user + looking at "profile page" + + + 0 M + + + action + http://example.org/user/profile + Profile page for user *_)% + 4 + + + 3 + + 3 + Profile page for user *_)% + http://example.org/user/profile + + plugins/Morpheus/images/action.svg + + + + Language + FR + + + SET WITH EMPTY VALUE PAGE SCOPE + + + + Status user + looking at "profile page" + + + 0 M + + + 2 + USD + $ + + Piwik test + + new + + 1 + plugins/Morpheus/images/goal.svg + 1 + none + + 0 + 0 + 0 + + 364 + 6 min 4s + 0 + 3 + 3 + search + Search Engines + Google + this keyword should be ranked + 1 + http://www.google.com/url?source=web&cd=1&url=http://piwik.org/&rct=j&q=this keyword should be ranked&sig2=BvKAdCtNixsmfNWXjsNyMw + http://google.com + plugins/Morpheus/icons/dist/searchEngines/google.com.png + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 0 + + + VisitorType + LoggedIn + + + SET WITH EMPTY VALUE + + + + Value will be VERY long and truncated + abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrst + + + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..7c2520e6d7529f5572e9096f8e6a8c895b5d6b05 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml @@ -0,0 +1,479 @@ + + + + 1 + 3 + 156.5.3.2 + + d5089722a4391cf9 + + + outlink + http://test.com + + 6 + + 5 + + + plugins/Morpheus/images/link.png + plugins/Morpheus/images/link.svg + Outlink + http://test.com + + 0 M + + + 0 + USD + $ + + Piwik test + + returning + plugins/Live/images/returningVisitor.png + 0 + + 2 + none + + 0 + 3600 + 0 + + 0 + 0s + 0 + 1 + 0 + direct + Direct Entry + + + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 3600 + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + + + 1 + 2 + 156.5.3.2 + + d5089722a4391cf9 + + + goal + triggered js + 1 + + 1000 + + http://example.org/homepage + campaign + campaign name - yeah! + campaign keyword - right... + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + triggered js ($1,000 revenue) + + + + action + http://example.org/homepage + Homepage + 2 + + 4 + + 0 + 0s + 1 + Homepage + http://example.org/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + 1 + USD + $ + + Piwik test + + new + + 1 + plugins/Morpheus/images/goal.svg + 1 + none + + 0 + 0 + 0 + + 361 + 6 min 1s + 0 + 1 + 1 + direct + Direct Entry + + + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 0 + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + + + 1 + 1 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + action + http://example.org/homepage + Homepage + 2 + + 1 + + 359 + 5 min 59s + 1 + Homepage + http://example.org/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + goal + second goal + 2 + + 0 + + http://example.org/homepage + search + Google + piwik + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + second goal + + + + action + http://example.org/user/profile + Profile page + 4 + + 2 + + 1 + 1s + 2 + Profile page + http://example.org/user/profile + + plugins/Morpheus/images/action.svg + + 0 M + + + Status user + Loggedin + + + Status user + looking at "profile page" + + + + + action + http://example.org/user/profile + Profile page for user *_)% + 4 + + 3 + + 0 + 0s + 3 + Profile page for user *_)% + http://example.org/user/profile + + plugins/Morpheus/images/action.svg + + 0 M + + + Language + FR + + + SET WITH EMPTY VALUE PAGE SCOPE + + + + Status user + looking at "profile page" + + + + + goal + triggered js + 1 + + 0 + + http://example.org/user/profile + search + Google + piwik + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + triggered js + + + + 2 + USD + $ + + Piwik test + + new + + 1 + plugins/Morpheus/images/goal.svg + 1 + none + + 0 + 0 + 0 + + 366 + 6 min 6s + 0 + 3 + 3 + search + Search Engines + Google + this keyword should be ranked + 1 + http://www.google.com/url?source=web&cd=1&url=http://piwik.org/&rct=j&q=this keyword should be ranked&sig2=BvKAdCtNixsmfNWXjsNyMw + http://google.com + plugins/Morpheus/icons/dist/searchEngines/google.com.png + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 0 + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + VisitorType + LoggedIn + + + SET WITH EMPTY VALUE + + + + Value will be VERY long and truncated + abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrst + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getMostRecentVisitorId.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getMostRecentVisitorId.xml new file mode 100644 index 0000000000000000000000000000000000000000..943e78b64e72250f291f56816ebd13224eb0f3eb --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getMostRecentVisitorId.xml @@ -0,0 +1,2 @@ + +61e8cc2d51fea26d \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml new file mode 100644 index 0000000000000000000000000000000000000000..a1514984907a725d2e64b2f2475d0fa47f3b2a37 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml @@ -0,0 +1,384 @@ + + + + 0 + 2 + 361 + 2 + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + 1 + + 1 + + 0 + 0 + + 1000 + + + + 1 + 3 + 156.5.3.2 + + d5089722a4391cf9 + + + outlink + http://test.com + + 6 + + + 5 + + + plugins/Morpheus/images/link.png + plugins/Morpheus/images/link.svg + Outlink + http://test.com + + 0 M + + + 0 + USD + $ + + + + + Piwik test + + + + + + + + returning + plugins/Live/images/returningVisitor.png + 0 + + 2 + none + + 0 + 3600 + 0 + + 0 + 0s + 0 + 1 + 0 + direct + Direct Entry + + + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 3600 + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + + + 1 + 2 + 156.5.3.2 + + d5089722a4391cf9 + + + goal + triggered js + 1 + + 1000 + + + http://example.org/homepage + campaign + campaign name - yeah! + campaign keyword - right... + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + triggered js ($1,000 revenue) + + + + action + http://example.org/homepage + Homepage + 2 + + + 4 + + 0 + 0s + 1 + Homepage + http://example.org/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + 1 + USD + $ + + + + + Piwik test + + + + + + + + new + + 1 + plugins/Morpheus/images/goal.svg + 1 + none + + 0 + 0 + 0 + + 361 + 6 min 1s + 0 + 1 + 1 + direct + Direct Entry + + + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.0 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.0 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 0 + 1111x222 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + VisitorType + LoggedOut + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + + + + + + + 6 min 1s + 0 + + + + + direct + + Direct Entry + + + + + + direct + + Direct Entry + + 2 + + + http://example.org/homepage + 1 + + + + + Desktop + 2 + plugins/Morpheus/icons/dist/devices/desktop.png + + + Generic Desktop + 2 + + + + + + + eur + 2 + Europe + + + + + fr + 2 + plugins/Morpheus/icons/dist/flags/fr.png + France + + + + + + VisitorType + + + LoggedOut + 2 + + + + + Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz + + + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + 2 + + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Referrers.getCampaigns_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Referrers.getCampaigns_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..566315146e79b486198e015cb26516e36a6aa0b3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Referrers.getCampaigns_range.xml @@ -0,0 +1,32 @@ + + + + + + + 1 + 1 + 1000 + + + 1 + 1000 + 0 + referrerType==campaign;referrerName==campaign+name+-+yeah%21 + + + + + + 1 + 1 + 1000 + + + 1 + 1000 + 0 + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Referrers.getKeywords_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Referrers.getKeywords_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..40662f8095a356797da60cbc17e70794a021456b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Referrers.getKeywords_range.xml @@ -0,0 +1,47 @@ + + + + + 1 + 3 + 3 + 366 + 0 + 1 + 1 + 0 + referrerType==search;referrerKeyword==this+keyword+should+be+ranked + + + + 1 + 3 + 3 + 366 + 0 + 1 + 1 + 0 + + + + + + + + 1 + 1 + 0 + + + 1 + 1 + 0 + + + 2 + 0 + 0 + referrerType==search;referrerKeyword==piwik + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__VisitsSummary.get_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__VisitsSummary.get_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..fb680d3186d30f381182cd417bba1c153b4fcec5 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__VisitsSummary.get_range.xml @@ -0,0 +1,12 @@ + + + 3 + 5 + 2 + 2 + 727 + 3 + 67% + 1.7 + 242 + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getDownloads_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getDownloads_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..ed73fab9bbfb052446cdfb603c1a9235a3bad8b1 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getDownloads_day.xml @@ -0,0 +1,122 @@ + + + + + 5 + 5 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + http://cloudsite5.com/20/download + downloadUrl==http%253A%252F%252Fcloudsite5.com%252F20%252Fdownload + + + + 4 + 4 + 0 + 0 + 0 + + + + + + + + 5 + 5 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + http://cloudsite6.com/24/download + downloadUrl==http%253A%252F%252Fcloudsite6.com%252F24%252Fdownload + + + + 4 + 4 + 0 + 0 + 0 + + + + + + + + 5 + 5 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + http://cloudsite7.com/28/download + downloadUrl==http%253A%252F%252Fcloudsite7.com%252F28%252Fdownload + + + + 4 + 4 + 0 + 0 + 0 + + + + + + + + 10 + 10 + 0 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getDownloads_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getDownloads_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..c4002cad4020f2409973fb81583f45fe87230c74 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getDownloads_month.xml @@ -0,0 +1,122 @@ + + + + + 5 + 5 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + http://cloudsite25.com/100/download + downloadUrl==http%253A%252F%252Fcloudsite25.com%252F100%252Fdownload + + + + 4 + 4 + 0 + 0 + 0 + + + + + + + + 5 + 5 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + http://cloudsite26.com/104/download + downloadUrl==http%253A%252F%252Fcloudsite26.com%252F104%252Fdownload + + + + 4 + 4 + 0 + 0 + 0 + + + + + + + + 5 + 5 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + http://cloudsite27.com/108/download + downloadUrl==http%253A%252F%252Fcloudsite27.com%252F108%252Fdownload + + + + 4 + 4 + 0 + 0 + 0 + + + + + + + + 60 + 60 + 0 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getOutlinks_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getOutlinks_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..0b833a2b513b55b3316a3fa52b3151015a10f143 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getOutlinks_day.xml @@ -0,0 +1,122 @@ + + + + + 5 + 5 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + http://othersite10.com/ + outlinkUrl==http%253A%252F%252Fothersite10.com%252F + + + + 4 + 4 + 0 + 0 + 0 + + + + + + + + 5 + 5 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + http://othersite11.com/ + outlinkUrl==http%253A%252F%252Fothersite11.com%252F + + + + 4 + 4 + 0 + 0 + 0 + + + + + + + + 5 + 5 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + http://othersite12.com/ + outlinkUrl==http%253A%252F%252Fothersite12.com%252F + + + + 4 + 4 + 0 + 0 + 0 + + + + + + + + 10 + 10 + 0 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getOutlinks_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getOutlinks_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..57135bf0bca3bd09980b2a52382c04d910df1084 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getOutlinks_month.xml @@ -0,0 +1,122 @@ + + + + + 5 + 5 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + http://othersite10.com/ + outlinkUrl==http%253A%252F%252Fothersite10.com%252F + + + + 4 + 4 + 0 + 0 + 0 + + + + + + + + 5 + 5 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + http://othersite11.com/ + outlinkUrl==http%253A%252F%252Fothersite11.com%252F + + + + 4 + 4 + 0 + 0 + 0 + + + + + + + + 5 + 5 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + http://othersite12.com/ + outlinkUrl==http%253A%252F%252Fothersite12.com%252F + + + + 4 + 4 + 0 + 0 + 0 + + + + + + + + 60 + 60 + 0 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getPageTitles_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..31695fa6591652bff39abfabd69bcfb67b5f26c2 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getPageTitles_day.xml @@ -0,0 +1,85 @@ + + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 13% + pageTitle==title_8%2B%252F%2Btitle_32 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 13% + pageTitle==title_8%2B%252F%2Btitle_33 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 2 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0% + 13% + pageTitle==title_8%2B%252F%2Btitle_34 + + + + 145 + 145 + 0 + 0 + 0 + + + 42 + 167 + 15 + 27 + 40 + 0 + 0 + 0 + 64% + 28% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getPageTitles_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getPageTitles_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..ca821d13066c9cee34ae2ef7911e114cc3107341 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getPageTitles_month.xml @@ -0,0 +1,88 @@ + + + + + 25 + 25 + 0 + 0 + 0 + + + 25 + 25 + 0 + 25 + 25 + 25 + 25 + 25 + 0 + 0 + 0 + 100% + 100% + pageTitle==bought%2Bbook + + + + 8 + 8 + 0 + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + 0% + 13% + pageTitle==title_8%2B%252F%2Btitle_32 + + + + 8 + 8 + 0 + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + 0% + 13% + pageTitle==title_8%2B%252F%2Btitle_33 + + + + 203 + 203 + 0 + 0 + 0 + + + 93 + 219 + 16 + 77 + 91 + 14 + 7 + 7 + 0 + 0 + 0 + 83% + 45% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getPageUrls_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..d8945481e6840ed063479c8ede5f29d87273f528 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getPageUrls_day.xml @@ -0,0 +1,198 @@ + + + + + 32 + 32 + 0 + 0 + 0 + + + 11 + 2 + 3 + 1 + 1 + 0 + 0 + 0 + 50% + 34% + pageUrl=^http%253A%252F%252Fpiwik.net%252F8 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0% + 13% + http://piwik.net/8/32 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F32 + + + + 24 + 24 + 0 + 0 + 0 + + + 2 + 3 + 1 + 1 + 10 + 0 + 50% + 42% + + + + + + 28 + 28 + 0 + 0 + 0 + + + 1 + 2 + 10 + 2 + 0 + 0 + 0 + 0 + 0% + 4% + pageUrl=^http%253A%252F%252Fpiwik.net%252F7 + + + + 7 + 7 + 7 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0% + 14% + http://piwik.net/7/28 + pageUrl==http%253A%252F%252Fpiwik.net%252F7%252F28 + + + + 21 + 21 + 0 + 0 + 0 + + + 2 + 10 + 2 + 0 + 0 + 0% + 0% + + + + + + 24 + 24 + 0 + 0 + 0 + + + 1 + 2 + 18 + 2 + 0 + 0 + 0 + 0 + 0% + 4% + pageUrl=^http%253A%252F%252Fpiwik.net%252F6 + + + + 6 + 6 + 6 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0% + 17% + http://piwik.net/6/24 + pageUrl==http%253A%252F%252Fpiwik.net%252F6%252F24 + + + + 18 + 18 + 0 + 0 + 0 + + + 2 + 18 + 2 + 0 + 0 + 0% + 0% + + + + + + 85 + 85 + 0 + 0 + 0 + + + 37 + 138 + 11 + 26 + 30 + 0 + 0 + 0 + 70% + 35% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getPageUrls_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getPageUrls_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b08fa5049ea141ef195a26c11f732e7d95a98f0 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getPageUrls_month.xml @@ -0,0 +1,165 @@ + + + + + 32 + 32 + 0 + 0 + 0 + + + 11 + 2 + 3 + 1 + 1 + 0 + 0 + 0 + 50% + 34% + pageUrl=^http%253A%252F%252Fpiwik.net%252F8 + + + + 8 + 8 + 0 + 0 + 0 + + + 1 + 8 + 1 + 0 + 0% + 13% + http://piwik.net/8/32 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F32 + + + + 24 + 24 + 0 + 0 + 0 + + + 2 + 3 + 1 + 1 + 10 + 0 + 50% + 42% + + + + + + 28 + 28 + 0 + 0 + 0 + + + 1 + 2 + 10 + 2 + 0 + 0 + 0 + 0 + 0% + 4% + pageUrl=^http%253A%252F%252Fpiwik.net%252F7 + + + + 7 + 7 + 0 + 0 + 0 + + + 1 + 7 + 1 + 0 + 0% + 14% + http://piwik.net/7/28 + pageUrl==http%253A%252F%252Fpiwik.net%252F7%252F28 + + + + 21 + 21 + 0 + 0 + 0 + + + 2 + 10 + 2 + 0 + 0 + 0% + 0% + + + + + + 25 + 25 + 0 + 0 + 0 + + + 25 + 25 + 0 + 25 + 25 + 25 + 25 + 25 + 0 + 0 + 0 + 100% + 100% + http://example.com/piwik/ + pageUrl==http%253A%252F%252Flocalhost%252F + + + + 159 + 159 + 0 + 0 + 0 + + + 81 + 89 + 206 + 13 + 76 + 0 + 0 + 0 + 85% + 51% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getSiteSearchKeywords_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getSiteSearchKeywords_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..5de252a5d0b01878e7d90a2e78fdba64dbeebe0a --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getSiteSearchKeywords_day.xml @@ -0,0 +1,87 @@ + + + + + 10 + 10 + 0 + 0 + 0 + + + 10 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword20 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword21 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword22 + + + + 37 + 37 + 0 + 0 + 0 + + + 37 + 1 + 0 + 0 + 0% + 100% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getSiteSearchKeywords_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getSiteSearchKeywords_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..56325bc6df79c4b51e973d14ffc49a23b91a5e96 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Actions.getSiteSearchKeywords_month.xml @@ -0,0 +1,87 @@ + + + + + 30 + 30 + 0 + 0 + 0 + + + 30 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword100 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword101 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword102 + + + + 117 + 117 + 0 + 0 + 0 + + + 117 + 1 + 0 + 0 + 0% + 100% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Contents.getContentNames_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Contents.getContentNames_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..0a6a40ca5fccbdd214d14ff62d00ffdca79bc1fd --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Contents.getContentNames_day.xml @@ -0,0 +1,38 @@ + + + + + 1 + 5 + 5 + 5 + 100% + contentName==content+name+20 + + + + 1 + 5 + 5 + 0 + 0% + contentName==content+name+21 + + + + 1 + 5 + 5 + 5 + 100% + contentName==content+name+22 + + + + 2 + 10 + 10 + 5 + 50% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Contents.getContentNames_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Contents.getContentNames_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..b0b79dac6b94193db4136342b299d721d567b591 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Contents.getContentNames_month.xml @@ -0,0 +1,38 @@ + + + + + 5 + 5 + 5 + 1 + 100% + contentName==content+name+20 + + + + 5 + 5 + 0 + 1 + 0% + contentName==content+name+21 + + + + 5 + 5 + 5 + 1 + 100% + contentName==content+name+22 + + + + 60 + 60 + 35 + 12 + 58.33% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Contents.getContentPieces_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Contents.getContentPieces_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..203747d508cdd5a9beda4d164dfbcf892331ab0b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Contents.getContentPieces_day.xml @@ -0,0 +1,38 @@ + + + + + 1 + 5 + 5 + 5 + 100% + contentPiece==content+piece+20 + + + + 1 + 5 + 5 + 0 + 0% + contentPiece==content+piece+21 + + + + 1 + 5 + 5 + 5 + 100% + contentPiece==content+piece+22 + + + + 2 + 10 + 10 + 5 + 50% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Contents.getContentPieces_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Contents.getContentPieces_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..22b8f7e2ee910e60db53fe0e0e1641a4608bf811 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Contents.getContentPieces_month.xml @@ -0,0 +1,38 @@ + + + + + 5 + 5 + 5 + 1 + 100% + contentPiece==content+piece+20 + + + + 5 + 5 + 0 + 1 + 0% + contentPiece==content+piece+21 + + + + 5 + 5 + 5 + 1 + 100% + contentPiece==content+piece+22 + + + + 60 + 60 + 35 + 12 + 58.33% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__CustomVariables.getCustomVariables_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__CustomVariables.getCustomVariables_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..6ee02592b75d96381959ebe371299dcd61942fc9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__CustomVariables.getCustomVariables_day.xml @@ -0,0 +1,53 @@ + + + + + 20 + + + page + 4 + + + customVariableName==liked + + + + 16 + 16 + + + + 4 + 4 + + + + + + 20 + + + page + 1 + + + customVariableName==name + + + + 1 + 1 + + + + 19 + 19 + + + + + + 60 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__CustomVariables.getCustomVariables_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__CustomVariables.getCustomVariables_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..8e46420d5f24e9a1328ade5b557a3e8afbc2f67b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__CustomVariables.getCustomVariables_month.xml @@ -0,0 +1,57 @@ + + + + + 60 + + + page + 4 + + + customVariableName==liked + + + + 48 + 48 + 15 + + + + 12 + 12 + 12 + + + + + + 60 + + + page + 1 + + + customVariableName==name + + + + 3 + 3 + 3 + + + + 57 + 57 + 57 + + + + + + 180 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__DevicesDetection.getBrowserVersions_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__DevicesDetection.getBrowserVersions_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..9628795a8df5972ad4d23125be36cdb0b0ecb699 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__DevicesDetection.getBrowserVersions_day.xml @@ -0,0 +1,41 @@ + + + + + 6 + 30 + 30 + 6 + 1 + 0 + 30 + 0 + browserCode==FF;browserVersion==6.0 + plugins/Morpheus/icons/dist/browsers/FF.png + + + + 4 + 20 + 20 + 4 + 1 + 0 + 20 + 0 + browserCode==CH;browserVersion==3.0 + plugins/Morpheus/icons/dist/browsers/CH.png + + + + 33 + 93 + 244 + 33 + 15 + 81 + 27 + 0 + plugins/Morpheus/icons/dist/browsers/UNK.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__DevicesDetection.getBrowserVersions_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__DevicesDetection.getBrowserVersions_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..8e85ab1e56efd337809c8ded0d1ba442348fa131 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__DevicesDetection.getBrowserVersions_month.xml @@ -0,0 +1,41 @@ + + + + + 60 + 60 + 2 + 25 + 45 + 0 + 12 + 12 + browserCode==FF;browserVersion==6.0 + plugins/Morpheus/icons/dist/browsers/FF.png + + + + 60 + 60 + 2 + 25 + 45 + 0 + 12 + 12 + browserCode==IE;browserVersion==9.0 + plugins/Morpheus/icons/dist/browsers/IE.png + + + + 298 + 499 + 15 + 161 + 162 + 0 + 94 + 94 + plugins/Morpheus/icons/dist/browsers/UNK.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__DevicesDetection.getOsVersions_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__DevicesDetection.getOsVersions_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..55d60b51e95638691d798b6927d7dea46e50b0c6 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__DevicesDetection.getOsVersions_day.xml @@ -0,0 +1,41 @@ + + + + + 8 + 40 + 40 + 8 + 2 + 10 + 35 + 0 + operatingSystemCode==LIN;operatingSystemVersion== + plugins/Morpheus/icons/dist/os/LIN.png + + + + 5 + 25 + 30 + 5 + 2 + 20 + 10 + 0 + operatingSystemCode==AND;operatingSystemVersion==4.0 + plugins/Morpheus/icons/dist/os/AND.png + + + + 30 + 78 + 224 + 30 + 15 + 51 + 32 + 0 + plugins/Morpheus/icons/dist/os/UNK.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__DevicesDetection.getOsVersions_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__DevicesDetection.getOsVersions_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..3c9c5816fb4b4a180c4b65ed39f6714727256882 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__DevicesDetection.getOsVersions_month.xml @@ -0,0 +1,41 @@ + + + + + 100 + 120 + 2 + 55 + 60 + 0 + 20 + 20 + operatingSystemCode==LIN;operatingSystemVersion== + plugins/Morpheus/icons/dist/os/LIN.png + + + + 75 + 90 + 2 + 40 + 45 + 0 + 15 + 15 + operatingSystemCode==AND;operatingSystemVersion==4.0 + plugins/Morpheus/icons/dist/os/AND.png + + + + 243 + 409 + 15 + 116 + 147 + 0 + 83 + 83 + plugins/Morpheus/icons/dist/os/UNK.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Events.getAction_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Events.getAction_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..2e7988119b74e242bd7b221fada7468acc5c7888 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Events.getAction_day.xml @@ -0,0 +1,64 @@ + + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + eventAction==event+action+1 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + + + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + eventAction==event+action+2 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + + + + + + 3 + 15 + 15 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Events.getAction_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Events.getAction_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..9f8ec4c5e9c60b80741a85ed51538b9f8459f286 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Events.getAction_month.xml @@ -0,0 +1,86 @@ + + + + + 15 + 15 + 0 + 0 + + + 3 + 0 + eventAction==event+action+1 + + + + 5 + 5 + 0 + 0 + + + 1 + 0 + + + + 10 + 10 + 0 + 0 + + + 2 + 0 + + + + + + 10 + 10 + 0 + 0 + + + 2 + 0 + eventAction==event+action+0 + + + + 5 + 5 + 0 + 0 + + + 1 + 0 + + + + 5 + 5 + 0 + 0 + + + 1 + 0 + + + + + + 50 + 50 + 0 + 0 + + + 10 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Events.getCategory_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..cd4822f6156e2733a95456b4ebacaaf3124cb2ff --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Events.getCategory_day.xml @@ -0,0 +1,64 @@ + + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + eventCategory==event+category+0 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + + + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + eventCategory==event+category+1 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + + + + + + 3 + 15 + 15 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Events.getCategory_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Events.getCategory_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..0527d05ca62fa225d7d167d585a74c3e8910ae99 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Events.getCategory_month.xml @@ -0,0 +1,86 @@ + + + + + 15 + 15 + 0 + 0 + + + 3 + 0 + eventCategory==event+category+1 + + + + 5 + 5 + 0 + 0 + + + 1 + 0 + + + + 10 + 10 + 0 + 0 + + + 2 + 0 + + + + + + 10 + 10 + 0 + 0 + + + 2 + 0 + eventCategory==event+category+0 + + + + 5 + 5 + 0 + 0 + + + 1 + 0 + + + + 5 + 5 + 0 + 0 + + + 1 + 0 + + + + + + 50 + 50 + 0 + 0 + + + 10 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Events.getName_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Events.getName_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..2e9f6b6bcf002b44dd27571514a99ce743e75e29 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Events.getName_day.xml @@ -0,0 +1,64 @@ + + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + eventName==event+name0 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + + + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + eventName==event+name1 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + + + + + + 3 + 15 + 15 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Events.getName_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Events.getName_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..c0f7d9799377a500186b03ada6268e377775552a --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Events.getName_month.xml @@ -0,0 +1,86 @@ + + + + + 15 + 15 + 0 + 0 + + + 3 + 0 + eventName==event+name0 + + + + 5 + 5 + 0 + 0 + + + 1 + 0 + + + + 10 + 10 + 0 + 0 + + + 2 + 0 + + + + + + 15 + 15 + 0 + 0 + + + 3 + 0 + eventName==event+name1 + + + + 5 + 5 + 0 + 0 + + + 1 + 0 + + + + 10 + 10 + 0 + 0 + + + 2 + 0 + + + + + + 45 + 45 + 0 + 0 + + + 9 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Goals.getItemsCategory_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Goals.getItemsCategory_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..8688f0299167abe06de6bf1556a5271dce10ccc2 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Goals.getItemsCategory_day.xml @@ -0,0 +1,53 @@ + + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%230 + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%231 + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%232 + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%233 + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%234 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Goals.getItemsName_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Goals.getItemsName_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..bd2c7510d0efea45426fb0e1137d2a835f7ecc86 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Goals.getItemsName_day.xml @@ -0,0 +1,253 @@ + + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book0 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book1 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book2 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book3 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book4 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book5 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book6 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book7 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book8 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book9 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book10 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book11 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book12 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book13 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book14 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book15 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book16 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book17 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book18 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book19 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book20 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book21 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book22 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book23 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book24 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Goals.getItemsSku_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Goals.getItemsSku_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c12963aa01bb5917a8bb1c99a685d3ee32e48477 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Goals.getItemsSku_day.xml @@ -0,0 +1,253 @@ + + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book0 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book1 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book2 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book3 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book4 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book5 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book6 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book7 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book8 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book9 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book10 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book11 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book12 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book13 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book14 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book15 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book16 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book17 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book18 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book19 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book20 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book21 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book22 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book23 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book24 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getAll_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getAll_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..b260cab8d9f73820b9d8143833826512f2968854 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getAll_day.xml @@ -0,0 +1,66 @@ + + + + + 3 + 4 + 4 + 3 + 1 + 0 + 4 + 0 + referrerName==whatever0.com + 3 + + + + 3 + 3 + 3 + 3 + 1 + 0 + 3 + 0 + referrerType==search;referrerKeyword==this+search+term + 2 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerType==search;referrerKeyword==search+term+2 + 2 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerName==whatever1.com + 3 + + + + 9 + 9 + 9 + 9 + 2 + 0 + 9 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getAll_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getAll_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..c527515078f005f5a383fc8b229e9b8121f25ccb --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getAll_month.xml @@ -0,0 +1,66 @@ + + + + + 12 + 12 + 1 + 0 + 12 + 0 + 9 + 9 + referrerName==whatever0.com + 3 + + + + 9 + 9 + 1 + 0 + 9 + 0 + 9 + 9 + referrerType==search;referrerKeyword==this+search+term + 2 + + + + 6 + 6 + 1 + 0 + 6 + 0 + 6 + 6 + referrerType==search;referrerKeyword==search+term+2 + 2 + + + + 6 + 6 + 1 + 0 + 6 + 0 + 6 + 6 + referrerName==whatever1.com + 3 + + + + 27 + 27 + 2 + 0 + 27 + 0 + 27 + 27 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getKeywords_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getKeywords_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..2701dce9351fe1cf449a3d9c5c4aef74238f1055 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getKeywords_day.xml @@ -0,0 +1,86 @@ + + + + + 3 + 3 + 3 + 3 + 1 + 0 + 3 + 0 + referrerType==search;referrerKeyword==this+search+term + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + + + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerType==search;referrerKeyword==search+term+2 + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + + + 7 + 7 + 7 + 7 + 1 + 0 + 7 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getKeywords_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getKeywords_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..9fad17e57824f1f9d55470b69857c402d3561dbe --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getKeywords_month.xml @@ -0,0 +1,86 @@ + + + + + 9 + 9 + 1 + 0 + 9 + 0 + 9 + 9 + referrerType==search;referrerKeyword==this+search+term + + + + 3 + 3 + 1 + 0 + 3 + 0 + 3 + 3 + + + + 6 + 6 + 1 + 0 + 6 + 0 + 6 + 6 + + + + + + 6 + 6 + 1 + 0 + 6 + 0 + 6 + 6 + referrerType==search;referrerKeyword==search+term+2 + + + + 3 + 3 + 1 + 0 + 3 + 0 + 3 + 3 + + + + 3 + 3 + 1 + 0 + 3 + 0 + 3 + 3 + + + + + + 21 + 21 + 1 + 0 + 21 + 0 + 21 + 21 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getReferrerType_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getReferrerType_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..1778affc303836b13cd2175b5c81cb03a52800d1 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getReferrerType_day.xml @@ -0,0 +1,116 @@ + + + + + 43 + 123 + 274 + 43 + 15 + 81 + 57 + 0 + referrerType==direct + 1 + + + + 12 + 12 + 12 + 12 + 1 + 0 + 12 + 0 + referrerType==search + 2 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerType==search;referrerKeyword==search+term+2 + + + + 3 + 3 + 3 + 3 + 1 + 0 + 3 + 0 + referrerType==search;referrerKeyword==this+search+term + + + + 7 + 7 + 7 + 7 + 1 + 0 + 7 + 0 + + + + + + 7 + 8 + 8 + 7 + 1 + 0 + 8 + 0 + referrerType==website + 3 + + + + 3 + 4 + 4 + 3 + 1 + 0 + 4 + 0 + referrerName==whatever0.com + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerName==whatever1.com + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getReferrerType_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getReferrerType_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..ad83056aa7414c63c709f38cc59fe2afa55213d6 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getReferrerType_month.xml @@ -0,0 +1,116 @@ + + + + + 358 + 559 + 15 + 211 + 192 + 0 + 118 + 118 + referrerType==direct + 1 + + + + 36 + 36 + 1 + 0 + 36 + 0 + 36 + 36 + referrerType==search + 2 + + + + 6 + 6 + 1 + 0 + 6 + 0 + 6 + 6 + referrerType==search;referrerKeyword==search+term+2 + + + + 9 + 9 + 1 + 0 + 9 + 0 + 9 + 9 + referrerType==search;referrerKeyword==this+search+term + + + + 21 + 21 + 1 + 0 + 21 + 0 + 21 + 21 + + + + + + 24 + 24 + 1 + 0 + 24 + 0 + 21 + 21 + referrerType==website + 3 + + + + 12 + 12 + 1 + 0 + 12 + 0 + 9 + 9 + referrerName==whatever0.com + + + + 6 + 6 + 1 + 0 + 6 + 0 + 6 + 6 + referrerName==whatever1.com + + + + 6 + 6 + 1 + 0 + 6 + 0 + 6 + 6 + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getSearchEngines_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getSearchEngines_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..d89b5a581d61752ed4077b386c1f5bd325775d93 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getSearchEngines_day.xml @@ -0,0 +1,92 @@ + + + + + 3 + 3 + 3 + 3 + 1 + 0 + 3 + 0 + referrerType==search;referrerName==Google + http://google.com + plugins/Morpheus/icons/dist/searchEngines/google.com.png + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + + + + + + 3 + 3 + 3 + 3 + 1 + 0 + 3 + 0 + referrerType==search;referrerName==Yahoo%21 + http://search.yahoo.com + plugins/Morpheus/icons/dist/searchEngines/search.yahoo.com.png + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + + + + + + 6 + 6 + 6 + 6 + 1 + 0 + 6 + 0 + URL unknown! + plugins/Morpheus/icons/dist/searchEngines/xx.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getSearchEngines_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getSearchEngines_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..17ca0895c7fd1c9794114f91451aa47c47bf3686 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getSearchEngines_month.xml @@ -0,0 +1,92 @@ + + + + + 9 + 9 + 1 + 0 + 9 + 0 + 9 + 9 + referrerType==search;referrerName==Google + http://google.com + plugins/Morpheus/icons/dist/searchEngines/google.com.png + + + + 3 + 3 + 1 + 0 + 3 + 0 + 3 + 3 + + + + 6 + 6 + 1 + 0 + 6 + 0 + 6 + 6 + + + + + + 9 + 9 + 1 + 0 + 9 + 0 + 9 + 9 + referrerType==search;referrerName==Yahoo%21 + http://search.yahoo.com + plugins/Morpheus/icons/dist/searchEngines/search.yahoo.com.png + + + + 3 + 3 + 1 + 0 + 3 + 0 + 3 + 3 + + + + 6 + 6 + 1 + 0 + 6 + 0 + 6 + 6 + + + + + + 18 + 18 + 1 + 0 + 18 + 0 + 18 + 18 + URL unknown! + plugins/Morpheus/icons/dist/searchEngines/xx.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getWebsites_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getWebsites_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..e0fd222b3f6677028b4fd8973583b150b96c5e45 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getWebsites_day.xml @@ -0,0 +1,86 @@ + + + + + 3 + 4 + 4 + 3 + 1 + 0 + 4 + 0 + referrerName==whatever0.com + + + + 1 + 2 + 2 + 1 + 1 + 0 + 2 + 0 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + + + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerName==whatever1.com + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getWebsites_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getWebsites_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..5bc8433639c898bf7b7eda9c217cde3fbfc249c4 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Referrers.getWebsites_month.xml @@ -0,0 +1,86 @@ + + + + + 12 + 12 + 1 + 0 + 12 + 0 + 9 + 9 + referrerName==whatever0.com + + + + 6 + 6 + 1 + 0 + 6 + 0 + 3 + 3 + + + + 6 + 6 + 1 + 0 + 6 + 0 + 6 + 6 + + + + + + 6 + 6 + 1 + 0 + 6 + 0 + 6 + 6 + referrerName==whatever1.com + + + + 3 + 3 + 1 + 0 + 3 + 0 + 3 + 3 + + + + 3 + 3 + 1 + 0 + 3 + 0 + 3 + 3 + + + + + + 6 + 6 + 1 + 0 + 6 + 0 + 6 + 6 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getConfiguration_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getConfiguration_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..1c1b970450bc8b13dacd1d49fb6303fc8243001d --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getConfiguration_day.xml @@ -0,0 +1,36 @@ + + + + + 4 + 20 + 20 + 4 + 1 + 0 + 20 + 0 + + + + 17 + 17 + 143 + 17 + 15 + 16 + 1 + 0 + + + + 22 + 106 + 131 + 22 + 2 + 65 + 56 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getConfiguration_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getConfiguration_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..3c43c2ef60bb18d5c7e394f33f27779f370f0962 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getConfiguration_month.xml @@ -0,0 +1,36 @@ + + + + + 40 + 40 + 2 + 15 + 30 + 0 + 8 + 8 + + + + 25 + 25 + 1 + 0 + 25 + 0 + 25 + 25 + + + + 353 + 554 + 15 + 196 + 197 + 0 + 85 + 85 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getResolution_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getResolution_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..4b81cb50fd9b02644ef9b389005f5bf475343981 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getResolution_day.xml @@ -0,0 +1,38 @@ + + + + + 8 + 40 + 40 + 8 + 1 + 0 + 40 + 0 + resolution==1920x1080 + + + + 6 + 30 + 30 + 6 + 2 + 25 + 15 + 0 + resolution==1280x1024 + + + + 29 + 73 + 224 + 29 + 15 + 56 + 22 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getResolution_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getResolution_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..018fdf83d650e6a56f53b7d035acef3784252085 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getResolution_month.xml @@ -0,0 +1,38 @@ + + + + + 80 + 80 + 2 + 30 + 60 + 0 + 16 + 16 + resolution==1920x1080 + + + + 60 + 60 + 2 + 25 + 45 + 0 + 12 + 12 + resolution==1280x1024 + + + + 278 + 479 + 15 + 156 + 147 + 0 + 90 + 90 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getCity_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getCity_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..1df2cc56cf15bb2b597c805cd93a8d179d05efac --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getCity_day.xml @@ -0,0 +1,51 @@ + + + + + 7 + 35 + 35 + 7 + 2 + 20 + 25 + 0 + city==Toronto;regionCode==ON;countryCode==ca + Toronto + ON + ca + Canada + Ontario + plugins/Morpheus/icons/dist/flags/ca.png + + + + 6 + 30 + 40 + 6 + 2 + 20 + 15 + 0 + city==Melbourne;regionCode==VIC;countryCode==au + Melbourne + VIC + au + Australia + Victoria + plugins/Morpheus/icons/dist/flags/au.png + + + + 30 + 78 + 219 + 30 + 15 + 41 + 37 + 0 + plugins/Morpheus/icons/dist/flags/xx.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getCity_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getCity_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..e36e90c3937b6aba25ae9fd198be58acd0b674ff --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getCity_month.xml @@ -0,0 +1,51 @@ + + + + + 105 + 105 + 2 + 60 + 75 + 0 + 21 + 21 + city==Toronto;regionCode==ON;countryCode==ca + Toronto + ON + ca + Canada + Ontario + plugins/Morpheus/icons/dist/flags/ca.png + + + + 96 + 126 + 2 + 60 + 51 + 0 + 24 + 24 + city==Melbourne;regionCode==VIC;countryCode==au + Melbourne + VIC + au + Australia + Victoria + plugins/Morpheus/icons/dist/flags/au.png + + + + 217 + 388 + 15 + 91 + 126 + 0 + 73 + 73 + plugins/Morpheus/icons/dist/flags/xx.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getRegion_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getRegion_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..b0b962bad2c1fcec5abed878029f4ce7560e1efc --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getRegion_day.xml @@ -0,0 +1,49 @@ + + + + + 7 + 35 + 35 + 7 + 2 + 20 + 25 + 0 + regionCode==ON;countryCode==ca + ON + ca + Canada + Ontario + plugins/Morpheus/icons/dist/flags/ca.png + + + + 6 + 30 + 35 + 6 + 2 + 10 + 20 + 0 + regionCode==14;countryCode==jp + 14 + jp + Japan + Kanagawa + plugins/Morpheus/icons/dist/flags/jp.png + + + + 30 + 78 + 224 + 30 + 15 + 51 + 32 + 0 + plugins/Morpheus/icons/dist/flags/xx.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getRegion_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getRegion_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..5378b18b205bd2727f8b7d7ed400bd2b19cda8e1 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getRegion_month.xml @@ -0,0 +1,49 @@ + + + + + 105 + 105 + 2 + 60 + 75 + 0 + 21 + 21 + regionCode==ON;countryCode==ca + ON + ca + Canada + Ontario + plugins/Morpheus/icons/dist/flags/ca.png + + + + 96 + 111 + 2 + 30 + 66 + 0 + 24 + 24 + regionCode==14;countryCode==jp + 14 + jp + Japan + Kanagawa + plugins/Morpheus/icons/dist/flags/jp.png + + + + 217 + 403 + 15 + 121 + 111 + 0 + 73 + 73 + plugins/Morpheus/icons/dist/flags/xx.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__UserId.getUsers_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__UserId.getUsers_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..40cd1b2b4670bc16ad4f982fd58890d77fe5dc7d --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__UserId.getUsers_day.xml @@ -0,0 +1,40 @@ + + + + + 1 + 5 + 5 + 1 + 1 + 0 + 5 + 0 + + userId==user0 + + + + 1 + 5 + 5 + 1 + 1 + 0 + 5 + 0 + + userId==user1 + + + + 41 + 133 + 284 + 41 + 15 + 81 + 67 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__UserId.getUsers_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting__UserId.getUsers_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..9738463b3536233ddc177ec041958596f56cd066 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting__UserId.getUsers_month.xml @@ -0,0 +1,40 @@ + + + + + 5 + 5 + 1 + 0 + 5 + 0 + 1 + 1 + + userId==user0 + + + + 5 + 5 + 1 + 0 + 5 + 0 + 1 + 1 + + userId==user1 + + + + 408 + 609 + 15 + 211 + 242 + 0 + 116 + 116 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst__Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst__Actions.getPageTitles_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..31695fa6591652bff39abfabd69bcfb67b5f26c2 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst__Actions.getPageTitles_day.xml @@ -0,0 +1,85 @@ + + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 13% + pageTitle==title_8%2B%252F%2Btitle_32 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 13% + pageTitle==title_8%2B%252F%2Btitle_33 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 2 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0% + 13% + pageTitle==title_8%2B%252F%2Btitle_34 + + + + 145 + 145 + 0 + 0 + 0 + + + 42 + 167 + 15 + 27 + 40 + 0 + 0 + 0 + 64% + 28% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst__Actions.getPageTitles_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst__Actions.getPageTitles_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..ca821d13066c9cee34ae2ef7911e114cc3107341 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst__Actions.getPageTitles_month.xml @@ -0,0 +1,88 @@ + + + + + 25 + 25 + 0 + 0 + 0 + + + 25 + 25 + 0 + 25 + 25 + 25 + 25 + 25 + 0 + 0 + 0 + 100% + 100% + pageTitle==bought%2Bbook + + + + 8 + 8 + 0 + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + 0% + 13% + pageTitle==title_8%2B%252F%2Btitle_32 + + + + 8 + 8 + 0 + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + 0% + 13% + pageTitle==title_8%2B%252F%2Btitle_33 + + + + 203 + 203 + 0 + 0 + 0 + + + 93 + 219 + 16 + 77 + 91 + 14 + 7 + 7 + 0 + 0 + 0 + 83% + 45% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst__Actions.getPageUrls_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..948fa00136d7e1f506d3bdcb1ee7f38fad8da6fe --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst__Actions.getPageUrls_day.xml @@ -0,0 +1,105 @@ + + + + + 24 + 24 + 0 + 0 + 0 + + + 3 + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0% + 13% + pageUrl=^http%253A%252F%252Fpiwik.net%252F8 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0% + 13% + http://piwik.net/8/32 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F32 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0% + 13% + http://piwik.net/8/33 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F33 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 2 + 1 + 0 + 1 + 1 + 0 + 0% + 13% + http://piwik.net/8/34 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F34 + + + + + + 145 + 145 + 0 + 0 + 0 + + + 42 + 167 + 15 + 27 + 40 + 0 + 0 + 0 + 64% + 28% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst__Actions.getPageUrls_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst__Actions.getPageUrls_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..39bc02bb0385d5bb0db8e05e88bb6a67e89f44f7 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst__Actions.getPageUrls_month.xml @@ -0,0 +1,106 @@ + + + + + 25 + 25 + 0 + 0 + 0 + + + 25 + 25 + 0 + 25 + 25 + 25 + 25 + 25 + 0 + 0 + 0 + 100% + 100% + http://example.com/piwik/ + pageUrl==http%253A%252F%252Flocalhost%252F + + + + 16 + 16 + 0 + 0 + 0 + + + 2 + 0 + 0 + 0 + 0% + 13% + pageUrl=^http%253A%252F%252Fpiwik.net%252F8 + + + + 8 + 8 + 0 + 0 + 0 + + + 1 + 8 + 1 + 0 + 0% + 13% + http://piwik.net/8/32 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F32 + + + + 8 + 8 + 0 + 0 + 0 + + + 1 + 8 + 1 + 0 + 0% + 13% + http://piwik.net/8/33 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F33 + + + + + + 203 + 203 + 0 + 0 + 0 + + + 93 + 219 + 16 + 77 + 91 + 14 + 7 + 7 + 0 + 0 + 0 + 83% + 45% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst_flattened__Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst_flattened__Actions.getPageTitles_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..b0d35111e132aa5e0443afc67275636d8a5d544d --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst_flattened__Actions.getPageTitles_day.xml @@ -0,0 +1,90 @@ + + + + + 145 + 145 + 0 + 0 + 0 + + + 42 + 167 + 15 + 27 + 40 + 0 + 0 + 0 + 64% + 28% + 1 + Others + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 13% + title_8 / title_32 + pageTitle==title_8%2B%252F%2Btitle_32 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 13% + title_8 / title_33 + pageTitle==title_8%2B%252F%2Btitle_33 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 2 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0% + 13% + title_8 / title_34 + pageTitle==title_8%2B%252F%2Btitle_34 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst_flattened__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst_flattened__Actions.getPageUrls_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..6659af03fda6f93e50044519510c669bcce4e286 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst_flattened__Actions.getPageUrls_day.xml @@ -0,0 +1,93 @@ + + + + + 145 + 145 + 0 + 0 + 0 + + + 42 + 167 + 15 + 27 + 40 + 0 + 0 + 0 + 64% + 28% + 1 + Others + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 13% + http://piwik.net/8/32 + /8/32 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F32 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 13% + http://piwik.net/8/33 + /8/33 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F33 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 2 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0% + 13% + http://piwik.net/8/34 + /8/34 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F34 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst_rankingQuery__Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst_rankingQuery__Actions.getPageTitles_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..5135253c32adfbc6e9836ca9806c43ea2c87281c --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst_rankingQuery__Actions.getPageTitles_day.xml @@ -0,0 +1,74 @@ + + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0% + 0% + pageTitle==title_8%2B%252F%2Btitle_32 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0% + 0% + pageTitle==title_8%2B%252F%2Btitle_33 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0% + 0% + pageTitle==title_8%2B%252F%2Btitle_34 + + + + 145 + 145 + 0 + 0 + 0 + + + 36 + 108 + 12 + 24 + 37 + 0 + 0 + 0 + 67% + 26% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst_rankingQuery__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst_rankingQuery__Actions.getPageUrls_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..b31a801204a0ea116bcf9f5ca2ab8b682b316afc --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flatFirst_rankingQuery__Actions.getPageUrls_day.xml @@ -0,0 +1,89 @@ + + + + + 24 + 24 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0% + 0% + pageUrl=^http%253A%252F%252Fpiwik.net%252F8 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 0 + 0% + 0% + http://piwik.net/8/32 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F32 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 0 + 0% + 0% + http://piwik.net/8/33 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F33 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 0 + 0% + 0% + http://piwik.net/8/34 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F34 + + + + + + 145 + 145 + 0 + 0 + 0 + + + 36 + 108 + 12 + 24 + 37 + 0 + 0 + 0 + 67% + 26% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getDownloads_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getDownloads_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..0641eb934a78bb1f4e282b474770bdbda42bac6b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getDownloads_day.xml @@ -0,0 +1,100 @@ + + + + + 10 + 10 + 0 + 0 + 0 + + + 0 + 1 + Others + + + + 4 + 4 + 0 + 0 + 0 + + + 0 + cloudsite5.com/ - Others + 1 + + + + 4 + 4 + 0 + 0 + 0 + + + 0 + cloudsite6.com/ - Others + 1 + + + + 4 + 4 + 0 + 0 + 0 + + + 0 + cloudsite7.com/ - Others + 1 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 0 + http://cloudsite5.com/20/download + cloudsite5.com/20/download + downloadUrl==http%253A%252F%252Fcloudsite5.com%252F20%252Fdownload + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 0 + http://cloudsite6.com/24/download + cloudsite6.com/24/download + downloadUrl==http%253A%252F%252Fcloudsite6.com%252F24%252Fdownload + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 0 + http://cloudsite7.com/28/download + cloudsite7.com/28/download + downloadUrl==http%253A%252F%252Fcloudsite7.com%252F28%252Fdownload + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getOutlinks_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getOutlinks_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..332b5cfe234baeb7102e819f4eb135217140f5c8 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getOutlinks_day.xml @@ -0,0 +1,100 @@ + + + + + 10 + 10 + 0 + 0 + 0 + + + 0 + 1 + Others + + + + 4 + 4 + 0 + 0 + 0 + + + 0 + othersite10.com/ - Others + 1 + + + + 4 + 4 + 0 + 0 + 0 + + + 0 + othersite11.com/ - Others + 1 + + + + 4 + 4 + 0 + 0 + 0 + + + 0 + othersite12.com/ - Others + 1 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 0 + http://othersite10.com/ + othersite10.com/ + outlinkUrl==http%253A%252F%252Fothersite10.com%252F + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 0 + http://othersite11.com/ + othersite11.com/ + outlinkUrl==http%253A%252F%252Fothersite11.com%252F + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 0 + http://othersite12.com/ + othersite12.com/ + outlinkUrl==http%253A%252F%252Fothersite12.com%252F + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getPageTitles_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..b0d35111e132aa5e0443afc67275636d8a5d544d --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getPageTitles_day.xml @@ -0,0 +1,90 @@ + + + + + 145 + 145 + 0 + 0 + 0 + + + 42 + 167 + 15 + 27 + 40 + 0 + 0 + 0 + 64% + 28% + 1 + Others + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 13% + title_8 / title_32 + pageTitle==title_8%2B%252F%2Btitle_32 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 13% + title_8 / title_33 + pageTitle==title_8%2B%252F%2Btitle_33 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 2 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0% + 13% + title_8 / title_34 + pageTitle==title_8%2B%252F%2Btitle_34 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getPageUrls_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..72c790bad5489288fd9db574c5129c26960281dc --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getPageUrls_day.xml @@ -0,0 +1,155 @@ + + + + + 85 + 85 + 0 + 0 + 0 + + + 37 + 138 + 11 + 26 + 30 + 0 + 0 + 0 + 70% + 35% + 1 + Others + + + + 24 + 24 + 0 + 0 + 0 + + + 2 + 3 + 1 + 1 + 10 + 0 + 0 + 0 + 50% + 42% + pageUrl=^http%253A%252F%252Fpiwik.net%252F8 + /8/ - Others + 1 + + + + 21 + 21 + 0 + 0 + 0 + + + 2 + 10 + 2 + 0 + 0 + 0 + 0 + 0% + 0% + pageUrl=^http%253A%252F%252Fpiwik.net%252F7 + /7/ - Others + 1 + + + + 18 + 18 + 0 + 0 + 0 + + + 2 + 18 + 2 + 0 + 0 + 0 + 0 + 0% + 0% + pageUrl=^http%253A%252F%252Fpiwik.net%252F6 + /6/ - Others + 1 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 13% + http://piwik.net/8/32 + /8/32 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F32 + + + + 7 + 7 + 7 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 14% + http://piwik.net/7/28 + /7/28 + pageUrl==http%253A%252F%252Fpiwik.net%252F7%252F28 + + + + 6 + 6 + 6 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0 + 0% + 17% + http://piwik.net/6/24 + /6/24 + pageUrl==http%253A%252F%252Fpiwik.net%252F6%252F24 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getSiteSearchKeywords_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getSiteSearchKeywords_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..794dc442aa822f46f2b5fe30f265f1a7e539add2 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getSiteSearchKeywords_day.xml @@ -0,0 +1,93 @@ + + + + + 37 + 37 + 0 + 0 + 0 + + + 37 + 1 + 0 + 0 + 0% + 100% + 1 + Others + + + + 10 + 10 + 0 + 0 + 0 + + + 10 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword + keyword + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword20 + keyword20 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword21 + keyword21 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword22 + keyword22 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Contents.getContentNames_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Contents.getContentNames_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..375d3ca3cf5f431d7bca9b4ee75559e1c6db8033 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Contents.getContentNames_day.xml @@ -0,0 +1,43 @@ + + + + + 2 + 10 + 10 + 5 + 50% + 1 + Others + + + + 1 + 5 + 5 + 5 + 100% + content name 20 - content piece 20 + contentName==content+name+20 + + + + 1 + 5 + 5 + 0 + 0% + content name 21 - content piece 21 + contentName==content+name+21 + + + + 1 + 5 + 5 + 5 + 100% + content name 22 - content piece 22 + contentName==content+name+22 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Contents.getContentPieces_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Contents.getContentPieces_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..e59bf19f2354a0a61ad7e8e30e2b5b67ccf2f317 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Contents.getContentPieces_day.xml @@ -0,0 +1,43 @@ + + + + + 2 + 10 + 10 + 5 + 50% + 1 + Others + + + + 1 + 5 + 5 + 5 + 100% + content piece 20 - content name 20 + contentPiece==content+piece+20 + + + + 1 + 5 + 5 + 0 + 0% + content piece 21 - content name 21 + contentPiece==content+piece+21 + + + + 1 + 5 + 5 + 5 + 100% + content piece 22 - content name 22 + contentPiece==content+piece+22 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__CustomVariables.getCustomVariables_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__CustomVariables.getCustomVariables_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..57b60302f4bcd17773d0ee640149e2b1dc8579cf --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__CustomVariables.getCustomVariables_day.xml @@ -0,0 +1,63 @@ + + + + + 60 + 1 + Others + + + + 19 + 19 + + + page + 1 + + + name + 1 + Others + + + + 16 + 16 + + + page + 4 + + + liked + y + + + + 4 + 4 + + + page + 4 + + + liked + 1 + Others + + + + 1 + 1 + + + page + 1 + + + name + thing0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__DevicesDetection.getBrowserVersions_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__DevicesDetection.getBrowserVersions_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..05f2afb845154f7dc6de80414c60730520750cb5 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__DevicesDetection.getBrowserVersions_day.xml @@ -0,0 +1,45 @@ + + + + + 33 + 93 + 244 + 33 + 15 + 81 + 27 + 0 + plugins/Morpheus/icons/dist/browsers/UNK.png + 1 + Others + + + + 6 + 30 + 30 + 6 + 1 + 0 + 30 + 0 + browserCode==FF;browserVersion==6.0 + plugins/Morpheus/icons/dist/browsers/FF.png + Firefox 6.0 + + + + 4 + 20 + 20 + 4 + 1 + 0 + 20 + 0 + browserCode==CH;browserVersion==3.0 + plugins/Morpheus/icons/dist/browsers/CH.png + Chrome 3.0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__DevicesDetection.getOsVersions_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__DevicesDetection.getOsVersions_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..108179bd9f0100b1b8f092da45ab5959cedd1422 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__DevicesDetection.getOsVersions_day.xml @@ -0,0 +1,45 @@ + + + + + 30 + 78 + 224 + 30 + 15 + 51 + 32 + 0 + plugins/Morpheus/icons/dist/os/UNK.png + 1 + Others + + + + 8 + 40 + 40 + 8 + 2 + 10 + 35 + 0 + operatingSystemCode==LIN;operatingSystemVersion== + plugins/Morpheus/icons/dist/os/LIN.png + GNU/Linux + + + + 5 + 25 + 30 + 5 + 2 + 20 + 10 + 0 + operatingSystemCode==AND;operatingSystemVersion==4.0 + plugins/Morpheus/icons/dist/os/AND.png + Android 4.0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Events.getAction_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Events.getAction_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..14bc9366099273678b0daacdad8b9e6eaa1eb060 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Events.getAction_day.xml @@ -0,0 +1,42 @@ + + + + + 3 + 15 + 15 + 0 + 0 + + + 0 + 1 + Others + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + event action 1 + event name0 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + event action 2 + event name1 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Events.getCategory_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..e3279b2e651226a4e12dc44e4a07941eb92cfb5c --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Events.getCategory_day.xml @@ -0,0 +1,42 @@ + + + + + 3 + 15 + 15 + 0 + 0 + + + 0 + 1 + Others + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + event category 0 + event action 4 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + event category 1 + event action 5 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Events.getName_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Events.getName_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c581277d6b91711fb66f628b09f2b8a913f5b6c2 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Events.getName_day.xml @@ -0,0 +1,42 @@ + + + + + 3 + 15 + 15 + 0 + 0 + + + 0 + 1 + Others + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + event name0 + event action 1 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + event name1 + event action 2 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsCategory_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsCategory_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..b5aa849c884bf39e6bd0009a59fa6cdf12cdbb95 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsCategory_day.xml @@ -0,0 +1,58 @@ + + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%230 + Books Cat #0 + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%231 + Books Cat #1 + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%232 + Books Cat #2 + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%233 + Books Cat #3 + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%234 + Books Cat #4 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsName_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsName_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..4f7f2cb02400a1259dbfaa17edd5603f14af220f --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsName_day.xml @@ -0,0 +1,278 @@ + + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book0 + Book0 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book1 + Book1 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book2 + Book2 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book3 + Book3 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book4 + Book4 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book5 + Book5 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book6 + Book6 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book7 + Book7 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book8 + Book8 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book9 + Book9 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book10 + Book10 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book11 + Book11 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book12 + Book12 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book13 + Book13 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book14 + Book14 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book15 + Book15 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book16 + Book16 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book17 + Book17 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book18 + Book18 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book19 + Book19 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book20 + Book20 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book21 + Book21 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book22 + Book22 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book23 + Book23 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book24 + Book24 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsSku_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsSku_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..b27ae39dcfa7e47e0bf7f808de2a5ebda7a7aae1 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsSku_day.xml @@ -0,0 +1,278 @@ + + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book0 + id_book0 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book1 + id_book1 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book2 + id_book2 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book3 + id_book3 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book4 + id_book4 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book5 + id_book5 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book6 + id_book6 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book7 + id_book7 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book8 + id_book8 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book9 + id_book9 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book10 + id_book10 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book11 + id_book11 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book12 + id_book12 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book13 + id_book13 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book14 + id_book14 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book15 + id_book15 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book16 + id_book16 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book17 + id_book17 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book18 + id_book18 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book19 + id_book19 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book20 + id_book20 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book21 + id_book21 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book22 + id_book22 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book23 + id_book23 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book24 + id_book24 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getAll_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getAll_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..aafe22fa2d14fc025639832034115bb1993a4ffd --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getAll_day.xml @@ -0,0 +1,72 @@ + + + + + 9 + 9 + 9 + 9 + 2 + 0 + 9 + 0 + 1 + Others + + + + 3 + 4 + 4 + 3 + 1 + 0 + 4 + 0 + referrerName==whatever0.com + 3 + whatever0.com + + + + 3 + 3 + 3 + 3 + 1 + 0 + 3 + 0 + referrerType==search;referrerKeyword==this+search+term + 2 + this search term + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerType==search;referrerKeyword==search+term+2 + 2 + search term 2 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerName==whatever1.com + 3 + whatever1.com + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getKeywords_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getKeywords_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..1b9490979f039ff4eda3c081f33fa4a4d991c6e9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getKeywords_day.xml @@ -0,0 +1,76 @@ + + + + + 7 + 7 + 7 + 7 + 1 + 0 + 7 + 0 + 1 + Others + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + plugins/Morpheus/icons/dist/searchEngines/xx.png + this search term + 1 + Others + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + http://alexa.com/search?q=search+term+2 + plugins/Morpheus/icons/dist/searchEngines/alexa.com.png + search term 2 + Alexa + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + http://search.babylon.com/?q=search+term+2 + plugins/Morpheus/icons/dist/searchEngines/search.babylon.com.png + search term 2 + Babylon + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + http://ask.com/web?q=this+search+term + plugins/Morpheus/icons/dist/searchEngines/ask.com.png + this search term + Ask + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getReferrerType_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getReferrerType_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..4a42a974a432433dcb72fae910162c309bf0605a --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getReferrerType_day.xml @@ -0,0 +1,42 @@ + + + + + 43 + 123 + 274 + 43 + 15 + 81 + 57 + 0 + referrerType==direct + 1 + + + + 12 + 12 + 12 + 12 + 1 + 0 + 12 + 0 + referrerType==search + 2 + + + + 7 + 8 + 8 + 7 + 1 + 0 + 8 + 0 + referrerType==website + 3 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getSearchEngines_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getSearchEngines_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..99f2cd2bff2637a28a8862c79fe212eb3833cc8d --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getSearchEngines_day.xml @@ -0,0 +1,77 @@ + + + + + 6 + 6 + 6 + 6 + 1 + 0 + 6 + 0 + plugins/Morpheus/icons/dist/searchEngines/xx.png + 1 + Others + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + plugins/Morpheus/icons/dist/searchEngines/google.com.png + Google + 1 + Others + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + plugins/Morpheus/icons/dist/searchEngines/search.yahoo.com.png + Yahoo! + 1 + Others + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + http://google.com/search?q=search+term+3 + plugins/Morpheus/icons/dist/searchEngines/google.com.png + Google + search term 3 + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + http://search.yahoo.com/search?p=search+term+4 + plugins/Morpheus/icons/dist/searchEngines/search.yahoo.com.png + Yahoo! + search term 4 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getWebsites_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getWebsites_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..ab153c3ec6c599a4e6b3b2265c00456f14930e3e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getWebsites_day.xml @@ -0,0 +1,72 @@ + + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + 1 + Others + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + whatever0.com + 1 + Others + + + + 1 + 2 + 2 + 1 + 1 + 0 + 2 + 0 + http://whatever0.com/0 + whatever0.com + index + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + http://whatever1.com/2 + whatever1.com + 2 + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + http://whatever1.com/0 + whatever1.com + index + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Resolution.getConfiguration_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Resolution.getConfiguration_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..0adfa0209024eecc319b61242afbb0b88243f09e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Resolution.getConfiguration_day.xml @@ -0,0 +1,40 @@ + + + + + 22 + 106 + 131 + 22 + 2 + 65 + 56 + 0 + 1 + Others + + + + 4 + 20 + 20 + 4 + 1 + 0 + 20 + 0 + GNU/Linux / Firefox / 1920x1080 + + + + 17 + 17 + 143 + 17 + 15 + 16 + 1 + 0 + Unknown / Unknown / 1024x768 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Resolution.getResolution_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Resolution.getResolution_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..4cfd933048d33ac8527bfe0a5272f394b7007339 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Resolution.getResolution_day.xml @@ -0,0 +1,42 @@ + + + + + 29 + 73 + 224 + 29 + 15 + 56 + 22 + 0 + 1 + Others + + + + 8 + 40 + 40 + 8 + 1 + 0 + 40 + 0 + 1920x1080 + resolution==1920x1080 + + + + 6 + 30 + 30 + 6 + 2 + 25 + 15 + 0 + 1280x1024 + resolution==1280x1024 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getCity_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getCity_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..367e9606dce6f1c43a50b65bb22d813f9e53f109 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getCity_day.xml @@ -0,0 +1,55 @@ + + + + + 30 + 78 + 219 + 30 + 15 + 41 + 37 + 0 + plugins/Morpheus/icons/dist/flags/xx.png + 1 + Others + + + + 7 + 35 + 35 + 7 + 2 + 20 + 25 + 0 + city==Toronto;regionCode==ON;countryCode==ca + Toronto + ON + ca + Canada + Ontario + plugins/Morpheus/icons/dist/flags/ca.png + Toronto, Ontario, Canada + + + + 6 + 30 + 40 + 6 + 2 + 20 + 15 + 0 + city==Melbourne;regionCode==VIC;countryCode==au + Melbourne + VIC + au + Australia + Victoria + plugins/Morpheus/icons/dist/flags/au.png + Melbourne, Victoria, Australia + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getRegion_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getRegion_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..62c6182d0f604e910d2450c22dd53d88cdab9b48 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getRegion_day.xml @@ -0,0 +1,53 @@ + + + + + 30 + 78 + 224 + 30 + 15 + 51 + 32 + 0 + plugins/Morpheus/icons/dist/flags/xx.png + 1 + Others + + + + 7 + 35 + 35 + 7 + 2 + 20 + 25 + 0 + regionCode==ON;countryCode==ca + ON + ca + Canada + Ontario + plugins/Morpheus/icons/dist/flags/ca.png + Ontario, Canada + + + + 6 + 30 + 35 + 6 + 2 + 10 + 20 + 0 + regionCode==14;countryCode==jp + 14 + jp + Japan + Kanagawa + plugins/Morpheus/icons/dist/flags/jp.png + Kanagawa, Japan + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserId.getUsers_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserId.getUsers_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..40cd1b2b4670bc16ad4f982fd58890d77fe5dc7d --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserId.getUsers_day.xml @@ -0,0 +1,40 @@ + + + + + 1 + 5 + 5 + 1 + 1 + 0 + 5 + 0 + + userId==user0 + + + + 1 + 5 + 5 + 1 + 1 + 0 + 5 + 0 + + userId==user1 + + + + 41 + 133 + 284 + 41 + 15 + 81 + 67 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rangeFlat_rankingQueryDisabled__Actions.getDownloads_range.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rangeFlat_rankingQueryDisabled__Actions.getDownloads_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..ea9493230f358a0ebc0329841e3c5f1719cf43da --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rangeFlat_rankingQueryDisabled__Actions.getDownloads_range.xml @@ -0,0 +1,378 @@ + + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite5.com/20/download + cloudsite5.com/20/download + downloadUrl==http%253A%252F%252Fcloudsite5.com%252F20%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite5.com/21/download + cloudsite5.com/21/download + downloadUrl==http%253A%252F%252Fcloudsite5.com%252F21%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite5.com/22/download + cloudsite5.com/22/download + downloadUrl==http%253A%252F%252Fcloudsite5.com%252F22%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite5.com/23/download + cloudsite5.com/23/download + downloadUrl==http%253A%252F%252Fcloudsite5.com%252F23%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite5.com/download + cloudsite5.com/download + downloadUrl==http%253A%252F%252Fcloudsite5.com%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite6.com/24/download + cloudsite6.com/24/download + downloadUrl==http%253A%252F%252Fcloudsite6.com%252F24%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite6.com/25/download + cloudsite6.com/25/download + downloadUrl==http%253A%252F%252Fcloudsite6.com%252F25%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite6.com/26/download + cloudsite6.com/26/download + downloadUrl==http%253A%252F%252Fcloudsite6.com%252F26%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite6.com/27/download + cloudsite6.com/27/download + downloadUrl==http%253A%252F%252Fcloudsite6.com%252F27%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite6.com/download + cloudsite6.com/download + downloadUrl==http%253A%252F%252Fcloudsite6.com%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite7.com/28/download + cloudsite7.com/28/download + downloadUrl==http%253A%252F%252Fcloudsite7.com%252F28%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite7.com/29/download + cloudsite7.com/29/download + downloadUrl==http%253A%252F%252Fcloudsite7.com%252F29%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite7.com/30/download + cloudsite7.com/30/download + downloadUrl==http%253A%252F%252Fcloudsite7.com%252F30%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite7.com/31/download + cloudsite7.com/31/download + downloadUrl==http%253A%252F%252Fcloudsite7.com%252F31%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite7.com/download + cloudsite7.com/download + downloadUrl==http%253A%252F%252Fcloudsite7.com%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite8.com/32/download + cloudsite8.com/32/download + downloadUrl==http%253A%252F%252Fcloudsite8.com%252F32%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite8.com/33/download + cloudsite8.com/33/download + downloadUrl==http%253A%252F%252Fcloudsite8.com%252F33%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite8.com/34/download + cloudsite8.com/34/download + downloadUrl==http%253A%252F%252Fcloudsite8.com%252F34%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite8.com/35/download + cloudsite8.com/35/download + downloadUrl==http%253A%252F%252Fcloudsite8.com%252F35%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite8.com/download + cloudsite8.com/download + downloadUrl==http%253A%252F%252Fcloudsite8.com%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite9.com/36/download + cloudsite9.com/36/download + downloadUrl==http%253A%252F%252Fcloudsite9.com%252F36%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite9.com/37/download + cloudsite9.com/37/download + downloadUrl==http%253A%252F%252Fcloudsite9.com%252F37%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite9.com/38/download + cloudsite9.com/38/download + downloadUrl==http%253A%252F%252Fcloudsite9.com%252F38%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite9.com/39/download + cloudsite9.com/39/download + downloadUrl==http%253A%252F%252Fcloudsite9.com%252F39%252Fdownload + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 0 + http://cloudsite9.com/download + cloudsite9.com/download + downloadUrl==http%253A%252F%252Fcloudsite9.com%252Fdownload + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQueryDisabled__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQueryDisabled__Actions.getPageUrls_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..0ea453a5df3acf186fbc5628ddb5329a65137df5 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQueryDisabled__Actions.getPageUrls_day.xml @@ -0,0 +1,1095 @@ + + + + + 32 + 32 + 0 + 0 + 0 + + + 11 + 2 + 3 + 1 + 1 + 0 + 0 + 0 + 50% + 34% + pageUrl=^http%253A%252F%252Fpiwik.net%252F8 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0% + 13% + http://piwik.net/8/32 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F32 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0% + 13% + http://piwik.net/8/33 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F33 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 2 + 1 + 0 + 1 + 1 + 0 + 0% + 13% + http://piwik.net/8/34 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F34 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 8 + 8 + 0 + 100% + 100% + http://piwik.net/8/35 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F35 + + + + + + 28 + 28 + 0 + 0 + 0 + + + 1 + 2 + 10 + 2 + 0 + 0 + 0 + 0 + 0% + 4% + pageUrl=^http%253A%252F%252Fpiwik.net%252F7 + + + + 7 + 7 + 7 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0% + 14% + http://piwik.net/7/28 + pageUrl==http%253A%252F%252Fpiwik.net%252F7%252F28 + + + + 7 + 7 + 7 + 0 + 0 + 0 + + + 0 + 0% + 0% + http://piwik.net/7/29 + pageUrl==http%253A%252F%252Fpiwik.net%252F7%252F29 + + + + 7 + 7 + 7 + 0 + 0 + 0 + + + 1 + 1 + 6 + 1 + 0 + 0 + 0% + 0% + http://piwik.net/7/30 + pageUrl==http%253A%252F%252Fpiwik.net%252F7%252F30 + + + + 7 + 7 + 7 + 0 + 0 + 0 + + + 1 + 1 + 4 + 1 + 0 + 0 + 0% + 0% + http://piwik.net/7/31 + pageUrl==http%253A%252F%252Fpiwik.net%252F7%252F31 + + + + + + 24 + 24 + 0 + 0 + 0 + + + 1 + 2 + 18 + 2 + 0 + 0 + 0 + 0 + 0% + 4% + pageUrl=^http%253A%252F%252Fpiwik.net%252F6 + + + + 6 + 6 + 6 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0% + 17% + http://piwik.net/6/24 + pageUrl==http%253A%252F%252Fpiwik.net%252F6%252F24 + + + + 6 + 6 + 6 + 0 + 0 + 0 + + + 0 + 0% + 0% + http://piwik.net/6/25 + pageUrl==http%253A%252F%252Fpiwik.net%252F6%252F25 + + + + 6 + 6 + 6 + 0 + 0 + 0 + + + 1 + 1 + 10 + 1 + 0 + 0 + 0% + 0% + http://piwik.net/6/26 + pageUrl==http%253A%252F%252Fpiwik.net%252F6%252F26 + + + + 6 + 6 + 6 + 0 + 0 + 0 + + + 1 + 1 + 8 + 1 + 0 + 0 + 0% + 0% + http://piwik.net/6/27 + pageUrl==http%253A%252F%252Fpiwik.net%252F6%252F27 + + + + + + 21 + 21 + 0 + 0 + 0 + + + 7 + 35 + 2 + 5 + 6 + 0 + 0 + 0 + 71% + 29% + pageUrl=^http%253A%252F%252Fpiwik.net%252F4 + + + + 5 + 5 + 5 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 2 + 2 + 0 + 100% + 40% + http://piwik.net/4/16 + pageUrl==http%253A%252F%252Fpiwik.net%252F4%252F16 + + + + 5 + 5 + 5 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 100% + 20% + http://piwik.net/4/17 + pageUrl==http%253A%252F%252Fpiwik.net%252F4%252F17 + + + + 5 + 5 + 5 + 0 + 0 + 0 + + + 2 + 2 + 16 + 1 + 1 + 1 + 1 + 0 + 50% + 20% + http://piwik.net/4/18 + pageUrl==http%253A%252F%252Fpiwik.net%252F4%252F18 + + + + 5 + 5 + 5 + 0 + 0 + 0 + + + 2 + 2 + 16 + 1 + 1 + 1 + 1 + 0 + 50% + 20% + http://piwik.net/4/19 + pageUrl==http%253A%252F%252Fpiwik.net%252F4%252F19 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 100% + 100% + http://piwik.net/4/ + pageUrl==http%253A%252F%252Fpiwik.net%252F4%252F + + + + + + 20 + 20 + 0 + 0 + 0 + + + 1 + 2 + 26 + 2 + 0 + 0 + 0 + 0 + 0% + 5% + pageUrl=^http%253A%252F%252Fpiwik.net%252F5 + + + + 5 + 5 + 5 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0% + 20% + http://piwik.net/5/20 + pageUrl==http%253A%252F%252Fpiwik.net%252F5%252F20 + + + + 5 + 5 + 5 + 0 + 0 + 0 + + + 0 + 0% + 0% + http://piwik.net/5/21 + pageUrl==http%253A%252F%252Fpiwik.net%252F5%252F21 + + + + 5 + 5 + 5 + 0 + 0 + 0 + + + 1 + 1 + 14 + 1 + 0 + 0 + 0% + 0% + http://piwik.net/5/22 + pageUrl==http%253A%252F%252Fpiwik.net%252F5%252F22 + + + + 5 + 5 + 5 + 0 + 0 + 0 + + + 1 + 1 + 12 + 1 + 0 + 0 + 0% + 0% + http://piwik.net/5/23 + pageUrl==http%253A%252F%252Fpiwik.net%252F5%252F23 + + + + + + 17 + 17 + 0 + 0 + 0 + + + 7 + 31 + 2 + 5 + 6 + 0 + 0 + 0 + 71% + 35% + pageUrl=^http%253A%252F%252Fpiwik.net%252F3 + + + + 4 + 4 + 4 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 2 + 2 + 0 + 100% + 50% + http://piwik.net/3/12 + pageUrl==http%253A%252F%252Fpiwik.net%252F3%252F12 + + + + 4 + 4 + 4 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 100% + 25% + http://piwik.net/3/13 + pageUrl==http%253A%252F%252Fpiwik.net%252F3%252F13 + + + + 4 + 4 + 4 + 0 + 0 + 0 + + + 2 + 2 + 13 + 1 + 1 + 1 + 1 + 0 + 50% + 25% + http://piwik.net/3/14 + pageUrl==http%253A%252F%252Fpiwik.net%252F3%252F14 + + + + 4 + 4 + 4 + 0 + 0 + 0 + + + 2 + 2 + 15 + 1 + 1 + 1 + 1 + 0 + 50% + 25% + http://piwik.net/3/15 + pageUrl==http%253A%252F%252Fpiwik.net%252F3%252F15 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 100% + 100% + http://piwik.net/3/ + pageUrl==http%253A%252F%252Fpiwik.net%252F3%252F + + + + + + 13 + 13 + 0 + 0 + 0 + + + 7 + 23 + 2 + 5 + 6 + 0 + 0 + 0 + 71% + 46% + pageUrl=^http%253A%252F%252Fpiwik.net%252F2 + + + + 3 + 3 + 3 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 2 + 2 + 0 + 100% + 67% + http://piwik.net/2/8 + pageUrl==http%253A%252F%252Fpiwik.net%252F2%252F8 + + + + 3 + 3 + 3 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 100% + 33% + http://piwik.net/2/9 + pageUrl==http%253A%252F%252Fpiwik.net%252F2%252F9 + + + + 3 + 3 + 3 + 0 + 0 + 0 + + + 2 + 2 + 9 + 1 + 1 + 1 + 1 + 0 + 50% + 33% + http://piwik.net/2/10 + pageUrl==http%253A%252F%252Fpiwik.net%252F2%252F10 + + + + 3 + 3 + 3 + 0 + 0 + 0 + + + 2 + 2 + 11 + 1 + 1 + 1 + 1 + 0 + 50% + 33% + http://piwik.net/2/11 + pageUrl==http%253A%252F%252Fpiwik.net%252F2%252F11 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 100% + 100% + http://piwik.net/2/ + pageUrl==http%253A%252F%252Fpiwik.net%252F2%252F + + + + + + 9 + 9 + 0 + 0 + 0 + + + 9 + 18 + 3 + 6 + 6 + 0 + 0 + 0 + 67% + 67% + pageUrl=^http%253A%252F%252Fpiwik.net%252F1 + + + + 2 + 2 + 2 + 0 + 0 + 0 + + + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 0 + 100% + 100% + http://piwik.net/1/4 + pageUrl==http%253A%252F%252Fpiwik.net%252F1%252F4 + + + + 2 + 2 + 2 + 0 + 0 + 0 + + + 2 + 2 + 3 + 1 + 1 + 1 + 1 + 0 + 50% + 50% + http://piwik.net/1/5 + pageUrl==http%253A%252F%252Fpiwik.net%252F1%252F5 + + + + 2 + 2 + 2 + 0 + 0 + 0 + + + 2 + 2 + 5 + 1 + 1 + 1 + 1 + 0 + 50% + 50% + http://piwik.net/1/6 + pageUrl==http%253A%252F%252Fpiwik.net%252F1%252F6 + + + + 2 + 2 + 2 + 0 + 0 + 0 + + + 2 + 2 + 7 + 1 + 1 + 1 + 1 + 0 + 50% + 50% + http://piwik.net/1/7 + pageUrl==http%253A%252F%252Fpiwik.net%252F1%252F7 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 100% + 100% + http://piwik.net/1/ + pageUrl==http%253A%252F%252Fpiwik.net%252F1%252F + + + + + + 5 + 5 + 0 + 0 + 0 + + + 5 + 5 + 0 + 5 + 5 + 0 + 0 + 0 + 100% + 100% + pageUrl=^http%253A%252F%252Fpiwik.net%252F0 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 100% + 100% + http://piwik.net/0/0 + pageUrl==http%253A%252F%252Fpiwik.net%252F0%252F0 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 100% + 100% + http://piwik.net/0/1 + pageUrl==http%253A%252F%252Fpiwik.net%252F0%252F1 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 100% + 100% + http://piwik.net/0/2 + pageUrl==http%253A%252F%252Fpiwik.net%252F0%252F2 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 100% + 100% + http://piwik.net/0/3 + pageUrl==http%253A%252F%252Fpiwik.net%252F0%252F3 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 100% + 100% + http://piwik.net/0/ + pageUrl==http%253A%252F%252Fpiwik.net%252F0%252F + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQueryDisabled__Insights.getInsightsOverview_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQueryDisabled__Insights.getInsightsOverview_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..28e649ff7d43ac6bc97c1dc3302c050fb73584e5 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQueryDisabled__Insights.getInsightsOverview_day.xml @@ -0,0 +1,60 @@ + + + + + + 501 + 149.3% + 149.3 + 1 + 201 + 501 + 300 + 300 + 0 + 0 + 1 + 1 + + + + + + 501 + 149.3% + 149.3 + 1 + 201 + 501 + 300 + 300 + 0 + 0 + 1 + 1 + + + + + + + + + + + + 1 + -100% + -100 + 0 + 1 + 0 + -1 + 1 + 1 + 0 + 0 + 0 + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQueryDisabled__Provider.getProvider_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQueryDisabled__Provider.getProvider_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..95d4b8662796306e6a3ba7ba38ffae9b0c989d35 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQueryDisabled__Provider.getProvider_month.xml @@ -0,0 +1,39 @@ + + + + + 52 + 52 + 1 + 0 + 52 + 0 + 20 + 0 + http://www.comcast.net/ + + + + 26 + 26 + 1 + 0 + 26 + 0 + 10 + 0 + http://www.awesomeisp.com/ + + + + 22 + 22 + 1 + 0 + 22 + 0 + 10 + 0 + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getDownloads_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getDownloads_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..7cc00d26d76a2858937335c5de32d555936895e8 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getDownloads_day.xml @@ -0,0 +1,50 @@ + + + + + 4 + 4 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + http://cloudsite5.com/20/download + downloadUrl==http%253A%252F%252Fcloudsite5.com%252F20%252Fdownload + + + + 3 + 3 + 0 + 0 + 0 + + + + + + + + 21 + 21 + 0 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getOutlinks_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getOutlinks_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f3b4745ec7c522279a8d23bf7882d59076248ff3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getOutlinks_day.xml @@ -0,0 +1,50 @@ + + + + + 4 + 4 + 0 + 0 + 0 + + + 0 + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + http://othersite10.com/ + outlinkUrl==http%253A%252F%252Fothersite10.com%252F + + + + 3 + 3 + 0 + 0 + 0 + + + + + + + + 21 + 21 + 0 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getPageTitles_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..5135253c32adfbc6e9836ca9806c43ea2c87281c --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getPageTitles_day.xml @@ -0,0 +1,74 @@ + + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0% + 0% + pageTitle==title_8%2B%252F%2Btitle_32 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0% + 0% + pageTitle==title_8%2B%252F%2Btitle_33 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0% + 0% + pageTitle==title_8%2B%252F%2Btitle_34 + + + + 145 + 145 + 0 + 0 + 0 + + + 36 + 108 + 12 + 24 + 37 + 0 + 0 + 0 + 67% + 26% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getPageUrls_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..88bfc041dc8661392042e21136d7617c61dd769b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getPageUrls_day.xml @@ -0,0 +1,72 @@ + + + + + 32 + 32 + 0 + 0 + 0 + + + 8 + 0 + 0 + 0 + 0% + 25% + pageUrl=^http%253A%252F%252Fpiwik.net%252F8 + + + + 8 + 8 + 8 + 0 + 0 + 0 + + + 0 + 0% + 0% + http://piwik.net/8/32 + pageUrl==http%253A%252F%252Fpiwik.net%252F8%252F32 + + + + 24 + 24 + 0 + 0 + 0 + + + 8 + 0 + 0% + 33% + + + + + + 137 + 137 + 0 + 0 + 0 + + + 36 + 108 + 12 + 24 + 29 + 0 + 0 + 0 + 67% + 21% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getSiteSearchKeywords_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getSiteSearchKeywords_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..5de252a5d0b01878e7d90a2e78fdba64dbeebe0a --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Actions.getSiteSearchKeywords_day.xml @@ -0,0 +1,87 @@ + + + + + 10 + 10 + 0 + 0 + 0 + + + 10 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword20 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword21 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 0 + 0% + 100% + siteSearchKeyword==keyword22 + + + + 37 + 37 + 0 + 0 + 0 + + + 37 + 1 + 0 + 0 + 0% + 100% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Contents.getContentNames_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Contents.getContentNames_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..08c70c52e9d8417d53a64812d54e578cbdde086e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Contents.getContentNames_day.xml @@ -0,0 +1,38 @@ + + + + + 1 + 5 + 5 + 5 + 100% + contentName==content+name+20 + + + + 1 + 5 + 5 + 0 + 0% + contentName==content+name+21 + + + + 1 + 5 + 5 + 5 + 100% + contentName==content+name+22 + + + + 2 + 10 + 10 + 0 + 0% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Contents.getContentPieces_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Contents.getContentPieces_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..a15f27c035b947f07bcafc868ec5a233c4bbe75b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Contents.getContentPieces_day.xml @@ -0,0 +1,38 @@ + + + + + 1 + 5 + 5 + 5 + 100% + contentPiece==content+piece+20 + + + + 1 + 5 + 5 + 0 + 0% + contentPiece==content+piece+21 + + + + 1 + 5 + 5 + 5 + 100% + contentPiece==content+piece+22 + + + + 2 + 10 + 10 + 0 + 0% + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__CustomVariables.getCustomVariables_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__CustomVariables.getCustomVariables_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..6ee02592b75d96381959ebe371299dcd61942fc9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__CustomVariables.getCustomVariables_day.xml @@ -0,0 +1,53 @@ + + + + + 20 + + + page + 4 + + + customVariableName==liked + + + + 16 + 16 + + + + 4 + 4 + + + + + + 20 + + + page + 1 + + + customVariableName==name + + + + 1 + 1 + + + + 19 + 19 + + + + + + 60 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__DevicesDetection.getBrowserVersions_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__DevicesDetection.getBrowserVersions_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..9628795a8df5972ad4d23125be36cdb0b0ecb699 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__DevicesDetection.getBrowserVersions_day.xml @@ -0,0 +1,41 @@ + + + + + 6 + 30 + 30 + 6 + 1 + 0 + 30 + 0 + browserCode==FF;browserVersion==6.0 + plugins/Morpheus/icons/dist/browsers/FF.png + + + + 4 + 20 + 20 + 4 + 1 + 0 + 20 + 0 + browserCode==CH;browserVersion==3.0 + plugins/Morpheus/icons/dist/browsers/CH.png + + + + 33 + 93 + 244 + 33 + 15 + 81 + 27 + 0 + plugins/Morpheus/icons/dist/browsers/UNK.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__DevicesDetection.getOsVersions_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__DevicesDetection.getOsVersions_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..55d60b51e95638691d798b6927d7dea46e50b0c6 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__DevicesDetection.getOsVersions_day.xml @@ -0,0 +1,41 @@ + + + + + 8 + 40 + 40 + 8 + 2 + 10 + 35 + 0 + operatingSystemCode==LIN;operatingSystemVersion== + plugins/Morpheus/icons/dist/os/LIN.png + + + + 5 + 25 + 30 + 5 + 2 + 20 + 10 + 0 + operatingSystemCode==AND;operatingSystemVersion==4.0 + plugins/Morpheus/icons/dist/os/AND.png + + + + 30 + 78 + 224 + 30 + 15 + 51 + 32 + 0 + plugins/Morpheus/icons/dist/os/UNK.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Events.getAction_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Events.getAction_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..2e7988119b74e242bd7b221fada7468acc5c7888 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Events.getAction_day.xml @@ -0,0 +1,64 @@ + + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + eventAction==event+action+1 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + + + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + eventAction==event+action+2 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + + + + + + 3 + 15 + 15 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Events.getCategory_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..4353aa725b007939a98667661d586fc7da6b31b8 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Events.getCategory_day.xml @@ -0,0 +1,64 @@ + + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + eventCategory==event+category+0 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + + + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + eventCategory==event+category+3 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + + + + + + 3 + 15 + 15 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Events.getName_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Events.getName_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..2e9f6b6bcf002b44dd27571514a99ce743e75e29 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Events.getName_day.xml @@ -0,0 +1,64 @@ + + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + eventName==event+name0 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + + + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + eventName==event+name1 + + + + 1 + 5 + 5 + 0 + 0 + + + 0 + + + + + + 3 + 15 + 15 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Goals.getItemsCategory_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Goals.getItemsCategory_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..8688f0299167abe06de6bf1556a5271dce10ccc2 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Goals.getItemsCategory_day.xml @@ -0,0 +1,53 @@ + + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%230 + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%231 + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%232 + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%233 + + + + 5 + 5 + 5 + 7.5 + 0 + 0% + productCategory==Books+Cat+%234 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Goals.getItemsName_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Goals.getItemsName_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..bd2c7510d0efea45426fb0e1137d2a835f7ecc86 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Goals.getItemsName_day.xml @@ -0,0 +1,253 @@ + + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book0 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book1 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book2 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book3 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book4 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book5 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book6 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book7 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book8 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book9 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book10 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book11 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book12 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book13 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book14 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book15 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book16 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book17 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book18 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book19 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book20 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book21 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book22 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book23 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productName==Book24 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Goals.getItemsSku_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Goals.getItemsSku_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..c12963aa01bb5917a8bb1c99a685d3ee32e48477 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Goals.getItemsSku_day.xml @@ -0,0 +1,253 @@ + + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book0 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book1 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book2 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book3 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book4 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book5 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book6 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book7 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book8 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book9 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book10 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book11 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book12 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book13 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book14 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book15 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book16 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book17 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book18 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book19 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book20 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book21 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book22 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book23 + + + + 1 + 1 + 1 + 7.5 + 0 + 0% + productSku==id_book24 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getAll_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getAll_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..b260cab8d9f73820b9d8143833826512f2968854 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getAll_day.xml @@ -0,0 +1,66 @@ + + + + + 3 + 4 + 4 + 3 + 1 + 0 + 4 + 0 + referrerName==whatever0.com + 3 + + + + 3 + 3 + 3 + 3 + 1 + 0 + 3 + 0 + referrerType==search;referrerKeyword==this+search+term + 2 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerType==search;referrerKeyword==search+term+2 + 2 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerName==whatever1.com + 3 + + + + 9 + 9 + 9 + 9 + 2 + 0 + 9 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getKeywords_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getKeywords_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..2701dce9351fe1cf449a3d9c5c4aef74238f1055 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getKeywords_day.xml @@ -0,0 +1,86 @@ + + + + + 3 + 3 + 3 + 3 + 1 + 0 + 3 + 0 + referrerType==search;referrerKeyword==this+search+term + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + + + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerType==search;referrerKeyword==search+term+2 + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + + + 7 + 7 + 7 + 7 + 1 + 0 + 7 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getReferrerType_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getReferrerType_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..1778affc303836b13cd2175b5c81cb03a52800d1 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getReferrerType_day.xml @@ -0,0 +1,116 @@ + + + + + 43 + 123 + 274 + 43 + 15 + 81 + 57 + 0 + referrerType==direct + 1 + + + + 12 + 12 + 12 + 12 + 1 + 0 + 12 + 0 + referrerType==search + 2 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerType==search;referrerKeyword==search+term+2 + + + + 3 + 3 + 3 + 3 + 1 + 0 + 3 + 0 + referrerType==search;referrerKeyword==this+search+term + + + + 7 + 7 + 7 + 7 + 1 + 0 + 7 + 0 + + + + + + 7 + 8 + 8 + 7 + 1 + 0 + 8 + 0 + referrerType==website + 3 + + + + 3 + 4 + 4 + 3 + 1 + 0 + 4 + 0 + referrerName==whatever0.com + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerName==whatever1.com + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getSearchEngines_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getSearchEngines_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..d89b5a581d61752ed4077b386c1f5bd325775d93 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getSearchEngines_day.xml @@ -0,0 +1,92 @@ + + + + + 3 + 3 + 3 + 3 + 1 + 0 + 3 + 0 + referrerType==search;referrerName==Google + http://google.com + plugins/Morpheus/icons/dist/searchEngines/google.com.png + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + + + + + + 3 + 3 + 3 + 3 + 1 + 0 + 3 + 0 + referrerType==search;referrerName==Yahoo%21 + http://search.yahoo.com + plugins/Morpheus/icons/dist/searchEngines/search.yahoo.com.png + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + + + + + + 6 + 6 + 6 + 6 + 1 + 0 + 6 + 0 + URL unknown! + plugins/Morpheus/icons/dist/searchEngines/xx.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getWebsites_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getWebsites_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..e0fd222b3f6677028b4fd8973583b150b96c5e45 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Referrers.getWebsites_day.xml @@ -0,0 +1,86 @@ + + + + + 3 + 4 + 4 + 3 + 1 + 0 + 4 + 0 + referrerName==whatever0.com + + + + 1 + 2 + 2 + 1 + 1 + 0 + 2 + 0 + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + + + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + referrerName==whatever1.com + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + + + + + + 2 + 2 + 2 + 2 + 1 + 0 + 2 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Resolution.getConfiguration_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Resolution.getConfiguration_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..1c1b970450bc8b13dacd1d49fb6303fc8243001d --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Resolution.getConfiguration_day.xml @@ -0,0 +1,36 @@ + + + + + 4 + 20 + 20 + 4 + 1 + 0 + 20 + 0 + + + + 17 + 17 + 143 + 17 + 15 + 16 + 1 + 0 + + + + 22 + 106 + 131 + 22 + 2 + 65 + 56 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Resolution.getResolution_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Resolution.getResolution_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..4b81cb50fd9b02644ef9b389005f5bf475343981 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Resolution.getResolution_day.xml @@ -0,0 +1,38 @@ + + + + + 8 + 40 + 40 + 8 + 1 + 0 + 40 + 0 + resolution==1920x1080 + + + + 6 + 30 + 30 + 6 + 2 + 25 + 15 + 0 + resolution==1280x1024 + + + + 29 + 73 + 224 + 29 + 15 + 56 + 22 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getCity_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getCity_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..1df2cc56cf15bb2b597c805cd93a8d179d05efac --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getCity_day.xml @@ -0,0 +1,51 @@ + + + + + 7 + 35 + 35 + 7 + 2 + 20 + 25 + 0 + city==Toronto;regionCode==ON;countryCode==ca + Toronto + ON + ca + Canada + Ontario + plugins/Morpheus/icons/dist/flags/ca.png + + + + 6 + 30 + 40 + 6 + 2 + 20 + 15 + 0 + city==Melbourne;regionCode==VIC;countryCode==au + Melbourne + VIC + au + Australia + Victoria + plugins/Morpheus/icons/dist/flags/au.png + + + + 30 + 78 + 219 + 30 + 15 + 41 + 37 + 0 + plugins/Morpheus/icons/dist/flags/xx.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getRegion_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getRegion_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..b0b962bad2c1fcec5abed878029f4ce7560e1efc --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getRegion_day.xml @@ -0,0 +1,49 @@ + + + + + 7 + 35 + 35 + 7 + 2 + 20 + 25 + 0 + regionCode==ON;countryCode==ca + ON + ca + Canada + Ontario + plugins/Morpheus/icons/dist/flags/ca.png + + + + 6 + 30 + 35 + 6 + 2 + 10 + 20 + 0 + regionCode==14;countryCode==jp + 14 + jp + Japan + Kanagawa + plugins/Morpheus/icons/dist/flags/jp.png + + + + 30 + 78 + 224 + 30 + 15 + 51 + 32 + 0 + plugins/Morpheus/icons/dist/flags/xx.png + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserId.getUsers_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserId.getUsers_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..40cd1b2b4670bc16ad4f982fd58890d77fe5dc7d --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserId.getUsers_day.xml @@ -0,0 +1,40 @@ + + + + + 1 + 5 + 5 + 1 + 1 + 0 + 5 + 0 + + userId==user0 + + + + 1 + 5 + 5 + 1 + 1 + 0 + 5 + 0 + + userId==user1 + + + + 41 + 133 + 284 + 41 + 15 + 81 + 67 + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_segment_provider_rankingQueryDisabled__Provider.getProvider_month.xml b/tests/PHPUnit/System/expected/test_reportLimiting_segment_provider_rankingQueryDisabled__Provider.getProvider_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..7993897a0ac46d7dd22eb73db37f2a5a57806913 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_segment_provider_rankingQueryDisabled__Provider.getProvider_month.xml @@ -0,0 +1,15 @@ + + + + + 52 + 52 + 1 + 0 + 52 + 0 + 20 + 0 + http://www.comcast.net/ + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingdimension_1__CustomDimensions.getCustomDimension_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingdimension_1__CustomDimensions.getCustomDimension_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f63c0654072d9ec149237b6c5c8a5c066a57adab --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingdimension_1__CustomDimensions.getCustomDimension_day.xml @@ -0,0 +1,51 @@ + + + + + 5 + 5 + 6 + 5 + 2 + 3 + 3 + 0 + 0 + 1 + 60% + 1.2 + dimension1==0 + + + + 5 + 5 + 6 + 5 + 2 + 2 + 3 + 0 + 0 + 0 + 60% + 1.2 + dimension1==5 + + + + 15 + 15 + 18 + 15 + 2 + 8 + 9 + 0 + 0 + 1 + 60% + 1.2 + dimension1==-1 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingdimension_1_flattened__CustomDimensions.getCustomDimension_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingdimension_1_flattened__CustomDimensions.getCustomDimension_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..51240f1e87b9f249b45618adfd67d69a19c3bf5c --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingdimension_1_flattened__CustomDimensions.getCustomDimension_day.xml @@ -0,0 +1,55 @@ + + + + + 15 + 15 + 18 + 15 + 2 + 8 + 9 + 0 + 0 + 1 + 60% + 1.2 + dimension1==-1 + 1 + Others + + + + 5 + 5 + 6 + 5 + 2 + 3 + 3 + 0 + 0 + 1 + 60% + 1.2 + dimension1==0 + 0 + + + + 5 + 5 + 6 + 5 + 2 + 2 + 3 + 0 + 0 + 0 + 60% + 1.2 + dimension1==5 + 5 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingdimension_1_rankingQuery__CustomDimensions.getCustomDimension_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingdimension_1_rankingQuery__CustomDimensions.getCustomDimension_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f63c0654072d9ec149237b6c5c8a5c066a57adab --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingdimension_1_rankingQuery__CustomDimensions.getCustomDimension_day.xml @@ -0,0 +1,51 @@ + + + + + 5 + 5 + 6 + 5 + 2 + 3 + 3 + 0 + 0 + 1 + 60% + 1.2 + dimension1==0 + + + + 5 + 5 + 6 + 5 + 2 + 2 + 3 + 0 + 0 + 0 + 60% + 1.2 + dimension1==5 + + + + 15 + 15 + 18 + 15 + 2 + 8 + 9 + 0 + 0 + 1 + 60% + 1.2 + dimension1==-1 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingdimension_2__CustomDimensions.getCustomDimension_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingdimension_2__CustomDimensions.getCustomDimension_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f81d06228955246b63739d5ff3bb13e4cb2e3453 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingdimension_2__CustomDimensions.getCustomDimension_day.xml @@ -0,0 +1,301 @@ + + + + + 9 + 9 + 9 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + + + + + + + 5 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + + + + + + + + 4 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + + + + + + + + + + 9 + 9 + 9 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + + + + + + + 5 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + + + + + + + + 4 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + + + + + + + + + + 226 + 226 + 226 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_flattened__CustomDimensions.getCustomDimension_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_flattened__CustomDimensions.getCustomDimension_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..ddb82662c2a7613ba592e086bce3418d7b5852f0 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_flattened__CustomDimensions.getCustomDimension_day.xml @@ -0,0 +1,223 @@ + + + + + 226 + 226 + 226 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + + + + 1 + Others + + + + 5 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + + + + + 20 - piwik.net/4/16 + + + + 5 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + + + + + 21 - piwik.net/4/17 + + + + 4 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + + + + 20 - Others + 1 + + + + 4 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + + + + 21 - Others + 1 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_rankingQuery__CustomDimensions.getCustomDimension_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_rankingQuery__CustomDimensions.getCustomDimension_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..ec77dba206cfe4360ca3c0776970c84ebe07fbf8 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_rankingQuery__CustomDimensions.getCustomDimension_day.xml @@ -0,0 +1,217 @@ + + + + + 8 + 8 + 8 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + + + + + + + 8 + 8 + 8 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + + + + + + + + + + 8 + 8 + 8 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + + + + + + + 8 + 8 + 8 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + + + + + + + + + + 228 + 228 + 228 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + + + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel___Events.getAction_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel___Events.getAction_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..48ced301290cf8dd4d301e0b006ad2473ddf94d5 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel___Events.getAction_day.xml @@ -0,0 +1,64 @@ + + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + eventAction==-1 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + + + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + eventAction==event+action+0 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + + + + + + 19 + 19 + 19 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel___Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel___Events.getCategory_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..46a1146fc0eecfc64fc8a075c916faebb43e0b6e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel___Events.getCategory_day.xml @@ -0,0 +1,64 @@ + + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + eventCategory==-1 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + + + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + eventCategory==event+category+0 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + + + + + + 19 + 19 + 19 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel___Events.getName_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel___Events.getName_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..31d2d849ad4397001ec296e1edd376d8db93972a --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel___Events.getName_day.xml @@ -0,0 +1,64 @@ + + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + eventName==-1 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + + + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + eventName==event+name+0 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + + + + + + 19 + 19 + 19 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__flattened__Events.getAction_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__flattened__Events.getAction_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..ddf552146529fc8db5e98096d49d5199a39d3465 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__flattened__Events.getAction_day.xml @@ -0,0 +1,42 @@ + + + + + 19 + 19 + 19 + 0 + 0 + + + 0 + 1 + Others + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + -1 + -1 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + event action 0 + event name 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__flattened__Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__flattened__Events.getCategory_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..8f2b51fd5ee55f8c90bd6c79b14cd85468da596d --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__flattened__Events.getCategory_day.xml @@ -0,0 +1,42 @@ + + + + + 19 + 19 + 19 + 0 + 0 + + + 0 + 1 + Others + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + -1 + -1 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + event category 0 + event action 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__flattened__Events.getName_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__flattened__Events.getName_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..9f85d8411bc8798b2508230fb0a9657508446c4a --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__flattened__Events.getName_day.xml @@ -0,0 +1,42 @@ + + + + + 19 + 19 + 19 + 0 + 0 + + + 0 + 1 + Others + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + -1 + -1 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + event name 0 + event action 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__rankingQuery__Events.getAction_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__rankingQuery__Events.getAction_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..7d74074f3695ad97728fb18643bc111a7902921c --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__rankingQuery__Events.getAction_day.xml @@ -0,0 +1,64 @@ + + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + eventAction==-1 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + + + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + eventAction==event+action+0 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + + + + + + 3 + 19 + 19 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__rankingQuery__Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__rankingQuery__Events.getCategory_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..3da6ff1077f4aea33f5741cf1cec11b4b9700ea6 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__rankingQuery__Events.getCategory_day.xml @@ -0,0 +1,64 @@ + + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + eventCategory==-1 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + + + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + eventCategory==event+category+0 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + + + + + + 3 + 19 + 19 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__rankingQuery__Events.getName_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__rankingQuery__Events.getName_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..1ae683001b396156695cc0f2566ff03e3da8d67f --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimitingwithNegOneLabel__rankingQuery__Events.getName_day.xml @@ -0,0 +1,64 @@ + + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + eventName==-1 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + + + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + eventName==event+name+0 + + + + 1 + 1 + 1 + 0 + 0 + + + 0 + + + + + + 3 + 19 + 19 + 0 + 0 + + + 0 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_rssExport__Actions.getPageUrl_day.rss b/tests/PHPUnit/System/expected/test_rssExport__Actions.getPageUrl_day.rss new file mode 100644 index 0000000000000000000000000000000000000000..426221f6f30ff49f93c2a86dec5566a2a2c97d5f --- /dev/null +++ b/tests/PHPUnit/System/expected/test_rssExport__Actions.getPageUrl_day.rss @@ -0,0 +1,76 @@ + + + + matomo statistics - RSS + https://matomo.org + Matomo RSS feed + Tue, 20 Oct 2020 20:10:20 +0000 + matomo + en + Tue, 20 Oct 2020 20:10:20 +0000 + + Tue, 21 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-21 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-21 + Site AAAAAA on 2010-12-21 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Mon, 20 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-20 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-20 + Site AAAAAA on 2010-12-20 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Sun, 19 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-19 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-19 + Site AAAAAA on 2010-12-19 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Sat, 18 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-18 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-18 + Site AAAAAA on 2010-12-18 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Fri, 17 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-17 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-17 + Site AAAAAA on 2010-12-17 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Thu, 16 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-16 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-16 + Site AAAAAA on 2010-12-16 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Wed, 15 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-15 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-15 + Site AAAAAA on 2010-12-15 + https://matomo.org + <table border=1 width=70%><tr> <td><strong>label</strong></td> <td><strong>nb_visits</strong></td> <td><strong>nb_uniq_visitors</strong></td> <td><strong>nb_hits</strong></td> <td><strong>sum_time_spent</strong></td> <td><strong>sum_bandwidth</strong></td> <td><strong>nb_hits_with_bandwidth</strong></td> <td><strong>min_bandwidth</strong></td> <td><strong>max_bandwidth</strong></td> <td><strong>entry_nb_uniq_visitors</strong></td> <td><strong>entry_nb_visits</strong></td> <td><strong>entry_nb_actions</strong></td> <td><strong>entry_sum_visit_length</strong></td> <td><strong>entry_bounce_count</strong></td> <td><strong>avg_time_on_page</strong></td> <td><strong>bounce_rate</strong></td> <td><strong>exit_rate</strong></td> <td><strong>avg_bandwidth</strong></td></tr><tr> <td>/homepage</td> <td>1</td> <td>1</td> <td>1</td> <td>360</td> <td>0</td> <td>0</td> <td>-</td> <td>-</td> <td>1</td> <td>1</td> <td>2</td> <td>361</td> <td>0</td> <td>360</td> <td>0%</td> <td>0%</td> <td>0</td></tr></table> + + + Tue, 14 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-14 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-14 + Site AAAAAA on 2010-12-14 + https://matomo.org + <table border=1 width=70%><tr> <td><strong>label</strong></td> <td><strong>nb_visits</strong></td> <td><strong>nb_uniq_visitors</strong></td> <td><strong>nb_hits</strong></td> <td><strong>sum_time_spent</strong></td> <td><strong>sum_bandwidth</strong></td> <td><strong>nb_hits_with_bandwidth</strong></td> <td><strong>min_bandwidth</strong></td> <td><strong>max_bandwidth</strong></td> <td><strong>entry_nb_uniq_visitors</strong></td> <td><strong>entry_nb_visits</strong></td> <td><strong>entry_nb_actions</strong></td> <td><strong>entry_sum_visit_length</strong></td> <td><strong>entry_bounce_count</strong></td> <td><strong>avg_time_on_page</strong></td> <td><strong>bounce_rate</strong></td> <td><strong>exit_rate</strong></td> <td><strong>avg_bandwidth</strong></td></tr><tr> <td>/homepage</td> <td>1</td> <td>1</td> <td>1</td> <td>360</td> <td>0</td> <td>0</td> <td>-</td> <td>-</td> <td>1</td> <td>1</td> <td>2</td> <td>361</td> <td>0</td> <td>360</td> <td>0%</td> <td>0%</td> <td>0</td></tr></table> + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_rssExport__Actions.getPageUrl_week.rss b/tests/PHPUnit/System/expected/test_rssExport__Actions.getPageUrl_week.rss new file mode 100644 index 0000000000000000000000000000000000000000..a883410a8f33b5f9b5a5dd07299fb0e19032c324 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_rssExport__Actions.getPageUrl_week.rss @@ -0,0 +1,28 @@ + + + + matomo statistics - RSS + https://matomo.org + Matomo RSS feed + Tue, 20 Oct 2020 20:10:20 +0000 + matomo + en + Tue, 20 Oct 2020 20:10:20 +0000 + + Mon, 20 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=week&date=2010-12-20 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=week&date=2010-12-20 + Site AAAAAA on 2010-12-20,2010-12-26 + https://matomo.org + <table border=1 width=70%><tr> <td><strong>label</strong></td> <td><strong>nb_visits</strong></td> <td><strong>nb_hits</strong></td> <td><strong>sum_time_spent</strong></td> <td><strong>sum_bandwidth</strong></td> <td><strong>nb_hits_with_bandwidth</strong></td> <td><strong>min_bandwidth</strong></td> <td><strong>max_bandwidth</strong></td> <td><strong>entry_nb_visits</strong></td> <td><strong>entry_nb_actions</strong></td> <td><strong>entry_sum_visit_length</strong></td> <td><strong>entry_bounce_count</strong></td> <td><strong>sum_daily_nb_uniq_visitors</strong></td> <td><strong>sum_daily_entry_nb_uniq_visitors</strong></td> <td><strong>avg_time_on_page</strong></td> <td><strong>bounce_rate</strong></td> <td><strong>exit_rate</strong></td> <td><strong>avg_bandwidth</strong></td></tr><tr> <td>/homepage</td> <td>1</td> <td>1</td> <td>360</td> <td>0</td> <td>0</td> <td>-</td> <td>-</td> <td>1</td> <td>2</td> <td>361</td> <td>0</td> <td>1</td> <td>1</td> <td>360</td> <td>0%</td> <td>0%</td> <td>0</td></tr></table> + + + Mon, 13 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=week&date=2010-12-13 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=week&date=2010-12-13 + Site AAAAAA on 2010-12-13,2010-12-19 + https://matomo.org + <table border=1 width=70%><tr> <td><strong>label</strong></td> <td><strong>nb_visits</strong></td> <td><strong>nb_hits</strong></td> <td><strong>sum_time_spent</strong></td> <td><strong>sum_bandwidth</strong></td> <td><strong>nb_hits_with_bandwidth</strong></td> <td><strong>min_bandwidth</strong></td> <td><strong>max_bandwidth</strong></td> <td><strong>entry_nb_visits</strong></td> <td><strong>entry_nb_actions</strong></td> <td><strong>entry_sum_visit_length</strong></td> <td><strong>entry_bounce_count</strong></td> <td><strong>sum_daily_nb_uniq_visitors</strong></td> <td><strong>sum_daily_entry_nb_uniq_visitors</strong></td> <td><strong>avg_time_on_page</strong></td> <td><strong>bounce_rate</strong></td> <td><strong>exit_rate</strong></td> <td><strong>avg_bandwidth</strong></td></tr><tr> <td>/homepage</td> <td>2</td> <td>2</td> <td>720</td> <td>0</td> <td>0</td> <td>-</td> <td>-</td> <td>2</td> <td>4</td> <td>722</td> <td>0</td> <td>2</td> <td>2</td> <td>360</td> <td>0%</td> <td>0%</td> <td>0</td></tr></table> + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_rssExport__Actions.getPageUrls_day.rss b/tests/PHPUnit/System/expected/test_rssExport__Actions.getPageUrls_day.rss new file mode 100644 index 0000000000000000000000000000000000000000..aa5cbd1d0ed286c6f1ee778222f68b93c488848e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_rssExport__Actions.getPageUrls_day.rss @@ -0,0 +1,36 @@ + + + + matomo statistics - RSS + https://matomo.org + Matomo RSS feed + Tue, 20 Oct 2020 20:10:20 +0000 + matomo + en + Tue, 20 Oct 2020 20:10:20 +0000 + + Thu, 16 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-16 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-16 + Site AAAAAA on 2010-12-16 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Wed, 15 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-15 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-15 + Site AAAAAA on 2010-12-15 + https://matomo.org + <table border=1 width=70%><tr> <td><strong>label</strong></td> <td><strong>nb_visits</strong></td> <td><strong>nb_uniq_visitors</strong></td> <td><strong>nb_hits</strong></td> <td><strong>sum_time_spent</strong></td> <td><strong>sum_bandwidth</strong></td> <td><strong>nb_hits_with_bandwidth</strong></td> <td><strong>min_bandwidth</strong></td> <td><strong>max_bandwidth</strong></td> <td><strong>entry_nb_uniq_visitors</strong></td> <td><strong>entry_nb_visits</strong></td> <td><strong>entry_nb_actions</strong></td> <td><strong>entry_sum_visit_length</strong></td> <td><strong>entry_bounce_count</strong></td> <td><strong>avg_bandwidth</strong></td> <td><strong>avg_page_load_time</strong></td> <td><strong>avg_time_on_page</strong></td> <td><strong>bounce_rate</strong></td> <td><strong>exit_rate</strong></td> <td><strong>exit_nb_uniq_visitors</strong></td> <td><strong>exit_nb_visits</strong></td></tr><tr> <td>/homepage</td> <td>1</td> <td>1</td> <td>1</td> <td>360</td> <td>0</td> <td>0</td> <td>-</td> <td>-</td> <td>1</td> <td>1</td> <td>2</td> <td>361</td> <td>0</td> <td>0</td> <td>0</td> <td>360</td> <td>0%</td> <td>0%</td> <td>-</td> <td>-</td></tr><tr> <td>/news</td> <td>1</td> <td>1</td> <td>1</td> <td>0</td> <td>0</td> <td>0</td> <td>-</td> <td>-</td> <td>1</td> <td>1</td> <td>1</td> <td>0</td> <td>1</td> <td>0</td> <td>0</td> <td>0</td> <td>100%</td> <td>100%</td> <td>1</td> <td>1</td></tr><tr> <td>sub1</td> <td>1</td> <td>-</td> <td>1</td> <td>0</td> <td>0</td> <td>0</td> <td>-</td> <td>-</td> <td>-</td> <td>-</td> <td>-</td> <td>-</td> <td>-</td> <td>0</td> <td>0</td> <td>0</td> <td>0%</td> <td>100%</td> <td>-</td> <td>1</td></tr></table> + + + Tue, 14 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-14 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-14 + Site AAAAAA on 2010-12-14 + https://matomo.org + <table border=1 width=70%><tr> <td><strong>label</strong></td> <td><strong>nb_visits</strong></td> <td><strong>nb_uniq_visitors</strong></td> <td><strong>nb_hits</strong></td> <td><strong>sum_time_spent</strong></td> <td><strong>sum_bandwidth</strong></td> <td><strong>nb_hits_with_bandwidth</strong></td> <td><strong>min_bandwidth</strong></td> <td><strong>max_bandwidth</strong></td> <td><strong>entry_nb_uniq_visitors</strong></td> <td><strong>entry_nb_visits</strong></td> <td><strong>entry_nb_actions</strong></td> <td><strong>entry_sum_visit_length</strong></td> <td><strong>entry_bounce_count</strong></td> <td><strong>avg_bandwidth</strong></td> <td><strong>avg_page_load_time</strong></td> <td><strong>avg_time_on_page</strong></td> <td><strong>bounce_rate</strong></td> <td><strong>exit_rate</strong></td> <td><strong>exit_nb_uniq_visitors</strong></td> <td><strong>exit_nb_visits</strong></td></tr><tr> <td>/homepage</td> <td>1</td> <td>1</td> <td>1</td> <td>360</td> <td>0</td> <td>0</td> <td>-</td> <td>-</td> <td>1</td> <td>1</td> <td>2</td> <td>361</td> <td>0</td> <td>0</td> <td>0</td> <td>360</td> <td>0%</td> <td>0%</td> <td>-</td> <td>-</td></tr><tr> <td>/news</td> <td>1</td> <td>1</td> <td>1</td> <td>0</td> <td>0</td> <td>0</td> <td>-</td> <td>-</td> <td>1</td> <td>1</td> <td>1</td> <td>0</td> <td>1</td> <td>0</td> <td>0</td> <td>0</td> <td>100%</td> <td>100%</td> <td>1</td> <td>1</td></tr><tr> <td>sub1</td> <td>1</td> <td>-</td> <td>1</td> <td>0</td> <td>0</td> <td>0</td> <td>-</td> <td>-</td> <td>-</td> <td>-</td> <td>-</td> <td>-</td> <td>-</td> <td>0</td> <td>0</td> <td>0</td> <td>0%</td> <td>100%</td> <td>-</td> <td>1</td></tr></table> + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_rssExport__VisitsSummary.get_day.rss b/tests/PHPUnit/System/expected/test_rssExport__VisitsSummary.get_day.rss new file mode 100644 index 0000000000000000000000000000000000000000..9e841a342be96d02f62cd8c5418aee20b7855005 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_rssExport__VisitsSummary.get_day.rss @@ -0,0 +1,36 @@ + + + + matomo statistics - RSS + https://matomo.org + Matomo RSS feed + Tue, 20 Oct 2020 20:10:20 +0000 + matomo + en + Tue, 20 Oct 2020 20:10:20 +0000 + + Thu, 16 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-16 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-16 + Site AAAAAA on 2010-12-16 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Wed, 15 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-15 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-15 + Site AAAAAA on 2010-12-15 + https://matomo.org + <table border=1 width=70%><tr> <td><strong>nb_uniq_visitors</strong></td> <td><strong>nb_users</strong></td> <td><strong>nb_visits</strong></td> <td><strong>nb_actions</strong></td> <td><strong>nb_visits_converted</strong></td> <td><strong>bounce_count</strong></td> <td><strong>sum_visit_length</strong></td> <td><strong>max_actions</strong></td> <td><strong>bounce_rate</strong></td> <td><strong>nb_actions_per_visit</strong></td> <td><strong>avg_time_on_site</strong></td></tr><tr> <td>1</td> <td>0</td> <td>2</td> <td>3</td> <td>0</td> <td>1</td> <td>361</td> <td>2</td> <td>50%</td> <td>1.5</td> <td>181</td></tr></table> + + + Tue, 14 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-14 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-14 + Site AAAAAA on 2010-12-14 + https://matomo.org + <table border=1 width=70%><tr> <td><strong>nb_uniq_visitors</strong></td> <td><strong>nb_users</strong></td> <td><strong>nb_visits</strong></td> <td><strong>nb_actions</strong></td> <td><strong>nb_visits_converted</strong></td> <td><strong>bounce_count</strong></td> <td><strong>sum_visit_length</strong></td> <td><strong>max_actions</strong></td> <td><strong>bounce_rate</strong></td> <td><strong>nb_actions_per_visit</strong></td> <td><strong>avg_time_on_site</strong></td></tr><tr> <td>1</td> <td>0</td> <td>2</td> <td>3</td> <td>0</td> <td>1</td> <td>361</td> <td>2</td> <td>50%</td> <td>1.5</td> <td>181</td></tr></table> + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_rssExport_empty__Actions.getPageUrl_day.rss b/tests/PHPUnit/System/expected/test_rssExport_empty__Actions.getPageUrl_day.rss new file mode 100644 index 0000000000000000000000000000000000000000..f18c004ac6a15c83f328187c0c3874692d3fa1cc --- /dev/null +++ b/tests/PHPUnit/System/expected/test_rssExport_empty__Actions.getPageUrl_day.rss @@ -0,0 +1,68 @@ + + + + matomo statistics - RSS + https://matomo.org + Matomo RSS feed + Tue, 20 Oct 2020 20:10:20 +0000 + matomo + en + Tue, 20 Oct 2020 20:10:20 +0000 + + Tue, 20 Oct 2020 20:10:20 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + Site AAAAAA on 2020-10-20 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Mon, 19 Oct 2020 20:10:20 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + Site AAAAAA on 2020-10-19 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Sun, 18 Oct 2020 20:10:20 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + Site AAAAAA on 2020-10-18 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Sat, 17 Oct 2020 20:10:20 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + Site AAAAAA on 2020-10-17 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Fri, 16 Oct 2020 20:10:20 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + Site AAAAAA on 2020-10-16 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Thu, 15 Oct 2020 20:10:20 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + Site AAAAAA on 2020-10-15 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Wed, 14 Oct 2020 20:10:20 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date= + Site AAAAAA on 2020-10-14 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_rssExport_empty__Actions.getPageUrl_week.rss b/tests/PHPUnit/System/expected/test_rssExport_empty__Actions.getPageUrl_week.rss new file mode 100644 index 0000000000000000000000000000000000000000..eb34219dbcd29ba8338990b3459399fda570677c --- /dev/null +++ b/tests/PHPUnit/System/expected/test_rssExport_empty__Actions.getPageUrl_week.rss @@ -0,0 +1,36 @@ + + + + matomo statistics - RSS + https://matomo.org + Matomo RSS feed + Tue, 20 Oct 2020 20:10:20 +0000 + matomo + en + Tue, 20 Oct 2020 20:10:20 +0000 + + Mon, 19 Oct 2020 20:10:20 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=week&date= + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=week&date= + Site AAAAAA on 2020-10-19,2020-10-25 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Mon, 12 Oct 2020 20:10:20 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=week&date= + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=week&date= + Site AAAAAA on 2020-10-12,2020-10-18 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Mon, 05 Oct 2020 20:10:20 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=week&date= + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=week&date= + Site AAAAAA on 2020-10-05,2020-10-11 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_rssExport_subdir__Actions.getPageUrl_day.rss b/tests/PHPUnit/System/expected/test_rssExport_subdir__Actions.getPageUrl_day.rss new file mode 100644 index 0000000000000000000000000000000000000000..4cc06ac0826029de4179050412f1593641cf687e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_rssExport_subdir__Actions.getPageUrl_day.rss @@ -0,0 +1,76 @@ + + + + matomo statistics - RSS + https://matomo.org + Matomo RSS feed + Tue, 20 Oct 2020 20:10:20 +0000 + matomo + en + Tue, 20 Oct 2020 20:10:20 +0000 + + Tue, 21 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-21 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-21 + Site AAAAAA on 2010-12-21 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Mon, 20 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-20 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-20 + Site AAAAAA on 2010-12-20 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Sun, 19 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-19 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-19 + Site AAAAAA on 2010-12-19 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Sat, 18 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-18 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-18 + Site AAAAAA on 2010-12-18 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Fri, 17 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-17 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-17 + Site AAAAAA on 2010-12-17 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Thu, 16 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-16 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-16 + Site AAAAAA on 2010-12-16 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Wed, 15 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-15 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-15 + Site AAAAAA on 2010-12-15 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + Tue, 14 Dec 2010 00:00:00 +0000 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-14 + http://example.com/piwik/tests/PHPUnit/proxy/?module=CoreHome&action=index&idSite=1&period=day&date=2010-12-14 + Site AAAAAA on 2010-12-14 + https://matomo.org + <strong><em>Empty table</em></strong><br /> + + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_specialDateParams_lastmonth__Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_specialDateParams_lastmonth__Actions.getPageTitles_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5bc8695113d8a01a1780df1e25bfbf41efa49ae --- /dev/null +++ b/tests/PHPUnit/System/expected/test_specialDateParams_lastmonth__Actions.getPageTitles_day.xml @@ -0,0 +1,27 @@ + + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 100% + 100% + pageTitle==Checkout%252FPurchasing... + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_specialDateParams_lastmonth__VisitsSummary.getVisits_day.xml b/tests/PHPUnit/System/expected/test_specialDateParams_lastmonth__VisitsSummary.getVisits_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..606fbb524182170284d7f1baad7fce4697d9b8b3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_specialDateParams_lastmonth__VisitsSummary.getVisits_day.xml @@ -0,0 +1,2 @@ + +1 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_specialDateParams_lastweek__Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_specialDateParams_lastweek__Actions.getPageTitles_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..0cbcf088c966e803b5522ae7791132381817c935 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_specialDateParams_lastweek__Actions.getPageTitles_day.xml @@ -0,0 +1,27 @@ + + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 100% + 100% + pageTitle==incredible%2521 + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_specialDateParams_lastweek__VisitsSummary.getVisits_day.xml b/tests/PHPUnit/System/expected/test_specialDateParams_lastweek__VisitsSummary.getVisits_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..606fbb524182170284d7f1baad7fce4697d9b8b3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_specialDateParams_lastweek__VisitsSummary.getVisits_day.xml @@ -0,0 +1,2 @@ + +1 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_specialDateParams_lastyear__Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_specialDateParams_lastyear__Actions.getPageTitles_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..2a3ee0717b2e50d57dc775f605428c889df18d3d --- /dev/null +++ b/tests/PHPUnit/System/expected/test_specialDateParams_lastyear__Actions.getPageTitles_day.xml @@ -0,0 +1,27 @@ + + + + + 1 + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 100% + 100% + pageTitle==Visit%2Bproduct + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_specialDateParams_lastyear__VisitsSummary.getVisits_day.xml b/tests/PHPUnit/System/expected/test_specialDateParams_lastyear__VisitsSummary.getVisits_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..606fbb524182170284d7f1baad7fce4697d9b8b3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_specialDateParams_lastyear__VisitsSummary.getVisits_day.xml @@ -0,0 +1,2 @@ + +1 \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_specialDateParams_range__Actions.getPageTitles_range.xml b/tests/PHPUnit/System/expected/test_specialDateParams_range__Actions.getPageTitles_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..759d5c33928597cf1e3853a6915ae9caba071f15 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_specialDateParams_range__Actions.getPageTitles_range.xml @@ -0,0 +1,75 @@ + + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 100% + 100% + pageTitle==Checkout%252FPurchasing... + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 100% + 100% + pageTitle==incredible%2521 + + + + 1 + 1 + 0 + 0 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 100% + 100% + pageTitle==Visit%2Bproduct + + \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_specialDateParams_range__VisitsSummary.getVisits_range.xml b/tests/PHPUnit/System/expected/test_specialDateParams_range__VisitsSummary.getVisits_range.xml new file mode 100644 index 0000000000000000000000000000000000000000..15ef03fb49cfea4767aa035a031e96c3b348bc93 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_specialDateParams_range__VisitsSummary.getVisits_range.xml @@ -0,0 +1,2 @@ + +3 \ No newline at end of file diff --git a/tests/PHPUnit/Unit/API/ApiRendererTest.php b/tests/PHPUnit/Unit/API/ApiRendererTest.php new file mode 100644 index 0000000000000000000000000000000000000000..9373963727a80303bbea964f230538abad75e3da --- /dev/null +++ b/tests/PHPUnit/Unit/API/ApiRendererTest.php @@ -0,0 +1,51 @@ +loadPlugins(array('API')); + } + + public function testFactoryShouldCreateAnInstanceIfValidFormatGiven() + { + $renderer = ApiRenderer::factory('xml', array()); + $this->assertInstanceOf('Piwik\Plugins\API\Renderer\Xml', $renderer); + + $renderer = ApiRenderer::factory('XML', array()); + $this->assertInstanceOf('Piwik\Plugins\API\Renderer\Xml', $renderer); + + $renderer = ApiRenderer::factory('cSv', array()); + $this->assertInstanceOf('Piwik\Plugins\API\Renderer\Csv', $renderer); + + $renderer = ApiRenderer::factory('xmL', array()); + $this->assertInstanceOf('Piwik\Plugins\API\Renderer\Xml', $renderer); + + $renderer = ApiRenderer::factory('OriginAl', array()); + $this->assertInstanceOf('Piwik\Plugins\API\Renderer\Original', $renderer); + } + + public function testFactoryShouldThrowAnExceptionIfInvalidFormatGiven() + { + $this->expectException(\Exception::class); + $this->expectExceptionMessage('General_ExceptionInvalidRendererFormat'); + + ApiRenderer::factory('csvi', array()); + } +} diff --git a/tests/PHPUnit/Unit/API/DataTableGenericFilterTest.php b/tests/PHPUnit/Unit/API/DataTableGenericFilterTest.php new file mode 100644 index 0000000000000000000000000000000000000000..ae0c0c1eef34afe385eff70728180ac4d0ec0501 --- /dev/null +++ b/tests/PHPUnit/Unit/API/DataTableGenericFilterTest.php @@ -0,0 +1,31 @@ +addRowsFromSimpleArray([ + ['nb_visits' => 2, 'nb_actions' => 3], + ['nb_visits' => 4, 'nb_actions' => 5], + ]); + $dataTable->setMetadata(DataTable::GENERIC_FILTERS_TO_DISABLE_METADATA_NAME, ['Limit']); + + $genericFilter = new DataTableGenericFilter(['filter_limit' => 1], null); + $genericFilter->filter($dataTable); + + $this->assertEquals(2, $dataTable->getRowsCount()); + } +} diff --git a/tests/PHPUnit/Unit/API/ResponseBuilderTest.php b/tests/PHPUnit/Unit/API/ResponseBuilderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d7a251ea118e33699ecafa4ec55f91488a5f1b48 --- /dev/null +++ b/tests/PHPUnit/Unit/API/ResponseBuilderTest.php @@ -0,0 +1,351 @@ +loadPlugins(array('API')); + } + + public function testGetResponseExceptionShouldFormatExceptionDependingOnFormatAndAddDebugHelp() + { + $builder = new ResponseBuilder('xml', array()); + $response = $builder->getResponseException(new Exception('My Message')); + + $this->assertEquals(' + + +', $response); + } + + public function testGetResponseShouldTreatAsSuccessIfNoValue() + { + $builder = new ResponseBuilder('xml', array()); + $response = $builder->getResponse(null); + + $this->assertEquals(' + + +', $response); + } + + public function testGetResponseShouldNotReturnAnythingIfContentWasOutput() + { + echo 5; + $builder = new ResponseBuilder('xml', array()); + $response = $builder->getResponse(null); + + $this->assertNull($response); + ob_clean(); + } + + public function testGetResponseShouldHandleScalar() + { + $builder = new ResponseBuilder('xml', array()); + + $response = $builder->getResponse(true); + $this->assertEquals(' +1', $response); + + $response = $builder->getResponse(5); + $this->assertEquals(' +5', $response); + + $response = $builder->getResponse('string'); + $this->assertEquals(' +string', $response); + } + + public function testGetResponseShouldHandleDataTable() + { + $builder = new ResponseBuilder('xml', array()); + + $dataTable = new DataTable(); + $dataTable->addRowFromSimpleArray(array('nb_visits' => 5, 'nb_random' => 10)); + + $response = $builder->getResponse($dataTable); + $this->assertEquals(' + + + 5 + 10 + +', $response); + } + + public function testGetResponseShouldHandleObject() + { + $object = new \stdClass(); + + $builder = new ResponseBuilder('xml', array()); + $response = $builder->getResponse($object); + $this->assertSame(' + + +', $response); + + $builder = new ResponseBuilder('original', array()); + $response = $builder->getResponse($object); + $this->assertSame($object, $response); + } + + public function testGetResponseShouldHandleResource() + { + $resource = curl_init(); + + $builder = new ResponseBuilder('xml', array()); + $response = $builder->getResponse($resource); + $this->assertSame(' + + +', $response); + + $builder = new ResponseBuilder('original', array()); + $response = $builder->getResponse($resource); + $this->assertSame($resource, $response); + } + + public function testGetResponseShouldHandleArray() + { + $builder = new ResponseBuilder('xml', array()); + $response = $builder->getResponse(array(1, 2, 3, 'string', 10)); + $this->assertSame(' + + 1 + 2 + 3 + string + 10 +', $response); + } + + public function testGetResponseShouldHandleAssociativeArray() + { + $builder = new ResponseBuilder('xml', array()); + $response = $builder->getResponse(array('test' => 'two', 'test2' => 'three')); + $this->assertSame(' + + + two + three + +', $response); + } + + public function testGetResponseShouldHandleIndexedAssociativeArray() + { + $builder = new ResponseBuilder('xml', array()); + $response = $builder->getResponse(array(array('test' => 'two', 'test2' => 'three'))); + $this->assertSame(' + + + two + three + +', $response); + } + + public function testGetResponseShouldBeAbleToApplyFilterOnIndexedAssociativeArray() + { + $input = array(); + for ($i = 0; $i < 10; $i++) { + $input[] = array('test' => 'two' . $i, 'test2' => 'three'); + } + + $builder = new ResponseBuilder('original', array('serialize' => 0)); + $response = $builder->getResponse($input); + + $this->assertEquals($input, $response); + $this->assertCount(10, $response); + + $builder = new ResponseBuilder('original', array('serialize' => 0, 'showColumns' => 'test')); + $response = $builder->getResponse($input); + + $this->assertEquals(array('test' => 'two0'), array_shift($response)); + } + + public function testGetResponseShouldApplyFilterLimitOnIndexedArray() + { + $input = range(0, 100); + $expected = range(0, 14); + $this->assertLimitedResponseEquals($expected, $input, $limit = 15, $offset = null); + } + + public function testGetResponseShouldReturnEmptyArrayOnIndexedArrayIfOffsetIsTooHigh() + { + $input = range(0, 100); + $this->assertLimitedResponseEquals(array(), $input, $limit = 15, $offset = 200); + } + + public function testGetResponseShouldReturnAllOnIndexedArrayIfLimitIsTooHigh() + { + $input = range(0, 100); + $this->assertLimitedResponseEquals($input, $input, $limit = 200, $offset = null); + } + + public function testGetResponseShouldNotApplyFilterLimitOnIndexedArrayIfParamNotSet() + { + $input = range(0, 100); + $this->assertLimitedResponseEquals($input, $input, $limit = null, $offset = null); + } + + public function testGetResponseShouldApplyLimitOnIndexedArrayIfLimitIsDefaultFilterLimitValue() + { + $limit = Config::getInstance()->General['API_datatable_default_limit']; + $input = range(0, 2000); + $expected = range(0, $limit - 1); + $this->assertLimitedResponseEquals($expected, $input, $limit, $offset = 0); + } + + private function assertLimitedResponseEquals($expectedResponse, $input, $limit, $offset = 0) + { + $params = array('serialize' => 0); + + if (!is_null($limit)) { + $params['filter_limit'] = $limit; + } + + if (!is_null($offset)) { + $params['filter_offset'] = $offset; + } + + $builder = new ResponseBuilder('json', $params); + $response = json_decode($builder->getResponse($input), true); + + $this->assertEquals($expectedResponse, $response); + } + + public function testGetResponseShouldAlwaysApplyDefaultFilterLimitEvenWhenResponseIsAnArray() + { + $input = range(0, 200); + $limit = Config::getInstance()->General['API_datatable_default_limit']; + + $builder = new ResponseBuilder('json', array( + 'serialize' => 0, + 'api_datatable_default_limit' => $limit, + 'filter_limit' => $limit, + 'filter_offset' => 0)); + $response = $builder->getResponse($input); + + $this->assertEquals(range(0, 99), json_decode($response, true)); + } + + public function testGetResponseShouldApplyLimitIfLimitIsSetBySystemButDifferentToDefaultLimit() + { + $input = range(0, 200); + $defaultLimit = Config::getInstance()->General['API_datatable_default_limit']; + $limit = $defaultLimit - 1; + + $builder = new ResponseBuilder('json', array( + 'serialize' => 0, + 'api_datatable_default_limit' => $defaultLimit, + 'filter_limit' => $limit, + 'filter_offset' => 0)); + $response = $builder->getResponse($input); + + $this->assertEquals(range(0, $limit - 1), json_decode($response, true)); + } + + public function testGetResponseShouldApplyFilterOffsetOnIndexedArrayIfFilterLimitIsGiven() + { + $input = range(0, 100); + $expected = range(30, 44); + $this->assertLimitedResponseEquals($expected, $input, $limit = 15, $offset = 30); + } + + public function testGetResponseShouldApplyFilterOffsetOnIndexedArrayIfNoFilterLimitIsSetButOffset() + { + $input = range(0, 100); + $expected = range(30, 100); + $this->assertLimitedResponseEquals($expected, $input, $limit = null, $offset = 30); + } + + public function testGetResponseShouldReturnEmptyArrayOnIndexedArrayIfFilterLimitIsZero() + { + $input = range(0, 100); + $this->assertLimitedResponseEquals($expected = array(), $input, $limit = 0, $offset = 30); + } + + public function testGetResponseShouldApplyFilterOffsetOnIndexedArrayIfFilterLimitIsMinusOne() + { + $input = range(0, 100); + $expected = range(30, 100); + $this->assertLimitedResponseEquals($expected, $input, $limit = -1, $offset = 30); + } + + public function testGetResponseShouldReturnAllOnIndexedArrayIfFilterLimitIsMinusOne() + { + $input = range(0, 100); + $this->assertLimitedResponseEquals($input, $input, $limit = -1, $offset = null); + } + + public function testGetResponseShouldApplyPatternIfFilterColumnAndPatternIsGiven() + { + $input = array( + 0 => array('name' => 'google', 'url' => 'www.google.com'), + 1 => array('name' => 'ask', 'url' => 'www.ask.com'), + 2 => array('name' => 'piwik', 'url' => 'piwik.org'), + 3 => array('url' => 'nz.yahoo.com'), + 4 => array('name' => 'amazon', 'url' => 'amazon.com'), + 5 => array('url' => 'nz.piwik.org'), + ); + + $builder = new ResponseBuilder('json', array( + 'serialize' => 0, + 'filter_limit' => -1, + 'filter_column' => array('name', 'url'), + 'filter_pattern' => 'piwik', + )); + $response = $builder->getResponse($input); + + $expected = array( + 2 => array('name' => 'piwik', 'url' => 'piwik.org'), + 5 => array('url' => 'nz.piwik.org'), + ); + $this->assertEquals($expected, json_decode($response, true)); + } + + public function testGetResponseShouldBeAbleToApplyColumFilterAndLimitFilterOnIndexedAssociativeArray() + { + $input = array(); + for ($i = 0; $i < 10; $i++) { + $input[] = array('test' => 'two' . $i, 'test2' => 'three'); + } + + $limit = 3; + + $builder = new ResponseBuilder('json', array( + 'serialize' => 0, + 'filter_limit' => $limit, + 'filter_offset' => 3, + 'showColumns' => 'test', + )); + $response = $builder->getResponse($input); + + $this->assertEquals(array( + 0 => array('test' => 'two3'), + 1 => array('test' => 'two4'), + 2 => array('test' => 'two5'), + ), json_decode($response, true)); + } +} diff --git a/tests/PHPUnit/Unit/Archive/ArchiveStateTest.php b/tests/PHPUnit/Unit/Archive/ArchiveStateTest.php new file mode 100644 index 0000000000000000000000000000000000000000..9527ddc8e823671868f340e8220a2283bfe3366a --- /dev/null +++ b/tests/PHPUnit/Unit/Archive/ArchiveStateTest.php @@ -0,0 +1,274 @@ +setUpSite([]); + + [$archiveData, $archiveIds, $archiveStates] = $this->createArchiveInfo( + $date1, + $date2, + $tsArchived, + $archiveState + ); + + $collection = $this->createCollection($archiveData); + + $archiveState = new ArchiveState(); + $archiveState->addMetadataToResultCollection($collection, $archiveData, $archiveIds, $archiveStates); + + $this->assertMetadataState($expectedMetadataState, $collection); + } + + public function getArchiveStateTestData(): iterable + { + yield 'complete' => [ + '2020-01-31', + '2020-01-31', + '2020-02-01 10:00:00', + ArchiveWriter::DONE_OK, + ArchiveState::COMPLETE, + ]; + + yield 'invalidated archive' => [ + '2020-01-31', + '2020-01-31', + '2020-02-01 10:00:00', + ArchiveWriter::DONE_INVALIDATED, + ArchiveState::INVALIDATED, + ]; + + yield 'archive date matching date end exactly' => [ + '2020-01-31', + '2020-01-31', + '2020-01-31 23:59:59', + ArchiveWriter::DONE_OK, + ArchiveState::INCOMPLETE, + ]; + + yield 'archive date one second before date end' => [ + '2020-01-31', + '2020-01-31', + '2020-01-31 23:59:58', + ArchiveWriter::DONE_OK, + ArchiveState::INCOMPLETE, + ]; + + yield 'archive date one second past date end' => [ + '2020-01-31', + '2020-01-31', + '2020-02-01 00:00:00', + ArchiveWriter::DONE_OK, + ArchiveState::COMPLETE, + ]; + } + + /** + * @dataProvider getCheckTsArchivedWithBorderTimezonesTestData + */ + public function testCheckTsArchivedWithBorderTimezones( + string $timezone, + string $date, + string $tsArchivedUTC, + string $expectedState + ): void { + $this->setUpSite(['timezone' => $timezone]); + + [$archiveData, $archiveIds, $archiveStates] = $this->createArchiveInfo( + $date, + $date, + $tsArchivedUTC, + ArchiveWriter::DONE_OK + ); + + $collection = $this->createCollection($archiveData); + + $archiveState = new ArchiveState(); + $archiveState->addMetadataToResultCollection($collection, $archiveData, $archiveIds, $archiveStates); + + $this->assertMetadataState($expectedState, $collection); + } + + public function getCheckTsArchivedWithBorderTimezonesTestData(): iterable + { + yield 'UTC+14, complete' => [ + 'UTC+14', + '2020-10-10', + '2020-10-10 10:00:00', + ArchiveState::COMPLETE, + ]; + + yield 'UTC+14, incomplete' => [ + 'UTC+14', + '2020-10-10', + '2020-10-10 09:59:59', + ArchiveState::INCOMPLETE, + ]; + + yield 'UTC-12, complete' => [ + 'UTC-12', + '2020-10-10', + '2020-10-11 12:00:00', + ArchiveState::COMPLETE, + ]; + + yield 'UTC-12, incomplete' => [ + 'UTC-12', + '2020-10-10', + '2020-10-11 11:59:59', + ArchiveState::INCOMPLETE, + ]; + } + + public function testNoMetadataSetIfNoInformationAvailable(): void + { + $this->setUpSite([]); + + [$archiveData, $archiveIds] = $this->createArchiveInfo( + '2020-01-31', + '2020-01-31', + '2020-02-01 10:00:00', + ArchiveWriter::DONE_INVALIDATED + ); + + $collection = $this->createCollection($archiveData); + + $archiveState = new ArchiveState(); + $archiveState->addMetadataToResultCollection($collection, $archiveData, $archiveIds, []); + + $this->assertMetadataState(null, $collection); + } + + private function assertMetadataState(?string $expectedState, DataCollection $collection): void + { + $data = $collection->getIndexedArray([]); + $metadata = $collection->getDataRowMetadata($data); + + if (null === $expectedState) { + self::assertArrayNotHasKey(DataTable::ARCHIVE_STATE_METADATA_NAME, $metadata); + } else { + self::assertSame($expectedState, $metadata[DataTable::ARCHIVE_STATE_METADATA_NAME]); + } + } + + private function createArchiveInfo( + string $date1, + string $date2, + string $tsArchived, + int $archiveState + ): array { + $archiveId = 15; + $rangeStr = $date1 . ',' . $date2; + + $archiveData = [ + [ + 'idsite' => self::IDSITE, + 'date1' => $date1, + 'date2' => $date2, + 'name' => 'nb_visits', + 'value' => 123, + 'ts_archived' => $tsArchived, + ], + ]; + + $archiveIds = [$rangeStr => [$archiveId]]; + $archiveStates = [self::IDSITE => [$rangeStr => [$archiveId => $archiveState]]]; + + return [$archiveData, $archiveIds, $archiveStates]; + } + + private function createCollection($archiveData): DataCollection + { + $periods = []; + + foreach ($archiveData as $row) { + if ($row['date1'] === $row['date2']) { + $periods[] = Period\Factory::build('day', $row['date1']); + } else { + $periods[] = Period\Factory::build('range', $row['date1'] . ',' . $row['date2']); + } + } + + $collection = new DataCollection( + ['nb_visits'], + 'numeric', + [1], + $periods, + $this->createMockSegment(), + ['nb_visits' => -1] + ); + + foreach ($archiveData as $row) { + $collection->set( + self::IDSITE, + $row['date1'] . ',' . $row['date2'], + $row['name'], + $row['value'], + [ + DataTable::ARCHIVED_DATE_METADATA_NAME => $row['ts_archived'], + ] + ); + } + + return $collection; + } + + private function createMockSegment(): Segment + { + // using mock since Segment makes API queries + $segment = $this->getMockBuilder(Segment::class)->disableOriginalConstructor()->getMock(); + $segment->method('getString')->willReturn(''); + + return $segment; + } + + private function setUpSite(array $siteInfo): void + { + $defaults = [ + 'idsite' => self::IDSITE, + 'ecommerce' => 0, + 'sitesearch' => 0, + 'exclude_unknown_urls' => 0, + 'keep_url_fragment' => 0, + 'timezone' => 'UTC', + ]; + + // setting static site information since Site makes API queries + Site::setSiteFromArray(self::IDSITE, array_merge($defaults, $siteInfo)); + } +} diff --git a/tests/PHPUnit/Unit/Archive/ChunkTest.php b/tests/PHPUnit/Unit/Archive/ChunkTest.php new file mode 100644 index 0000000000000000000000000000000000000000..1b5fa4652eb0ce5772e7b66ae6f683c38d6efe84 --- /dev/null +++ b/tests/PHPUnit/Unit/Archive/ChunkTest.php @@ -0,0 +1,130 @@ +chunk = new Chunk(); + } + + /** + * @dataProvider getRecordNameForTableIdDataProvider + */ + public function testGetRecordNameForTableIdShouldSplitChunksIntoBitsOf100($expectedChunk, $tableId) + { + $this->assertEquals($this->recordName . '_chunk_' . $expectedChunk, $this->chunk->getRecordNameForTableId($this->recordName, $tableId)); + } + + public function getRecordNameForTableIdDataProvider() + { + return array( + array($expectedChunk = '0_99', $tableId = 0), + array('0_99', 1), + array('0_99', 45), + array('0_99', 99), + array('100_199', 100), + array('100_199', 101), + array('100_199', 134), + array('100_199', 199), + array('200_299', 200), + array('1000_1099', 1000), + array('9900_9999', 9999), + array('10000_10099', 10000), + ); + } + + /** + * @dataProvider isRecordNameAChunkDataProvider + */ + public function testIsRecordNameAChunkShouldSplitChunksIntoBitsOf100($isChunk, $recordName) + { + $this->assertSame($isChunk, $this->chunk->isRecordNameAChunk($recordName)); + } + + public function isRecordNameAChunkDataProvider() + { + return array( + array($isChunk = true, $recordName = 'Actions_ActionsUrl_chunk_0_99'), + array(true, 'Actions_ActionsUrl_chunk_100_199'), + array(true, 'Actions_ActionsUrl_chunk_1000_1099'), + array(false, 'Actions_ActionsUrl_chunk_0'), // it is no range, should contain something after "chunk_0" eg "chunk_0_99" + array(false, 'Actions_ActionsUrl_chunk_9999'), + array(false, 'Actions_ActionsUrl_chunk_4'), + array(false, 'Actions_ActionsUrl_chunk_ActionsTest_4'), // should end with _chunk_NUMERIC + array(false, 'Actions_ActionsUrl_chunk_4_ActionsTest'), // should end with _chunk_NUMERIC + array(false, 'Actions_ActionsUrl_chunk9999'), + array(false, 'Actions_ActionsUrlchunk_9999'), + array(false, 'chunk_9999'), + array(false, 'chunk_9999'), + ); + } + + public function testMoveArchiveBlobsIntoChunksNoChunksGiven() + { + $this->assertSame(array(), $this->chunk->moveArchiveBlobsIntoChunks($this->recordName, array())); + } + + /** + * @dataProvider isRecordNameAChunkDataProvider + */ + public function testMoveArchiveBlobsIntoChunksShouldSplitBlobsIntoChunks() + { + $array = array_fill(0, 245, 'test'); + $expected = array( + $this->recordName . '_chunk_0_99' => array_fill(0, Chunk::NUM_TABLES_IN_CHUNK, 'test'), + $this->recordName . '_chunk_100_199' => array_fill(100, Chunk::NUM_TABLES_IN_CHUNK, 'test'), + $this->recordName . '_chunk_200_299' => array_fill(200, 45, 'test'), + ); + + $this->assertSame($expected, $this->chunk->moveArchiveBlobsIntoChunks($this->recordName, $array)); + } + + /** + * @dataProvider getRecordNameWithoutChunkAppendixDataProvider + */ + public function testGetRecordNameWithoutChunkAppendixShouldSplitChunksIntoBitsOf100($realName, $recordName) + { + $this->assertSame($realName, $this->chunk->getRecordNameWithoutChunkAppendix($recordName)); + } + + public function getRecordNameWithoutChunkAppendixDataProvider() + { + return array( + array($isChunk = 'Actions_ActionsUrl', $recordName = 'Actions_ActionsUrl_chunk_0_99'), + array('Actions_ActionsUrl', 'Actions_ActionsUrl_chunk_9900_9999'), + array('Actions_ActionsUrl', 'Actions_ActionsUrl_chunk_400_499'), + // the following are not chunks so we do return the full record name + array('Actions_ActionsUrl_chunk_0', 'Actions_ActionsUrl_chunk_0'), + array('Actions_ActionsUrl_chunk_9999', 'Actions_ActionsUrl_chunk_9999'), + array('Actions_ActionsUrl_chunk_4', 'Actions_ActionsUrl_chunk_4'), + array('Actions_ActionsUrl_chunk_ActionsTest_4', 'Actions_ActionsUrl_chunk_ActionsTest_4'), + array('Actions_ActionsUrl_chunk_4_ActionsTest', 'Actions_ActionsUrl_chunk_4_ActionsTest'), + array('Actions_ActionsUrl_chunk9999', 'Actions_ActionsUrl_chunk9999'), + array('Actions_ActionsUrlchunk_9999', 'Actions_ActionsUrlchunk_9999'), + array('chunk_9999', 'chunk_9999'), + array('chunk_9999', 'chunk_9999'), + ); + } +} diff --git a/tests/PHPUnit/Unit/Archive/DataCollectionTest.php b/tests/PHPUnit/Unit/Archive/DataCollectionTest.php new file mode 100644 index 0000000000000000000000000000000000000000..6a1e58f5b8e4c2fea96eafccd4b131603a72ac80 --- /dev/null +++ b/tests/PHPUnit/Unit/Archive/DataCollectionTest.php @@ -0,0 +1,281 @@ +site1, $this->site2); + $dataNames = array('Name1', 'Name2'); + $defaultRow = array( + 'default' => 1, + ); + + if ($onlyOnePeriod) { + $periods = array($periods[0]); + } + + if ($onlyOneSite) { + $siteIds = array($siteIds[0]); + } + + // using mock since Segment makes API queries + $mockSegment = $this->getMockBuilder(Segment::class) + ->disableOriginalConstructor() + ->getMock() + ->method('getString')->willReturn(''); + return new DataCollection($dataNames, $dataType, $siteIds, $periods, $mockSegment, $defaultRow); + } + + public function testGetIndexedArrayNumericNoResultIndicesNoData() + { + $collection = $this->createCollection($onlyOnePeriod = true, $onlyOneSite = true); + $this->assertEquals(array(), $collection->getIndexedArray($resultIndices = array())); + } + + public function testGetIndexedArrayNumericNoResultIndicesWithData() + { + $collection = $this->createCollection($onlyOnePeriod = true, $onlyOneSite = true); + $collection->set($this->site1, '2012-12-12,2012-12-12', 'nb_visits', '5'); + $collection->set($this->site1, '2012-12-12,2012-12-12', 'nb_unique_visits', '10'); + + $expected = array( + 'default' => 1, + 'nb_visits' => '5', + 'nb_unique_visits' => '10', + ); + + $this->assertEquals($expected, $collection->getIndexedArray($resultIndices = array())); + } + + public function testGetIndexedArrayNumericNoResultIndicesWithDefaultOverwritten() + { + $collection = $this->createCollection($onlyOnePeriod = true, $onlyOneSite = true); + $collection->set($this->site1, '2012-12-12,2012-12-12', 'nb_visits', '5'); + $collection->set($this->site1, '2012-12-12,2012-12-12', 'default', '10'); + + $expected = array( + 'default' => '10', + 'nb_visits' => '5', + ); + + $this->assertEquals($expected, $collection->getIndexedArray($resultIndices = array())); + } + + private function getSiteResultIndices() + { + return array(DataTableFactory::TABLE_METADATA_SITE_INDEX => 'idSite'); + } + + public function testGetIndexedArrayNumericWithSiteResultIndicesNoData() + { + $collection = $this->createCollection(); + + $this->assertEquals(array( + 1 => array(), + 2 => array(), + ), $collection->getIndexedArray($this->getSiteResultIndices())); + } + + public function testGetIndexedArrayNumericWithSiteResultIndicesWithData() + { + $collection = $this->createCollection(); + $collection->set($this->site1, '2012-12-12,2012-12-12', 'nb_visits', '5'); + $collection->set($this->site1, '2012-12-12,2012-12-12', 'nb_unique_visits', '10'); + + $expected = array( + 1 => array( + 'default' => 1, + 'nb_visits' => '5', + 'nb_unique_visits' => '10', + ), + 2 => array( + ), + ); + + $this->assertEquals($expected, $collection->getIndexedArray($this->getSiteResultIndices())); + } + + public function testGetIndexedArrayNumericWithSiteResultIndicesWithDefaultOverwritten() + { + $collection = $this->createCollection(); + $collection->set($this->site1, '2012-12-12,2012-12-12', 'nb_visits', '5'); + $collection->set($this->site1, '2012-12-12,2012-12-12', 'default', '10'); + $collection->set($this->site2, '2012-12-12,2012-12-12', 'nb_visits', '15'); + + $expected = array( + 1 => array( + 'default' => '10', + 'nb_visits' => '5', + ), + 2 => array( + 'default' => 1, + 'nb_visits' => '15', + ), + ); + + $this->assertEquals($expected, $collection->getIndexedArray($this->getSiteResultIndices())); + } + + private function getPeriodResultIndices() + { + return array(DataTableFactory::TABLE_METADATA_PERIOD_INDEX => 'date'); + } + + public function testGetIndexedArrayNumericWithPeriodResultIndicesNoData() + { + $collection = $this->createCollection($onlyOnePeriod = false, $onlyOneSite = true); + + $this->assertEquals(array( + $this->date1 => array(), + $this->date2 => array(), + ), $collection->getIndexedArray($this->getPeriodResultIndices())); + } + + public function testGetIndexedArrayNumericWithPeriodResultIndicesWithData() + { + $collection = $this->createCollection($onlyOnePeriod = false, $onlyOneSite = true); + $collection->set($this->site1, $this->date1, 'nb_visits', '5'); + $collection->set($this->site1, $this->date1, 'nb_unique_visits', '10'); + + $expected = array( + $this->date1 => array( + 'default' => 1, + 'nb_visits' => '5', + 'nb_unique_visits' => '10', + ), + $this->date2 => array( + ), + ); + + $this->assertEquals($expected, $collection->getIndexedArray($this->getPeriodResultIndices())); + } + + public function testGetIndexedArrayNumericWithPeriodResultIndicesWithDefaultOverwritten() + { + $collection = $this->createCollection($onlyOnePeriod = false, $onlyOneSite = true); + $collection->set($this->site1, $this->date1, 'nb_visits', '5'); + $collection->set($this->site1, $this->date1, 'default', '10'); + $collection->set($this->site1, $this->date2, 'nb_visits', '15'); + + $expected = array( + $this->date1 => array( + 'default' => '10', + 'nb_visits' => '5', + ), + $this->date2 => array( + 'default' => 1, + 'nb_visits' => '15', + ), + ); + + $this->assertEquals($expected, $collection->getIndexedArray($this->getPeriodResultIndices())); + } + + + private function getPeriodAndSiteResultIndices() + { + return array_merge($this->getSiteResultIndices(), $this->getPeriodResultIndices()); + } + + public function testGetIndexedArrayNumericWithPeriodAndSiteResultIndicesNoData() + { + $collection = $this->createCollection(); + + $expected = array( + $this->site1 => array( + $this->date1 => array(), + $this->date2 => array(), + ), + $this->site2 => array( + $this->date1 => array(), + $this->date2 => array(), + ), + ); + + $this->assertEquals($expected, $collection->getIndexedArray($this->getPeriodAndSiteResultIndices())); + } + + public function testGetIndexedArrayNumericWithPeriodAndSiteResultIndicesWithData() + { + $collection = $this->createCollection(); + $collection->set($this->site1, $this->date1, 'nb_visits', '5'); + $collection->set($this->site1, $this->date1, 'nb_unique_visits', '10'); + $collection->set($this->site2, $this->date1, 'nb_unique_visits', '21'); + $collection->set($this->site2, $this->date2, 'nb_unique_visits', '22'); + + $expected = array( + $this->site1 => array( + $this->date1 => array( + 'default' => 1, + 'nb_visits' => '5', + 'nb_unique_visits' => '10', + ), + $this->date2 => array(), + ), + $this->site2 => array( + $this->date1 => array( + 'default' => 1, + 'nb_unique_visits' => '21', + ), + $this->date2 => array( + 'default' => 1, + 'nb_unique_visits' => '22', + ), + ), + ); + + $this->assertEquals($expected, $collection->getIndexedArray($this->getPeriodAndSiteResultIndices())); + } + + public function testGetIndexedArrayNumericWithPeriodAndSiteResultIndicesWithDefaultOverwritten() + { + $collection = $this->createCollection(); + $collection->set($this->site1, $this->date1, 'nb_visits', '5'); + $collection->set($this->site1, $this->date1, 'default', '10'); + $collection->set($this->site2, $this->date1, 'default', '21'); + + $expected = array( + $this->site1 => array( + $this->date1 => array( + 'default' => 10, + 'nb_visits' => '5', + ), + $this->date2 => array(), + ), + $this->site2 => array( + $this->date1 => array('default' => 21), + $this->date2 => array(), + ), + ); + + $this->assertEquals($expected, $collection->getIndexedArray($this->getPeriodAndSiteResultIndices())); + } +} diff --git a/tests/PHPUnit/Unit/ArchiveProcessor/BlobTableAggregatorTest.php b/tests/PHPUnit/Unit/ArchiveProcessor/BlobTableAggregatorTest.php new file mode 100644 index 0000000000000000000000000000000000000000..e332ca8475de0a50cfce36e8f1ed8cfb2a92ffa1 --- /dev/null +++ b/tests/PHPUnit/Unit/ArchiveProcessor/BlobTableAggregatorTest.php @@ -0,0 +1,126 @@ +assertSame(123, BlobTableAggregator::parseSubtableIdFromBlobName('Actions_actions_123')); + $this->assertNull(BlobTableAggregator::parseSubtableIdFromBlobName('Actions_actions_subtable')); + } + + public function testAggregateBlobRowsRespectsRowFilter(): void + { + $rows = array_merge( + $this->makeArchiveDataRowsForPeriod('Test_record', '2020-01-01', $this->makeSimpleTable('page-a', 3)), + $this->makeArchiveDataRowsForPeriod('Test_record', '2020-01-02', $this->makeSimpleTable('page-b', 7)) + ); + + [$result, $hasRows] = BlobTableAggregator::aggregateBlobRows( + $rows, + 'Test_record', + null, + function (DataTable $table): void { + }, + function (array $archiveDataRow): bool { + return $archiveDataRow['date1'] === '2020-01-01'; + } + ); + + $this->assertTrue($hasRows); + $this->assertSame(1, $result->getRowsCount()); + $row = $result->getRowFromLabel('page-a'); + $this->assertInstanceOf(Row::class, $row); + $this->assertSame(3, $row->getColumn('nb_visits')); + } + + public function testAggregateBlobRowsCallsMissingParentCallbackForOrphanedSubtable(): void + { + $rows = $this->makeArchiveDataRowsForPeriod( + 'Test_record', + '2020-01-01', + $this->makeTableWithSubtable('parent', 'child', 5) + ); + $rows[] = [ + 'name' => 'Test_record_999', + 'date1' => '2020-01-02', + 'date2' => '2020-01-02', + 'value' => $rows[1]['value'], + ]; + + $missingParents = []; + [$result, $hasRows] = BlobTableAggregator::aggregateBlobRows( + $rows, + 'Test_record', + null, + function (DataTable $table): void { + }, + null, + function (string $period, int $tableId) use (&$missingParents): void { + $missingParents[] = [$period, $tableId]; + } + ); + + $this->assertTrue($hasRows); + $this->assertContains(['2020-01-02,2020-01-02', 999], $missingParents); + $this->assertGreaterThan(0, $result->getRowsCount()); + $rows = $result->getRows(); + $row = reset($rows); + $this->assertInstanceOf(Row::class, $row); + } + + private function makeSimpleTable(string $label, int $nbVisits): DataTable + { + $table = new DataTable(); + $table->addRowFromSimpleArray(['label' => $label, 'nb_visits' => $nbVisits]); + return $table; + } + + private function makeTableWithSubtable(string $parentLabel, string $childLabel, int $nbVisits): DataTable + { + $table = new DataTable(); + $row = new Row([Row::COLUMNS => ['label' => $parentLabel, 'nb_visits' => $nbVisits]]); + + $subtable = new DataTable(); + $subtable->addRowFromSimpleArray(['label' => $childLabel, 'nb_visits' => $nbVisits]); + $row->setSubtable($subtable); + + $table->addRow($row); + return $table; + } + + /** + * @return array + */ + private function makeArchiveDataRowsForPeriod(string $recordName, string $date, DataTable $table): array + { + $rows = []; + $serialized = $table->getSerialized(); + $rootKey = array_key_first($serialized); + + foreach ($serialized as $key => $value) { + $name = $key === $rootKey ? $recordName : $recordName . '_' . $key; + $rows[] = [ + 'name' => $name, + 'date1' => $date, + 'date2' => $date, + 'value' => $value, + ]; + } + + return $rows; + } +} diff --git a/tests/PHPUnit/Unit/ArchiveProcessor/RecordBuilderTest.php b/tests/PHPUnit/Unit/ArchiveProcessor/RecordBuilderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..acfabd961771bac969a45e2ef054e643a23a9af2 --- /dev/null +++ b/tests/PHPUnit/Unit/ArchiveProcessor/RecordBuilderTest.php @@ -0,0 +1,1937 @@ +numericRecordsInserted = []; + $this->blobRecordsInserted = []; + } + + protected function tearDown(): void + { + Manager::getInstance()->deleteAll(); + Site::clearCache(); + + parent::tearDown(); + } + + public function testBuildFromLogsDoesNothingIfRecordBuilderNotEnabled() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function isEnabled(ArchiveProcessor $archiveProcessor): bool + { + return false; + } + + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor(); + $recordBuilder->buildFromLogs($mockArchiveProcessor); + + $this->assertEmpty($this->numericRecordsInserted); + $this->assertEmpty($this->blobRecordsInserted); + } + + public function testBuildFromLogsInsertsDataReturnedByAggregate() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor(); + $recordBuilder->buildFromLogs($mockArchiveProcessor); + + $expectedNumericRecords = ['TestPlugin_myMetric' => 50]; + $expectedBlobRecords = [ + 'TestPlugin_myReport' => [ + [ + [Row::COLUMNS => ['label' => 'the thing', 'nb_visits' => 40], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => 'another thing', 'nb_visits' => 50], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => 'a third thing', 'nb_visits' => 20], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + ]; + + $this->assertEquals($expectedNumericRecords, $this->numericRecordsInserted); + $this->assertEquals($expectedBlobRecords, $this->blobRecordsInserted); + } + + public function testBuildFromLogsIgnoresDataIfAssociatedRecordMetadataDoesNotExist() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return []; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor(); + $recordBuilder->buildFromLogs($mockArchiveProcessor); + + $this->assertEmpty($this->numericRecordsInserted); + $this->assertEmpty($this->blobRecordsInserted); + } + + public function testBuildFromLogsIgnoresDataIfRecordMetadataValueExistsButIsInvalid() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + // @phpstan-ignore-next-line intentionally returns invalid values to verify runtime filtering. + return [ + 0, + 'def', + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor(); + $recordBuilder->buildFromLogs($mockArchiveProcessor); + + $this->assertEmpty($this->numericRecordsInserted); + $this->assertEmpty($this->blobRecordsInserted); + } + + public function testBuildFromLogsUsesRecordSpecificLimitAndSortWhenSpecifiedInRecordMetadata() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport') + ->setMaxRowsInTable(2) + ->setColumnToSortByBeforeTruncation('nb_visits'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 30, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor(); + $recordBuilder->buildFromLogs($mockArchiveProcessor); + + $expectedNumericRecords = ['TestPlugin_myMetric' => 30]; + $expectedBlobRecords = [ + 'TestPlugin_myReport' => [ + [ + -1 => [Row::COLUMNS => ['label' => -1, 'nb_visits' => 60], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + 0 => [Row::COLUMNS => ['label' => 'another thing', 'nb_visits' => 50], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + ]; + + $this->assertEquals($expectedNumericRecords, $this->numericRecordsInserted); + $this->assertEquals($expectedBlobRecords, $this->blobRecordsInserted); + } + + public function testBuildFromLogsUsesZeroRecordSpecificLimitInsteadOfDefaultLimit(): void + { + $recordBuilder = new class (2, null, 'nb_visits') extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport') + ->setMaxRowsInTable(0), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 30, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor(); + $recordBuilder->buildFromLogs($mockArchiveProcessor); + + $expectedNumericRecords = ['TestPlugin_myMetric' => 30]; + $expectedBlobRecords = [ + 'TestPlugin_myReport' => [ + [ + [Row::COLUMNS => ['label' => 'the thing', 'nb_visits' => 40], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => 'another thing', 'nb_visits' => 50], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => 'a third thing', 'nb_visits' => 20], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + ]; + + $this->assertEquals($expectedNumericRecords, $this->numericRecordsInserted); + $this->assertEquals($expectedBlobRecords, $this->blobRecordsInserted); + } + + public function testBuildForNonDayPeriodDoesNothingIfRecordBuilderNotEnabled() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function isEnabled(ArchiveProcessor $archiveProcessor): bool + { + return false; + } + + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric'), + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myOtherMetric'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport2'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myOtherMetric' => 100, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + 'TestPlugin_myReport2' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week'); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $this->assertEmpty($this->numericRecordsInserted); + $this->assertEmpty($this->blobRecordsInserted); + } + + public function testBuildForNonDayPeriodAggregatesAllChildReportsIfNoRequestedReportsAreSpecified() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric'), + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myOtherMetric'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport2'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myOtherMetric' => 100, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + 'TestPlugin_myReport2' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week'); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $expectedNumericRecords = [ + 'TestPlugin_myMetric' => 9000, + 'TestPlugin_myOtherMetric' => 10500, + ]; + $expectedBlobRecords = [ + 'TestPlugin_myReport' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + 'TestPlugin_myReport2' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + ]; + + $this->assertEquals($expectedNumericRecords, $this->numericRecordsInserted); + $this->assertEquals($expectedBlobRecords, $this->blobRecordsInserted); + } + + public function testBuildForNonDayPeriodAggregatesOnlyRequestedReportsIfRequestedReportsSpecifiedAndNoneAlreadyExist() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric'), + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myOtherMetric'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport2'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myOtherMetric' => 100, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + 'TestPlugin_myReport2' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week', ['TestPlugin_myMetric', 'TestPlugin_myReport']); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $expectedNumericRecords = ['TestPlugin_myMetric' => 9000]; + $expectedBlobRecords = [ + 'TestPlugin_myReport' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + ]; + + $this->assertEquals($expectedNumericRecords, $this->numericRecordsInserted); + $this->assertEquals($expectedBlobRecords, $this->blobRecordsInserted); + } + + public function testBuildForNonDayPeriodAggregatesOnlyRequestedReportsThatDoNotExistIfSomeRequestedReportsAlreadyExist() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric'), + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myOtherMetric'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport2'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myOtherMetric' => 100, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + 'TestPlugin_myReport2' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor( + 'week', + ['TestPlugin_myOtherMetric', 'TestPlugin_myMetric', 'TestPlugin_myReport', 'TestPlugin_myReport2'], + ['TestPlugin_myMetric', 'TestPlugin_myReport'] + ); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $expectedNumericRecords = ['TestPlugin_myOtherMetric' => 9000]; + $expectedBlobRecords = [ + 'TestPlugin_myReport2' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + ]; + + $this->assertEquals($expectedNumericRecords, $this->numericRecordsInserted); + $this->assertEquals($expectedBlobRecords, $this->blobRecordsInserted); + } + + public function testBuildForNonDayPeriodUsesCustomBlobSerializationPropertiesIfSpecifiedInRecordMetadata() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric'), + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myOtherMetric'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport') + ->setColumnToSortByBeforeTruncation('nb_visits') + ->setMaxRowsInTable(2) + ->setBlobColumnAggregationOps(['nb_visits' => 'max']), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport2'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myOtherMetric' => 100, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + 'TestPlugin_myReport2' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week'); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $expectedNumericRecords = [ + 'TestPlugin_myMetric' => 9000, + 'TestPlugin_myOtherMetric' => 10500, + ]; + $expectedBlobRecords = [ + 'TestPlugin_myReport' => [ + [ + 0 => [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + -1 => [Row::COLUMNS => ['label' => '-1', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + 'TestPlugin_myReport2' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + ]; + + $this->assertEquals($expectedNumericRecords, $this->numericRecordsInserted); + $this->assertEquals($expectedBlobRecords, $this->blobRecordsInserted); + } + + public function testBuildForNonDayPeriodAppliesAggregatedRecordTransformAndLeavesOtherRecordsUntouched() + { + $received = (object) ['recordName' => null, 'hasArchiveProcessor' => false]; + + $recordBuilder = new class ($received) extends ArchiveProcessor\RecordBuilder { + private $received; + + public function __construct(object $received) + { + parent::__construct(); + $this->received = $received; + } + + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + $received = $this->received; + + return [ + Record::make(Record::TYPE_BLOB, 'TestPlugin_scored') + ->setAggregatedRecordTransform( + function (DataTable $table, ArchiveProcessor $ap, Record $record) use ($received): void { + // Record the contextual args to prove they were passed through. + $received->recordName = $record->getName(); + $received->hasArchiveProcessor = $ap instanceof ArchiveProcessor; + + // Recompute a column from the aggregated (summed) values. + foreach ($table->getRows() as $row) { + $row->setColumn('score', 1000 - (int) $row->getColumn('nb_visits')); + } + } + ), + Record::make(Record::TYPE_BLOB, 'TestPlugin_plain'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return []; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week'); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + // The callback received the full contextual signature. + $this->assertSame('TestPlugin_scored', $received->recordName); + $this->assertTrue($received->hasArchiveProcessor); + + $expectedBlobRecords = [ + // The transform ran on the aggregated table (nb_visits are the summed values) and the + // recomputed 'score' column was stored. + 'TestPlugin_scored' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140, 'score' => 860], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150, 'score' => 850], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30, 'score' => 970], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + // A record without a transform is unaffected. + 'TestPlugin_plain' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + ]; + + $this->assertEquals($expectedBlobRecords, $this->blobRecordsInserted); + } + + public function testBuildForNonDayPeriodTruncatesUsingColumnRecomputedByAggregatedRecordTransform() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_BLOB, 'TestPlugin_scored') + ->setColumnToSortByBeforeTruncation('score') + ->setMaxRowsInTable(2) + ->setAggregatedRecordTransform(function (DataTable $table): void { + // Inverse of nb_visits, so the score order differs from the physical nb_visits order. + foreach ($table->getRows() as $row) { + $row->setColumn('score', 1000 - (int) $row->getColumn('nb_visits')); + } + }), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return []; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week'); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + // "a third thing" has the highest score (970) but the lowest nb_visits (30); it survives + // truncation, proving the sort-before-truncation used the transform-computed 'score' column. + $labels = $this->getTopLevelLabelsOfInsertedBlobRecord('TestPlugin_scored'); + $this->assertSame('[aggregated] a third thing', $labels[0]); + } + + public function testBuildForNonDayPeriodBuildsHierarchyFromFlatBlobWhenFlatBlobIsRequested() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_BLOB, 'TestPlugin_hierarchy') + ->setBuiltFromFlatRecord('TestPlugin_flat', function (Row $flatRow): ?array { + $label = $flatRow->getColumn('label'); + if (!is_string($label) || $label === '') { + return null; + } + + return [$label]; + }), + Record::make(Record::TYPE_BLOB, 'TestPlugin_flat'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return []; + } + + protected function aggregateRootDataTableFromBlobs( + ArchiveProcessor $archiveProcessor, + string $recordName, + ?array $columnsAggregationOperation, + ?array $columnsToRenameAfterAggregation + ): array { + $table = new DataTable(); + if ($recordName === 'TestPlugin_flat') { + $table->addRowFromSimpleArray(['label' => '/flat-path', 'nb_visits' => 5]); + return [$table, true, ['2020-03-04,2020-03-04' => true]]; + } + + return [$table, false, []]; + } + + protected function getAllSubperiodKeys(ArchiveProcessor $archiveProcessor): array + { + return ['2020-03-04,2020-03-04' => true]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week', ['TestPlugin_flat']); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $this->assertArrayHasKey('TestPlugin_flat', $this->blobRecordsInserted); + $this->assertArrayHasKey('TestPlugin_hierarchy', $this->blobRecordsInserted); + + $flatLabels = $this->getTopLevelLabelsOfInsertedBlobRecord('TestPlugin_flat'); + $hierarchyLabels = $this->getTopLevelLabelsOfInsertedBlobRecord('TestPlugin_hierarchy'); + + $this->assertSame(['/flat-path'], $flatLabels); + $this->assertSame(['/flat-path'], $hierarchyLabels); + } + + public function testBuildForNonDayPeriodAppliesAggregatedRecordTransformOnBothFlatAndHierarchyRecords() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_BLOB, 'TestPlugin_hierarchy') + ->setBuiltFromFlatRecord('TestPlugin_flat', function (Row $flatRow): ?array { + $label = $flatRow->getColumn('label'); + if (!is_string($label) || $label === '') { + return null; + } + + return [$label]; + }) + // Recomputed on the rebuilt hierarchy table, after it is built. + ->setAggregatedRecordTransform(function (DataTable $table): void { + foreach ($table->getRows() as $row) { + $row->setColumn('hier_score', 20); + } + }), + Record::make(Record::TYPE_BLOB, 'TestPlugin_flat') + // Recomputed on the aggregated flat table, before it is stored. + ->setAggregatedRecordTransform(function (DataTable $table): void { + foreach ($table->getRows() as $row) { + $row->setColumn('flat_score', 10); + } + }), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return []; + } + + protected function aggregateRootDataTableFromBlobs( + ArchiveProcessor $archiveProcessor, + string $recordName, + ?array $columnsAggregationOperation, + ?array $columnsToRenameAfterAggregation + ): array { + $table = new DataTable(); + if ($recordName === 'TestPlugin_flat') { + $table->addRowFromSimpleArray(['label' => '/flat-path-a', 'nb_visits' => 5]); + $table->addRowFromSimpleArray(['label' => '/flat-path-b', 'nb_visits' => 3]); + return [$table, true, ['2020-03-04,2020-03-04' => true]]; + } + + return [$table, false, []]; + } + + protected function getAllSubperiodKeys(ArchiveProcessor $archiveProcessor): array + { + return ['2020-03-04,2020-03-04' => true]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week', ['TestPlugin_flat']); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + // The flat record's transform ran on the aggregated flat table. + $flatScores = $this->getFlatInsertedBlobMetric('TestPlugin_flat', 'flat_score'); + ksort($flatScores); + $this->assertSame(['/flat-path-a' => 10, '/flat-path-b' => 10], $flatScores); + + // The hierarchy record's transform ran on the rebuilt hierarchy table. + $hierScores = $this->getFlatInsertedBlobMetric('TestPlugin_hierarchy', 'hier_score'); + ksort($hierScores); + $this->assertSame(['/flat-path-a' => 20, '/flat-path-b' => 20], $hierScores); + } + + public function testBuildForNonDayPeriodBuiltFromFlatReadsFlatBlobRowsOnlyOnce(): void + { + $table = new DataTable(); + $table->addRowFromSimpleArray(['label' => '/flat-path', 'nb_visits' => 5]); + $serialized = $table->getSerialized(); + $rootBlob = reset($serialized); + $counter = (object) ['flatQueryCount' => 0]; + + $recordBuilder = new class ($counter, (string) $rootBlob) extends ArchiveProcessor\RecordBuilder { + private $counter; + private $flatRootBlob; + + public function __construct(object $counter, string $flatRootBlob) + { + parent::__construct(); + $this->counter = $counter; + $this->flatRootBlob = $flatRootBlob; + } + + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_BLOB, 'TestPlugin_hierarchy') + ->setBuiltFromFlatRecord('TestPlugin_flat', function (Row $flatRow): ?array { + $label = $flatRow->getColumn('label'); + if (!is_string($label) || $label === '') { + return null; + } + + return [$label]; + }), + Record::make(Record::TYPE_BLOB, 'TestPlugin_flat'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return []; + } + + protected function querySingleBlobRows(ArchiveProcessor $archiveProcessor, string $recordName): iterable + { + if ($recordName !== 'TestPlugin_flat') { + return []; + } + + $this->counter->flatQueryCount++; + + return [[ + 'name' => 'TestPlugin_flat', + 'date1' => '2020-03-04', + 'date2' => '2020-03-04', + 'value' => $this->flatRootBlob, + ]]; + } + + protected function getAllSubperiodKeys(ArchiveProcessor $archiveProcessor): array + { + return ['2020-03-04,2020-03-04' => true]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week', ['TestPlugin_hierarchy']); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $this->assertSame(1, $counter->flatQueryCount); + $this->assertArrayHasKey('TestPlugin_flat', $this->blobRecordsInserted); + $this->assertArrayHasKey('TestPlugin_hierarchy', $this->blobRecordsInserted); + } + + public function testBuildForNonDayPeriodCanFallbackToLegacyHierarchyWhenFlatBlobMissingForSomeSubperiods() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_BLOB, 'TestPlugin_hierarchy') + ->setBuiltFromFlatRecord( + 'TestPlugin_flat', + function (Row $flatRow): ?array { + $label = $flatRow->getColumn('label'); + if (!is_string($label) || $label === '') { + return null; + } + + return [$label]; + }, + function (DataTable $legacyHierarchy, DataTable $flatTable): void { + foreach ($legacyHierarchy->getRows() as $legacyRow) { + $flatTable->addRowFromSimpleArray([ + 'label' => (string) $legacyRow->getColumn('label'), + 'nb_visits' => $legacyRow->getColumn('nb_visits'), + ]); + } + } + ), + Record::make(Record::TYPE_BLOB, 'TestPlugin_flat'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return []; + } + + protected function aggregateRootDataTableFromBlobs( + ArchiveProcessor $archiveProcessor, + string $recordName, + ?array $columnsAggregationOperation, + ?array $columnsToRenameAfterAggregation + ): array { + $table = new DataTable(); + if ($recordName === 'TestPlugin_flat') { + $table->addRowFromSimpleArray(['label' => '/flat-path', 'nb_visits' => 5]); + return [$table, true, ['2020-03-04,2020-03-04' => true]]; + } + + return [$table, false, []]; + } + + protected function querySingleBlobRows(ArchiveProcessor $archiveProcessor, string $recordName): iterable + { + if ($recordName !== 'TestPlugin_hierarchy') { + return []; + } + + $legacyTable = new DataTable(); + $legacyTable->addRowFromSimpleArray(['label' => '/legacy-path', 'nb_visits' => 7]); + + yield [ + 'date1' => '2020-03-05', + 'date2' => '2020-03-05', + 'name' => 'TestPlugin_hierarchy', + 'value' => $legacyTable->getSerialized()[0], + ]; + } + + protected function getAllSubperiodKeys(ArchiveProcessor $archiveProcessor): array + { + return [ + '2020-03-04,2020-03-04' => true, + '2020-03-05,2020-03-05' => true, + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week', ['TestPlugin_hierarchy']); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $this->assertArrayHasKey('TestPlugin_flat', $this->blobRecordsInserted); + $this->assertArrayHasKey('TestPlugin_hierarchy', $this->blobRecordsInserted); + + $flatLabels = $this->getTopLevelLabelsOfInsertedBlobRecord('TestPlugin_flat'); + $hierarchyLabels = $this->getTopLevelLabelsOfInsertedBlobRecord('TestPlugin_hierarchy'); + + sort($flatLabels); + sort($hierarchyLabels); + + $this->assertSame(['/flat-path', '/legacy-path'], $flatLabels); + $this->assertSame(['/flat-path', '/legacy-path'], $hierarchyLabels); + } + + public function testBuildForNonDayPeriodConsumesFlatTableBeforePreInsertHook(): void + { + $hookState = (object) ['flatRowsAtHook' => null, 'hierarchyLabelsAtHook' => []]; + + $recordBuilder = new class ($hookState) extends ArchiveProcessor\RecordBuilder { + private $hookState; + + public function __construct(object $hookState) + { + parent::__construct(); + $this->hookState = $hookState; + } + + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_BLOB, 'TestPlugin_hierarchy') + ->setBuiltFromFlatRecord('TestPlugin_flat', function (Row $flatRow): ?array { + $label = $flatRow->getColumn('label'); + if (!is_string($label) || $label === '') { + return null; + } + + return [$label]; + }), + Record::make(Record::TYPE_BLOB, 'TestPlugin_flat'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return []; + } + + protected function aggregateRootDataTableFromBlobs( + ArchiveProcessor $archiveProcessor, + string $recordName, + ?array $columnsAggregationOperation, + ?array $columnsToRenameAfterAggregation + ): array { + $table = new DataTable(); + if ($recordName === 'TestPlugin_flat') { + $table->addRowFromSimpleArray(['label' => '/flat-path-a', 'nb_visits' => 5]); + $table->addRowFromSimpleArray(['label' => '/flat-path-b', 'nb_visits' => 3]); + $table->addSummaryRow(new Row([Row::COLUMNS => ['label' => '-1', 'nb_visits' => 2]])); + + return [$table, true, ['2020-03-04,2020-03-04' => true]]; + } + + return [$table, false, []]; + } + + protected function getAllSubperiodKeys(ArchiveProcessor $archiveProcessor): array + { + return ['2020-03-04,2020-03-04' => true]; + } + + protected function beforeInsertBuiltFromFlatHierarchyRecord( + ArchiveProcessor $archiveProcessor, + Record $hierarchicalRecord, + DataTable $hierarchicalTable, + DataTable $flatTable + ): void { + $this->hookState->flatRowsAtHook = $flatTable->getRowsCount(); + $this->hookState->hierarchyLabelsAtHook = $hierarchicalTable->getColumn('label'); + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week', ['TestPlugin_flat']); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $this->assertSame(0, $hookState->flatRowsAtHook); + $this->assertSame(['/flat-path-a', '/flat-path-b', '-1'], $hookState->hierarchyLabelsAtHook); + + $this->assertSame(['/flat-path-a', '/flat-path-b', '-1'], $this->getTopLevelLabelsOfInsertedBlobRecord('TestPlugin_flat')); + $this->assertSame(['/flat-path-a', '/flat-path-b', '-1'], $this->getTopLevelLabelsOfInsertedBlobRecord('TestPlugin_hierarchy')); + } + + public function testBuildForNonDayPeriodReducesLegacyFallbackPerPeriod(): void + { + $state = (object) ['reducerCalls' => []]; + + $recordBuilder = new class ($state) extends ArchiveProcessor\RecordBuilder { + private $state; + + public function __construct(object $state) + { + parent::__construct(); + $this->state = $state; + } + + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_BLOB, 'TestPlugin_hierarchy') + ->setBuiltFromFlatRecord( + 'TestPlugin_flat', + function (Row $flatRow): ?array { + $label = $flatRow->getColumn('label'); + return is_string($label) && $label !== '' ? [$label] : null; + }, + function (DataTable $legacyHierarchy, DataTable $flatTable) { + $this->state->reducerCalls[] = $legacyHierarchy->getColumn('label'); + + foreach ($legacyHierarchy->getRowsWithoutSummaryRow() as $row) { + $flatTable->addRow(clone $row); + } + } + ), + Record::make(Record::TYPE_BLOB, 'TestPlugin_flat'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return []; + } + + protected function aggregateRootDataTableFromBlobs( + ArchiveProcessor $archiveProcessor, + string $recordName, + ?array $columnsAggregationOperation, + ?array $columnsToRenameAfterAggregation + ): array { + $table = new DataTable(); + if ($recordName === 'TestPlugin_flat') { + $table->addRowFromSimpleArray(['label' => '/flat-path', 'nb_visits' => 5]); + return [$table, true, ['2020-03-04,2020-03-04' => true]]; + } + + return [$table, false, []]; + } + + protected function querySingleBlobRows(ArchiveProcessor $archiveProcessor, string $recordName): iterable + { + if ($recordName !== 'TestPlugin_hierarchy') { + return []; + } + + $legacyTableA = new DataTable(); + $legacyTableA->addRowFromSimpleArray(['label' => '/legacy-path-a', 'nb_visits' => 2]); + + $legacyTableB = new DataTable(); + $legacyTableB->addRowFromSimpleArray(['label' => '/legacy-path-b', 'nb_visits' => 3]); + + yield [ + 'date1' => '2020-03-05', + 'date2' => '2020-03-05', + 'name' => 'TestPlugin_hierarchy', + 'value' => $legacyTableA->getSerialized()[0], + ]; + + yield [ + 'date1' => '2020-03-06', + 'date2' => '2020-03-06', + 'name' => 'TestPlugin_hierarchy', + 'value' => $legacyTableB->getSerialized()[0], + ]; + } + + protected function getAllSubperiodKeys(ArchiveProcessor $archiveProcessor): array + { + return [ + '2020-03-04,2020-03-04' => true, + '2020-03-05,2020-03-05' => true, + '2020-03-06,2020-03-06' => true, + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week', ['TestPlugin_hierarchy']); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $this->assertSame([['/legacy-path-a'], ['/legacy-path-b']], $state->reducerCalls); + + $flatLabels = $this->getTopLevelLabelsOfInsertedBlobRecord('TestPlugin_flat'); + sort($flatLabels); + $this->assertSame(['/flat-path', '/legacy-path-a', '/legacy-path-b'], $flatLabels); + + $hierarchyLabels = $this->getTopLevelLabelsOfInsertedBlobRecord('TestPlugin_hierarchy'); + sort($hierarchyLabels); + $this->assertSame(['/flat-path', '/legacy-path-a', '/legacy-path-b'], $hierarchyLabels); + } + + public function testBuildForNonDayPeriodPassesDeepLegacyHierarchyWithSubtablesToReducer(): void + { + $state = (object) ['receivedHierarchies' => []]; + + $recordBuilder = new class ($state) extends ArchiveProcessor\RecordBuilder { + private $state; + + public function __construct(object $state) + { + parent::__construct(); + $this->state = $state; + } + + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_BLOB, 'TestPlugin_hierarchy') + ->setBuiltFromFlatRecord( + 'TestPlugin_flat', + function (Row $flatRow): ?array { + $label = $flatRow->getColumn('label'); + if (!is_string($label) || $label === '') { + return null; + } + return explode('/', ltrim($label, '/')); + }, + function (DataTable $legacyHierarchy, DataTable $flatTable) { + $this->state->receivedHierarchies[] = RecordBuilderTest::describeHierarchy($legacyHierarchy); + RecordBuilderTest::flattenHierarchyIntoFlatTable($legacyHierarchy, $flatTable); + } + ), + Record::make(Record::TYPE_BLOB, 'TestPlugin_flat'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return []; + } + + protected function aggregateRootDataTableFromBlobs( + ArchiveProcessor $archiveProcessor, + string $recordName, + ?array $columnsAggregationOperation, + ?array $columnsToRenameAfterAggregation + ): array { + // No flat record for any period, so the legacy fallback must cover both days. + return [new DataTable(), false, []]; + } + + protected function querySingleBlobRows(ArchiveProcessor $archiveProcessor, string $recordName): iterable + { + if ($recordName !== 'TestPlugin_hierarchy') { + return []; + } + + $deepTable = RecordBuilderTest::makeDeepHierarchyTable([ + '/products' => [ + 'shoes' => 4, + 'shirts' => 1, + ], + '/about' => 9, + ]); + + foreach (RecordBuilderTest::serializeToArchiveRows('TestPlugin_hierarchy', '2020-03-04', $deepTable) as $row) { + yield $row; + } + } + + protected function getAllSubperiodKeys(ArchiveProcessor $archiveProcessor): array + { + return ['2020-03-04,2020-03-04' => true]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week', ['TestPlugin_hierarchy']); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + // Reducer must have been called exactly once (single period) and must have received the parent + // rows with subtables attached, not a flattened table. + $this->assertCount(1, $state->receivedHierarchies); + $this->assertSame( + [ + '/products' => ['shoes' => 4, 'shirts' => 1], + '/about' => 9, + ], + $state->receivedHierarchies[0] + ); + + $flatLabels = $this->getTopLevelLabelsOfInsertedBlobRecord('TestPlugin_flat'); + sort($flatLabels); + $this->assertSame(['/about', '/products/shirts', '/products/shoes'], $flatLabels); + + // The hierarchy blob must be rebuilt from the resulting flat table. Top-level labels come + // from the first segment returned by the flatRowToHierarchyPath callback (leading "/" stripped). + $hierarchyLabels = $this->getTopLevelLabelsOfInsertedBlobRecord('TestPlugin_hierarchy'); + sort($hierarchyLabels); + $this->assertSame(['about', 'products'], $hierarchyLabels); + } + + public function testBuildForNonDayPeriodMergesOverlappingDeepLegacyHierarchyPathsAcrossPeriods(): void + { + $state = (object) ['reducerCallCount' => 0]; + + $recordBuilder = new class ($state) extends ArchiveProcessor\RecordBuilder { + private $state; + + public function __construct(object $state) + { + parent::__construct(); + $this->state = $state; + } + + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_BLOB, 'TestPlugin_hierarchy') + ->setBuiltFromFlatRecord( + 'TestPlugin_flat', + function (Row $flatRow): ?array { + $label = $flatRow->getColumn('label'); + if (!is_string($label) || $label === '') { + return null; + } + return explode('/', ltrim($label, '/')); + }, + function (DataTable $legacyHierarchy, DataTable $flatTable) { + $this->state->reducerCallCount++; + RecordBuilderTest::flattenHierarchyIntoFlatTable($legacyHierarchy, $flatTable); + } + ), + Record::make(Record::TYPE_BLOB, 'TestPlugin_flat'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return []; + } + + protected function aggregateRootDataTableFromBlobs( + ArchiveProcessor $archiveProcessor, + string $recordName, + ?array $columnsAggregationOperation, + ?array $columnsToRenameAfterAggregation + ): array { + // No flat blobs for either period -> both periods fall through to the legacy deep hierarchy. + return [new DataTable(), false, []]; + } + + protected function querySingleBlobRows(ArchiveProcessor $archiveProcessor, string $recordName): iterable + { + if ($recordName !== 'TestPlugin_hierarchy') { + return []; + } + + // Period A: /products/shoes=4, /products/shirts=1, /about=9 + $periodA = RecordBuilderTest::makeDeepHierarchyTable([ + '/products' => [ + 'shoes' => 4, + 'shirts' => 1, + ], + '/about' => 9, + ]); + + // Period B: /products/shoes=2 (overlap), /products/hats=6, /about=3 (overlap) + $periodB = RecordBuilderTest::makeDeepHierarchyTable([ + '/products' => [ + 'shoes' => 2, + 'hats' => 6, + ], + '/about' => 3, + ]); + + foreach (RecordBuilderTest::serializeToArchiveRows('TestPlugin_hierarchy', '2020-03-05', $periodA) as $row) { + yield $row; + } + foreach (RecordBuilderTest::serializeToArchiveRows('TestPlugin_hierarchy', '2020-03-06', $periodB) as $row) { + yield $row; + } + } + + protected function getAllSubperiodKeys(ArchiveProcessor $archiveProcessor): array + { + return [ + '2020-03-05,2020-03-05' => true, + '2020-03-06,2020-03-06' => true, + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week', ['TestPlugin_hierarchy']); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + // One reducer call per period with legacy data. + $this->assertSame(2, $state->reducerCallCount); + + $flatByLabel = $this->getFlatInsertedBlobMetric('TestPlugin_flat', 'nb_visits'); + ksort($flatByLabel); + + // Overlapping leaves must be summed across periods; non-overlapping leaves must appear once. + $this->assertSame( + [ + '/about' => 12, // 9 + 3 + '/products/hats' => 6, // period B only + '/products/shirts' => 1, // period A only + '/products/shoes' => 6, // 4 + 2 + ], + $flatByLabel + ); + } + + public function testBuildForNonDayPeriodMixesFlatRecordWithDeepLegacyHierarchyFallback(): void + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_BLOB, 'TestPlugin_hierarchy') + ->setBuiltFromFlatRecord( + 'TestPlugin_flat', + function (Row $flatRow): ?array { + $label = $flatRow->getColumn('label'); + if (!is_string($label) || $label === '') { + return null; + } + return explode('/', ltrim($label, '/')); + }, + function (DataTable $legacyHierarchy, DataTable $flatTable) { + RecordBuilderTest::flattenHierarchyIntoFlatTable($legacyHierarchy, $flatTable); + } + ), + Record::make(Record::TYPE_BLOB, 'TestPlugin_flat'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return []; + } + + protected function aggregateRootDataTableFromBlobs( + ArchiveProcessor $archiveProcessor, + string $recordName, + ?array $columnsAggregationOperation, + ?array $columnsToRenameAfterAggregation + ): array { + $table = new DataTable(); + if ($recordName === 'TestPlugin_flat') { + // Period 03-04 already has a flat record with paths overlapping the legacy hierarchy. + $table->addRowFromSimpleArray(['label' => '/products/shoes', 'nb_visits' => 10]); + $table->addRowFromSimpleArray(['label' => '/contact', 'nb_visits' => 2]); + return [$table, true, ['2020-03-04,2020-03-04' => true]]; + } + return [$table, false, []]; + } + + protected function querySingleBlobRows(ArchiveProcessor $archiveProcessor, string $recordName): iterable + { + if ($recordName !== 'TestPlugin_hierarchy') { + return []; + } + + // Only period 03-05 falls back to legacy deep hierarchy. + $legacyTable = RecordBuilderTest::makeDeepHierarchyTable([ + '/products' => [ + 'shoes' => 4, + 'shirts' => 1, + ], + '/about' => 9, + ]); + + foreach (RecordBuilderTest::serializeToArchiveRows('TestPlugin_hierarchy', '2020-03-05', $legacyTable) as $row) { + yield $row; + } + } + + protected function getAllSubperiodKeys(ArchiveProcessor $archiveProcessor): array + { + return [ + '2020-03-04,2020-03-04' => true, + '2020-03-05,2020-03-05' => true, + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week', ['TestPlugin_hierarchy']); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $flatByLabel = $this->getFlatInsertedBlobMetric('TestPlugin_flat', 'nb_visits'); + ksort($flatByLabel); + + $this->assertSame( + [ + '/about' => 9, // from legacy hierarchy (period 03-05) + '/contact' => 2, // from flat record (period 03-04) + '/products/shirts' => 1, // from legacy hierarchy (period 03-05) + '/products/shoes' => 14, // 10 (flat) + 4 (legacy) merged by label + ], + $flatByLabel + ); + } + + public function testBuildForNonDayPeriodCorrectlyAggregatesMetricsForMetricsThatAreRowCountsOfRecords() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric') + ->setIsCountOfBlobRecordRows('TestPlugin_myReport'), + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myOtherMetric') + ->setIsCountOfBlobRecordRows('TestPlugin_myReport2', true), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport2'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myOtherMetric' => 100, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + 'TestPlugin_myReport2' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week'); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $expectedNumericRecords = [ + 'TestPlugin_myMetric' => 3, + 'TestPlugin_myOtherMetric' => 3, + ]; + $expectedBlobRecords = [ + 'TestPlugin_myReport' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + 'TestPlugin_myReport2' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + ]; + + $this->assertEquals($expectedNumericRecords, $this->numericRecordsInserted); + $this->assertEquals($expectedBlobRecords, $this->blobRecordsInserted); + } + + public function testBuildForNonDayPeriodCorrectlyAggregatesMetricsForMetricsThatAreRowCountsOfRecordsWhenTheDependentRecordIsNotRequested() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric') + ->setIsCountOfBlobRecordRows('TestPlugin_myReport'), + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myOtherMetric') + ->setIsCountOfBlobRecordRows('TestPlugin_myReport2'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport2'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myOtherMetric' => 100, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + 'TestPlugin_myReport2' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor('week', ['TestPlugin_myMetric', 'TestPlugin_myOtherMetric']); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $expectedNumericRecords = [ + 'TestPlugin_myMetric' => 3, + 'TestPlugin_myOtherMetric' => 3, + ]; + $expectedBlobRecords = [ + 'TestPlugin_myReport' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + 'TestPlugin_myReport2' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + ]; + + $this->assertEquals($expectedNumericRecords, $this->numericRecordsInserted); + $this->assertEquals($expectedBlobRecords, $this->blobRecordsInserted); + } + + public function testBuildForNonDayPeriodCorrectlyAggregatesMetricsForMetricsThatAreRowCountsOfRecordsWhenTheDependentRecordIsRequestedAndFound() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric') + ->setIsCountOfBlobRecordRows('TestPlugin_myReport'), + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myOtherMetric') + ->setIsCountOfBlobRecordRows('TestPlugin_myReport2'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport2'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myOtherMetric' => 100, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + 'TestPlugin_myReport2' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor( + 'week', + ['TestPlugin_myMetric', 'TestPlugin_myOtherMetric', 'TestPlugin_myReport', 'TestPlugin_myReport2'], + ['TestPlugin_myReport', 'TestPlugin_myReport2'] + ); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $expectedNumericRecords = [ + 'TestPlugin_myMetric' => 3, + 'TestPlugin_myOtherMetric' => 3, + ]; + $expectedBlobRecords = [ + 'TestPlugin_myReport' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + 'TestPlugin_myReport2' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + ]; + + $this->assertEquals($expectedNumericRecords, $this->numericRecordsInserted); + $this->assertEquals($expectedBlobRecords, $this->blobRecordsInserted); + } + + public function testBuildForNonDayPeriodCorrectlyAggregatesMetricsForMetricsThatAreRecursiveRowCountsOfRecords() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric') + ->setIsCountOfBlobRecordRows('TestPlugin_myReport', true), + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myOtherMetric') + ->setIsCountOfBlobRecordRows('TestPlugin_myReport2', true), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport2'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 50, + 'TestPlugin_myOtherMetric' => 100, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + 'TestPlugin_myReport2' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $mockArchiveProcessor = $this->getMockArchiveProcessor( + 'week', + ['TestPlugin_myMetric', 'TestPlugin_myOtherMetric'], + null, + true + ); + $recordBuilder->buildForNonDayPeriod($mockArchiveProcessor); + + $expectedNumericRecords = ['TestPlugin_myMetric' => 6, 'TestPlugin_myOtherMetric' => 6]; // TODO + $expectedBlobRecords = [ + 'TestPlugin_myReport' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => 1], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => 2], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => 3], + ], + // subtables + [ + [Row::COLUMNS => ['label' => '[subtable] the thing', 'nb_visits' => 15], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + [ + [Row::COLUMNS => ['label' => '[subtable] the thing', 'nb_visits' => 15], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + [ + [Row::COLUMNS => ['label' => '[subtable] the thing', 'nb_visits' => 15], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + 'TestPlugin_myReport2' => [ + [ + [Row::COLUMNS => ['label' => '[aggregated] the thing', 'nb_visits' => 140], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => 1], + [Row::COLUMNS => ['label' => '[aggregated] another thing', 'nb_visits' => 150], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => 2], + [Row::COLUMNS => ['label' => '[aggregated] a third thing', 'nb_visits' => 30], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => 3], + ], + // subtables + [ + [Row::COLUMNS => ['label' => '[subtable] the thing', 'nb_visits' => 15], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + [ + [Row::COLUMNS => ['label' => '[subtable] the thing', 'nb_visits' => 15], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + [ + [Row::COLUMNS => ['label' => '[subtable] the thing', 'nb_visits' => 15], Row::METADATA => [], Row::DATATABLE_ASSOCIATED => null], + ], + ], + ]; + + $this->assertEquals($expectedNumericRecords, $this->numericRecordsInserted); + $this->assertEquals($expectedBlobRecords, $this->blobRecordsInserted); + } + + public function testGetQueryOriginHintUsesDerivedClassNameAsTheDefaultQueryOriginHint() + { + $goalsRecordBuilder = new GeneralGoalsRecords(); + $this->assertEquals('GeneralGoalsRecords', $goalsRecordBuilder->getQueryOriginHint()); + } + + public function testIsBuilderForAtLeastOneOfReturnsTrueIfTheRecordBuilderHasMetadataForAtLeastOneRequestedRecord() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 30, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $archiveProcessor = $this->getMockArchiveProcessor(); + $this->assertTrue($recordBuilder->isBuilderForAtLeastOneOf($archiveProcessor, ['TestPlugin_myMetric'])); + $this->assertTrue($recordBuilder->isBuilderForAtLeastOneOf($archiveProcessor, ['TestPlugin_myMetric', 'TestPlugin_myReport'])); + $this->assertTrue($recordBuilder->isBuilderForAtLeastOneOf($archiveProcessor, ['TestPlugin_myReport', 'AnotherPlugin_anotherReport'])); + } + + public function testIsBuilderForAtLeastOneOfReturnsFalseIfTheRecordBuilderDoesNotHaveMetadataForAnyRequestedReport() + { + $recordBuilder = new class () extends ArchiveProcessor\RecordBuilder { + public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array + { + return [ + Record::make(Record::TYPE_NUMERIC, 'TestPlugin_myMetric'), + Record::make(Record::TYPE_BLOB, 'TestPlugin_myReport'), + ]; + } + + protected function aggregate(ArchiveProcessor $archiveProcessor): array + { + return [ + 'TestPlugin_myMetric' => 30, + 'TestPlugin_myReport' => RecordBuilderTest::makeTestDataTable(), + ]; + } + }; + + $archiveProcessor = $this->getMockArchiveProcessor(); + $this->assertFalse($recordBuilder->isBuilderForAtLeastOneOf($archiveProcessor, ['AnotherPlugin_anotherReport'])); + $this->assertFalse($recordBuilder->isBuilderForAtLeastOneOf($archiveProcessor, ['AnotherPlugin_anotherReport2', 'AThirdPlugin_anotherReport3'])); + } + + public function getMockArchiveProcessor( + string $period = 'day', + ?array $requestedReports = null, + ?array $foundRequestedReports = null, + bool $addSubtablesToAggregatedTables = false + ): ArchiveProcessor { + Site::setSiteFromArray(1, ['idsite' => 1, 'ecommerce' => 0, 'sitesearch' => 0, 'exclude_unknown_urls' => 0, 'keep_url_fragment' => 0]); + $params = new Parameters(new Site(1), PeriodFactory::build($period, '2020-03-04'), new Segment('', [1])); + + if (!empty($requestedReports)) { + $params->setArchiveOnlyReport($requestedReports); + } + + if (!empty($foundRequestedReports)) { + $params->setFoundRequestedReports($foundRequestedReports); + } + + $archiveWriter = new class () extends ArchiveWriter { + public function __construct() + { + // disable original constructor + } + }; + + $logAggregator = new class () extends LogAggregator { + public function __construct() + { + // disable original constructor + } + }; + + return new class ($this, $addSubtablesToAggregatedTables, $params, $archiveWriter, $logAggregator) extends ArchiveProcessor { + /** + * @var RecordBuilderTest + */ + private $test; + + /** + * @var bool + */ + private $addSubtablesToAggregatedTables; + + public function __construct( + RecordBuilderTest $test, + bool $addSubtablesToAggregatedTables, + Parameters $params, + ArchiveWriter $archiveWriter, + LogAggregator $logAggregator + ) { + parent::__construct($params, $archiveWriter, $logAggregator); + + $this->test = $test; + $this->addSubtablesToAggregatedTables = $addSubtablesToAggregatedTables; + } + + protected function aggregateDataTableRecord($name, $columnsAggregationOperation = null, $columnsToRenameAfterAggregation = null) + { + $dataTable = RecordBuilderTest::makeAggregatedTestDataTable(); + if ($this->addSubtablesToAggregatedTables) { + foreach ($dataTable->getRows() as $row) { + $row->setSubtable(RecordBuilderTest::makeAggregatedTestSubtable()); + } + } + + if (!empty($columnsAggregationOperation)) { + $dataTable->setMetadata(DataTable::COLUMN_AGGREGATION_OPS_METADATA_NAME, $columnsAggregationOperation); + $dataTable->filterSubtables(function (DataTable $subtable) use ($columnsAggregationOperation) { + $subtable->setMetadata(DataTable::COLUMN_AGGREGATION_OPS_METADATA_NAME, $columnsAggregationOperation); + }); + } + + return $dataTable; + } + + protected function getAggregatedNumericMetrics($columns, $operationsToApply) + { + $metricValuesToUse = [9000, 10500, 15000, 12345, 1000]; + + $metricValues = []; + for ($i = 0; $i < count($columns); ++$i) { + $metricValueToUse = $metricValuesToUse[$i % count($metricValuesToUse)]; + $metricValues[$columns[$i]] = $metricValueToUse; + } + return $metricValues; + } + + public function insertNumericRecord($name, $value) + { + $this->test->numericRecordsInserted[$name] = $value; + } + + public function insertBlobRecord($name, $values) + { + // make the serialized values more readable + $values = array_map(function ($v) { + $deserialized = unserialize($v); + + $asArray = json_encode($deserialized); + $asArray = json_decode($asArray, true); + + return $asArray; + }, $values); + + $this->test->blobRecordsInserted[$name] = $values; + } + }; + } + + private function getTopLevelLabelsOfInsertedBlobRecord(string $recordName): array + { + if (empty($this->blobRecordsInserted[$recordName][0])) { + return []; + } + + return array_values(array_map(function (array $row): string { + return (string) ($row[Row::COLUMNS]['label'] ?? ''); + }, $this->blobRecordsInserted[$recordName][0])); + } + + public static function makeTestDataTable(): DataTable + { + $table = new DataTable(); + $table->addRowFromSimpleArray(['label' => 'the thing', 'nb_visits' => 40]); + $table->addRowFromSimpleArray(['label' => 'another thing', 'nb_visits' => 50]); + $table->addRowFromSimpleArray(['label' => 'a third thing', 'nb_visits' => 20]); + return $table; + } + + /** + * Builds a two-level DataTable from a nested spec. + * Leaf entries are `label => nb_visits`; nested entries are `label => [childLabel => nb_visits, ...]`. + */ + public static function makeDeepHierarchyTable(array $spec): DataTable + { + $table = new DataTable(); + foreach ($spec as $label => $children) { + if (is_array($children)) { + $row = new Row([Row::COLUMNS => ['label' => $label]]); + $subtable = new DataTable(); + foreach ($children as $childLabel => $nbVisits) { + $subtable->addRowFromSimpleArray(['label' => $childLabel, 'nb_visits' => $nbVisits]); + } + $row->setSubtable($subtable); + $table->addRow($row); + } else { + $table->addRowFromSimpleArray(['label' => $label, 'nb_visits' => $children]); + } + } + return $table; + } + + /** + * Serializes a DataTable (including subtables) into the archive-row shape expected by + * `querySingleBlobRows()` — root blob named $recordName (serialized key 0 per the DataTable + * spec), subtable blobs named $recordName_. Root is yielded first so consumers can rely + * on parent-before-child ordering, mirroring how ArchiveSelector orders rows. + * + * @return iterable + */ + public static function serializeToArchiveRows(string $recordName, string $date, DataTable $table): iterable + { + $serialized = $table->getSerialized(); + ksort($serialized); + foreach ($serialized as $key => $value) { + yield [ + 'name' => $key === 0 ? $recordName : $recordName . '_' . $key, + 'date1' => $date, + 'date2' => $date, + 'value' => $value, + ]; + } + } + + /** + * Serializes a DataTable hierarchy into a plain nested array (label => nb_visits or label => [child => nb_visits]). + * Used by tests to compare a hierarchy structure without depending on internal row IDs. + */ + public static function describeHierarchy(DataTable $table): array + { + $result = []; + foreach ($table->getRowsWithoutSummaryRow() as $row) { + $label = $row->getColumn('label'); + $subtable = $row->getSubtable(); + if ($subtable instanceof DataTable) { + $children = []; + foreach ($subtable->getRowsWithoutSummaryRow() as $childRow) { + $children[(string) $childRow->getColumn('label')] = $childRow->getColumn('nb_visits'); + } + $result[(string) $label] = $children; + } else { + $result[(string) $label] = $row->getColumn('nb_visits'); + } + } + return $result; + } + + /** + * Walks a (possibly deep) hierarchy DataTable and merges every leaf into the flat table by its + * fully-qualified "/parent/child" path label, summing nb_visits when the same label is seen + * again. Mirrors the essential semantics used by the production Actions legacy-hierarchy reducer. + */ + public static function flattenHierarchyIntoFlatTable(DataTable $hierarchy, DataTable $flatTable): void + { + $walker = function (DataTable $source, array $path) use (&$walker, $flatTable): void { + foreach ($source->getRowsWithoutSummaryRow() as $row) { + $label = (string) $row->getColumn('label'); + $subtable = $row->getSubtable(); + if ($subtable instanceof DataTable) { + $walker($subtable, array_merge($path, [$label])); + continue; + } + + $segments = array_merge($path, [$label]); + $flatLabel = '/' . implode('/', array_map(static function (string $segment): string { + return ltrim($segment, '/'); + }, $segments)); + + $nbVisits = (int) $row->getColumn('nb_visits'); + $existing = $flatTable->getRowFromLabel($flatLabel); + if ($existing === false) { + $flatTable->addRow(new Row([Row::COLUMNS => [ + 'label' => $flatLabel, + 'nb_visits' => $nbVisits, + ]])); + } else { + $existing->setColumn( + 'nb_visits', + (int) $existing->getColumn('nb_visits') + $nbVisits + ); + } + } + }; + + $walker($hierarchy, []); + } + + /** + * @return array + */ + private function getFlatInsertedBlobMetric(string $recordName, string $metric): array + { + if (empty($this->blobRecordsInserted[$recordName][0])) { + return []; + } + + $result = []; + foreach ($this->blobRecordsInserted[$recordName][0] as $rowId => $row) { + if ($rowId === DataTable::ID_SUMMARY_ROW) { + continue; + } + $label = (string) ($row[Row::COLUMNS]['label'] ?? ''); + $result[$label] = (int) ($row[Row::COLUMNS][$metric] ?? 0); + } + return $result; + } + + public static function makeAggregatedTestDataTable(): DataTable + { + $table = new DataTable(); + $table->addRowFromSimpleArray(['label' => '[aggregated] the thing', 'nb_visits' => 140]); + $table->addRowFromSimpleArray(['label' => '[aggregated] another thing', 'nb_visits' => 150]); + $table->addRowFromSimpleArray(['label' => '[aggregated] a third thing', 'nb_visits' => 30]); + return $table; + } + + public static function makeAggregatedTestSubtable() + { + $table = new DataTable(); + $table->addRowFromSimpleArray(['label' => '[subtable] the thing', 'nb_visits' => 15]); + return $table; + } +} diff --git a/tests/PHPUnit/Unit/Archiver/RequestTest.php b/tests/PHPUnit/Unit/Archiver/RequestTest.php new file mode 100644 index 0000000000000000000000000000000000000000..3a875a2c44da6201e37c59dacee9679f5f9a03b5 --- /dev/null +++ b/tests/PHPUnit/Unit/Archiver/RequestTest.php @@ -0,0 +1,74 @@ +changeDate($newDate); + $this->assertEquals($expectedNewUrl, $request->getUrl()); + } + + public function getTestDataForChangeDate() + { + return [ + [ + 'http://abc.com/index.php?trigger=archivephp&method=API.get&date=2012-03-04', + 'last12', + 'http://abc.com/index.php?trigger=archivephp&method=API.get&date=last12', + ], + [ + 'http://abc.com/index.php?trigger=archivephp&method=API.get&date=2012-03-04,2013-02-4&period=day', + 'previous18', + 'http://abc.com/index.php?trigger=archivephp&method=API.get&date=previous18&period=day', + ], + [ + 'http://abc.com/index.php?date=lastN&period=day', + '2013-10-12,2013-11-19', + 'http://abc.com/index.php?date=2013-10-12,2013-11-19&period=day', + ], + ]; + } + + /** + * @dataProvider getTestDataForMakeSureDateIsNotSingleDayRange + */ + public function testMakeSureDateIsNotSingleDayRange($url, $expectedResult) + { + $request = new Request($url); + $request->makeSureDateIsNotSingleDayRange(); + $this->assertEquals($expectedResult, $request->getUrl()); + } + + public function getTestDataForMakeSureDateIsNotSingleDayRange() + { + return [ + ['?idSite=1&date=2012-03-04&period=day', '?idSite=1&date=2012-03-04&period=day'], + ['?idSite=1&date=2012-03-04,2012-03-06&period=range', '?idSite=1&date=2012-03-04,2012-03-06&period=range'], + ['?idSite=1&date=2012-03-04,2012-03-04&period=range', '?idSite=1&date=2012-03-04&period=day'], + ['?idSite=1&date=last1&period=range', '?idSite=1&date=today&period=day'], + ['?idSite=1&date=previous1&period=range', '?idSite=1&date=yesterday&period=day'], + ]; + } +} diff --git a/tests/PHPUnit/Unit/AssetManager/PluginManagerMock.php b/tests/PHPUnit/Unit/AssetManager/PluginManagerMock.php new file mode 100644 index 0000000000000000000000000000000000000000..c9de9d8191ad5855a35b6e8b8c648e08b414deb2 --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/PluginManagerMock.php @@ -0,0 +1,91 @@ +plugins = $plugins; + } + + public function isPluginLoaded($name) + { + $plugin = $this->getLoadedPlugin($name); + return !empty($plugin); + } + + public function getLoadedPlugin($name) + { + foreach ($this->plugins as $plugin) { + if ($plugin->getPluginName() == $name) { + return $plugin; + } + } + + return null; + } + + public function getPluginsLoadedAndActivated() + { + return $this->getLoadedPlugins(); + } + + public function getLoadedPluginsName() + { + $pluginNames = array(); + + foreach ($this->plugins as $plugin) { + $pluginNames[] = $plugin->getPluginName(); + } + + return $pluginNames; + } + + public function getLoadedPlugins() + { + return $this->plugins; + } + + public function getTheme($themeName) + { + return $this->loadedTheme; + } + + /** + * @param Theme $loadedTheme + */ + public function setLoadedTheme($loadedTheme) + { + $this->loadedTheme = $loadedTheme; + } + + public function isPluginBundledWithCore($name) + { + return stripos($name, 'NonCore') === false; + } +} diff --git a/tests/PHPUnit/Unit/AssetManager/PluginMock.php b/tests/PHPUnit/Unit/AssetManager/PluginMock.php new file mode 100644 index 0000000000000000000000000000000000000000..fa086f59485744f44392719e533031e064b6f28f --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/PluginMock.php @@ -0,0 +1,135 @@ +pluginName = $name; + } + + public function registerEvents() + { + return array( + 'AssetManager.getJavaScriptFiles' => 'getJsFiles', + 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles', + 'AssetManager.filterMergedJavaScripts' => 'filterMergedJavaScriptsHook', + 'AssetManager.filterMergedStylesheets' => 'filterMergedStylesheetsHook', + ); + } + + /** + * @param string[] $jsFiles + */ + public function getJsFiles(&$jsFiles) + { + $jsFiles = array_merge($jsFiles, $this->jsFiles); + } + + /** + * @param string[] $stylesheetFiles + */ + public function getStylesheetFiles(&$stylesheetFiles) + { + $stylesheetFiles = array_merge($stylesheetFiles, $this->stylesheetFiles); + } + + /** + * @param string $mergedContent + */ + public function filterMergedJavaScriptsHook(&$mergedContent) + { + $mergedContent .= $this->jsCustomization; + } + + /** + * @param string $mergedContent + */ + public function filterMergedStylesheetsHook(&$mergedContent) + { + $mergedContent .= $this->cssCustomization; + } + + /** + * @param string $cssCustomization + */ + public function setCssCustomization($cssCustomization) + { + $this->cssCustomization = $cssCustomization; + } + + /** + * @param string $jsCustomization + */ + public function setJsCustomization($jsCustomization) + { + $this->jsCustomization = $jsCustomization; + } + + /** + * @param string[] $jsFiles + */ + public function setJsFiles($jsFiles) + { + $this->jsFiles = $jsFiles; + } + + /** + * @param string[] $stylesheetFiles + */ + public function setStylesheetFiles($stylesheetFiles) + { + $this->stylesheetFiles = $stylesheetFiles; + } + + /** + * @param boolean $isTheme + */ + public function setIsTheme($isTheme) + { + $this->isTheme = $isTheme; + } + + public function isTheme() + { + return $this->isTheme; + } +} diff --git a/tests/PHPUnit/Unit/AssetManager/ThemeMock.php b/tests/PHPUnit/Unit/AssetManager/ThemeMock.php new file mode 100644 index 0000000000000000000000000000000000000000..8f6ec69fa93398c541f32d85b12f1d3536b82109 --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/ThemeMock.php @@ -0,0 +1,78 @@ +plugin = $plugin; + } + + public function getStylesheet() + { + return $this->stylesheet; + } + + public function getJavaScriptFiles() + { + return $this->jsFiles; + } + + /** + * @param string[] $jsFiles + */ + public function setJsFiles($jsFiles) + { + $this->jsFiles = $jsFiles; + } + + /** + * @param string $stylesheet + */ + public function setStylesheet($stylesheet) + { + $this->stylesheet = $stylesheet; + } + + /** + * @return Plugin + */ + public function getPlugin() + { + return $this->plugin; + } + + public function getThemeName() + { + return $this->plugin->getPluginName(); + } +} diff --git a/tests/PHPUnit/Unit/AssetManager/UIAssetCacheBusterMock.php b/tests/PHPUnit/Unit/AssetManager/UIAssetCacheBusterMock.php new file mode 100644 index 0000000000000000000000000000000000000000..04a4b1bb40dbdb9600edd758426f0c427f2b0bd2 --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/UIAssetCacheBusterMock.php @@ -0,0 +1,51 @@ +piwikVersionBasedCacheBuster; + } + + public function md5BasedCacheBuster($content) + { + return $this->md5BasedCacheBuster; + } + + /** + * @param string $md5BasedCacheBuster + */ + public function setMd5BasedCacheBuster($md5BasedCacheBuster) + { + $this->md5BasedCacheBuster = $md5BasedCacheBuster; + } + + /** + * @param string $piwikVersionBasedCacheBuster + */ + public function setPiwikVersionBasedCacheBuster($piwikVersionBasedCacheBuster) + { + $this->piwikVersionBasedCacheBuster = $piwikVersionBasedCacheBuster; + } +} diff --git a/tests/PHPUnit/Unit/AssetManager/UIAssetCacheBusterTest.php b/tests/PHPUnit/Unit/AssetManager/UIAssetCacheBusterTest.php new file mode 100644 index 0000000000000000000000000000000000000000..ff721f6182a892c3f32b83156e6c4978a62bfc6b --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/UIAssetCacheBusterTest.php @@ -0,0 +1,34 @@ +cacheBuster = UIAssetCacheBuster::getInstance(); + } + + /** + * @group Core + */ + public function testMd5BasedCacheBuster() + { + $this->assertEquals('098f6bcd4621d373cade4e832627b4f6', $this->cacheBuster->md5BasedCacheBuster('test')); + } +} diff --git a/tests/PHPUnit/Unit/AssetManager/UIAssetCatalogSorterTest.php b/tests/PHPUnit/Unit/AssetManager/UIAssetCatalogSorterTest.php new file mode 100644 index 0000000000000000000000000000000000000000..0f58e5f66d7fcbec00eb71b4edb8e73f32949067 --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/UIAssetCatalogSorterTest.php @@ -0,0 +1,57 @@ +addUIAsset(new OnDiskUIAsset($baseDirectory, 'new_dir/new_file')); + $unsortedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'plugins/xyz')); + $unsortedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'plugins/abc')); + $unsortedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'libs/xyz')); + $unsortedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'libs/base.css')); + $unsortedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'libs/abc')); + $unsortedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'plugins/xyz')); + $unsortedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'libs/base.css')); + $unsortedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'libs/xyz')); + + $expectedCatalog = new UIAssetCatalog($catalogSorter); + $expectedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'libs/base.css')); + $expectedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'libs/xyz')); + $expectedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'libs/abc')); + $expectedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'plugins/xyz')); + $expectedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'plugins/abc')); + $expectedCatalog->addUIAsset(new OnDiskUIAsset($baseDirectory, 'new_dir/new_file')); + + $sortedCatalog = $unsortedCatalog->getSortedCatalog(); + + $this->assertEquals($expectedCatalog, $sortedCatalog); + } +} diff --git a/tests/PHPUnit/Unit/AssetManager/scripts/ExpectedMergeResultCore.js b/tests/PHPUnit/Unit/AssetManager/scripts/ExpectedMergeResultCore.js new file mode 100644 index 0000000000000000000000000000000000000000..08c20ce37ac77e962eb4dabb66625bdb4157577d --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/scripts/ExpectedMergeResultCore.js @@ -0,0 +1,6 @@ +/* Matomo Javascript - cb={{{CACHE-BUSTER-JS}}}*/ + +if(typeof SimpleObject!=='object'){SimpleObject=(function(){var privateVar;function privateMethod(param){privateVar=param;} +return{publicMethod:function(){privateMethod('val');}}}());} +var simpleArray=['el1','el2']; +//This is a simple comment// customization via event \ No newline at end of file diff --git a/tests/PHPUnit/Unit/AssetManager/scripts/ExpectedMergeResultNonCore.js b/tests/PHPUnit/Unit/AssetManager/scripts/ExpectedMergeResultNonCore.js new file mode 100644 index 0000000000000000000000000000000000000000..f1cf2469322a883716e4c8e3c0c84fe8070731b1 --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/scripts/ExpectedMergeResultNonCore.js @@ -0,0 +1,3 @@ +/* Matomo Javascript - cb={{{CACHE-BUSTER-JS}}}*/ + +alert('test'); \ No newline at end of file diff --git a/tests/PHPUnit/Unit/AssetManager/scripts/SimpleAlert.js b/tests/PHPUnit/Unit/AssetManager/scripts/SimpleAlert.js new file mode 100644 index 0000000000000000000000000000000000000000..003d113a366f041ce7083260785d9a0729042fb8 --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/scripts/SimpleAlert.js @@ -0,0 +1 @@ +alert('test'); \ No newline at end of file diff --git a/tests/PHPUnit/Unit/AssetManager/scripts/SimpleArray.js b/tests/PHPUnit/Unit/AssetManager/scripts/SimpleArray.js new file mode 100644 index 0000000000000000000000000000000000000000..3176f85cff1a53f0a0f2e6ac6ce212ad743981ef --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/scripts/SimpleArray.js @@ -0,0 +1 @@ +var simpleArray = ['el1', 'el2']; diff --git a/tests/PHPUnit/Unit/AssetManager/scripts/SimpleComments.js b/tests/PHPUnit/Unit/AssetManager/scripts/SimpleComments.js new file mode 100644 index 0000000000000000000000000000000000000000..5a7103256aed16d1d63071132697cde52ef4a527 --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/scripts/SimpleComments.js @@ -0,0 +1 @@ +//This is a simple comment \ No newline at end of file diff --git a/tests/PHPUnit/Unit/AssetManager/scripts/SimpleObject.js b/tests/PHPUnit/Unit/AssetManager/scripts/SimpleObject.js new file mode 100644 index 0000000000000000000000000000000000000000..737cb9ba96291c4292363a591abff746da89598a --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/scripts/SimpleObject.js @@ -0,0 +1,18 @@ +if (typeof SimpleObject !== 'object') { + + SimpleObject = (function () { + + var privateVar; + + function privateMethod(param) { + privateVar = param; + } + + return { + + publicMethod: function () { + privateMethod('val'); + } + } + }()); +} \ No newline at end of file diff --git a/tests/PHPUnit/Unit/AssetManager/stylesheets/CssWithURLs.css b/tests/PHPUnit/Unit/AssetManager/stylesheets/CssWithURLs.css new file mode 100644 index 0000000000000000000000000000000000000000..d40a341a58f4817f4924e9545dd4af00caaa9730 --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/stylesheets/CssWithURLs.css @@ -0,0 +1,13 @@ +h1 { + color: orange; + text-align: center; + /* url relative to root: must not be rewritten*/ + background: url(tests/PHPUnit/Unit/AssetManager/stylesheets/images/test-image.png); +} + +p { + font-size: 20px; + /* url relative to file: must be rewritten*/ + background: url(images/test-image.png); + height: calc(100% + 45px); +} \ No newline at end of file diff --git a/tests/PHPUnit/Unit/AssetManager/stylesheets/ExpectedMergeResult.css b/tests/PHPUnit/Unit/AssetManager/stylesheets/ExpectedMergeResult.css new file mode 100644 index 0000000000000000000000000000000000000000..f97cd83fe04707508dbebc457728eb469fc1c2a0 --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/stylesheets/ExpectedMergeResult.css @@ -0,0 +1,34 @@ +/* compile_me_once={{{CACHE-BUSTER-JS}}} */ +/* Matomo CSS file is compiled with Less. You may be interested in writing a custom Theme for Matomo! */ +#page #header { + color: #ffffff; +} +#footer { + color: #ff0000; +} +.box { + color: #fe33ac; + border-color: #fdcdea; +} +.box div { + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); +} +h1 { + color: orange; + text-align: center; + /* url relative to root: must not be rewritten*/ + background: url(tests/PHPUnit/Unit/AssetManager/stylesheets/images/test-image.png); +} + +p { + font-size: 20px; + /* url relative to file: must be rewritten*/ + background: url(tests/PHPUnit/Unit/AssetManager/stylesheets/images/test-image.png); + height: calc(100% + 45px); +} +body { + background-color:#b0c4de; +} +/* customization via event */ \ No newline at end of file diff --git a/tests/PHPUnit/Unit/AssetManager/stylesheets/ImportedLess.less b/tests/PHPUnit/Unit/AssetManager/stylesheets/ImportedLess.less new file mode 100644 index 0000000000000000000000000000000000000000..db566317b6ee5e2db9190e8ec266cefccef76aa4 --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/stylesheets/ImportedLess.less @@ -0,0 +1,12 @@ +@var: red; + +#page { + @var: white; + #header { + color: @var; + } +} + +#footer { + color: @var; +} \ No newline at end of file diff --git a/tests/PHPUnit/Unit/AssetManager/stylesheets/SimpleBody.css b/tests/PHPUnit/Unit/AssetManager/stylesheets/SimpleBody.css new file mode 100644 index 0000000000000000000000000000000000000000..6e0e55777a8ed988244315b6dce8b898c7fc5fda --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/stylesheets/SimpleBody.css @@ -0,0 +1,3 @@ +body { + background-color:#b0c4de; +} \ No newline at end of file diff --git a/tests/PHPUnit/Unit/AssetManager/stylesheets/SimpleLess.less b/tests/PHPUnit/Unit/AssetManager/stylesheets/SimpleLess.less new file mode 100644 index 0000000000000000000000000000000000000000..fd7b33af317a64500c13d5cb97d64129cd78e959 --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManager/stylesheets/SimpleLess.less @@ -0,0 +1,17 @@ +@import "ImportedLess"; + +@base: #f938ab; + +.box-shadow(@style, @c) when (iscolor(@c)) { + -webkit-box-shadow: @style @c; + -moz-box-shadow: @style @c; + box-shadow: @style @c; +} +.box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) { + .box-shadow(@style, rgba(0, 0, 0, @alpha)); +} +.box { + color: saturate(@base, 5%); + border-color: lighten(@base, 30%); + div { .box-shadow(0 0 5px, 30%) } +} diff --git a/tests/PHPUnit/Unit/AssetManager/stylesheets/images/test-image.png b/tests/PHPUnit/Unit/AssetManager/stylesheets/images/test-image.png new file mode 100644 index 0000000000000000000000000000000000000000..da6e1bbe89dc52e9fdaae1119f1c7353ed997076 Binary files /dev/null and b/tests/PHPUnit/Unit/AssetManager/stylesheets/images/test-image.png differ diff --git a/tests/PHPUnit/Unit/AssetManagerTest.php b/tests/PHPUnit/Unit/AssetManagerTest.php new file mode 100644 index 0000000000000000000000000000000000000000..0382ad2ef0ef1b4f20ddb96bd7b2e2acc11f675d --- /dev/null +++ b/tests/PHPUnit/Unit/AssetManagerTest.php @@ -0,0 +1,48 @@ +assertFalse($manager->isMergedAssetsDisabled()); + + // with configuration + $defaultConfig = Config::getInstance()->Development['disable_merged_assets']; + + Config::getInstance()->Development['disable_merged_assets'] = false; + $this->assertFalse($manager->isMergedAssetsDisabled()); + + Config::getInstance()->Development['disable_merged_assets'] = true; + $this->assertTrue($manager->isMergedAssetsDisabled()); + + // reset the config + Config::getInstance()->Development['disable_merged_assets'] = $defaultConfig; + + // with $_GET parameter + $_GET['disable_merged_assets'] = '1'; + $this->assertTrue($manager->isMergedAssetsDisabled()); + unset($_GET['disable_merged_assets']); + + $_GET['disable_merged_assets'] = '0'; + $this->assertFalse($manager->isMergedAssetsDisabled()); + unset($_GET['disable_merged_assets']); + } +} diff --git a/tests/PHPUnit/Unit/Auth/PasswordStrengthTest.php b/tests/PHPUnit/Unit/Auth/PasswordStrengthTest.php new file mode 100644 index 0000000000000000000000000000000000000000..fc5af5a5e7f9b8895c6cd305baaeb947e50628c1 --- /dev/null +++ b/tests/PHPUnit/Unit/Auth/PasswordStrengthTest.php @@ -0,0 +1,119 @@ +getRules(); + + $this->assertEmpty($rules); + } + + public function testGetRulesFeatureEnabled() + { + $passwordStrength = new PasswordStrength($featureEnabled = true); + $rules = $passwordStrength->getRules(); + + $this->assertNotEmpty($rules); + foreach ($rules as $rule) { + $this->assertArrayHasKey('validationRegex', $rule); + $this->assertNotEmpty($rule['validationRegex']); + $this->assertArrayHasKey('ruleText', $rule); + $this->assertNotEmpty($rule['ruleText']); + } + } + + /** + * @dataProvider passwordProvider + */ + public function testPasswordStrengthFeatureDisabled($password, $expected) + { + $passwordStrength = new PasswordStrength($featureEnabled = false); + $brokenRules = $passwordStrength->validatePasswordStrength($password); + + $this->assertEmpty($brokenRules); + } + + /** + * @dataProvider passwordProvider + */ + public function testPasswordStrengthRulesFeatureEnabled($password, $expected) + { + $passwordStrength = new PasswordStrength($featureEnabled = true); + $brokenRules = $passwordStrength->validatePasswordStrength($password); + + $this->assertSame($expected, $brokenRules); + } + + public function passwordProvider() + { + yield ['Testpassword1!', []]; + yield ['Testpassword1"', []]; + yield ['Testpassword1#', []]; + yield ['Testpassword1$', []]; + yield ['Testpassword1%', []]; + yield ['Testpassword1&', []]; + yield ["Testpassword1'", []]; + yield ['Testpassword1(', []]; + yield ['Testpassword1)', []]; + yield ['Testpassword1*', []]; + yield ['Testpassword1+', []]; + yield ['Testpassword1,', []]; + yield ['Testpassword1-', []]; + yield ['Testpassword1.', []]; + yield ['Testpassword1/', []]; + yield ['Testpassword1:', []]; + yield ['Testpassword1;', []]; + yield ['Testpassword1<', []]; + yield ['Testpassword1=', []]; + yield ['Testpassword1>', []]; + yield ['Testpassword1?', []]; + yield ['Testpassword1@', []]; + yield ['Testpassword1[', []]; + yield ['Testpassword1\\', []]; + yield ['Testpassword1]', []]; + yield ['Testpassword1^', []]; + yield ['Testpassword1_', []]; + yield ['Testpassword1`', []]; + yield ['Testpassword1{', []]; + yield ['Testpassword1|', []]; + yield ['Testpassword1}', []]; + yield ['Testpassword1~', []]; + yield ['Testword1!', ['General_PasswordStrengthValidationLength']]; + yield ['TESTPASSWORD1!', ['General_PasswordStrengthValidationLowercase']]; + yield ['testpassword1!', ['General_PasswordStrengthValidationUppercase']]; + yield ['Testpassword!', ['General_PasswordStrengthValidationNumber']]; + yield ['Testpassword1', ['General_PasswordStrengthValidationSpecialChar']]; + yield ['testpassword1', [ + 'General_PasswordStrengthValidationUppercase', + 'General_PasswordStrengthValidationSpecialChar', + ]]; + yield ['TESTWORD!', [ + 'General_PasswordStrengthValidationLength', + 'General_PasswordStrengthValidationLowercase', + 'General_PasswordStrengthValidationNumber', + ]]; + yield ['', [ + 'General_PasswordStrengthValidationLength', + 'General_PasswordStrengthValidationLowercase', + 'General_PasswordStrengthValidationUppercase', + 'General_PasswordStrengthValidationNumber', + 'General_PasswordStrengthValidationSpecialChar', + ]]; + } +} diff --git a/tests/PHPUnit/Unit/CacheTest.php b/tests/PHPUnit/Unit/CacheTest.php new file mode 100644 index 0000000000000000000000000000000000000000..54f82ff66a9aac41213e496fa98dc96ad9d5d6a3 --- /dev/null +++ b/tests/PHPUnit/Unit/CacheTest.php @@ -0,0 +1,84 @@ +assertTrue($cache instanceof \Matomo\Cache\Lazy); + } + + public function testGetLazyCacheShouldAlwaysReturnTheSameInstance() + { + $cache1 = Cache::getLazyCache(); + $cache2 = Cache::getLazyCache(); + + $this->assertSame($cache1, $cache2); + } + + public function testGetEagerCacheShouldCreateAnInstanceOfEager() + { + $cache = Cache::getEagerCache(); + + $this->assertTrue($cache instanceof \Matomo\Cache\Eager); + } + + public function testGetEagerCacheShouldAlwaysReturnTheSameInstance() + { + $cache1 = Cache::getEagerCache(); + $cache2 = Cache::getEagerCache(); + + $this->assertSame($cache1, $cache2); + } + + public function testGetTransientCacheShouldCreateAnInstanceOfTransient() + { + $cache = Cache::getTransientCache(); + + $this->assertTrue($cache instanceof \Matomo\Cache\Transient); + } + + public function testGetTransientCacheShouldAlwaysReturnTheSameInstance() + { + $cache1 = Cache::getTransientCache(); + $cache2 = Cache::getTransientCache(); + + $this->assertSame($cache1, $cache2); + } + + public function testFlushAllShouldActuallyFlushAllCaches() + { + $cache1 = Cache::getTransientCache(); + $cache2 = Cache::getLazyCache(); + $cache3 = Cache::getEagerCache(); + + $cache1->save('test1', 'content'); + $cache2->save('test2', 'content'); + $cache3->save('test3', 'content'); + + $this->assertTrue($cache1->contains('test1')); + $this->assertTrue($cache2->contains('test2')); + $this->assertTrue($cache3->contains('test3')); + + Cache::flushAll(); + + $this->assertFalse($cache1->contains('test1')); + $this->assertFalse($cache2->contains('test2')); + $this->assertFalse($cache3->contains('test3')); + } +} diff --git a/tests/PHPUnit/Unit/Category/CategoryListTest.php b/tests/PHPUnit/Unit/Category/CategoryListTest.php new file mode 100644 index 0000000000000000000000000000000000000000..bceceba6b8c2cf7650eceec96dff7414417909a5 --- /dev/null +++ b/tests/PHPUnit/Unit/Category/CategoryListTest.php @@ -0,0 +1,92 @@ +categoryList = new CategoryList(); + } + + public function testGetCategoriesIsEmptyByDefault() + { + $this->assertSame(array(), $this->categoryList->getCategories()); + } + + public function testAddCategoryShouldAddCategoryAndGetCategoriesShouldBeIndexedById() + { + $category = $this->addCategory('myTest'); + + $this->assertSame(array('myTest' => $category), $this->categoryList->getCategories()); + } + + public function testAddCategoryShouldThrowExceptionIfAddingSameCategoryIdTwice() + { + $this->expectException(\Exception::class); + $this->expectExceptionMessage('Category myTest already exists'); + + $this->addCategory('myTest'); + $this->addCategory('myTest'); + } + + public function testHasCategoryShouldDetectIfCategoryExists() + { + $this->assertFalse($this->categoryList->hasCategory('myTest')); + + $this->addCategory('myTest'); + + $this->assertTrue($this->categoryList->hasCategory('myTest')); + + $this->assertFalse($this->categoryList->hasCategory('myTest2')); + $this->assertFalse($this->categoryList->hasCategory('General_Visits')); + } + + public function testGetCategoryShouldReturnExistingCategoryIfPossible() + { + $this->assertNull($this->categoryList->getCategory('myTest')); + + $category = $this->addCategory('myTest'); + + $this->assertSame($category, $this->categoryList->getCategory('myTest')); + + $this->assertNull($this->categoryList->getCategory('myTest2')); + $this->assertNull($this->categoryList->getCategory('General_Visits')); + } + + private function addCategory($id) + { + $category = $this->createCategory($id); + $this->categoryList->addCategory($category); + + return $category; + } + + private function createCategory($categoryId) + { + $config = new Category(); + $config->setId($categoryId); + + return $config; + } +} diff --git a/tests/PHPUnit/Unit/Category/CategoryTest.php b/tests/PHPUnit/Unit/Category/CategoryTest.php new file mode 100644 index 0000000000000000000000000000000000000000..ad0c720780a8b7d30be5f74e1ad601ab2e556d29 --- /dev/null +++ b/tests/PHPUnit/Unit/Category/CategoryTest.php @@ -0,0 +1,186 @@ +category = new Category(); + } + + public function testOrderSetGet() + { + $this->category->setOrder(99); + $this->assertSame(99, $this->category->getOrder()); + + $this->category->setOrder('98'); + $this->assertSame(98, $this->category->getOrder()); + } + + public function testGetOrderShouldReturnADefaultValue() + { + $this->assertSame(99, $this->category->getOrder()); + } + + public function testIdSetGet() + { + $this->category->setId('myCustomId'); + $this->assertSame('myCustomId', $this->category->getId()); + } + + public function testGetIdShouldBeEmptyStringByDefault() + { + $this->assertSame('', $this->category->getId()); + } + + public function testGetDisplayNameShouldUseId() + { + $this->category->setId('myCustomId'); + $this->assertSame('myCustomId', $this->category->getDisplayName()); + } + + public function testGetSubcategoriesShouldReturnAnEmptyArrayByDefault() + { + $this->assertSame(array(), $this->category->getSubcategories()); + } + + public function testGetGroupsShouldReturnTheDefaultGroupByDefault() + { + $this->assertSame(array(Category::DEFAULT_GROUP), $this->category->getGroups()); + } + + public function testGroupsSetGet() + { + $this->category->setGroups(array(Category::DEFAULT_GROUP, 'CoreHome_AIInsights')); + $this->assertSame(array(Category::DEFAULT_GROUP, 'CoreHome_AIInsights'), $this->category->getGroups()); + } + + public function testSetGroupsShouldRemoveDuplicatesAndCastToString() + { + $this->category->setGroups(array('CoreHome_AIInsights', 'CoreHome_AIInsights', 123)); + $this->assertSame(array('CoreHome_AIInsights', '123'), $this->category->getGroups()); + } + + public function testSetGroupsShouldFallBackToDefaultGroupWhenEmpty() + { + $this->category->setGroups(array()); + $this->assertSame(array(Category::DEFAULT_GROUP), $this->category->getGroups()); + } + + public function testGetGroupsWithoutTrackingRequirementShouldReturnAnEmptyArrayByDefault() + { + $this->assertSame(array(), $this->category->getGroupsWithoutTrackingRequirement()); + } + + public function testGroupsWithoutTrackingRequirementSetGet() + { + $this->category->setGroupsWithoutTrackingRequirement(array('CoreHome_AIInsights')); + $this->assertSame(array('CoreHome_AIInsights'), $this->category->getGroupsWithoutTrackingRequirement()); + } + + public function testSetGroupsWithoutTrackingRequirementShouldRemoveDuplicatesAndCastToString() + { + $this->category->setGroupsWithoutTrackingRequirement(array('CoreHome_AIInsights', 'CoreHome_AIInsights', 123)); + $this->assertSame(array('CoreHome_AIInsights', '123'), $this->category->getGroupsWithoutTrackingRequirement()); + } + + public function testAddSubcategoryShouldActuallyAddAndReturnSubcategories() + { + $subcategory1 = $this->createSubcategory('id1', 'name1'); + $subcategory2 = $this->createSubcategory('id2', 'name2'); + + $this->category->addSubcategory($subcategory1); + $this->category->addSubcategory($subcategory2); + + $this->assertSame(array($subcategory1, $subcategory2), $this->category->getSubcategories()); + } + + public function testAddSubcategoryShouldThrowExceptionWhenAddingSubcategoryWithSameIdTwice() + { + $this->expectException(\Exception::class); + $this->expectExceptionMessage('Subcategory id1 already exists'); + + $subcategory1 = $this->createSubcategory('id1', 'name1'); + $subcategory2 = $this->createSubcategory('id1', 'name2'); + + $this->category->addSubcategory($subcategory1); + $this->category->addSubcategory($subcategory2); + } + + public function testHasSubcategoriesShouldDetectIfSubcategoriesArePresent() + { + $this->assertFalse($this->category->hasSubCategories()); + $this->addSubcategories(array('myid' => 'myname')); + $this->assertTrue($this->category->hasSubCategories()); + } + + public function testGetSubcategoryShouldNotFindASubCategoryByIdIfSuchCategoryDoesNotExist() + { + $this->assertNull($this->category->getSubcategory('myid')); + } + + public function testGetSubcategoryShouldFindAnExistingSubCategoryById() + { + $this->addSubcategories(array('myid' => 'myname', 'myid2' => 'myname2')); + + $subcategory = $this->category->getSubcategory('myid2'); + $this->assertTrue($subcategory instanceof Subcategory); + $this->assertSame('myname2', $subcategory->getName()); + } + + public function testGetSubcategoryShouldNotFindASubcategoryByName() + { + $this->addSubcategories(array('myid' => 'myname')); + + $this->assertNull($this->category->getSubcategory('myname')); + } + + public function testHasSubcategoryShouldActuallyAddTheConfig() + { + $this->assertFalse($this->category->hasSubcategory('myid2')); + + $this->addSubcategories(array('myid' => 'myname', 'myid2' => 'myname2')); + + $this->assertTrue($this->category->hasSubcategory('myid2')); + $this->assertFalse($this->category->hasSubcategory('myname')); + $this->assertFalse($this->category->hasSubcategory('myname2')); + $this->assertFalse($this->category->hasSubcategory('mySomething')); + } + + private function addSubcategories($subcategories) + { + foreach ($subcategories as $id => $name) { + $this->category->addSubcategory($this->createSubcategory($id, $name)); + } + } + + private function createSubcategory($subcategoryId, $subcategoryName) + { + $config = new Subcategory(); + $config->setId($subcategoryId); + $config->setName($subcategoryName); + + return $config; + } +} diff --git a/tests/PHPUnit/Unit/Category/SubcategoryTest.php b/tests/PHPUnit/Unit/Category/SubcategoryTest.php new file mode 100644 index 0000000000000000000000000000000000000000..027ba3c4f4d7726c011cb840ef3ca38937acfe01 --- /dev/null +++ b/tests/PHPUnit/Unit/Category/SubcategoryTest.php @@ -0,0 +1,88 @@ +subcategory = new Subcategory(); + } + + public function testCategoryIdSetGet() + { + $this->subcategory->setCategoryId('testCategory'); + + $this->assertSame('testCategory', $this->subcategory->getCategoryId()); + } + + public function testGetCategoryIdShouldBeEmptyStringByDefault() + { + $this->assertSame('', $this->subcategory->getCategoryId()); + } + + public function testNameSetGet() + { + $this->subcategory->setName('testName'); + + $this->assertSame('testName', $this->subcategory->getName()); + } + + public function testGetNameShouldBeEmptyStringByDefault() + { + $this->assertSame('', $this->subcategory->getName()); + } + + public function testGetNameShouldDefaultToIdIfNoNameIsSet() + { + $this->subcategory->setId('myTestId'); + + $this->assertSame('myTestId', $this->subcategory->getName()); + $this->assertSame('myTestId', $this->subcategory->getId()); + } + + public function testOrderSetGet() + { + $this->subcategory->setOrder(99); + $this->assertSame(99, $this->subcategory->getOrder()); + + $this->subcategory->setOrder('98'); + $this->assertSame(98, $this->subcategory->getOrder()); + } + + public function testGetOrderShouldReturnADefaultValue() + { + $this->assertSame(99, $this->subcategory->getOrder()); + } + + public function testIdSetGet() + { + $this->subcategory->setId('myCustomId'); + $this->assertSame('myCustomId', $this->subcategory->getId()); + } + + public function testGetIdShouldBeEmptyStringByDefault() + { + $this->assertSame('', $this->subcategory->getId()); + } +} diff --git a/tests/PHPUnit/Unit/CommonTest.php b/tests/PHPUnit/Unit/CommonTest.php new file mode 100644 index 0000000000000000000000000000000000000000..76e8b526b006ed774052fe4f61af1c1301762881 --- /dev/null +++ b/tests/PHPUnit/Unit/CommonTest.php @@ -0,0 +1,674 @@ +assertEquals(getmypid(), Common::getProcessId()); + //assure always returns same value + $this->assertEquals(getmypid(), Common::getProcessId()); + } + + public function testHashEquals() + { + $this->assertFalse(Common::hashEquals('foo', 'bar')); + $this->assertFalse(Common::hashEquals('foo', 'fo')); + $this->assertFalse(Common::hashEquals('foo', 'fooo')); + $this->assertFalse(Common::hashEquals('foo', 'foa')); + $this->assertFalse(Common::hashEquals('foo', 'eoo')); + $this->assertFalse(Common::hashEquals('foo', '')); + $this->assertFalse(Common::hashEquals('', 'bar')); + $this->assertTrue(Common::hashEquals('foo', 'foo')); + } + + /** + * Dataprovider for testSanitizeInputValues + */ + public function getInputValues() + { + return [ // input, output + // sanitize an array OK + [ + ['test1' => 't1', 't45', 'teatae', 4568, ['test'], 1.52], + ['test1' => 't1', 't45', 'teatae', 4568, ['test'], 1.52], + ], + [ + [ + 'test1' => 't1', + 't45', + 'teatae', + 4568, + ['test'], + 1.52, + ['test1' => 't1', 't45', 'teatae', 4568, ['test'], 1.52], + ['test1' => 't1', 't45', 'teatae', 4568, ['test'], 1.52], + [ + [[['test1' => 't1', 't45', 'teatae', 4568, ['test'], 1.52]]], + ], + ], + [ + 'test1' => 't1', + 't45', + 'teatae', + 4568, + ['test'], + 1.52, + ['test1' => 't1', 't45', 'teatae', 4568, ['test'], 1.52], + ['test1' => 't1', 't45', 'teatae', 4568, ['test'], 1.52], + [ + [[['test1' => 't1', 't45', 'teatae', 4568, ['test'], 1.52]]], + ], + ], + ], + // sanitize an array with bad value level1 + [ + ['test1' => 't1', 't45', 'tea1"ta"e', 568, 1 => ['t 't1', 't45', 'tea1"ta"e', 568, 1 => ['t<e"st'], 1.52], + ], + // sanitize an array with bad value level2 + [ + ['tea1"ta"e' => ['t ['tgeag454554"t']], 1.52], + ['tea1"ta"e' => ['t<e"st' => ['tgeag454554"t']], 1.52], + ], + // sanitize a string unicode => no change + [ + ' Пои�к в Интернете Поgqegи�к �траниц на рgeqg8978у��ком', + ' Пои�к в Интернете Поgqegи�к �траниц на рgeqg8978у��ком', + ], + // sanitize a bad string + [ + '& " < > 123abc\'', + '& " < > 123abc'', + ], + // test filter - expect new line and null byte to be filtered out + [ + "Null\0Byte", + 'NullByte', + ], + // double encoded - no change (document as user error) + [ + '%48%45%4C%00%4C%4F+%57%4F%52%4C%44', + '%48%45%4C%00%4C%4F+%57%4F%52%4C%44', + ], + // sanitize an integer + ['121564564', '121564564'], + ['121564564.0121', '121564564.0121'], + [121564564.0121, 121564564.0121], + [12121, 12121], + // sanitize HTML + [ + "Piwik!!!!!", + '<test toto='mama' piwik="cool">Piwik!!!!!</test>', + ], + // sanitize a SQL query + [ + "SELECT piwik FROM piwik_tests where test= 'super\"value' AND cool=toto #comment here", + 'SELECT piwik FROM piwik_tests where test= 'super"value' AND cool=toto #comment here', + ], + // sanitize php variables + [true, true], + [false, false], + [null, null], + ['', ''], + ]; + } + + /** + * @dataProvider getInputValues + */ + public function testSanitizeInputValues($input, $output) + { + $this->assertEquals($output, Common::sanitizeInputValues($input)); + } + + /** + * emptyvarname => exception + */ + public function testGetRequestVarEmptyVarName() + { + $this->expectException(Exception::class); + $_GET[''] = 1; + Common::getRequestVar(''); + } + + /** + * nodefault Notype Novalue => exception + */ + public function testGetRequestVarNoDefaultNoTypeNoValue() + { + $this->expectException(Exception::class); + Common::getRequestVar('test'); + } + + /** + * nodefault Notype WithValue => value + */ + public function testGetRequestVarNoDefaultNoTypeWithValue() + { + $_GET['test'] = 1413.431413; + $this->assertEquals($_GET['test'], Common::getRequestVar('test')); + } + + /** + * @dataProvider getValidFloatValues + */ + public function testGetRequestVarFloatValues($requestValue, $expectedValue) + { + $_GET['test'] = $requestValue; + $value = Common::getRequestVar('test', null, 'string'); + $this->assertEquals($expectedValue, $value); + } + + public function getValidFloatValues(): iterable + { + yield 'Integer value' => [17, 17.0]; + yield 'Float value' => [17.123, 17.123]; + yield 'String value' => ['17.123', 17.123]; + yield 'Negative string value' => ['-17.123', -17.123]; + yield 'Positive string value' => ['+17.123', 17.123]; + yield 'String value, only fraction digits' => ['.123', 0.123]; + yield 'String value, no fraction digits' => ['123.e-3', 0.123]; + yield 'Negative string value, only fraction digits' => ['-.123', -0.123]; + yield 'Exp value' => [2e-2, 0.02]; + yield 'String exp value' => ['2e-3', 0.002]; + yield 'String Exp value' => ['1.2E-26', 1.2E-26]; + yield 'Octal exp value' => [0123e-2, 1.23]; + yield 'Octal value as string' => ['0123', 123.0]; + yield 'String value with many digits' => ['1254254645455484545.1', 1.2542546454554847E+18]; + yield 'String value with many fraction digits' => ['14.051545421864646123', 14.051545421864645]; + } + + public function testGetRequestVarGetStringIntegerGiven() + { + $_GET['test'] = 1413; + $value = Common::getRequestVar('test', null, 'string'); + $this->assertEquals('1413', $value); + } + + /** + * nodefault Withtype WithValue => exception cos type not matching + */ + public function testGetRequestVarNoDefaultWithTypeWithValue() + { + $this->expectException(Exception::class); + $this->expectDeprecationMessage("The parameter 'test' isn't set in the Request"); + $_GET['test'] = false; + Common::getRequestVar('test', null, 'string'); + } + + /** + * nodefault Withtype WithValue => exception cos type not matching + */ + public function testGetRequestVarNoDefaultWithTypeWithValue2() + { + $this->expectException(Exception::class); + Common::getRequestVar('test', null, 'string'); + } + + /** + * Dataprovider for testGetRequestVar + */ + public function getRequestVarValues() + { + return [ // value of request var, default value, var type, expected + [1413.431413, 2, 'int', 2], + // withdefault Withtype WithValue => value casted as type + [null, 'default', null, 'default'], + // withdefault Notype NoValue => default value + [null, 'default', 'string', 'default'], + // withdefault Withtype NoValue =>default value casted as type + // integer as a default value / types + ['', 45, 'int', 45], + [1413.431413, 45, 'int', 45], + ['', 45, 'integer', 45], + ['', 45.0, 'float', 45.0], + ['', 45.25, 'float', 45.25], + // string as a default value / types + ['1413.431413', 45, 'int', 45], + ['1413.431413', 45, 'string', '1413.431413'], + ['', 45, 'string', '45'], + ['', 'geaga', 'string', 'geaga'], + ['', ''}{}}{}{}'', 'string', ''}{}}{}{}''], + ['', 'http://url?arg1=val1&arg2=val2', 'string', 'http://url?arg1=val1&arg2=val2'], + [ + 'http://url?arg1=val1&arg2=val2', + 'http://url?arg1=val1&arg2=val4', + 'string', + 'http://url?arg1=val1&arg2=val2', + ], + [['test', 1345524, ['gaga']], [], 'array', ['test', 1345524, ['gaga']]], + // array as a default value / types + [['test', 1345524, ['gaga']], 45, 'string', '45'], + [['test', 1345524, ['gaga']], [1], 'array', ['test', 1345524, ['gaga']]], + [ + ['test', 1345524, "Start of hello\nworld\n\t", ['gaga']], + [1], + 'array', + ['test', 1345524, "Start of hello\nworld\n\t", ['gaga']], + ], + [['test', 1345524, ['gaga']], 4, 'int', 4], + ['', [1], 'array', [1]], + ['', [], 'array', []], + // we give a number in a string and request for a number => it should give the string casted as a number + ['45645646', 1, 'int', 45645646], + ['45645646', 45, 'integer', 45645646], + ['45645646', '45454', 'string', '45645646'], + ['45645646', [], 'array', []], + ]; + } + + /** + * @dataProvider getRequestVarValues + * @group Core + */ + public function testGetRequestVar($varValue, $default, $type, $expected) + { + $_GET['test'] = $varValue; + $return = Common::getRequestVar('test', $default, $type); + $this->assertEquals($expected, $return); + // validate correct type + switch ($type) { + case 'int': + case 'integer': + $this->assertTrue(is_int($return)); + break; + case 'float': + $this->assertTrue(is_float($return)); + break; + case 'string': + $this->assertTrue(is_string($return)); + break; + case 'array': + $this->assertTrue(is_array($return)); + break; + } + } + + public function testIsValidFilenameValidValues() + { + $valid = [ + 'test', + 'test.txt', + 'test.......', + 'en-ZHsimplified', + '0', + ]; + foreach ($valid as $toTest) { + $this->assertTrue(Filesystem::isValidFilename($toTest), $toTest . ' not valid!'); + } + } + + public function testIsValidFilenameNotValidValues() + { + $notvalid = [ + '../test', + '/etc/htpasswd', + '$var', + ';test', + '[bizarre]', + '', + false, + '.htaccess', + 'very long long eogaioge ageja geau ghaeihieg heiagie aiughaeui hfilename', + 'WHITE SPACE', + ]; + foreach ($notvalid as $toTest) { + self::assertFalse(Filesystem::isValidFilename($toTest), $toTest . " valid but shouldn't!"); + } + } + + public function testSafeUnserialize() + { + // should unserialize an allowed class + $this->assertTrue(Common::safe_unserialize('O:12:"Piwik\Common":0:{}', ['Piwik\Common']) instanceof Common); + + // not allowed classed should result in an incomplete class + $this->assertTrue(Common::safe_unserialize('O:12:"Piwik\Common":0:{}') instanceof __PHP_Incomplete_Class); + + // strings not unserializable should return false and trigger a debug log + $logger = $this->createFakeLogger(); + self::assertFalse(Common::safe_unserialize('{1:somebroken}')); + self::assertStringContainsString( + 'Unable to unserialize a string: unserialize(): Error at offset 0 of 14 bytes', + $logger->output + ); + } + + private function createFakeLogger() + { + $logger = new FakeLogger(); + + $newEnv = new Environment('test', [ + Log\LoggerInterface::class => $logger, + 'Tests.log.allowAllHandlers' => true, + ]); + $newEnv->init(); + + $newMonologLogger = $newEnv->getContainer()->make(Log\LoggerInterface::class); + $oldLogger = new Log($newMonologLogger); + Log::setSingletonInstance($oldLogger); + + return $logger; + } + + /** + * Dataprovider for testGetBrowserLanguage + */ + public function getBrowserLanguageData() + { + return [ // user agent, browser language + ['en-gb', 'en-gb'], + + // filter quality attribute + ['en-us,en;q=0.5', 'en-us,en'], + + // bad user agents + ['en-us,chrome://global/locale/intl.properties', 'en-us'], + + // unregistered language tag + ['en,en-securid', 'en'], + ['en-securid,en', 'en'], + ['en-us,en-securid,en', 'en-us,en'], + + // accept private sub tags + ['en-us,x-en-securid', 'en-us,x-en-securid'], + ['en-us,en-x-securid', 'en-us,en-x-securid'], + + // filter arbitrary white space + ['en-us, en', 'en-us,en'], + ['en-ca, en-us ,en', 'en-ca,en-us,en'], + + // handle comments + [' ( comment ) en-us (another comment) ', 'en-us'], + + // handle quoted pairs (embedded in comments) + [' ( \( start ) en-us ( \) end ) ', 'en-us'], + [' ( \) en-ca, \( ) en-us ( \) ,en ) ', 'en-us'], + ]; + } + + /** + * @dataProvider getBrowserLanguageData + * @group Core + */ + public function testGetBrowserLanguage($useragent, $browserLanguage) + { + $res = Common::getBrowserLanguage($useragent); + $this->assertEquals($browserLanguage, $res); + } + + /** + * Dataprovider for testExtractCountryCodeFromBrowserLanguage + */ + public function getCountryCodeTestData() + { + /** @var RegionDataProvider $regionDataProvider */ + $regionDataProvider = StaticContainer::get('Piwik\Intl\Data\Provider\RegionDataProvider'); + + return [ // browser language, valid countries, expected result + ['', [], 'xx'], + ['', ['us' => 'amn'], 'xx'], + ['en', ['us' => 'amn'], 'xx'], + ['en-us', ['us' => 'amn'], 'us'], + ['en-ca', ['us' => 'amn'], 'xx'], + ['en-ca', ['us' => 'amn', 'ca' => 'amn'], 'ca'], + ['fr-fr,fr-ca', ['us' => 'amn', 'ca' => 'amn'], 'ca'], + ['fr-fr;q=1.0,fr-ca;q=0.9', ['us' => 'amn', 'ca' => 'amn'], 'ca'], + ['fr-ca,fr;q=0.1', ['us' => 'amn', 'ca' => 'amn'], 'ca'], + ['en-us,en;q=0.5', $regionDataProvider->getCountryList(), 'us'], + ['fr-ca,fr;q=0.1', ['fr' => 'eur', 'us' => 'amn', 'ca' => 'amn'], 'ca'], + ['fr-fr,fr-ca', ['fr' => 'eur', 'us' => 'amn', 'ca' => 'amn'], 'fr'], + ]; + } + + /** + * @dataProvider getCountryCodeTestData + * @group Core + */ + public function testExtractCountryCodeFromBrowserLanguage($browserLanguage, $validCountries, $expected) + { + $this->assertEquals( + $expected, + Common::extractCountryCodeFromBrowserLanguage($browserLanguage, $validCountries, true) + ); + $this->assertEquals( + $expected, + Common::extractCountryCodeFromBrowserLanguage($browserLanguage, $validCountries, false) + ); + } + + /** + * Dataprovider for testExtractCountryCodeFromBrowserLanguageInfer + */ + public function getCountryCodeTestDataInfer() + { + return [ // browser language, valid countries, expected result (non-guess vs guess) + ['fr,en-us', ['us' => 'amn', 'ca' => 'amn'], 'us', 'fr'], + ['fr,en-us', ['fr' => 'eur', 'us' => 'amn', 'ca' => 'amn'], 'us', 'fr'], + ['fr,fr-fr,en-us', ['fr' => 'eur', 'us' => 'amn', 'ca' => 'amn'], 'fr', 'fr'], + ['fr-fr,fr,en-us', ['fr' => 'eur', 'us' => 'amn', 'ca' => 'amn'], 'fr', 'fr'], + ]; + } + + /** + * @dataProvider getCountryCodeTestDataInfer + * @group Core + */ + public function testExtractCountryCodeFromBrowserLanguageInfer( + $browserLanguage, + $validCountries, + $expected, + $expectedInfer + ) { + // do not infer country from language + $this->assertEquals( + $expected, + Common::extractCountryCodeFromBrowserLanguage( + $browserLanguage, + $validCountries, + $enableLanguageToCountryGuess = false + ) + ); + + // infer country from language + $this->assertEquals( + $expectedInfer, + Common::extractCountryCodeFromBrowserLanguage( + $browserLanguage, + $validCountries, + $enableLanguageToCountryGuess = true + ) + ); + } + + /** + * Dataprovider for testExtractLanguageAndRegionCodeFromBrowserLanguage + */ + public function getLanguageDataToExtractLanguageRegionCode() + { + return [ + // browser language, valid languages (with optional region), expected result + ['fr-ca', ['fr'], 'fr'], + ['fr-ca', ['ca'], 'xx'], + ['', [], 'xx'], + ['', ['en'], 'xx'], + ['fr', ['en'], 'xx'], + ['en', ['en'], 'en'], + ['en', ['en-ca'], 'xx'], + ['en-ca', ['en-ca'], 'en-ca'], + ['en-ca', ['en'], 'en'], + ['fr,en-us', ['fr', 'en'], 'fr'], + ['fr,en-us', ['en', 'fr'], 'fr'], + ['fr-fr,fr-ca', [], 'fr-fr'], + ['fr-fr,fr-ca', ['fr-ca'], 'fr-ca'], + ['-ca', ['fr', 'ca'], 'xx'], + ['fr-fr;q=1.0,fr-ca;q=0.9', ['fr-ca'], 'fr-ca'], + ['es,en,fr;q=0.7,de;q=0.3', ['fr', 'es', 'de', 'en'], 'es'], + ['zh-sg,de;q=0.3', ['zh', 'es', 'de'], 'zh'], + ['fr-ca,fr;q=0.1', ['fr-ca'], 'fr-ca'], + ['r5,fr;q=1,de', ['fr', 'de'], 'fr'], + ['Zen§gq1', ['en'], 'xx'], + ['zh-hans-cn', ['zh-cn'], 'zh-cn'], + ['zh-hant-tw', ['zh-tw'], 'zh-tw'], + ['az-cyrl-az', ['az'], 'az'], + ['shi-tfng-ma', ['shi', 'shi-ma'], 'shi-ma'], + ]; + } + + /** + * @dataProvider getLanguageDataToExtractLanguageRegionCode + */ + public function testExtractLanguageAndRegionCodeFromBrowserLanguage($browserLanguage, $validLanguages, $expected) + { + $this->assertEquals( + $expected, + Common::extractLanguageAndRegionCodeFromBrowserLanguage($browserLanguage, $validLanguages), + "test with {$browserLanguage} failed, expected {$expected}" + ); + } + + + /** + * Dataprovider for testExtractLanguageCodeFromBrowserLanguage + */ + public function getLanguageDataToExtractLanguageCode() + { + return [ + // browser language, valid languages, expected result + ['fr-ca', ['fr'], 'fr'], + ['fr-ca', ['ca'], 'xx'], + ['', ['en'], 'xx'], + ['fr', ['en'], 'xx'], + ['en', ['en'], 'en'], + ['en', ['en-ca'], 'xx'], + ['en-ca', ['en'], 'en'], + ['fr,en-us', ['fr', 'en'], 'fr'], + ['fr,en-us', ['en', 'fr'], 'fr'], + ['fr-fr,fr-ca', ['fr'], 'fr'], + ['-ca', ['fr', 'ca'], 'xx'], + ['es,en,fr;q=0.7,de;q=0.3', ['fr', 'es', 'de', 'en'], 'es'], + ['zh-sg,de;q=0.3', ['zh', 'es', 'de'], 'zh'], + ['r5,fr;q=1,de', ['fr', 'de'], 'fr'], + ['Zen§gq1', ['en'], 'xx'], + ]; + } + + /** + * @dataProvider getLanguageDataToExtractLanguageCode + */ + public function testExtractLanguageCodeFromBrowserLanguage($browserLanguage, $validLanguages, $expected) + { + $this->assertEquals( + $expected, + Common::extractLanguageCodeFromBrowserLanguage($browserLanguage, $validLanguages), + "test with {$browserLanguage} failed, expected {$expected}" + ); + } + + /** + * @dataProvider getLanguageChainTestData + */ + public function testGetLanguageChain($expected, $browserLanguage) + { + self::assertEquals( + $expected, + Common::extractLanguageAndRegionCodeFromBrowserLanguage( + Common::getBrowserLanguage($browserLanguage), + APILanguagesManager::getInstance()->getAvailableLanguages() + ) + ); + } + + public function getLanguageChainTestData(): array + { + return [ + ['en', 'en-US,en;q=0.8,de-DE;q=0.6,de;q=0.4'], + ['de', 'de-DE;q=0.6,de;q=0.4'], + ['zh-cn', 'zh-CN,zh;q=0.9'], + ['fr', 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3'], + ['fr', 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7'], + ['de', 'de,en-US;q=0.7,en;q=0.3'], + ['pt-br', 'pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7,ru;q=0.6'], + ['hi', 'hi;en-US,en;q=0.8,q=0.6'], + ['ta', 'ta-IN,ta'], + ['hi', 'hi-in,hi,en-us,en'], + ['th', 'th-TH,th;q=0.9,en;q=0.8'], + ['zh-tw', 'zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7'], + ['fa', 'fa,en-US;q=0.9,en;q=0.8,fa-IR;q=0.7'], + ['nl', 'nl-NL,nl;q=0.9,en-US;q=0.8,en;q=0.7'], + ['it', 'it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7'], + ]; + } + + /** + * @dataProvider getTableNames + */ + public function testUnprefixTable($prefix, $tableName) + { + $originalValue = Config::getInstance()->database['tables_prefix']; + + Config::getInstance()->database['tables_prefix'] = $prefix; + + $manipulatedName = Common::unprefixTable(Common::prefixTable($tableName)); + + Config::getInstance()->database['tables_prefix'] = $originalValue; + + self::assertEquals($tableName, $manipulatedName); + } + + public function getTableNames(): array + { + return [ + ['matomo_', 'session'], + ['blob_', 'archive_blob_2014_07'], + ['14_', 'archive_blob_2014_07'], + ['ic_', 'archive_numeric_2014_07'], + ['log_', 'log_link_visit_action'], + ]; + } + + /** + * @dataProvider getArraysToFlatten + */ + public function testFlattenArray($requestValue, $expectedValue) + { + $this->assertEquals($expectedValue, Common::flattenArray($requestValue)); + } + + public function getArraysToFlatten(): iterable + { + yield 'Empty array' => [[], []]; + yield 'Array with nulls' => [[null, null, false, true], [null, null, false, true]]; + yield 'Associative array' => [['a' => 'b', 'c' => 'd'], ['b', 'd']]; + yield 'Nested array' => [[[1, 2], [3, 4]], [1, 2, 3, 4]]; + yield 'Deeply nested array' => [[[[1, 2]], [[3, 4]]], [1, 2, 3, 4]]; + yield 'Mix of levels in an array' => [[1, [[2]], [[[3]]], 4], [1, 2, 3, 4]]; + yield 'Mix of numeric and assoc arrays' => [[1, [['a' => 2]], [[['b' => 3]]], 'd' => 4], [1, 2, 3, 4]]; + } +} diff --git a/tests/PHPUnit/Unit/Config/ConfigTest.php b/tests/PHPUnit/Unit/Config/ConfigTest.php new file mode 100644 index 0000000000000000000000000000000000000000..ec96029bed9f0ff9aa56ba3cb65e7c84430da314 --- /dev/null +++ b/tests/PHPUnit/Unit/Config/ConfigTest.php @@ -0,0 +1,63 @@ +config = new Config($settingsProvider); + } + + /** + * Returns a boolean variable setting for convenience + * when calling e.g. getBool('General', 'force_ssl') + * This also documents that a boolean is only true if + * it is equal to 1. + * @see https://github.com/matomo-org/matomo/pull/17865 + * return 1 === $value || '1' === $value || true === $value; // was suggested for future use by @sgiehl + * + * @param string $section Configuration section + * @param string $name variable name + * @return bool whether it is considered set true (== 1) + */ + private function getBool(string $section, string $name): bool + { + return $this->config->$section[$name] == 1; + } + + /** + * @dataProvider getTestCases + */ + public function testGetBool($expected, $setting) + { + $this->assertSame($expected, $this->getBool('BoolSettings', $setting)); + } + + public function getTestCases(): array + { + return [ + [true, 'one'], + [true, 'onestr'], + [true, 'truebool'], + [true, 'isyes'], + [true, 'ison'], + [false, 'truestr'], + [false, 'two'], + [false, 'twostr'], + [false, 'invalid'], + [false, 'oneinstr'], + [false, 'twoinstr'], + [false, 'isoff'], + [false, 'isno'], + ]; + } +} diff --git a/tests/PHPUnit/Unit/Config/IniFileChainCacheTest.php b/tests/PHPUnit/Unit/Config/IniFileChainCacheTest.php new file mode 100644 index 0000000000000000000000000000000000000000..9aac9272258558c99025b304cbef2ddb8a210c2c --- /dev/null +++ b/tests/PHPUnit/Unit/Config/IniFileChainCacheTest.php @@ -0,0 +1,170 @@ +addHostInfo = $addhostInfo; + parent::__construct($defaultSettingsFiles, $userSettingsFile); + } + + protected function mergeFileSettings() + { + $settings = parent::mergeFileSettings(); + + if (!empty($this->addHostInfo)) { + $settings['General'] = ['trusted_hosts' => [$this->addHostInfo]]; + } + + return $settings; + } +} + +/** + * @group Core + */ +class IniFileChainCacheTest extends IniFileChainTest +{ + /** + * @var Cache + */ + private $cache; + + private $testHost = 'mytest.matomo.org'; + + public function setUp(): void + { + $GLOBALS['ENABLE_CONFIG_PHP_CACHE'] = true; + $_SERVER['HTTP_HOST'] = $this->testHost; + $this->cache = new Cache(); + parent::setUp(); + $this->setTrustedHosts(); + } + + private function setTrustedHosts() + { + Config::setSetting('General', 'trusted_hosts', [$this->testHost, 'foonot.exists']); + } + + public function tearDown(): void + { + $this->cache->doDelete(IniFileChain::CONFIG_CACHE_KEY); + unset($GLOBALS['ENABLE_CONFIG_PHP_CACHE']); + unset($_SERVER['HTTP_HOST']); + parent::tearDown(); + } + + /** + * @dataProvider getMergingTestData + */ + public function testReloadShouldNotPopulateCacheWhenNoTrustedHostIsConfigured($testDescription, $defaultSettingFiles, $userSettingsFile, $expected) + { + $value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY); + $this->assertEquals(false, $value); + + // reading the chain should populate the cache + $fileChain = new TestIniFileChain($defaultSettingFiles, $userSettingsFile); + $this->assertEquals($expected, $fileChain->getAll(), "'$testDescription' failed"); + + $value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY); + $this->assertEquals(false, $value); + } + + /** + * @dataProvider getMergingTestData + */ + public function testReloadShouldNotPopulateCacheWhenTrustedHostIsNotValid($testDescription, $defaultSettingFiles, $userSettingsFile, $expected) + { + $value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY); + $this->assertEquals(false, $value); + + // reading the chain should populate the cache + $fileChain = new TestIniFileChain($defaultSettingFiles, $userSettingsFile, 'foo.bar.com'); + $expected['General'] = ['trusted_hosts' => ['foo.bar.com']]; + $this->assertEquals($expected, $fileChain->getAll(), "'$testDescription' failed"); + + $value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY); + $this->assertEquals(false, $value); + } + + /** + * @dataProvider getMergingTestData + */ + public function testReloadShoulPopulateCacheWhenTrustedHostIsValid($testDescription, $defaultSettingFiles, $userSettingsFile, $expected) + { + $value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY); + $this->assertEquals(false, $value); + + // reading the chain should populate the cache + $fileChain = new TestIniFileChain($defaultSettingFiles, $userSettingsFile, $this->testHost); + $expected['General'] = ['trusted_hosts' => [$this->testHost]]; + $this->assertEquals($expected, $fileChain->getAll(), "'$testDescription' failed"); + + $value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY); + $settingsChain = $value['settingsChain']; + unset($value['settingsChain']); + $this->assertEquals(['mergedSettings' => $expected], $value); + + foreach ($defaultSettingFiles as $defaultSettingFile) { + self::assertTrue(array_key_exists($defaultSettingFile, $settingsChain)); + } + + $this->assertNotEmpty(array_keys($settingsChain)); + } + + /** + * @dataProvider getMergingTestData + */ + public function testReloadCanReadFromCache($testDescription, $defaultSettingFiles, $userSettingsFile, $expected) + { + $value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY); + $this->assertEquals(false, $value); + + $userSettingsFileCopy = dirname($userSettingsFile) . '/copy.' . basename($userSettingsFile); + copy($userSettingsFile, $userSettingsFileCopy); + + // reading the chain should populate the cache + $fileChain = new TestIniFileChain($defaultSettingFiles, $userSettingsFileCopy, $this->testHost); + $expected['General'] = ['trusted_hosts' => [$this->testHost]]; + $this->assertEquals($expected, $fileChain->getAll(), "'$testDescription' failed"); + + // ensure it can be read only from cache + $testChain = new TestIniFileChain(['foo'], $userSettingsFileCopy); + $this->assertEquals($expected, $testChain->getAll(), "'$testDescription' failed"); + unlink($userSettingsFileCopy); + } + + /** + * @dataProvider getMergingTestData + */ + public function testPopulateCacheDeleteCache($testDescription, $defaultSettingFiles, $userSettingsFile, $expected) + { + $this->testReloadShoulPopulateCacheWhenTrustedHostIsValid($testDescription, $defaultSettingFiles, $userSettingsFile, $expected); + + $value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY); + $this->assertNotEmpty($value); + + // dumping the cache should delete it + + $fileChain = new TestIniFileChain($defaultSettingFiles, $userSettingsFile); + $fileChain->deleteConfigCache(); + + $value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY); + $this->assertEquals(false, $value); + } +} diff --git a/tests/PHPUnit/Unit/Config/IniFileChainTest.php b/tests/PHPUnit/Unit/Config/IniFileChainTest.php new file mode 100644 index 0000000000000000000000000000000000000000..495d383f36d4a589a66cb6c0de59ef73ba776668 --- /dev/null +++ b/tests/PHPUnit/Unit/Config/IniFileChainTest.php @@ -0,0 +1,427 @@ + string', array( + 'b', 'a', 1, + )), + array('string < string', array( + 'a', 'b', -1, + )), + array('string vs array', array( + 'a', array('a'), -1, + )), + array('array vs string', array( + array('a'), 'a', 1, + )), + array('array = array', array( + array('a'), array('a'), 0, + )), + array('array > array', array( + array('b'), array('a'), 1, + )), + array('array < array', array( + array('a'), array('b'), -1, + )), + ); + } + + /** + * @dataProvider getCompareElementsData + */ + public function testCompareElementsCorrectlyComparesElements($description, $test) + { + list($a, $b, $expected) = $test; + + $result = IniFileChain::compareElements($a, $b); + $this->assertEquals($expected, $result, $description); + } + + /** + * Dataprovider for testArrayUnmerge + * @return array + */ + public function getArrayUnmergeData() + { + return array( + array('description of test', array( + array(), + array(), + )), + array('override with empty', array( + array('login' => 'root', 'password' => 'b33r'), + array('password' => ''), + )), + array('override with non-empty', array( + array('login' => 'root', 'password' => ''), + array('password' => 'b33r'), + )), + array('add element', array( + array('login' => 'root', 'password' => ''), + array('auth' => 'Login'), + )), + array('override with empty array', array( + array('headers' => ''), + array('headers' => array()), + )), + array('override with array', array( + array('headers' => ''), + array('headers' => array('Content-Length', 'Content-Type')), + )), + array('override an array', array( + array('headers' => array()), + array('headers' => array('Content-Length', 'Content-Type')), + )), + array('override similar arrays', array( + array('headers' => array('Content-Length', 'Set-Cookie')), + array('headers' => array('Content-Length', 'Content-Type')), + )), + array('override dyslexic arrays', array( + array('headers' => array('Content-Type', 'Content-Length')), + array('headers' => array('Content-Length', 'Content-Type')), + )), + ); + } + + /** + * @dataProvider getArrayUnmergeData + */ + public function testArrayUnmergeReturnsCorrectDiff($description, $test) + { + $configWriter = new IniFileChain(array(), null); + + list($a, $b) = $test; + + $combined = array_merge($a, $b); + + $diff = $configWriter->arrayUnmerge($a, $combined); + + // expect $b == $diff + $this->assertEquals(serialize($b), serialize($diff), $description); + } + + /** + * Dataprovider for testArrayUnmerge Invalid Data + * @return array + */ + public function getArrayUnmergeInvalidData() + { + return array( + array('modified invalid string', array( + array(), + '', + array(), + )), + array('modified invalid int', array( + array('login' => 'root', 'password' => 'b33r'), + 17, + array(), + + )), + array('original invalid string', array( + '', + array(), + array(), + )), + array('original invalid int', array( + 17, + array('login' => 'root', 'password' => 'b33r'), + array('login' => 'root', 'password' => 'b33r'), + )), + array('both invalid', array( + 17, + '', + array(), + )), + ); + } + + /** + * @dataProvider getArrayUnmergeInvalidData + */ + public function testArrayUnmergeCanHandleInvalidData($description, $test) + { + $configWriter = new IniFileChain(array(), null); + + list($a, $b, $c) = $test; + + $this->assertEquals($c, $configWriter->arrayUnmerge($a, $b), $description); + } + + public function getMergingTestData() + { + return array( + array('test default settings are merged recursively', + array( // default settings + __DIR__ . '/test_files/default_settings_1.ini.php', + __DIR__ . '/test_files/empty.ini.php', + __DIR__ . '/test_files/default_settings_2.ini.php', + ), + __DIR__ . '/test_files/empty.ini.php', // user settings + array( // expected + 'Section1' => array( + 'var1' => 'overriddenValue1', + 'var3' => array( + 'overriddenValue2', + 'overriddenValue3', + ), + ), + 'Section2' => array( + 'var4' => 'val$ue5', + ), + ), + ), + + array('test user settings completely overwrite default', + array( // default settings + __DIR__ . '/test_files/default_settings_1.ini.php', + ), + __DIR__ . '/test_files/default_settings_2.ini.php', // user settings + array( // expected + 'Section1' => array( + 'var1' => 'overriddenValue1', + 'var3' => array( + 'overriddenValue2', + 'overriddenValue3', + ), + ), + 'Section2' => array( + 'var4' => 'val$ue5', + ), + ), + ), + ); + } + + /** + * @dataProvider getMergingTestData + */ + public function testConstructMergesFileDataCorrectly($testDescription, $defaultSettingFiles, $userSettingsFile, $expected) + { + $fileChain = new IniFileChain($defaultSettingFiles, $userSettingsFile); + $this->assertEquals($expected, $fileChain->getAll(), "'$testDescription' failed"); + } + + /** + * @dataProvider getMergingTestData + */ + public function testReloadMergesFileDataCorrectly($testDescription, $defaultSettingsFiles, $userSettingsFile, $expected) + { + $fileChain = new IniFileChain(); + $fileChain->reload($defaultSettingsFiles, $userSettingsFile); + $this->assertEquals($expected, $fileChain->getAll(), "'$testDescription' failed"); + } + + public function testGetReturnsReferenceToSettingsSection() + { + $fileChain = new IniFileChain( + array(__DIR__ . '/test_files/default_settings_1.ini.php') + ); + + $data =& $fileChain->get('Section1'); + + $this->assertEquals(array('var1' => 'val"ue2', 'var3' => array('value3', 'value4')), $data); + + $data['var1'] = 'changed'; + $data['var3'][] = 'newValue'; + + $this->assertEquals(array('var1' => 'changed', 'var3' => array('value3', 'value4', 'newValue')), $fileChain->get('Section1')); + } + + public function testGetReturnsReferenceToSettingsSectionEvenIfSettingsIsEmpty() + { + $fileChain = new IniFileChain(array(__DIR__ . '/test_files/empty.ini.php')); + + $data =& $fileChain->get('Section'); + $this->assertEquals(array(), $data); + + $data['var1'] = 'changed'; + $this->assertEquals(array('var1' => 'changed'), $fileChain->get('Section')); + } + + public function testGetAllReturnsReferenceToAllSettings() + { + $fileChain = new IniFileChain(); + + $data =& $fileChain->getAll(); + $data['var'] = 'value'; + + $this->assertEquals(array('var' => 'value'), $fileChain->getAll()); + } + + public function testSetCorrectlySetsSettingValue() + { + $fileChain = new IniFileChain(); + + $fileChain->set('var', 'value'); + + $this->assertEquals(array('var' => 'value'), $fileChain->getAll()); + } + + public function testGetFromCorrectlyGetsSettingsFromFileAndNotCurrentModifiedSettings() + { + $defaultSettingsPath = __DIR__ . '/test_files/default_settings_1.ini.php'; + + $fileChain = new IniFileChain( + array($defaultSettingsPath), + __DIR__ . '/test_files/default_settings_2.ini.php' + ); + + $this->assertEquals(array('var1' => 'val"ue2', 'var3' => array('value3', 'value4')), $fileChain->getFrom($defaultSettingsPath, 'Section1')); + } + + public function testGetFromCorrectlyReturnsUnencodedValue() + { + $userSettingsPath = __DIR__ . '/test_files/special_values.ini.php'; + $fileChain = new IniFileChain(array(), $userSettingsPath); + + $this->assertEquals(array( + 'value1' => 'a"bc', 'value2' => array(',1,1,1,0,1,1,1,1 +referrer.com/{{_Vue.h.constructor`_x(20)`()}},1,1,1,0,1,1,1,1 +sn110w.snt110.mail.live.com/mail/InboxLight.aspx?n=184083971,1,2,2,2,0,1,1,0 +whatever.com1/1,1,1,1,1,1,1,1,1 +whatever0.com/1,1,1,1,1,1,1,1,1 +whatever0.com/2,1,1,1,1,1,1,1,1 +whatever1.com/2,1,1,1,1,1,1,1,1 +whatever1.com/index,1,1,1,1,1,1,1,1 +whatever3.com/3,1,1,1,1,1,1,1,1 +www.external.com.vn/referrerPage-counted.html,1,3,3,722,0,1,1,0 +www.external.com.vn/referrerPage-notCounted.html,1,4,4,1082,0,1,1,0 +www.referrer1.com/sub/dir/page1.html,1,3,3,2,0,1,1,0 +www.referrer1.com/sub/dir/page2.html,1,3,3,2,0,1,1,0 +www.referrer2.com/sub/dir/page1.html,1,3,3,2,0,1,1,0 +www.referrer2.com/sub/dir/page2.html,1,3,3,2,0,1,1,0 +www.referrer3.com/sub/dir/page1.html,1,3,3,2,0,1,1,0 +www.referrer3.com/sub/dir/page2.html,1,3,3,2,0,1,1,0 \ No newline at end of file diff --git a/tests/UI/expected-screenshots/ReportExporting_Referrers.getWebsites_exported.json.txt b/tests/UI/expected-screenshots/ReportExporting_Referrers.getWebsites_exported.json.txt new file mode 100644 index 0000000000000000000000000000000000000000..dcd251e684899c19cae1b3c0abe7ec4b6abf5352 --- /dev/null +++ b/tests/UI/expected-screenshots/ReportExporting_Referrers.getWebsites_exported.json.txt @@ -0,0 +1 @@ +[{"label":"referrer.com","nb_visits":12,"nb_actions":52,"max_actions":7,"sum_visit_length":9020,"bounce_count":2,"nb_visits_converted":12,"goals":{"idgoal=1":{"nb_conversions":24,"nb_visits_converted":12,"revenue":120},"idgoal=2":{"nb_conversions":12,"nb_visits_converted":12,"revenue":60}},"nb_conversions":36,"revenue":180,"sum_daily_nb_uniq_visitors":12,"sum_daily_nb_users":2,"subtable":[{"label":"http:\/\/referrer.com\/Other_Page.htm","nb_visits":4,"nb_actions":18,"max_actions":5,"sum_visit_length":2888,"bounce_count":0,"nb_visits_converted":4,"sum_daily_nb_uniq_visitors":4,"sum_daily_nb_users":0},{"label":"https:\/\/referrer.com\/Other_Page.htm","nb_visits":4,"nb_actions":18,"max_actions":5,"sum_visit_length":2888,"bounce_count":0,"nb_visits_converted":4,"sum_daily_nb_uniq_visitors":4,"sum_daily_nb_users":0},{"label":"http:\/\/referrer.com\/page.htm?param=valuewith some spaces","nb_visits":2,"nb_actions":14,"max_actions":7,"sum_visit_length":3244,"bounce_count":0,"nb_visits_converted":2,"sum_daily_nb_uniq_visitors":2,"sum_daily_nb_users":0},{"label":"http:\/\/referrer.com\/ 1 1 1 0 1 1 1 1 +referrer.com/{{_Vue.h.constructor`_x(20)`()}} 1 1 1 0 1 1 1 1 +sn110w.snt110.mail.live.com/mail/InboxLight.aspx?n=184083971 1 2 2 2 0 1 1 0 +whatever.com1/1 1 1 1 1 1 1 1 1 +whatever0.com/1 1 1 1 1 1 1 1 1 +whatever0.com/2 1 1 1 1 1 1 1 1 +whatever1.com/2 1 1 1 1 1 1 1 1 +whatever1.com/index 1 1 1 1 1 1 1 1 +whatever3.com/3 1 1 1 1 1 1 1 1 +www.external.com.vn/referrerPage-counted.html 1 3 3 722 0 1 1 0 +www.external.com.vn/referrerPage-notCounted.html 1 4 4 1082 0 1 1 0 +www.referrer1.com/sub/dir/page1.html 1 3 3 2 0 1 1 0 +www.referrer1.com/sub/dir/page2.html 1 3 3 2 0 1 1 0 +www.referrer2.com/sub/dir/page1.html 1 3 3 2 0 1 1 0 +www.referrer2.com/sub/dir/page2.html 1 3 3 2 0 1 1 0 +www.referrer3.com/sub/dir/page1.html 1 3 3 2 0 1 1 0 +www.referrer3.com/sub/dir/page2.html 1 3 3 2 0 1 1 0 \ No newline at end of file diff --git a/tests/UI/expected-screenshots/ReportExporting_Referrers.getWebsites_exported.xml.txt b/tests/UI/expected-screenshots/ReportExporting_Referrers.getWebsites_exported.xml.txt new file mode 100644 index 0000000000000000000000000000000000000000..d795116dd9e3c5ebc5e96a52bd9ed3841ab0b02d --- /dev/null +++ b/tests/UI/expected-screenshots/ReportExporting_Referrers.getWebsites_exported.xml.txt @@ -0,0 +1,941 @@ + + + + + 12 + 52 + 7 + 9020 + 2 + 12 + + + 24 + 12 + 120 + + + 12 + 12 + 60 + + + 36 + 180 + 12 + 2 + + + + 4 + 18 + 5 + 2888 + 0 + 4 + 4 + 0 + + + + 4 + 18 + 5 + 2888 + 0 + 4 + 4 + 0 + + + + 2 + 14 + 7 + 3244 + 0 + 2 + 2 + 0 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + + + + + + 8 + 12 + 3 + 2194 + 6 + 8 + + + 14 + 8 + 70 + + + 8 + 8 + 40 + + + 22 + 110 + 8 + 0 + + + + 3 + 3 + 1 + 1095 + 3 + 3 + 3 + 0 + + + + 3 + 3 + 1 + 1095 + 3 + 3 + 3 + 0 + + + + 1 + 3 + 3 + 2 + 0 + 1 + 1 + 0 + + + + 1 + 3 + 3 + 2 + 0 + 1 + 1 + 0 + + + + + + 8 + 12 + 3 + 2194 + 6 + 8 + + + 14 + 8 + 70 + + + 8 + 8 + 40 + + + 22 + 110 + 8 + 0 + + + + 3 + 3 + 1 + 1095 + 3 + 3 + 3 + 0 + + + + 3 + 3 + 1 + 1095 + 3 + 3 + 3 + 0 + + + + 1 + 3 + 3 + 2 + 0 + 1 + 1 + 0 + + + + 1 + 3 + 3 + 2 + 0 + 1 + 1 + 0 + + + + + + 8 + 12 + 3 + 2194 + 6 + 8 + + + 14 + 8 + 70 + + + 8 + 8 + 40 + + + 22 + 110 + 8 + 0 + + + + 3 + 3 + 1 + 1095 + 3 + 3 + 3 + 0 + + + + 3 + 3 + 1 + 1095 + 3 + 3 + 3 + 0 + + + + 1 + 3 + 3 + 2 + 0 + 1 + 1 + 0 + + + + 1 + 3 + 3 + 2 + 0 + 1 + 1 + 0 + + + + + + 7 + 7 + 1 + 2555 + 7 + 7 + + + 14 + 7 + 70 + + + 7 + 7 + 35 + + + 21 + 105 + 7 + 0 + + + + 4 + 4 + 1 + 1460 + 4 + 4 + 4 + 0 + + + + 3 + 3 + 1 + 1095 + 3 + 3 + 3 + 0 + + + + + + 6 + 6 + 1 + 2190 + 6 + 6 + + + 12 + 6 + 60 + + + 6 + 6 + 30 + + + 18 + 90 + 6 + 0 + + + + 3 + 3 + 1 + 1095 + 3 + 3 + 3 + 0 + + + + 3 + 3 + 1 + 1095 + 3 + 3 + 3 + 0 + + + + + + 4 + 4 + 1 + 4 + 4 + 4 + + + 4 + 4 + 20 + + + 4 + 4 + 20 + + + 8 + 40 + 3 + 3 + + + + 2 + 2 + 1 + 2 + 2 + 2 + 1 + 1 + + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + + + + + + 2 + 6 + 5 + 723 + 1 + 2 + + + 6 + 2 + 30 + + + 2 + 2 + 10 + + + 8 + 40 + 2 + 0 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + + + 1 + 5 + 5 + 723 + 0 + 1 + 1 + 0 + + + + + + 2 + 1 + 1 + 3 + 2 + 2 + 1 + 0 + + + + 2 + 1 + 1 + 3 + 2 + 2 + 1 + 0 + + + + + + 2 + 2 + 1 + 2 + 2 + 2 + + + 2 + 2 + 10 + + + 2 + 2 + 10 + + + 4 + 20 + 2 + 2 + + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + + + + + + 2 + 7 + 4 + 1804 + 0 + 2 + + + 7 + 2 + 35 + + + 2 + 2 + 10 + + + 9 + 45 + 2 + 0 + + + + 1 + 3 + 3 + 722 + 0 + 1 + 1 + 0 + + + + 1 + 4 + 4 + 1082 + 0 + 1 + 1 + 0 + + + + + + 2 + 1 + 1 + 3 + 2 + 2 + 1 + 0 + + + + 2 + 1 + 1 + 3 + 2 + 2 + 1 + 0 + + + + + + 1 + 1 + 1 + 3 + 1 + 1 + 1 + 0 + + + + 1 + 1 + 1 + 3 + 1 + 1 + 1 + 0 + + + + + + 1 + 1 + 1 + 1 + 1 + 1 + + + 1 + 1 + 5 + + + 1 + 1 + 5 + + + 2 + 10 + 1 + 0 + + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + + + + 1 + 2 + 2 + 362 + 0 + 1 + + + 2 + 1 + 10 + + + 1 + 1 + 5 + + + 3 + 15 + 1 + 0 + + + + 1 + 2 + 2 + 362 + 0 + 1 + 1 + 0 + + + + + + 1 + 1 + 1 + 1 + 1 + 1 + + + 1 + 1 + 5 + + + 1 + 1 + 5 + + + 2 + 10 + 1 + 0 + + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + + + + 1 + 2 + 2 + 2 + 0 + 1 + + + 1 + 1 + 5 + + + 1 + 1 + 5 + + + 2 + 10 + 1 + 0 + + + + 1 + 2 + 2 + 2 + 0 + 1 + 1 + 0 + + + + + + 1 + 2 + 2 + 2 + 0 + 1 + + + 1 + 1 + 5 + + + 1 + 1 + 5 + + + 2 + 10 + 1 + 0 + + + + 1 + 2 + 2 + 2 + 0 + 1 + 1 + 0 + + + + + + 1 + 1 + 1 + 1 + 1 + 1 + + + 1 + 1 + 5 + + + 1 + 1 + 5 + + + 2 + 10 + 1 + 1 + + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + + + + + + 1 + 1 + 1 + 1 + 1 + 1 + + + 1 + 1 + 5 + + + 1 + 1 + 5 + + + 2 + 10 + 1 + 1 + + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + + + + \ No newline at end of file diff --git a/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.csv.txt b/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.csv.txt new file mode 100644 index 0000000000000000000000000000000000000000..a39ec20adb2b1a890a49083fba0e1a90b6737eff --- /dev/null +++ b/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.csv.txt @@ -0,0 +1,2 @@ +Date,Label,Visits,Actions,Maximum actions in one visit,Total time spent by visitors (in seconds),Bounces,Visits with Conversions,Conversions (Goal idgoal=1),Visits with Conversions (Goal idgoal=1),Revenue (Goal idgoal=1),Conversions (Goal idgoal=2),Visits with Conversions (Goal idgoal=2),Revenue (Goal idgoal=2),Conversions,Revenue,Unique visitors (daily sum),Users (daily sum) +2012,referrer.com,12,52,7,9020,2,12,24,12,120,12,12,60,36,180,12,2 \ No newline at end of file diff --git a/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.json.txt b/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.json.txt new file mode 100644 index 0000000000000000000000000000000000000000..1f2c576b8c2986d36700708cbb0e4f6f67f1a8ae --- /dev/null +++ b/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.json.txt @@ -0,0 +1 @@ +{"2008":[],"2009":[],"2010":[],"2011":[],"2012":[{"label":"referrer.com","nb_visits":12,"nb_actions":52,"max_actions":7,"sum_visit_length":9020,"bounce_count":2,"nb_visits_converted":12,"goals":{"idgoal=1":{"nb_conversions":24,"nb_visits_converted":12,"revenue":120},"idgoal=2":{"nb_conversions":12,"nb_visits_converted":12,"revenue":60}},"nb_conversions":36,"revenue":180,"sum_daily_nb_uniq_visitors":12,"sum_daily_nb_users":2}]} \ No newline at end of file diff --git a/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.tsv.txt b/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.tsv.txt new file mode 100644 index 0000000000000000000000000000000000000000..d44286047639e9e5496c974b889a8996241c71e6 --- /dev/null +++ b/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.tsv.txt @@ -0,0 +1,2 @@ +Date Label Visits Actions Maximum actions in one visit Total time spent by visitors (in seconds) Bounces Visits with Conversions Conversions (Goal idgoal=1) Visits with Conversions (Goal idgoal=1) Revenue (Goal idgoal=1) Conversions (Goal idgoal=2) Visits with Conversions (Goal idgoal=2) Revenue (Goal idgoal=2) Conversions Revenue Unique visitors (daily sum) Users (daily sum) +2012 referrer.com 12 52 7 9020 2 12 24 12 120 12 12 60 36 180 12 2 \ No newline at end of file diff --git a/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.xml.txt b/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.xml.txt new file mode 100644 index 0000000000000000000000000000000000000000..ecc83a0ac4cd6a7f6a353cfaa79bdc9bca297d42 --- /dev/null +++ b/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.xml.txt @@ -0,0 +1,34 @@ + + + + + + + + + + 12 + 52 + 7 + 9020 + 2 + 12 + + + 24 + 12 + 120 + + + 12 + 12 + 60 + + + 36 + 180 + 12 + 2 + + + \ No newline at end of file diff --git a/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.csv.txt b/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.csv.txt new file mode 100644 index 0000000000000000000000000000000000000000..419b4f9aaf52df95f29637ac13dce297e57a42d6 --- /dev/null +++ b/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.csv.txt @@ -0,0 +1,2 @@ +Date,Visits,Actions,Visits with Conversions,Bounces,Total time spent by visitors (in seconds),Maximum actions in one visit,Bounce Rate,Actions per Visit,Avg. Visit Duration (in seconds) +2012,421,918,305,251,122150,20,60%,2.2,4 min 50s \ No newline at end of file diff --git a/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.json.txt b/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.json.txt new file mode 100644 index 0000000000000000000000000000000000000000..d30926ad19142f77f2aef0ab26b9d418455057d0 --- /dev/null +++ b/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.json.txt @@ -0,0 +1 @@ +{"2008":[],"2009":[],"2010":[],"2011":[],"2012":{"nb_visits":421,"nb_actions":918,"nb_visits_converted":305,"bounce_count":251,"sum_visit_length":122150,"max_actions":20,"bounce_rate":"60%","nb_actions_per_visit":2.2,"avg_time_on_site":"4 min 50s"}} \ No newline at end of file diff --git a/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.tsv.txt b/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.tsv.txt new file mode 100644 index 0000000000000000000000000000000000000000..8d8cd3d0cf5e75a46619e4bbf20160e21108006b --- /dev/null +++ b/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.tsv.txt @@ -0,0 +1,2 @@ +Date Visits Actions Visits with Conversions Bounces Total time spent by visitors (in seconds) Maximum actions in one visit Bounce Rate Actions per Visit Avg. Visit Duration (in seconds) +2012 421 918 305 251 122150 20 60% 2.2 4 min 50s \ No newline at end of file diff --git a/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.xml.txt b/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.xml.txt new file mode 100644 index 0000000000000000000000000000000000000000..b9eb22fd5b6259b659648b632ceedbe7910f4da2 --- /dev/null +++ b/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.xml.txt @@ -0,0 +1,18 @@ + + + + + + + + 421 + 918 + 305 + 251 + 122150 + 20 + 60% + 2.2 + 4 min 50s + + \ No newline at end of file diff --git a/tests/UI/expected-screenshots/RowEvolution_multirow_evolution.png b/tests/UI/expected-screenshots/RowEvolution_multirow_evolution.png new file mode 100644 index 0000000000000000000000000000000000000000..286240b3c32461ce87535a9d58c134db7309431c Binary files /dev/null and b/tests/UI/expected-screenshots/RowEvolution_multirow_evolution.png differ diff --git a/tests/UI/expected-screenshots/RowEvolution_multirow_evolution_other_metric.png b/tests/UI/expected-screenshots/RowEvolution_multirow_evolution_other_metric.png new file mode 100644 index 0000000000000000000000000000000000000000..a5ba9a40fac7b6ebe3de920c894e32b7f1a86d31 Binary files /dev/null and b/tests/UI/expected-screenshots/RowEvolution_multirow_evolution_other_metric.png differ diff --git a/tests/UI/expected-screenshots/RowEvolution_row_evolution.png b/tests/UI/expected-screenshots/RowEvolution_row_evolution.png new file mode 100644 index 0000000000000000000000000000000000000000..87378809a759e7b608bc11be613c1ba0e82320b6 Binary files /dev/null and b/tests/UI/expected-screenshots/RowEvolution_row_evolution.png differ diff --git a/tests/UI/expected-screenshots/RowEvolution_row_evolution_ecommerce_item.png b/tests/UI/expected-screenshots/RowEvolution_row_evolution_ecommerce_item.png new file mode 100644 index 0000000000000000000000000000000000000000..005b10b090c63e5635a5a1c44da1ea718fd134c1 Binary files /dev/null and b/tests/UI/expected-screenshots/RowEvolution_row_evolution_ecommerce_item.png differ diff --git a/tests/UI/expected-screenshots/RowEvolution_row_evolution_goal_view.png b/tests/UI/expected-screenshots/RowEvolution_row_evolution_goal_view.png new file mode 100644 index 0000000000000000000000000000000000000000..11ca6e1c8b0ce797ec8bb298aab4cda9ede715b2 Binary files /dev/null and b/tests/UI/expected-screenshots/RowEvolution_row_evolution_goal_view.png differ diff --git a/tests/UI/expected-screenshots/RowEvolution_row_evolution_goal_view_reload.png b/tests/UI/expected-screenshots/RowEvolution_row_evolution_goal_view_reload.png new file mode 100644 index 0000000000000000000000000000000000000000..11ca6e1c8b0ce797ec8bb298aab4cda9ede715b2 Binary files /dev/null and b/tests/UI/expected-screenshots/RowEvolution_row_evolution_goal_view_reload.png differ diff --git a/tests/UI/expected-screenshots/RowEvolution_row_evolution_multiple_series.png b/tests/UI/expected-screenshots/RowEvolution_row_evolution_multiple_series.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f1df63211bf4578a4ea75a68868cb6370bc9d2 Binary files /dev/null and b/tests/UI/expected-screenshots/RowEvolution_row_evolution_multiple_series.png differ diff --git a/tests/UI/expected-screenshots/RowEvolution_row_evolution_other_metric.png b/tests/UI/expected-screenshots/RowEvolution_row_evolution_other_metric.png new file mode 100644 index 0000000000000000000000000000000000000000..7306da1181645aa91e6bad21bafe364acdc74900 Binary files /dev/null and b/tests/UI/expected-screenshots/RowEvolution_row_evolution_other_metric.png differ diff --git a/tests/UI/expected-screenshots/SearchFilterPersistenceTest_load_ok.png b/tests/UI/expected-screenshots/SearchFilterPersistenceTest_load_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..42a0d9bce5bad1e46ff7c5ba667fe3611f988946 Binary files /dev/null and b/tests/UI/expected-screenshots/SearchFilterPersistenceTest_load_ok.png differ diff --git a/tests/UI/expected-screenshots/SearchFilterPersistenceTest_persisted_date.png b/tests/UI/expected-screenshots/SearchFilterPersistenceTest_persisted_date.png new file mode 100644 index 0000000000000000000000000000000000000000..9ee0f9897688267c4f941489952c5921fdc15c26 Binary files /dev/null and b/tests/UI/expected-screenshots/SearchFilterPersistenceTest_persisted_date.png differ diff --git a/tests/UI/expected-screenshots/SearchFilterPersistenceTest_persisted_segment.png b/tests/UI/expected-screenshots/SearchFilterPersistenceTest_persisted_segment.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a9abca0396744e70920089eeb1110f1ff99185 Binary files /dev/null and b/tests/UI/expected-screenshots/SearchFilterPersistenceTest_persisted_segment.png differ diff --git a/tests/UI/expected-screenshots/SearchFilterPersistenceTest_persisted_sorting.png b/tests/UI/expected-screenshots/SearchFilterPersistenceTest_persisted_sorting.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d3f38a574cf46e2b940f352f5983e009140cd6 Binary files /dev/null and b/tests/UI/expected-screenshots/SearchFilterPersistenceTest_persisted_sorting.png differ diff --git a/tests/UI/expected-screenshots/SearchFilterPersistenceTest_search_results.png b/tests/UI/expected-screenshots/SearchFilterPersistenceTest_search_results.png new file mode 100644 index 0000000000000000000000000000000000000000..8b63458ca2e3c1534d385c68ee24ad2db30f337d Binary files /dev/null and b/tests/UI/expected-screenshots/SearchFilterPersistenceTest_search_results.png differ diff --git a/tests/UI/expected-screenshots/SegmentManagementPageTest_initial_mobile_table_contained.png b/tests/UI/expected-screenshots/SegmentManagementPageTest_initial_mobile_table_contained.png new file mode 100644 index 0000000000000000000000000000000000000000..2ad9ebeeb5dc827af9eac52d02a06df9bbd96f0e Binary files /dev/null and b/tests/UI/expected-screenshots/SegmentManagementPageTest_initial_mobile_table_contained.png differ diff --git a/tests/UI/expected-screenshots/SiteSelector_expanded.png b/tests/UI/expected-screenshots/SiteSelector_expanded.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f7aea3ad2d8cfd0ca72ad86b21fab46978e9f2 Binary files /dev/null and b/tests/UI/expected-screenshots/SiteSelector_expanded.png differ diff --git a/tests/UI/expected-screenshots/SiteSelector_loaded.png b/tests/UI/expected-screenshots/SiteSelector_loaded.png new file mode 100644 index 0000000000000000000000000000000000000000..bf09e59c121e04fe3d92d2aeb3bd5df10ed1caa4 Binary files /dev/null and b/tests/UI/expected-screenshots/SiteSelector_loaded.png differ diff --git a/tests/UI/expected-screenshots/SiteSelector_search_no_results.png b/tests/UI/expected-screenshots/SiteSelector_search_no_results.png new file mode 100644 index 0000000000000000000000000000000000000000..4352490486736253d1a60348d02f0529267439fb Binary files /dev/null and b/tests/UI/expected-screenshots/SiteSelector_search_no_results.png differ diff --git a/tests/UI/expected-screenshots/SiteSelector_search_one_char.png b/tests/UI/expected-screenshots/SiteSelector_search_one_char.png new file mode 100644 index 0000000000000000000000000000000000000000..7cac68373a6412ff4534ae33ab3294888b689b26 Binary files /dev/null and b/tests/UI/expected-screenshots/SiteSelector_search_one_char.png differ diff --git a/tests/UI/expected-screenshots/SiteSelector_search_two_chars.png b/tests/UI/expected-screenshots/SiteSelector_search_two_chars.png new file mode 100644 index 0000000000000000000000000000000000000000..26bfad4e50c74f4f895988821db1b51d6ec242ec Binary files /dev/null and b/tests/UI/expected-screenshots/SiteSelector_search_two_chars.png differ diff --git a/tests/UI/expected-screenshots/SiteSelector_site_selected.png b/tests/UI/expected-screenshots/SiteSelector_site_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..9b4892d03075e712ae78b54e53a7d821a8dabe82 Binary files /dev/null and b/tests/UI/expected-screenshots/SiteSelector_site_selected.png differ diff --git a/tests/UI/expected-screenshots/SupportedBrowser_page_load_fails_when_browser_not_supported.png b/tests/UI/expected-screenshots/SupportedBrowser_page_load_fails_when_browser_not_supported.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b06b9c4b09d9b9ce1a96e810efa8079cb08dcb Binary files /dev/null and b/tests/UI/expected-screenshots/SupportedBrowser_page_load_fails_when_browser_not_supported.png differ diff --git a/tests/UI/expected-screenshots/SupportedBrowser_widget_load_fails_when_browser_not_supported.png b/tests/UI/expected-screenshots/SupportedBrowser_widget_load_fails_when_browser_not_supported.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b06b9c4b09d9b9ce1a96e810efa8079cb08dcb Binary files /dev/null and b/tests/UI/expected-screenshots/SupportedBrowser_widget_load_fails_when_browser_not_supported.png differ diff --git a/tests/UI/expected-screenshots/Theme_demo.png b/tests/UI/expected-screenshots/Theme_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..d57396f85257205db50f6dacfb57b1b8fe1c16a7 Binary files /dev/null and b/tests/UI/expected-screenshots/Theme_demo.png differ diff --git a/tests/UI/expected-screenshots/Theme_demo_dark.png b/tests/UI/expected-screenshots/Theme_demo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..300791c52a9e41467458e61159085395099816e3 Binary files /dev/null and b/tests/UI/expected-screenshots/Theme_demo_dark.png differ diff --git a/tests/UI/expected-screenshots/Theme_home.png b/tests/UI/expected-screenshots/Theme_home.png new file mode 100644 index 0000000000000000000000000000000000000000..285272819dc81f6d339dc06c41c8a6ae9d5b5411 Binary files /dev/null and b/tests/UI/expected-screenshots/Theme_home.png differ diff --git a/tests/UI/expected-screenshots/Theme_home_dark.png b/tests/UI/expected-screenshots/Theme_home_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b72a5fa924f823ff28d516ddf92829c72e70f8d7 Binary files /dev/null and b/tests/UI/expected-screenshots/Theme_home_dark.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_content_name_piece.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_content_name_piece.png new file mode 100644 index 0000000000000000000000000000000000000000..a3733ee8709438193f21dfc7ab31f90cded60fc2 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_content_name_piece.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_content_piece.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_content_piece.png new file mode 100644 index 0000000000000000000000000000000000000000..209dfba1798ad0ecd3092624ce68bf55abd8ccf2 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_content_piece.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_content_piece_name.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_content_piece_name.png new file mode 100644 index 0000000000000000000000000000000000000000..eb0c5cec7b3f7f3469e93dd1c1f21ceb205e8fed Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_content_piece_name.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_contents.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_contents.png new file mode 100644 index 0000000000000000000000000000000000000000..eb6b779dfdf76246740569f4351c6d635cf15c04 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_contents.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_downloads.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_downloads.png new file mode 100644 index 0000000000000000000000000000000000000000..298f990288c4b454e3868ef0533add028a67161c Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_downloads.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_entry_pages.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_entry_pages.png new file mode 100644 index 0000000000000000000000000000000000000000..333b777130cf94c03e303b39eb85c01e9d456a95 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_entry_pages.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_exit_pages.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_exit_pages.png new file mode 100644 index 0000000000000000000000000000000000000000..60124e29b2d8d375d7e414a2967d3407ced58542 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_exit_pages.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_outlinks.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_outlinks.png new file mode 100644 index 0000000000000000000000000000000000000000..88d5e87f4159b6c688dff10f2c8ed22231603274 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_outlinks.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_outlinks_vlog.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_outlinks_vlog.png new file mode 100644 index 0000000000000000000000000000000000000000..0de7b6d49f8eb121161f014ade72ab020f35a813 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_outlinks_vlog.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_page_titles.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_page_titles.png new file mode 100644 index 0000000000000000000000000000000000000000..3ca23724377952706585a02cda2cf9c14e9e5c34 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_page_titles.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_pages.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_pages.png new file mode 100644 index 0000000000000000000000000000000000000000..ad7d8756a74a009c12c57ab8103aab5ae047f708 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_pages.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_pages_tooltip_help.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_pages_tooltip_help.png new file mode 100644 index 0000000000000000000000000000000000000000..fb104b461fafbdbc70f2150195376fbf6562e876 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_pages_tooltip_help.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_site_search.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_site_search.png new file mode 100644 index 0000000000000000000000000000000000000000..088507903e242ac473579a8b911c51037331d551 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_actions_site_search.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png new file mode 100644 index 0000000000000000000000000000000000000000..30c0ec49e2c43d3186a6e7860a7f3c45983d8105 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_home.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_home.png new file mode 100644 index 0000000000000000000000000000000000000000..48e5cf16e52dce722e6606282b54aa1a0b2bbe60 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_admin_home.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_home_admintoken_not_allowed.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_home_admintoken_not_allowed.png new file mode 100644 index 0000000000000000000000000000000000000000..81367e172d55f2e45f6117c0a0b3510eb797969f Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_admin_home_admintoken_not_allowed.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_home_low_size.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_home_low_size.png new file mode 100644 index 0000000000000000000000000000000000000000..870aa16a8d057fd79597a9b1f9b5502c292c7dad Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_admin_home_low_size.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_manage_websites.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_manage_websites.png new file mode 100644 index 0000000000000000000000000000000000000000..979b431d9d5085f05d30de64bf010669f14f2f59 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_admin_manage_websites.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_privacy_optout_iframe.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_privacy_optout_iframe.png new file mode 100644 index 0000000000000000000000000000000000000000..6f76117b60ad29a9cd68d3a18d527cb6d5be581b Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_admin_privacy_optout_iframe.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_privacy_settings.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_privacy_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..3b4bad299d51a8ea71a523bbd08edc6a1e11bdf4 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_admin_privacy_settings.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png new file mode 100644 index 0000000000000000000000000000000000000000..9ad418f0fcc24e5cf9d55ffe9e793f6edc262163 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_user_settings.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_user_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..7dd9bac5ce018591e3648bc04a09ab9cb040284c Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_admin_user_settings.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_visitor_generator.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_visitor_generator.png new file mode 100644 index 0000000000000000000000000000000000000000..ea955b2e40342715e2b8b2ab0406a6a24859ad84 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_admin_visitor_generator.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png new file mode 100644 index 0000000000000000000000000000000000000000..a3358b3884c04fabc27e3221d524049c3c3a74f3 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_category_help.png b/tests/UI/expected-screenshots/UIIntegrationTest_category_help.png new file mode 100644 index 0000000000000000000000000000000000000000..618fd608c8508758ce1331bcd4413b757a96844c Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_category_help.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_customdirplugin.png b/tests/UI/expected-screenshots/UIIntegrationTest_customdirplugin.png new file mode 100644 index 0000000000000000000000000000000000000000..9e85c4d5de6bda00ccdf47465de69d6caf98a403 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_customdirplugin.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_db_connect_error.png b/tests/UI/expected-screenshots/UIIntegrationTest_db_connect_error.png new file mode 100644 index 0000000000000000000000000000000000000000..4e15b276906013eebbbc2cc65c22a7571037035f Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_db_connect_error.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png new file mode 100644 index 0000000000000000000000000000000000000000..399b071e8524301819af51a2a4a5b51977097ce9 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log_segmented.png b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log_segmented.png new file mode 100644 index 0000000000000000000000000000000000000000..5e1b4a68723b55e5985f04cf62145ed06a60eab5 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log_segmented.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_overview.png b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..e8923efe7baadcc3db88da67361394176bb8c879 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_overview.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_products.png b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_products.png new file mode 100644 index 0000000000000000000000000000000000000000..e877a13d8d8671aa71e72c947c4fee877e190d59 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_products.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_sales.png b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_sales.png new file mode 100644 index 0000000000000000000000000000000000000000..e671578d603d3f3425ae66619964cef094b92cf0 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_sales.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png new file mode 100644 index 0000000000000000000000000000000000000000..20e1cb4cca9965a6bb72eaf99c4cd1d61fed0966 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_download.png b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_download.png new file mode 100644 index 0000000000000000000000000000000000000000..aeedbc28f6d7421bebd6e4bbb0b9881bee4954db Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_download.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_editor.png b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_editor.png new file mode 100644 index 0000000000000000000000000000000000000000..ebc57e8d900ce742214ed1cba9135d7b36038c58 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_editor.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_barGraph.png b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_barGraph.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd534181b4c9851028cc18d8f2ee96dfdaf0eaf Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_barGraph.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_dataTables.png b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_dataTables.png new file mode 100644 index 0000000000000000000000000000000000000000..834fe7e9f4680a900148be2f9a71df786257e536 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_dataTables.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_evolutionGraph.png b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_evolutionGraph.png new file mode 100644 index 0000000000000000000000000000000000000000..93b8ead190b59542dee998e3f043fbc33ca878f1 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_evolutionGraph.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_pieGraph.png b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_pieGraph.png new file mode 100644 index 0000000000000000000000000000000000000000..cdc56b06b08bf4a6c25375781f1b9f1b9ba14226 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_pieGraph.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_sparklines.png b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_sparklines.png new file mode 100644 index 0000000000000000000000000000000000000000..baeef56bb98563341077a14f09655ed3512e2fe5 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_sparklines.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_sparklines_no_matching_row.png b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_sparklines_no_matching_row.png new file mode 100644 index 0000000000000000000000000000000000000000..7b4fc658b00d728943259aa6b5a988c6f88037ed Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_sparklines_no_matching_row.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_tagClouds.png b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_tagClouds.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d8b2697ec8c4acdda47132f4e665e6fc2e96aa Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_tagClouds.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_treemap.png b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_treemap.png new file mode 100644 index 0000000000000000000000000000000000000000..4add3d6b65243ddfe16a16a85414fa5fe343f9ca Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_exampleui_treemap.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png b/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png new file mode 100644 index 0000000000000000000000000000000000000000..2133653950bcc436b7ecf6e86462ad6f97922248 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_glossary.png b/tests/UI/expected-screenshots/UIIntegrationTest_glossary.png new file mode 100644 index 0000000000000000000000000000000000000000..5266a25a47c712033f6aafeedac7e760127f4b04 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_glossary.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_glossary_widgetized.png b/tests/UI/expected-screenshots/UIIntegrationTest_glossary_widgetized.png new file mode 100644 index 0000000000000000000000000000000000000000..dcdcd8806e8596b2e8793abc608229f084e8c0ab Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_glossary_widgetized.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite.png b/tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite.png new file mode 100644 index 0000000000000000000000000000000000000000..7e968329feaa609e1c2e9e2c17794400eee0cc4f Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite_superuser.png b/tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite_superuser.png new file mode 100644 index 0000000000000000000000000000000000000000..008e5e4f7a0c4b9e43692d17b4e95e6da33b2b0a Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite_superuser.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_not_logged_in.png b/tests/UI/expected-screenshots/UIIntegrationTest_not_logged_in.png new file mode 100644 index 0000000000000000000000000000000000000000..c2be799eb63dfc6a22121ab81acd0144557f345d Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_not_logged_in.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_notifications.png b/tests/UI/expected-screenshots/UIIntegrationTest_notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..6f88ffea790a8355741fe5e8257d9a9019940ad6 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_notifications.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_opt_out.png b/tests/UI/expected-screenshots/UIIntegrationTest_opt_out.png new file mode 100644 index 0000000000000000000000000000000000000000..057e46861d84edfc12c90c28b5440891b7512ac4 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_opt_out.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_period_select_date_range_click.png b/tests/UI/expected-screenshots/UIIntegrationTest_period_select_date_range_click.png new file mode 100644 index 0000000000000000000000000000000000000000..250b7f6fd8ac0acd0cfcee8c25ebafe420af7b0c Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_period_select_date_range_click.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png b/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png new file mode 100644 index 0000000000000000000000000000000000000000..de6197488f3b33f65033997e7826279d077d6347 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_shortcuts.png b/tests/UI/expected-screenshots/UIIntegrationTest_shortcuts.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6015beeca6b8e2b741ef8be43e2d421ebf00fa Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_shortcuts.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_view_render_error_user_input.png b/tests/UI/expected-screenshots/UIIntegrationTest_view_render_error_user_input.png new file mode 100644 index 0000000000000000000000000000000000000000..c930662c821dbaefe9f91085ad2d6b8748102328 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_view_render_error_user_input.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_not_segmented.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_not_segmented.png new file mode 100644 index 0000000000000000000000000000000000000000..51038ba26bf077249b2def55933fab635c766830 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_not_segmented.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png new file mode 100644 index 0000000000000000000000000000000000000000..a7061d7108e0d2d4c40aca9f067c3d75406d4347 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_custom_vars.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_custom_vars.png new file mode 100644 index 0000000000000000000000000000000000000000..ec7df5e5af22ed213b112d91b887cbfb249b0108 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_custom_vars.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png new file mode 100644 index 0000000000000000000000000000000000000000..61efdacef34134bd874c0d18e6be7e87c7a1bd1d Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_engagement.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_engagement.png new file mode 100644 index 0000000000000000000000000000000000000000..aede411a4332b63886bfba31f8ac62d3fd3f3b93 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_engagement.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png new file mode 100644 index 0000000000000000000000000000000000000000..2194adf98d54c56e334e5d9b0dca78951d3bf3bd Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..e5031279375e1ecb9857f2cfa9a0570b70249021 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_columns.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_columns.png new file mode 100644 index 0000000000000000000000000000000000000000..8e7901cd28092feaffcc08d843301303355d60b2 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_columns.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_limit.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_limit.png new file mode 100644 index 0000000000000000000000000000000000000000..89643bf0b57eafac172076e1c66ccf8cf919061c Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_limit.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_reloaded.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_reloaded.png new file mode 100644 index 0000000000000000000000000000000000000000..547b1fe9b88136e0993ba5950c4ab5d634acdbf6 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_reloaded.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_segment.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_segment.png new file mode 100644 index 0000000000000000000000000000000000000000..acdde4b84548a9410a88687ed850e5b596603782 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_segment.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png new file mode 100644 index 0000000000000000000000000000000000000000..224c387eef6848474d041b05511058b42483c5c9 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_visits.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_visits.png new file mode 100644 index 0000000000000000000000000000000000000000..25768e6f24526d68dfff141455842d4258597327 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_visits.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png new file mode 100644 index 0000000000000000000000000000000000000000..05a464e047942fbe6c5c661a5387c82adca3acaa Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_times.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_times.png new file mode 100644 index 0000000000000000000000000000000000000000..cdbfa51fc775c9a9150a6cbe27d543d03aacbedb Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_times.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png new file mode 100644 index 0000000000000000000000000000000000000000..4b2b32c87ee2d796273b40cb5248dc3e76be9da5 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_apidisallowed.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_apidisallowed.png new file mode 100644 index 0000000000000000000000000000000000000000..524886ccb57ea785e84b6f2702227c4f40a08f49 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_apidisallowed.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png new file mode 100644 index 0000000000000000000000000000000000000000..f9aba2f1802bd6f72de110356188a786d7bccc69 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e1081f1c6b784335b3b07eeed6f39c29a4cdea Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgets_listing.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgets_listing.png new file mode 100644 index 0000000000000000000000000000000000000000..ad582ad8ab21e8eefc86558aa4d83e7e02482749 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_widgets_listing.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_0_initial.png b/tests/UI/expected-screenshots/ViewDataTableTest_0_initial.png new file mode 100644 index 0000000000000000000000000000000000000000..d31025818cfcd7956ff617ac808b695567a6d65f Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_0_initial.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_10_change_limit.png b/tests/UI/expected-screenshots/ViewDataTableTest_10_change_limit.png new file mode 100644 index 0000000000000000000000000000000000000000..ab084974bbf3167a2e714513892b96c7d900b1f2 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_10_change_limit.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png b/tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png new file mode 100644 index 0000000000000000000000000000000000000000..df7a8e14878d2dd5ce0ffdd7fe5f4ab0dfd01f01 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png b/tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png new file mode 100644 index 0000000000000000000000000000000000000000..21c45862959a21beba06ad24134fa69254e9377e Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_13_make_hierarchical.png b/tests/UI/expected-screenshots/ViewDataTableTest_13_make_hierarchical.png new file mode 100644 index 0000000000000000000000000000000000000000..ab084974bbf3167a2e714513892b96c7d900b1f2 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_13_make_hierarchical.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_14_visits_percent.png b/tests/UI/expected-screenshots/ViewDataTableTest_14_visits_percent.png new file mode 100644 index 0000000000000000000000000000000000000000..6063b502087cce706b74faa4591afc89e9774085 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_14_visits_percent.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_15_search.png b/tests/UI/expected-screenshots/ViewDataTableTest_15_search.png new file mode 100644 index 0000000000000000000000000000000000000000..309cfd16af69ace39970c93455269970b48bc9b8 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_15_search.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_1_all_columns.png b/tests/UI/expected-screenshots/ViewDataTableTest_1_all_columns.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac0ecae1ab3a2361c568740aef6d3623ca7f9d4 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_1_all_columns.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_2_column_sorted_desc.png b/tests/UI/expected-screenshots/ViewDataTableTest_2_column_sorted_desc.png new file mode 100644 index 0000000000000000000000000000000000000000..c0f258d2635ab87cbeae97ea3b5c2de8be519f12 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_2_column_sorted_desc.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_3_column_sorted_asc.png b/tests/UI/expected-screenshots/ViewDataTableTest_3_column_sorted_asc.png new file mode 100644 index 0000000000000000000000000000000000000000..cb9e4aabe740f26ff156bbe095748a7eb01c7055 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_3_column_sorted_asc.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_5_goals.png b/tests/UI/expected-screenshots/ViewDataTableTest_5_goals.png new file mode 100644 index 0000000000000000000000000000000000000000..86a806a68e5ab120d96346bdbd8d3960568cc103 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_5_goals.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_5_visualizations.png b/tests/UI/expected-screenshots/ViewDataTableTest_5_visualizations.png new file mode 100644 index 0000000000000000000000000000000000000000..de953ca6fc4a0ea06d512d61a9bf69c99071d418 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_5_visualizations.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_6_bar_graph.png b/tests/UI/expected-screenshots/ViewDataTableTest_6_bar_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..afa853873c2ecbf3fcc2a5ed53bb419c12824df5 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_6_bar_graph.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_7_pie_graph.png b/tests/UI/expected-screenshots/ViewDataTableTest_7_pie_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1052fbe533f0b05c40ae487d8a0b1530b76941cb Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_7_pie_graph.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_8_tag_cloud.png b/tests/UI/expected-screenshots/ViewDataTableTest_8_tag_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..be952f4d2c606506c09236a2387a649988d0f41c Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_8_tag_cloud.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_9_normal_table.png b/tests/UI/expected-screenshots/ViewDataTableTest_9_normal_table.png new file mode 100644 index 0000000000000000000000000000000000000000..97c7fb350f43779dc99b76146aa872891e29ceab Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_9_normal_table.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_dimension_columns.png b/tests/UI/expected-screenshots/ViewDataTableTest_dimension_columns.png new file mode 100644 index 0000000000000000000000000000000000000000..5d88ae6ac9e53b34e4bbb7411298a575f391dc48 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_dimension_columns.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_dimension_search.png b/tests/UI/expected-screenshots/ViewDataTableTest_dimension_search.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5d36e2d842c59c33dc9fccf9f5cb4b9dcc95a9 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_dimension_search.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_exclude_low_population.png b/tests/UI/expected-screenshots/ViewDataTableTest_exclude_low_population.png new file mode 100644 index 0000000000000000000000000000000000000000..b73519a5a7be92b38143ac1122f7ffea10526131 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_exclude_low_population.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_export_options.png b/tests/UI/expected-screenshots/ViewDataTableTest_export_options.png new file mode 100644 index 0000000000000000000000000000000000000000..d86fa7d98c9a2722f6676e502c0571bd77a9d34f Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_export_options.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_export_options_2.png b/tests/UI/expected-screenshots/ViewDataTableTest_export_options_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d929897f6e4c537e81a0cc1ae149942dcdf66323 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_export_options_2.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_flatten_search.png b/tests/UI/expected-screenshots/ViewDataTableTest_flatten_search.png new file mode 100644 index 0000000000000000000000000000000000000000..3801fd20ec53e488cb1c458a0d566cbf196e9d0f Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_flatten_search.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_limit_selector_open.png b/tests/UI/expected-screenshots/ViewDataTableTest_limit_selector_open.png new file mode 100644 index 0000000000000000000000000000000000000000..f419839878154c074809808dcaf2aff87da9bd40 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_limit_selector_open.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png b/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png new file mode 100644 index 0000000000000000000000000000000000000000..a168a77ab5505acc6b96c4e788f74c150a0aef63 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png b/tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png new file mode 100644 index 0000000000000000000000000000000000000000..fd85dda99f50874796b528956420cf136fbebf75 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png differ diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_totals_row.png b/tests/UI/expected-screenshots/ViewDataTableTest_totals_row.png new file mode 100644 index 0000000000000000000000000000000000000000..c171717c13cd593e69245cbaa9071639d1beefc3 Binary files /dev/null and b/tests/UI/expected-screenshots/ViewDataTableTest_totals_row.png differ diff --git a/tests/UI/expected-screenshots/enable_framed_pages_embed_whole_app.png b/tests/UI/expected-screenshots/enable_framed_pages_embed_whole_app.png new file mode 100644 index 0000000000000000000000000000000000000000..6e242aacbe395970dd29ba5f0d771721da4164ed Binary files /dev/null and b/tests/UI/expected-screenshots/enable_framed_pages_embed_whole_app.png differ diff --git a/tests/UI/resources/piwik1.0.sql.gz b/tests/UI/resources/piwik1.0.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..e00c1274ebdcf8e3cc0e60e5b55f24c467124645 Binary files /dev/null and b/tests/UI/resources/piwik1.0.sql.gz differ diff --git a/tests/UI/screenshot-diffs/comparator.js b/tests/UI/screenshot-diffs/comparator.js new file mode 100644 index 0000000000000000000000000000000000000000..75b2e025c134a14e7de90a15205acc4a2b42d737 --- /dev/null +++ b/tests/UI/screenshot-diffs/comparator.js @@ -0,0 +1,86 @@ +jQuery(document).ready(function($){ + //check if the .cd-image-container is in the viewport + //if yes, animate it + checkPosition($('.cd-image-container')); + $(window).on('scroll', function(){ + checkPosition($('.cd-image-container')); + }); + + //make the .cd-handle element draggable and modify .cd-resize-img width according to its position + $('.cd-image-container').each(function(){ + var actual = $(this); + drags(actual.find('.cd-handle'), actual.find('.cd-resize-img'), actual, actual.find('.cd-image-label[data-type="original"]'), actual.find('.cd-image-label[data-type="modified"]')); + }); + + //upadate images label visibility + $(window).on('resize', function(){ + $('.cd-image-container').each(function(){ + var actual = $(this); + updateLabel(actual.find('.cd-image-label[data-type="modified"]'), actual.find('.cd-resize-img'), 'left'); + updateLabel(actual.find('.cd-image-label[data-type="original"]'), actual.find('.cd-resize-img'), 'right'); + }); + }); +}); + +function checkPosition(container) { + container.each(function(){ + var actualContainer = $(this); + if( $(window).scrollTop() + $(window).height()*0.5 > actualContainer.offset().top) { + actualContainer.addClass('is-visible'); + } + }); +} + +//draggable funtionality - credits to http://css-tricks.com/snippets/jquery/draggable-without-jquery-ui/ +function drags(dragElement, resizeElement, container, labelContainer, labelResizeElement) { + dragElement.on("mousedown vmousedown", function(e) { + dragElement.addClass('draggable'); + resizeElement.addClass('resizable'); + + var dragWidth = dragElement.outerWidth(), + xPosition = dragElement.offset().left + dragWidth - e.pageX, + containerOffset = container.offset().left, + containerWidth = container.outerWidth(), + minLeft = containerOffset + 10, + maxLeft = containerOffset + containerWidth - dragWidth - 10; + + dragElement.parents().on("mousemove vmousemove", function(e) { + leftValue = e.pageX + xPosition - dragWidth; + + //constrain the draggable element to move inside his container + if(leftValue < minLeft ) { + leftValue = minLeft; + } else if ( leftValue > maxLeft) { + leftValue = maxLeft; + } + + widthValue = (leftValue + dragWidth/2 - containerOffset)*100/containerWidth+'%'; + + $('.draggable').css('left', widthValue).on("mouseup vmouseup", function() { + $(this).removeClass('draggable'); + resizeElement.removeClass('resizable'); + }); + + $('.resizable').css('width', widthValue); + + updateLabel(labelResizeElement, resizeElement, 'left'); + updateLabel(labelContainer, resizeElement, 'right'); + + }).on("mouseup vmouseup", function(e){ + dragElement.removeClass('draggable'); + resizeElement.removeClass('resizable'); + }); + e.preventDefault(); + }).on("mouseup vmouseup", function(e) { + dragElement.removeClass('draggable'); + resizeElement.removeClass('resizable'); + }); +} + +function updateLabel(label, resizeElement, position) { + if(position == 'left') { + ( label.offset().left + label.outerWidth() < resizeElement.offset().left + resizeElement.outerWidth() ) ? label.removeClass('is-hidden') : label.addClass('is-hidden') ; + } else { + ( label.offset().left > resizeElement.offset().left + resizeElement.outerWidth() ) ? label.removeClass('is-hidden') : label.addClass('is-hidden') ; + } +} diff --git a/tests/UI/screenshot-diffs/diffgenerator.js b/tests/UI/screenshot-diffs/diffgenerator.js new file mode 100644 index 0000000000000000000000000000000000000000..25ab9d535af46ef4d77e23d6429f3221d59f53dc --- /dev/null +++ b/tests/UI/screenshot-diffs/diffgenerator.js @@ -0,0 +1,69 @@ +/** + * Matomo - free/libre analytics platform + * + * Diff generator + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +resemble.outputSettings({ + errorColor: { + red: 255, + green: 0, + blue: 0, + alpha: 125 + }, + errorType: 'movement', + transparency: 0.3, + largeImageThreshold: 20000 +}); + +function compareImages(expected, expectedGithub, processed) +{ + var resembleControl = resemble(processed).compareTo(expected).onComplete(function(data){ + + var info = 'Mismatch percentage: ' + data.misMatchPercentage + '%'; + + if (data.dimensionDifference && !data.isSameDimensions) { + info += ' Dimension difference width: ' + data.dimensionDifference.width + ' height: ' + data.dimensionDifference.height; + } + + $('.info').text(info); + $('.diff').attr('src', data.getImageDataUrl()); + }); + + $('.processed').attr('src', encodeURI(processed)); + $('.expected').attr('src', encodeURI(expected)); + $('.expectedGithub').attr('src', 'https://raw.githubusercontent.com/piwik/piwik-ui-tests/master/' + encodeURI(expectedGithub)); + + return resembleControl; +} + +function getUrlQueryParam(sParam) { + var query = window.location.search.substring(1); + var variables = query.split('&'); + + for (var index = 0; index < variables.length; index++) { + + var paramName = variables[index].split('='); + if (paramName[0] == sParam) { + return paramName[1]; + } + } +} + +$(function () { + var processed = getUrlQueryParam('processed'); + var expected = getUrlQueryParam('expected'); + var github = getUrlQueryParam('github'); + var resembleControl = compareImages(expected, github, processed); + resembleControl.ignoreNothing(); + + $('#toggleAliasing').click(function () { + resembleControl.ignoreAntialiasing(); + }); + + $('#original').attr('src', expected); + $('#modified').attr('src', processed); +}); \ No newline at end of file diff --git a/tests/UI/screenshot-diffs/singlediff.html b/tests/UI/screenshot-diffs/singlediff.html new file mode 100644 index 0000000000000000000000000000000000000000..32fdc9c0833e879d2eb48511d285f05115ef7c2d --- /dev/null +++ b/tests/UI/screenshot-diffs/singlediff.html @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + +
+
+ + +

+ +
+ +
+ +

+ +
+ + Original + +
+ + Modified +
+ + +
+ +

Processed

+ + +

Expected

+ + +

Expected GitHub

+ + + + \ No newline at end of file diff --git a/tests/UI/screenshot-diffs/style.css b/tests/UI/screenshot-diffs/style.css new file mode 100644 index 0000000000000000000000000000000000000000..367b01f0f876e7eb2bda2ca64384352289b2a584 --- /dev/null +++ b/tests/UI/screenshot-diffs/style.css @@ -0,0 +1,156 @@ +img { + max-width: 100%; + display: block; + margin: 0 auto; +} + +#controls { + margin: 0 auto; + width: 100px; +} + +.cd-image-container { + position: relative; + width: 90%; + max-width: 768px; + margin: 0em auto; +} +.cd-image-container img { + display: block; +} + +.cd-image-label { + position: absolute; + bottom: 0; + right: 0; + color: #ffffff; + padding: 1em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + opacity: 0; + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + -webkit-transition: -webkit-transform 0.3s 0.7s, opacity 0.3s 0.7s; + -moz-transition: -moz-transform 0.3s 0.7s, opacity 0.3s 0.7s; + transition: transform 0.3s 0.7s, opacity 0.3s 0.7s; +} +.cd-image-label.is-hidden { + visibility: hidden; +} +.is-visible .cd-image-label { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); +} + +.cd-resize-img { + position: absolute; + top: 0; + left: 0; + width: 0; + height: 100%; + overflow: hidden; + /* Force Hardware Acceleration in WebKit */ + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -ms-transform: translateZ(0); + -o-transform: translateZ(0); + transform: translateZ(0); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.cd-resize-img img { + position: absolute; + left: 0; + top: 0; + display: block; + height: 100%; + width: auto; + max-width: none; +} +.cd-resize-img .cd-image-label { + right: auto; + left: 0; +} +.is-visible .cd-resize-img { + width: 50%; + /* bounce in animation of the modified image */ + -webkit-animation: cd-bounce-in 0.7s; + -moz-animation: cd-bounce-in 0.7s; + animation: cd-bounce-in 0.7s; +} + +@-webkit-keyframes cd-bounce-in { + 0% { + width: 0; + } + 60% { + width: 55%; + } + 100% { + width: 50%; + } +} +@-moz-keyframes cd-bounce-in { + 0% { + width: 0; + } + 60% { + width: 55%; + } + 100% { + width: 50%; + } +} +@keyframes cd-bounce-in { + 0% { + width: 0; + } + 60% { + width: 55%; + } + 100% { + width: 50%; + } +} +.cd-handle { + position: absolute; + height: 44px; + width: 44px; + /* center the element */ + left: 50%; + top: 50%; + margin-left: -22px; + margin-top: -22px; + border-radius: 50%; + background: #dc717d no-repeat center center; + cursor: move; + box-shadow: 0 0 0 6px rgba(0, 0, 0, 0.2), 0 0 10px rgba(0, 0, 0, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.3); + opacity: 0; + -webkit-transform: translate3d(0, 0, 0) scale(0); + -moz-transform: translate3d(0, 0, 0) scale(0); + -ms-transform: translate3d(0, 0, 0) scale(0); + -o-transform: translate3d(0, 0, 0) scale(0); + transform: translate3d(0, 0, 0) scale(0); +} +.cd-handle.draggable { + /* change background color when element is active */ + background-color: #445b7c; +} +.is-visible .cd-handle { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0) scale(1); + -moz-transform: translate3d(0, 0, 0) scale(1); + -ms-transform: translate3d(0, 0, 0) scale(1); + -o-transform: translate3d(0, 0, 0) scale(1); + transform: translate3d(0, 0, 0) scale(1); + -webkit-transition: -webkit-transform 0.3s 0.7s, opacity 0s 0.7s; + -moz-transition: -moz-transform 0.3s 0.7s, opacity 0s 0.7s; + transition: transform 0.3s 0.7s, opacity 0s 0.7s; +} diff --git a/tests/UI/specs/BarGraph_spec.js b/tests/UI/specs/BarGraph_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..974335dfe4f22578affb86d84f9b18ca7bfbaf42 --- /dev/null +++ b/tests/UI/specs/BarGraph_spec.js @@ -0,0 +1,67 @@ +/*! + * Matomo - free/libre analytics platform + * + * Bar graph screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("BarGraph", function () { + var tokenAuth = "c4ca4238a0b923820dcc509a6f75849b", + viewTokenAuth = "a4ca4238a0b92382" + "0dcc509a6f75849f", + url = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&" + + "actionToWidgetize=getKeywords&viewDataTable=graphVerticalBar&isFooterExpandedInDashboard=1&"; + const multiMetricUrl = url + "columns=nb_visits,nb_actions,bounce_rate&filter_add_columns_when_show_all_columns=0&token_auth=" + viewTokenAuth; + + before(function () { + // use real auth + token auth to test that auth works when widgetizing reports in an iframe + testEnvironment.testUseMockAuth = 0; + testEnvironment.save(); + }); + + it("should fail when admin token is used", async function () { + await page.goto(url + 'token_auth=' + tokenAuth); + expect(await page.screenshot({ fullPage: true })).to.matchImage('load_fail_when_token_used'); + }); + + it("should load correctly", async function () { + await page.goto(url + 'token_auth=' + viewTokenAuth); + expect(await page.screenshot({ fullPage: true })).to.matchImage('load'); + }); + + it("should display the metric picker when the metric picker button is clicked", async function () { + await page.click('.metrics-picker__toggle'); + expect(await page.screenshot({ fullPage: true })).to.matchImage('metric_picker_shown'); + await page.keyboard.press('Escape'); + }); + + it("should display multiple metrics when another metric picked", async function () { + await page.click('.metrics-picker__toggle'); + await page.waitForSelector('.metrics-picker__options input'); + var element = await page.jQuery('.metrics-picker__options input:not(:checked):first'); + await element.click(); + await page.waitForNetworkIdle(); + await page.waitForTimeout(500); + expect(await page.screenshot({ fullPage: true })).to.matchImage('other_metric'); + }); + + it("should render the footer legend for bar graphs", async function () { + await page.goto(multiMetricUrl); + await page.waitForNetworkIdle(); + + const legendState = await page.evaluate(function () { + const footer = document.querySelector('.jqplot-legend-footer.has-legend'); + + return { + hasLegend: !!footer, + itemCount: footer ? footer.querySelectorAll('.jqplot-legend-item').length : 0, + swatchCount: footer ? footer.querySelectorAll('.jqplot-legend-swatch').length : 0, + }; + }); + + expect(legendState.hasLegend).to.equal(true); + expect(legendState.itemCount).to.equal(3); + expect(legendState.swatchCount).to.equal(3); + }); +}); diff --git a/tests/UI/specs/Comparison_spec.js b/tests/UI/specs/Comparison_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..90254618db34650457108227aa32562d8338d297 --- /dev/null +++ b/tests/UI/specs/Comparison_spec.js @@ -0,0 +1,396 @@ +/*! + * Matomo - free/libre analytics platform + * + * Bar graph screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("Comparison", function () { + const generalParams = 'idSite=1&period=range&date=2012-01-12,2012-01-17', + urlBase = 'module=CoreHome&action=index&' + generalParams, + dashboardUrl = "?" + urlBase + "#?" + generalParams + "&category=Dashboard_Dashboard&subcategory=1", + comparePeriod = "&compareDates[]=2012-01-01,2012-01-31&comparePeriods[]=range", + compareSegment = "&compareSegments[]=continentCode%3D%3Deur", + compareParams = comparePeriod + compareSegment, + barGraphUrl = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&" + + "actionToWidgetize=getKeywords&viewDataTable=graphVerticalBar&isFooterExpandedInDashboard=1&" + + compareParams, + pieGraphUrl = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&" + + "actionToWidgetize=getKeywords&viewDataTable=graphPie&isFooterExpandedInDashboard=1&" + + compareParams, + goalsTableUrl = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&" + + "actionToWidgetize=getKeywords&viewDataTable=tableGoals&filter_limit=5&isFooterExpandedInDashboard=1" + compareParams, + htmlTableUrl = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&" + + "actionToWidgetize=getSearchEngines&viewDataTable=table&filter_limit=5&isFooterExpandedInDashboard=1" + compareParams, + htmlTableUrlNoPeriods = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&" + + "actionToWidgetize=getSearchEngines&viewDataTable=table&filter_limit=5&isFooterExpandedInDashboard=1" + compareSegment, + htmlTableUrlNoSegments = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&" + + "actionToWidgetize=getSearchEngines&viewDataTable=table&filter_limit=5&isFooterExpandedInDashboard=1" + comparePeriod, + visitOverviewWidget = "?module=Widgetize&action=iframe&containerId=VisitOverviewWithGraph&disableLink=0&widget=1&" + + "moduleToWidgetize=CoreHome&actionToWidgetize=renderWidgetContainer&disableLink=1&widget=1&" + generalParams + "&" + + compareParams, + visitOverviewSparklines = "?module=Widgetize&action=iframe&disableLink=1&widget=1&" + + "moduleToWidgetize=VisitsSummary&actionToWidgetize=get&forceView=1&viewDataTable=sparklines&" + generalParams + "&" + + compareParams, + visitOverviewWidgetComparePeriods = "?module=Widgetize&action=iframe&containerId=VisitOverviewWithGraph&disableLink=0&widget=1&" + + "moduleToWidgetize=CoreHome&actionToWidgetize=renderWidgetContainer&disableLink=1&widget=1&idSite=1&period=year&date=2012-01-12" + compareSegment, + visitOverviewWidgetCompareYear = "?module=Widgetize&action=iframe&containerId=VisitOverviewWithGraph&disableLink=0&widget=1&" + + "moduleToWidgetize=CoreHome&actionToWidgetize=renderWidgetContainer&disableLink=1&widget=1&idSite=1&period=year&date=2012-01-12&compareDates[]=2011-01-31&comparePeriods[]=year", + visitOverviewWidgetCompareWeekSmallRange = "?module=Widgetize&action=iframe&containerId=VisitOverviewWithGraph&disableLink=0&widget=1&" + + "moduleToWidgetize=CoreHome&actionToWidgetize=renderWidgetContainer&disableLink=1&widget=1&idSite=1&period=week&date=2012-01-12&compareDates[]=2012-01-20,2012-01-31&comparePeriods[]=range", + visitOverviewWidgetCompareLargeRange = "?module=Widgetize&action=iframe&containerId=VisitOverviewWithGraph&disableLink=0&widget=1&" + + "moduleToWidgetize=CoreHome&actionToWidgetize=renderWidgetContainer&disableLink=1&widget=1&idSite=1&period=range&date=2012-01-12,2014-02-12&compareDates[]=2011-01-31,2013-02-31&comparePeriods[]=range" + ; + + async function getSparklineEvolutionForMetric(metricText) { + await page.waitForSelector('.sparkline .metricEvolution'); + + return page.evaluate(function (text) { + function normalize(value) { + return value.replace(/\s+/g, ' ').trim().toLowerCase(); + } + + var textToFind = text.toLowerCase(); + var sparklines = Array.prototype.slice.call(document.querySelectorAll('.sparkline')); + + for (var i = 0; i < sparklines.length; i++) { + var metrics = Array.prototype.slice.call(sparklines[i].querySelectorAll('.sparkline-metrics')); + + for (var j = 0; j < metrics.length; j++) { + if (normalize(metrics[j].textContent).indexOf(textToFind) === -1) { + continue; + } + + var evolution = metrics[j].nextElementSibling; + if (!evolution || !evolution.classList.contains('metricEvolution')) { + continue; + } + + var value = evolution.querySelector('strong'); + var image = evolution.querySelector('img'); + if (!value || !image) { + continue; + } + + return { + className: value.className, + image: image.getAttribute('src'), + text: value.textContent.trim(), + }; + } + } + + return null; + }, metricText); + } + + function expectEvolutionPolarity(evolution, isLowerValueBetter) { + expect(evolution).to.not.equal(null); + + var isPositive = evolution.className.indexOf('positive-evolution') !== -1; + var isNegative = evolution.className.indexOf('negative-evolution') !== -1; + expect(isPositive || isNegative).to.equal(true); + + var isUp = evolution.image.indexOf('arrow_up') !== -1; + var isDown = evolution.image.indexOf('arrow_down') !== -1; + expect(isUp || isDown).to.equal(true); + + if (isUp) { + if (isLowerValueBetter) { + expect(evolution.className).to.contain('negative-evolution'); + expect(evolution.image).to.contain('arrow_up_red.svg'); + } else { + expect(evolution.className).to.contain('positive-evolution'); + expect(evolution.image).to.contain('arrow_up.svg'); + expect(evolution.image).to.not.contain('arrow_up_red.svg'); + } + } + + if (isDown) { + if (isLowerValueBetter) { + expect(evolution.className).to.contain('positive-evolution'); + expect(evolution.image).to.contain('arrow_down_green.svg'); + } else { + expect(evolution.className).to.contain('negative-evolution'); + expect(evolution.image).to.contain('arrow_down.svg'); + expect(evolution.image).to.not.contain('arrow_down_green.svg'); + } + } + } + + it('should compare periods correctly when comparing the last period', async () => { + await page.goto(dashboardUrl); + await page.waitForNetworkIdle(); + + await page.click('#periodString #date'); + + await page.waitForSelector('input#comparePeriodTo', { visible: true }); + await page.click('input#comparePeriodTo + span'); + + await page.click('#calendarApply'); + await page.waitForNetworkIdle(); + await page.waitForSelector('.widget'); + await page.waitForNetworkIdle(); + await page.waitForSelector('.piwik-graph'); + await page.waitForNetworkIdle(); + + const pageWrap = await page.$('.pageWrap'); + expect(await pageWrap.screenshot()).to.matchImage('dashboard_last_period'); + }); + + it('should add a segment comparison when the compare icon in the segment list is clicked', async () => { + await page.click('.segmentationContainer'); + await (await page.jQuery('li[data-idsegment=2] .compareSegment', { waitFor: true })).click(); + await page.waitForNetworkIdle(); + await page.waitForSelector('.widget'); + await page.waitForNetworkIdle(); + + const pageWrap = await page.$('.pageWrap'); + expect(await pageWrap.screenshot()).to.matchImage('dashboard_last_period_and_segment'); + }); + + it('should not show comparisons for pages that do not support it', async () => { + await (await page.jQuery('li.menuTab:contains(Behaviour) > a')).click(); + await page.waitForTimeout(100); + await (await page.jQuery('a.item:contains(Transitions)')).click(); + await page.waitForNetworkIdle(); + + const pageWrap = await page.$('.pageWrap'); + expect(await pageWrap.screenshot()).to.matchImage('transitions'); + }); + + it('should show extra serieses when comparing in evolution graphs and sparklines', async () => { + await (await page.jQuery('li.menuTab:contains(Visitors) > a')).click(); + await page.waitForTimeout(100); + await (await page.jQuery('li.menuTab:contains(Visitors) a.item:contains(Overview)')).click(); + await page.waitForNetworkIdle(); + await page.waitForSelector('.piwik-graph'); + await page.waitForSelector('.matomo-comparisons'); + + const pageWrap = await page.$('.pageWrap'); + expect(await pageWrap.screenshot()).to.matchImage('visitors_overview'); + }); + + it('should change the evolution series when the sparkline is clicked', async () => { + await (await page.jQuery('.sparkline:contains(pageviews):eq(0)')).click(); + await page.waitForNetworkIdle(); + + await page.mouse.move(-10, -10); + + const pageWrap = await page.$('.pageWrap'); + expect(await pageWrap.screenshot()).to.matchImage('visitors_overview_switched'); + }); + + it('should show the tooltip correctly in an evolution graph', async () => { + await page.hover('.piwik-graph'); + await page.waitForTimeout(250); + + const element = await page.$('.ui-tooltip'); + expect(await element.screenshot()).to.matchImage('visitors_overview_tooltip'); + }); + + it('should remove segment comparison when the x button is clicked', async () => { + await page.click('.card.comparison .remove-button'); + await page.waitForNetworkIdle(); + + await page.mouse.move(-10, -10); + + const pageWrap = await page.$('.pageWrap'); + expect(await pageWrap.screenshot()).to.matchImage('visitors_overview_segment_removed'); + }); + + it('should remove period comparison if period is selected w/o compare set', async () => { + await page.click('#periodString .periodSelector'); + await page.waitForSelector('input#comparePeriodTo', { visible: true }); + await page.click('input#comparePeriodTo + span'); + + await page.click('#calendarApply'); + await page.waitForNetworkIdle(); + + await page.mouse.move(-10, -10); + + const pageWrap = await page.$('.pageWrap'); + expect(await pageWrap.screenshot()).to.matchImage('visitors_overview_no_compare'); + }); + + it('should show the bar graph correctly when comparing segments and period', async () => { + await page.goto(barGraphUrl); + await page.waitForNetworkIdle(); + expect(await page.screenshot({ fullPage: true })).to.matchImage('bar_graph'); + }); + + it('should show the pie graph correctly when comparing segments and period', async () => { + await page.goto(pieGraphUrl); + await page.waitForNetworkIdle(); + expect(await page.screenshot({ fullPage: true })).to.matchImage('pie_graph'); + }); + + it('should show the normal html table correctly when comparing segments and periods', async () => { + await page.goto(htmlTableUrl); + await page.waitForNetworkIdle(); + expect(await page.screenshot({ fullPage: true })).to.matchImage('normal_table'); + }); + + it('should show the correct percentages and tooltip during comparison', async () => { + const element = await page.jQuery('span.ratio:visible:eq(1)'); + await element.hover(); + const tooltip = await page.waitForSelector('.ui-tooltip', { visible: true }); + expect(await tooltip.screenshot()).to.matchImage('totals_tooltip'); + }); + + it('should show the normal html table correctly when comparing segments but not periods', async () => { + await page.goto(htmlTableUrlNoPeriods); + await page.mouse.move(-10, -10); // mae sure no row is highlighted + await page.waitForNetworkIdle(); + expect(await page.screenshot({ fullPage: true })).to.matchImage('normal_table_no_periods'); + }); + + it('should show the normal html table correctly when comparing periods but not segments', async () => { + await page.goto(htmlTableUrlNoSegments); + await page.waitForNetworkIdle(); + expect(await page.screenshot({ fullPage: true })).to.matchImage('normal_table_no_segments'); + }); + + it('should expand subtables correctly when comparing', async () => { + (await page.$$('tr.subDataTable'))[0].click(); + await page.waitForNetworkIdle(); + + await page.waitForFunction(function () { + return $('.cellSubDataTable > .dataTable').length === 1; + }); + + await page.mouse.move(-10, -10); // make sure no row is highlighted + await page.waitForTimeout(250); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('subtables_loaded'); + }); + + it('should advance to the next page when paginating the subtable', async () => { + await page.click('.cellSubDataTable .dataTableNext'); + await page.waitForNetworkIdle(); + + await page.mouse.move(-10, -10); // make sure no row is highlighted + await page.waitForTimeout(250); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('subtables_paginate'); + }); + + it('should show the row evolution popup for the compared row/segment/period when clicked', async () => { + const row = await page.jQuery('tbody tr.comparisonRow:visible:eq(1)'); + await row.hover(); + + const icon = await page.jQuery('tbody tr.comparisonRow:visible:eq(1) a.actionRowEvolution'); + await icon.click(); + + await page.waitForSelector('.ui-dialog'); + await page.waitForNetworkIdle(); + + await page.mouse.move(-10, -10); + + const dialog = await page.$('.ui-dialog'); + expect(await dialog.screenshot()).to.matchImage('row_evolution'); + }); + + it('should show the multirow evolution popup for another comparison series', async () => { + await page.click('.rowevolution-startmulti'); + await page.waitForTimeout(250); + + const row = await page.jQuery('tbody tr.comparisonRow:visible:eq(0)'); + await row.hover(); + + const icon = await page.jQuery('tbody tr.comparisonRow:visible:eq(0) a.actionRowEvolution'); + await icon.click(); + + await page.waitForSelector('.ui-dialog'); + await page.waitForNetworkIdle(); + + await page.mouse.move(-10, -10); + + const dialog = await page.$('.ui-dialog'); + expect(await dialog.screenshot()).to.matchImage('multi_row_evolution'); + }); + + it('should show the segmented visitor log popup for the compared row/segment/period when clicked', async () => { + await page.click('.ui-dialog-titlebar-close'); + + const row = await page.jQuery('tbody tr.comparisonRow:eq(1)'); + await row.hover(); + + const icon = await page.jQuery('tbody tr.comparisonRow:eq(1) a.actionSegmentVisitorLog'); + await icon.click(); + + await page.waitForSelector('.ui-dialog'); + await page.waitForNetworkIdle(); + + await page.mouse.move(-10, -10); + + const dialog = await page.$('.ui-dialog'); + expect(await dialog.screenshot()).to.matchImage('segmented_visitorlog'); + }); + + it('should show the goals overview table correctly when comparing segments and period', async () => { + await page.goto(goalsTableUrl); + await page.waitForNetworkIdle(); + expect(await page.screenshot({ fullPage: true })).to.matchImage('goals_table'); + }); + + it('should show a specific goals table correctly when comparing segments and period', async () => { + await page.goto(goalsTableUrl + '&idGoal=1'); + await page.waitForNetworkIdle(); + expect(await page.screenshot({ fullPage: true })).to.matchImage('goals_table_specific'); + }); + + it('should load a widgetized sparklines visualization correctly', async () => { + await page.goto(visitOverviewWidget); + await page.waitForNetworkIdle(); + expect(await page.screenshot({ fullPage: true })).to.matchImage('visits_overview_widget'); + }); + + it('should load a widgetized sparklines visualization correctly when comparing two years', async () => { + await page.goto(visitOverviewWidgetCompareYear); + await page.waitForNetworkIdle(); + expect(await page.screenshot({ fullPage: true })).to.matchImage('visits_overview_widget_year'); + }); + + it('should load a widgetized sparklines visualization correctly when comparing two segments over a year', async () => { + await page.goto(visitOverviewWidgetComparePeriods); + await page.waitForNetworkIdle(); + expect(await page.screenshot({ fullPage: true })).to.matchImage('visits_overview_widget_compareperiod_year'); + }); + + it('should load a widgetized sparklines visualization correctly when comparing a week with a small range', async () => { + await page.goto(visitOverviewWidgetCompareWeekSmallRange); + await page.waitForNetworkIdle(); + expect(await page.screenshot({ fullPage: true })).to.matchImage('visits_overview_widget_week_smallrange'); + }); + + it('should load a widgetized sparklines visualization correctly when comparing large ranges', async () => { + await page.goto(visitOverviewWidgetCompareLargeRange); + await page.waitForNetworkIdle(); + expect(await page.screenshot({ fullPage: true })).to.matchImage('visits_overview_widget_largerange'); + }); + + it('should apply lower-is-better polarity to comparison sparkline evolution', async () => { + await page.goto(visitOverviewSparklines); + await page.waitForNetworkIdle(); + + var visitsEvolution = await getSparklineEvolutionForMetric('visits'); + expectEvolutionPolarity(visitsEvolution, false); + + var bounceEvolution = await getSparklineEvolutionForMetric('bounced'); + expectEvolutionPolarity(bounceEvolution, true); + }); + + it('should show evolution metrics correctly formatted in other language', async () => { + await page.goto(visitOverviewSparklines + '&language=sv'); + await page.waitForNetworkIdle(); + await page.evaluate(function(){ + // replace all metric names with `metric name` to avoid test failures when metric translation changes + $('.sparkline-metrics').each(function(){ $(this).html($(this).find('strong').prop('outerHTML') + ' metric name') }); + }); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('visits_overview_widget_sv'); + }); +}); diff --git a/tests/UI/specs/DisablePluginArchive_spec.js b/tests/UI/specs/DisablePluginArchive_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..1ec9034014cf8794e0449e510f77aeaedadd3089 --- /dev/null +++ b/tests/UI/specs/DisablePluginArchive_spec.js @@ -0,0 +1,31 @@ +/*! + * Matomo - free/libre analytics platform + * + * Tests that theming works. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("DisablePluginArchive", function () { + + this.fixture = 'Piwik\\Tests\\Fixtures\\DisablePluginArchive'; + + before(function () { + const firefoxUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 11.2; rv:85.0) Gecko/20100101 Firefox/85.0"; + page.setUserAgent(firefoxUserAgent); + }); + + after(async () => { + await page.setUserAgent(page.originalUserAgent); + }); + + var url = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&" + + "actionToWidgetize=getKeywords&viewDataTable=table&filter_limit=5&isFooterExpandedInDashboard=1&segment=actions%3D%3D1"; + + + it("should show plugin disable text", async function () { + await page.goto(url); + expect(await page.screenshot({ fullPage: true })).to.matchImage('referrer_disabled'); + }); +}); diff --git a/tests/UI/specs/EmptySite_spec.js b/tests/UI/specs/EmptySite_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..e220d57a854b82520ee42a4af149d0da30a44166 --- /dev/null +++ b/tests/UI/specs/EmptySite_spec.js @@ -0,0 +1,257 @@ +/*! + * Matomo - free/libre analytics platform + * + * Screenshot integration tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("EmptySite", function () { + + this.fixture = "Piwik\\Tests\\Fixtures\\EmptySite"; + + const generalParams = 'idSite=1&period=day&date=2010-01-03'; + const urlToTest = "?" + generalParams + "&module=CoreHome&action=index"; + + before(function () { + testEnvironment.detectedContentDetections = []; + testEnvironment.connectedConsentManagers = []; + testEnvironment.save(); + }); + + after(function () { + // unset all detections so fake class is no longer used + delete testEnvironment.detectedContentDetections; + delete testEnvironment.connectedConsentManagers; + testEnvironment.save(); + }); + + async function makeTrackingCodeStatic() { + await page.waitForNetworkIdle(); + await page.evaluate(function () { + // ensure hostname and container id is always the same + var selector = $('.codeblock, [vue-directive="CoreHome.CopyToClipboard"]'); + selector.each(function(){ + let $elem = $(this); + $elem.text($elem.text().replace(/u="\/\/(.*)";/g, 'u="//localhost/tests/PHPUnit/proxy/";')); + $elem.text($elem.text().replace(/host='http\/\/(.*)',/g, 'host=\'http://localhost/tests/PHPUnit/proxy/\',')); + $elem.text($elem.text().replace(/http(.*)container_(.*).js/g, 'http://localhost/js/container_test123.js')); + $elem.text($elem.text().replace(new RegExp('https?://' + document.location.host + '/'), 'http://localhost/')); + }); + }); + } + + it('should initially show the no data page overview', async function () { + await page.goto(urlToTest); + await page.waitForSelector('#start-tracking-method-list'); // wait till list is shown + + const pageElement = await page.$('.page'); + expect(await pageElement.screenshot()).to.matchImage('emptySiteDashboard'); + }); + + it('should show the tracking code when selected', async function () { + await page.evaluate(() => $('#start-tracking-detection a[href="#matomo"]')[0].click()); + + // wait till url check field is filled with data, which means loading has finished. + await page.waitForFunction(() => $('#baseUrl').val()); + await makeTrackingCodeStatic(); + + const pageElement = await page.$('.page'); + expect(await pageElement.screenshot()).to.matchImage('trackingCode'); + }); + + it('should show the advanced tracking options when clicked', async function () { + await page.evaluate(() => $('.advance-option a').click()); + + // wait till checkbox isn't disabled anymore, which means loading has finished. + await page.waitForFunction(() => !$('#javascript-tracking-all-subdomains').is(':disabled')); + + const pageElement = await page.$('.page'); + expect(await pageElement.screenshot()).to.matchImage('showAdvancedTrackingOptions'); + }); + + it('should hide the advanced tracking options when clicked', async function () { + await page.evaluate(() => $('.advance-option a').click()); + + await page.waitForSelector('#javascript-advanced-options', {hidden: true, timeout: 1000}); + }); + + it('should show SPA/PWA details when clicked', async function () { + await page.click('#start-tracking-back'); + await page.evaluate(() => $('#start-tracking-method-list a[href="#spapwa"]')[0].click()); + + await makeTrackingCodeStatic(); + + const pageElement = await page.$('.page'); + expect(await pageElement.screenshot()).to.matchImage('spa_pwa'); + }); + + it('should show the Other methods when clicked', async function () { + await page.click('#start-tracking-back'); + await page.evaluate(() => $('#start-tracking-method-list a[href="#other"]')[0].click()); + await makeTrackingCodeStatic(); + + const pageElement = await page.$('.page'); + expect(await pageElement.screenshot()).to.matchImage('other'); + }); + + it('should show the google tag manager details when clicked', async function () { + await page.click('#start-tracking-back'); + await page.evaluate(() => $('#start-tracking-method-list a[href="#googletagmanager"]')[0].click()); + await makeTrackingCodeStatic(); + + const pageElement = await page.$('.page'); + expect(await pageElement.screenshot()).to.matchImage('gtm'); + }); + + it('should show the wordpress details when clicked', async function () { + await page.click('#start-tracking-back'); + await page.evaluate(() => $('#start-tracking-method-list a[href="#wordpress"]')[0].click()); + + // wait till url check field is filled with data, which means loading has finished. + await page.waitForFunction(() => $('#baseUrl').val()); + await makeTrackingCodeStatic(); + + const pageElement = await page.$('.page'); + expect(await pageElement.screenshot()).to.matchImage('wordpress'); + }); + + it('should show the vue js details when clicked', async function () { + await page.click('#start-tracking-back'); + await page.evaluate(() => $('#start-tracking-method-list a[href="#vuejs"]')[0].click()); + await makeTrackingCodeStatic(); + + const pageElement = await page.$('.page'); + expect(await pageElement.screenshot()).to.matchImage('vuejs'); + }); + + it('should directly show details when provided as url param', async function () { + testEnvironment.detectedContentDetections = ['GoogleTagManager', 'WordPress']; + testEnvironment.connectedConsentManagers = []; + testEnvironment.save(); + + await page.goto(urlToTest + "#?" + generalParams + "&activeTab=integrations"); + await page.waitForSelector('#start-tracking-details'); // wait till details ar shown + await makeTrackingCodeStatic(); + + const pageElement = await page.$('.page'); + expect(await pageElement.screenshot()).to.matchImage('integrations'); + }); + + // take one full screenshot when a detected method is shown + it('should suggest wordpress method when detected, other detections should be shown first', async function () { + testEnvironment.detectedContentDetections = ['WordPress', 'VueJs']; + testEnvironment.connectedConsentManagers = []; + testEnvironment.save(); + + await page.goto('about:blank'); + await page.goto(urlToTest); + await page.waitForSelector('#start-tracking-method-list'); // wait till list is shown + + const pageElement = await page.$('.page'); + expect(await pageElement.screenshot()).to.matchImage('detected_wordpress'); + }); + + // only take shots from recommended method for other detections + it('should prefer gtm method over others when detected', async function () { + testEnvironment.detectedContentDetections = ['GoogleTagManager', 'WordPress', 'VueJs']; + testEnvironment.connectedConsentManagers = []; + testEnvironment.save(); + + await page.goto('about:blank'); + await page.goto(urlToTest); + await page.waitForSelector('#start-tracking-method-list'); // wait till list is shown + + const pageElement = await page.$('#start-tracking-detection'); + expect(await pageElement.screenshot()).to.matchImage('detected_gtm'); + }); + + it('should should show a notification on the tracking code screen when a consent manager is detected', async function () { + testEnvironment.detectedContentDetections = ['Osano']; + testEnvironment.connectedConsentManagers = ['Osano']; + testEnvironment.save(); + + await page.goto('about:blank'); + await page.goto(urlToTest); + await page.waitForSelector('#start-tracking-method-list'); // wait till list is shown + + await page.evaluate(() => $('#start-tracking-detection a[href="#matomo"]')[0].click()); + + // wait till url check field is filled with data, which means loading has finished. + await page.waitForFunction(() => $('#baseUrl').val()); + await makeTrackingCodeStatic(); + + const pageElement = await page.$('.page'); + expect(await pageElement.screenshot()).to.matchImage('detected_osano'); + }); + + + it.skip('should have button to send tracking code to developer', async function () { + var mailtoLink = await page.$eval('.emailTrackingCode', link => link.getAttribute('href')); + + // Check that it's a mailto link with correct subject line + expect(mailtoLink).to.include('mailto:?subject=Matomo%20Analytics%20Tracking%20Code&body'); + // Check that template rendered and only contains chars that are OK in all mail clients (e.g. no HTML at all) + expect(mailtoLink).to.match(/^mailto:\?[a-zA-Z0-9&%=.,_*()\[\]'"-]*$/); + }); + + // switch reporting groups the way the top-menu links do: only the group is set in the hash, + // the section's category/subcategory are then resolved client-side by the reporting menu. + async function switchReportingGroup(group) { + await page.evaluate((targetGroup) => { + const hash = { ...window.CoreHome.MatomoUrl.hashParsed.value }; + delete hash.category; + delete hash.subcategory; + hash.group = targetGroup; + window.CoreHome.MatomoUrl.updateHash(hash); + }, group); + } + + it('should reload the tracker-setup screen when returning to it from another section', async function () { + await page.goto('about:blank'); + await page.goto(urlToTest); + await page.waitForSelector('#start-tracking-method-list', { visible: true }); + + // AI Insights is exempt from the tracker-setup gate, so its reporting loads normally + await switchReportingGroup('CoreHome_AIInsights'); + await page.waitForFunction(() => document.body && document.body.id !== 'site-without-data'); + + // a transient notification raised while in the other section must not leak back + await page.evaluate(() => window.CoreHome.NotificationsStore.show({ + id: 'EmptySiteRegressionNotification', + message: 'notification from another section', + context: 'info', + type: 'transient', + })); + await page.waitForFunction( + () => document.body.innerText.indexOf('notification from another section') !== -1 + ); + + // back to the default (Analytics) group: the gate must return with its methods reloaded + await switchReportingGroup(''); + await page.waitForFunction(() => document.body && document.body.id === 'site-without-data'); + await page.waitForSelector('#start-tracking-method-list', { visible: true }); + + const methodCount = await page.evaluate(() => $('#start-tracking-method-list .list-entry').length); + expect(methodCount).to.be.greaterThan(0); + + // and the transient notification from the other section must have been cleared + await page.waitForFunction( + () => document.body.innerText.indexOf('notification from another section') === -1 + ); + }); + + it('should be possible to ignore this screen for one hour', async function () { + await page.goto('about:blank'); + await page.goto(urlToTest); + + await page.click('.ignoreSitesWithoutData'); + await page.waitForSelector('#dashboardWidgetsArea'); + await page.waitForNetworkIdle(); + + // ensure dashboard widgets are loaded + const widgetsCount = await page.evaluate(() => $('.widget').length); + expect(widgetsCount).to.be.greaterThan(1); + }); +}); diff --git a/tests/UI/specs/EvolutionGraph_spec.js b/tests/UI/specs/EvolutionGraph_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..553ff1431c2563fa775439242628cc64637e873d --- /dev/null +++ b/tests/UI/specs/EvolutionGraph_spec.js @@ -0,0 +1,402 @@ +/*! + * Matomo - free/libre analytics platform + * + * evolution graph screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("EvolutionGraph", function () { + const url = "?module=Widgetize&action=iframe&idSite=1&period=day&date=2012-01-31&evolution_day_last_n=30" + + "&moduleToWidgetize=UserCountry&actionToWidgetize=getCountry&viewDataTable=graphEvolution" + + "&isFooterExpandedInDashboard=1"; + const multiMetricColumns = "nb_visits,nb_actions,avg_time_on_site,bounce_rate"; + const multiMetricUrl = url + "&columns=" + multiMetricColumns + "&filter_add_columns_when_show_all_columns=0"; + const setThemeMode = async function (themeMode) { + await page.evaluate((mode) => { + window.piwik.setThemeMode(mode); + }, themeMode); + await page.waitForFunction((mode) => window.piwik.getThemeMode() === mode, {}, themeMode); + }; + const getResolvedBackgroundColor = async function (selector) { + return page.evaluate(function (targetSelector) { + var target = document.querySelector(targetSelector); + var dataTable = target && target.closest('.dataTable'); + var uiControlObject = dataTable ? $(dataTable).data('uiControlObject') : null; + var configuredColor = (uiControlObject + && uiControlObject.jqplotParams + && uiControlObject.jqplotParams.grid + && uiControlObject.jqplotParams.grid.background) + || '#ffffff'; + var colorProbe = document.createElement('div'); + + colorProbe.style.display = 'none'; + colorProbe.style.color = configuredColor; + document.body.appendChild(colorProbe); + + var resolvedColor = window.getComputedStyle(colorProbe).color; + colorProbe.remove(); + + return resolvedColor || 'rgb(255, 255, 255)'; + }, selector); + }; + const getImagePixelColor = async function (selector, offset) { + return page.evaluate(async function (targetSelector, pixelOffset) { + const exportImage = document.querySelector(targetSelector); + const image = new Image(); + image.src = exportImage.src; + + await new Promise((resolve, reject) => { + image.onload = resolve; + image.onerror = reject; + }); + + const canvas = document.createElement('canvas'); + canvas.width = image.width; + canvas.height = image.height; + + const context = canvas.getContext('2d'); + context.drawImage(image, 0, 0); + + const pixel = context.getImageData( + image.width - pixelOffset, + image.height - pixelOffset, + 1, + 1 + ).data; + + return 'rgb(' + pixel[0] + ', ' + pixel[1] + ', ' + pixel[2] + ')'; + }, selector, offset); + }; + const getFooterLegendState = async function () { + return page.evaluate(function () { + const footer = document.querySelector('.jqplot-legend-footer.has-legend'); + const items = footer ? footer.querySelectorAll('.jqplot-legend-item') : []; + const hiddenItems = footer ? footer.querySelectorAll('.jqplot-legend-item-hidden') : []; + const overflowItem = footer ? footer.querySelector('.jqplot-legend-item-overflow .jqplot-legend-label') : null; + const labels = footer + ? Array.prototype.map.call( + footer.querySelectorAll('.jqplot-legend-item .jqplot-legend-label'), + function (label) { return label.textContent.trim(); } + ) + : []; + + return { + hasLegend: !!footer, + itemCount: items.length, + hiddenItemCount: hiddenItems.length, + visibleItemCount: footer ? footer.querySelectorAll('.jqplot-legend-item:not(.jqplot-legend-item-hidden)').length : 0, + overflowLabel: overflowItem ? overflowItem.textContent.trim() : null, + labels: labels, + }; + }); + }; + + before(function () { + return testEnvironment.callApi("Annotations.deleteAll", {idSite: 3}); + }); + + afterEach(async function () { + await setThemeMode('light'); + }); + + it("should load correctly", async function () { + await page.goto(url); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('initial'); + }); + + it("should show percent metrics like bounce rate correctly", async function () { + await page.goto(url + "&columns=nb_visits,bounce_rate,avg_time_on_site&filter_add_columns_when_show_all_columns=0"); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('bounce_rate'); + }); + + it("should show only one series when a label is specified", async function () { + await page.goto(url + "&label=Canada"); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('one_series'); + }); + + it("should display the metric picker when the metric picker button is clicked", async function () { + await page.click('.metrics-picker__toggle'); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('metric_picker_shown'); + await page.keyboard.press('Escape'); + }); + + it("should show multiple metrics when another metric picked", async function () { + await page.click('.metrics-picker__toggle'); + await page.waitForSelector('.metrics-picker__options input'); + const element = await page.jQuery('.metrics-picker__options input:not(:checked):first'); + await element.click(); + await page.waitForNetworkIdle(); + await page.waitForTimeout(250); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('two_metrics'); + }); + + it("should show graph as image when export as image icon clicked", async function () { + await page.click('#dataTableFooterExportAsImageIcon'); + await page.waitForNetworkIdle(); + + const dialog = await page.$('.ui-dialog'); + expect(await dialog.screenshot()).to.matchImage('export_image'); + }); + + it("should display more periods when limit selection changed", async function () { + const element = await page.jQuery('.ui-dialog .ui-widget-header button:visible'); + await element.click(); + + await page.click('.limitSelection input'); + await page.evaluate(function () { + $('.limitSelection ul li:contains(60) span').click(); + }); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('limit_changed'); + }); + + // annotations tests + it("should show annotations when annotation icon on x-axis clicked", async function () { + await page.click('.limitSelection input'); + await page.evaluate(function () { + $('.limitSelection ul li:contains(30) span').click(); // change limit back + }); + await page.waitForNetworkIdle(); + + const element = await page.jQuery('.evolution-annotations>span[data-count!=0]'); + await element.click(); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('annotations_single_period'); + }); + + it("should show all annotations when annotations footer link clicked", async function () { // TODO: fails + await page.click('.annotationView'); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('annotations_all'); + }); + + it("should show no annotations message when no annotations for site", async function () { + await page.goto(page.url().replace(/idSite=[^&]*/, "idSite=3") + "&columns=nb_visits"); + await page.click('.annotationView'); + await page.waitForNetworkIdle(); + await page.mouse.move(-10, -10); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('annotations_none'); + }); + + it("should show add annotation form when create annotation clicked", async function () { + await page.click('.add-annotation'); + await page.click('.annotation-period-edit>a'); + await page.evaluate(function () { + $('.datepicker').datepicker("setDate", new Date(2012,0,2) ); + $(".ui-datepicker-current-day").trigger("click"); // this triggers onSelect event which sets .annotation-period-edit>a + }); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('new_annotation_form'); + }); + + it("should add new annotation when create annotation submitted", async function () { + await page.focus('.new-annotation-edit'); + await page.keyboard.type('new annotation'); + await page.click('.annotation-period-edit>a'); + await page.evaluate(function () { + $('.ui-datepicker-calendar td a:contains(15)').click(); + }); + await page.waitForNetworkIdle(); + await page.click('.annotation-list-range'); + await page.click('input.new-annotation-save'); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('new_annotation_submit'); + }); + + it("should star annotation when star image clicked", async function () { + await page.click('.annotation-star'); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('annotation_starred'); + }); + + it("should show edit annotation form", async function () { + await page.click('.edit-annotation'); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('annotation_edit_form'); + }); + + it("should edit annotation when edit form submitted", async function () { + await page.focus('.annotation-edit'); + await page.keyboard.type('edited annotation'); + await page.click('.annotation-period-edit>a'); + await page.evaluate(function () { + $('.annotation-meta .ui-datepicker-calendar td a:contains(16)').click(); + }); + await page.waitForNetworkIdle(); + await page.click('.annotation-list-range'); + await page.click('input.annotation-save'); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('annotation_edit_submit'); + }); + + it("should delete annotation when delete link clicked", async function () { + await page.click('.edit-annotation'); + await page.waitForFunction("$('.delete-annotation:visible').length > 0"); + await page.evaluate(function () { + $('.delete-annotation').click(); + }); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('annotations_none'); + }); + + it("should cutout two labels so all can fit on screen", async function () { + await page.webpage.setViewport({ width: 320, height: 320 }); + await page.goto(url.replace(/idSite=[^&]*/, "idSite=3") + "&columns=nb_visits"); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('label_ticks_cutout'); + }); + + it("should show available periods", async function () { + await page.webpage.setViewport({ + width: 1350, + height: 768, + }); + await page.reload(); + await page.waitForNetworkIdle(); + await (await page.jQuery('.activatePeriodsSelection:last')).click(); + + await page.mouse.move(-10, -10); + await page.waitForTimeout(500); // wait for animation + + expect(await page.screenshot({ fullPage: true })).to.matchImage('periods_list'); + }); + + it("should be possible to change period", async function () { + await (await page.jQuery('[data-period=month]:last')).click(); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('periods_selected'); + }); + + it("should not show add annotation form for user with view access", async function () { + testEnvironment.idSitesViewAccess = [1]; + testEnvironment.testUseMockAuth = 1; + testEnvironment.save(); + + await page.goto(url); + await page.waitForNetworkIdle(); + await page.click('.annotationView'); + await page.waitForNetworkIdle(); + + // check that add annotation link is not shown + const element = await page.$('.add-annotation'); + expect(element).to.be.not.ok; + }); + + describe("footer legend", function () { + before(function () { + delete testEnvironment.idSitesViewAccess; + testEnvironment.testUseMockAuth = 1; + testEnvironment.save(); + }); + + it("should render the evolution graph footer legend with all selected metrics", async function () { + await page.webpage.setViewport({ width: 1350, height: 768 }); + await page.goto(multiMetricUrl); + await page.waitForNetworkIdle(); + + const legendState = await getFooterLegendState(); + expect(legendState.hasLegend).to.equal(true); + + // getCountry plots every row (country) for each selected metric, so the legend + // labels look like "United States (Visits)". Assert that every selected metric is + // represented, regardless of how many rows the fixture happens to contain. + const selectedMetricLabels = ['Visits', 'Actions', 'Avg. Time on Website', 'Bounce Rate']; + selectedMetricLabels.forEach(function (metricLabel) { + const isPresent = legendState.labels.some(function (label) { + return label.indexOf('(' + metricLabel + ')') !== -1; + }); + expect(isPresent, 'legend should include a "' + metricLabel + '" series').to.equal(true); + }); + }); + + it("should export the graph image using the active dark theme background", async function () { + await page.goto(multiMetricUrl); + await page.waitForNetworkIdle(); + await setThemeMode('dark'); + await page.waitForTimeout(250); + await page.click('#dataTableFooterExportAsImageIcon'); + await page.waitForSelector('.ui-dialog img'); + + expect(await getImagePixelColor('.ui-dialog img', 5)) + .to.equal(await getResolvedBackgroundColor('.jqplot-target')); + }); + + it("should overflow footer legend labels cleanly in a narrow viewport", async function () { + await page.webpage.setViewport({ width: 320, height: 480 }); + await page.goto(multiMetricUrl); + await page.waitForNetworkIdle(); + + const legendState = await getFooterLegendState(); + expect(legendState.hasLegend).to.equal(true); + expect(legendState.itemCount).to.be.above(legendState.visibleItemCount); + expect(legendState.visibleItemCount).to.be.at.least(1); + expect(legendState.hiddenItemCount).to.be.above(0); + expect(legendState.overflowLabel).to.equal('…'); + }); + + it("should use the active dark theme background for the graph loading overlay", async function () { + await page.webpage.setViewport({ width: 1350, height: 768 }); + await page.goto(multiMetricUrl); + await page.waitForNetworkIdle(); + await setThemeMode('dark'); + await page.waitForTimeout(250); + + await page.evaluate(function () { + var dataTable = $('.dataTable').data('uiControlObject'); + var originalReloadAjaxDataTable = dataTable.reloadAjaxDataTable.bind(dataTable); + + dataTable.reloadAjaxDataTable = function () { + return null; + }; + + dataTable.__restoreReloadAjaxDataTable = function () { + dataTable.reloadAjaxDataTable = originalReloadAjaxDataTable; + }; + }); + + await page.click('.metrics-picker__toggle'); + await page.waitForSelector('.metrics-picker__options input'); + const element = await page.jQuery('.metrics-picker__options input:not(:checked):first'); + await element.click(); + await page.waitForSelector('.jqplot-loading'); + + expect(await page.evaluate(function () { + return window.getComputedStyle(document.querySelector('.jqplot-loading')).backgroundColor; + })).to.equal(await getResolvedBackgroundColor('.jqplot-loading')); + expect(await page.evaluate(function () { + return !!document.querySelector('.jqplot-loading .matomo-loader'); + })).to.equal(true); + expect(await page.evaluate(function () { + return window.getComputedStyle(document.querySelector('.jqplot-loading')).opacity; + })).to.equal('0.7'); + + await page.evaluate(function () { + var dataTable = $('.dataTable').data('uiControlObject'); + if (dataTable && dataTable.__restoreReloadAjaxDataTable) { + dataTable.__restoreReloadAjaxDataTable(); + delete dataTable.__restoreReloadAjaxDataTable; + } + $('.jqplot-loading').remove(); + }); + }); + }); +}); diff --git a/tests/UI/specs/IncompletePeriodVisualisation_spec.js b/tests/UI/specs/IncompletePeriodVisualisation_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..42b04bcc6f21f8d2ee7f9083d19d329da0c57528 --- /dev/null +++ b/tests/UI/specs/IncompletePeriodVisualisation_spec.js @@ -0,0 +1,37 @@ +/*! + * Matomo - free/libre analytics platform + * + * Incomplete Period Visualisation Test + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe('IncompletePeriodVisualisation', function () { + this.fixture = 'Piwik\\Tests\\Fixtures\\SomeVisitsLastYearAndThisYear'; + + const generalParams = 'idSite=1&period=year&date=today'; + const pageUrl = '?module=CoreHome&action=index&' + generalParams; + + it('should load visitors > overview page and show incomplete period', async function () { + await page.goto(pageUrl + generalParams + '&segment=&category=General_Visitors&subcategory=General_Overview#?idSite=1&period=year&date=today&segment=&category=General_Visitors&subcategory=General_Overview'); + await page.waitForNetworkIdle(); + const pageWrap = await page.$('.pageWrap'); + + expect(await pageWrap.screenshot()).to.matchImage('visitors_overview'); + }); + + it('tooltip for incomplete period should say "incomplete period"', async function () { + const graph = await page.$('.piwik-graph'); + const boundingBox = await graph.boundingBox(); + + await page.mouse.move( + boundingBox.x + boundingBox.width - 50, + boundingBox.y + boundingBox.height - 50 + ); + + const tooltipContent = await page.evaluate(() => $('.ui-tooltip').text().trim()); + + expect(tooltipContent).to.contain('Incomplete Period'); + }); +}); diff --git a/tests/UI/specs/InvalidatedPeriodVisualisation_spec.js b/tests/UI/specs/InvalidatedPeriodVisualisation_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..8e3da98ac85b5025cc68810c7a0cb80e6777134f --- /dev/null +++ b/tests/UI/specs/InvalidatedPeriodVisualisation_spec.js @@ -0,0 +1,59 @@ +/*! + * Matomo - free/libre analytics platform + * + * Invalidated Period Visualisation Test + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe('InvalidatedPeriodVisualisation', function () { + const url = '?module=Widgetize&action=iframe&idSite=1&evolution_day_last_n=30' + + '&moduleToWidgetize=UserCountry&actionToWidgetize=getCountry&viewDataTable=graphEvolution' + + '&isFooterExpandedInDashboard=1'; + + before(() => { + testEnvironment.forceDataStates = { + '2012-01-08': 'invalidated', + '2012-01-09': 'invalidated', + '2012-01-10': 'invalidated', + // center point used for tooltip check + '2012-01-16': 'invalidated', + }; + + testEnvironment.save(); + }); + + after(() => { + delete testEnvironment.forceDataStates; + testEnvironment.save(); + }); + + it('should show invalidated data points', async function () { + await page.goto(url + '&period=day&date=2012-01-31'); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('graph'); + }); + + it('tooltip for invalidated period should say "invalidated period"', async function () { + const graph = await page.$('.piwik-graph'); + const boundingBox = await graph.boundingBox(); + + await page.mouse.move( + boundingBox.x + boundingBox.width / 2, + boundingBox.y + boundingBox.height / 2 + ); + + const tooltipContent = await page.evaluate(() => $('.ui-tooltip').text().trim()); + + expect(tooltipContent).to.contain('Invalidated Period'); + }); + + it('should show invalidated data points', async function () { + await page.goto(url + '&period=range&date=2012-01-01,2012-01-31&comparePeriods[]=range&compareDates[]=2011-12-01,2011-12-31'); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('comparison'); + }); +}); diff --git a/tests/UI/specs/JSTracker_spec.js b/tests/UI/specs/JSTracker_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..63764fafae8fafd0a7c58e64614e3a99fcdf0f41 --- /dev/null +++ b/tests/UI/specs/JSTracker_spec.js @@ -0,0 +1,43 @@ +/*! + * Matomo - free/libre analytics platform + * + * JS tracker UI tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("JSTracker", function () { + this.fixture = 'Piwik\\Tests\\Fixtures\\JSTrackingUIFixture'; + + before(function () { + testEnvironment.pluginsToLoad = ['CustomJsTracker', 'ExampleTracker']; + testEnvironment.save(); + }); + + var testWebsiteUrl = 'tests/resources/overlay-test-site-real/index.html'; + var generalParams = 'idSite=1&period=day&date=today', + widgetizeParams = "module=Widgetize&action=iframe", + visitorLogUrl = "?" + widgetizeParams + "&" + generalParams + "&moduleToWidgetize=Live&actionToWidgetize=getVisitorLog"; + + it("run correctly on a website and correctly track visits in the visitor log", async function () { + await page.goto(testWebsiteUrl); + + // view another page + await page.evaluate(() => $('a:contains(Page 3)')[0].click()); + await page.waitForNetworkIdle(); + await page.waitForTimeout(500); + await page.waitForNetworkIdle(); + + // visit visitor log for correct date + await page.goto(visitorLogUrl); + + await page.evaluate(function () { + $('.visitor-log-datetime').html('REMOVED'); + var $e = $('.dataTableWrapper>.row>.column>strong'); + $e.text($e.text().replace(/\d+s/, 'Ns')); + }); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('visitor_log'); + }); +}); diff --git a/tests/UI/specs/MeasurableManager_spec.js b/tests/UI/specs/MeasurableManager_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..f4c7e301f0a02604dcc42003e3a84b1575baa08e --- /dev/null +++ b/tests/UI/specs/MeasurableManager_spec.js @@ -0,0 +1,59 @@ +/*! + * Matomo - free/libre analytics platform + * + * Site selector screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("MeasurableManager", function () { + this.fixture = "Piwik\\Plugins\\SitesManager\\tests\\Fixtures\\ManySites"; + + const url = "?module=SitesManager&action=index&idSite=1&period=day&date=yesterday&showaddsite=false"; + + before(function () { + testEnvironment.pluginsToLoad = ['MobileAppMeasurable']; + testEnvironment.save(); + }); + + async function assertScreenshotEquals(screenshotName, selector) { + const element = await page.jQuery(selector); + expect(await element.screenshot()).to.matchImage(screenshotName); + } + + it("should load correctly and should not use SitesManager wording as another type is enabled", async function () { + await page.goto(url); + await assertScreenshotEquals("loaded", '#content.admin'); + }); + + it("should use measurable wording in menu", async function () { + const element = await page.jQuery('#secondNavBar li:contains(Tracking Code):first'); + expect(await element.screenshot()).to.matchImage('measurable_menu_item'); + }); + + // '.sitesManagerList,.sitesButtonBar,.sites-manager-header,.ui-dialog.ui-widget,.modal.open' + it("should show selection of available types when adding a type", async function () { + const element = await page.jQuery('.SitesManager .addSite:first'); + await element.click(); + await page.waitForSelector('.modal.open'); + await page.waitForTimeout(350); // wait for modal animation + await assertScreenshotEquals("add_new_dialog", '.modal.open'); + }); + + it("should load mobile app specific fields", async function () { + const element = await page.jQuery('.modal.open .btn:contains(Mobile App)'); + await element.click(); + await page.mouse.move(-10, -10); + + await page.waitForSelector('input.btn[value=Save]'); + await page.waitForNetworkIdle(); + await page.evaluate(function () { + $('.form-help:contains(UTC time is)').hide(); + }); + await page.waitForTimeout(250); + + await assertScreenshotEquals("add_measurable_view", '#content.admin'); + }); + +}); diff --git a/tests/UI/specs/Menus_spec.js b/tests/UI/specs/Menus_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..ace36c030536f714f42c814e6035f8bb6e7d05f0 --- /dev/null +++ b/tests/UI/specs/Menus_spec.js @@ -0,0 +1,165 @@ +/*! + * Matomo - free/libre analytics platform + * + * Screenshot tests for main, top and admin menus. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("Menus", function () { + this.fixture = "Piwik\\Tests\\Fixtures\\ThreeGoalsOnePageview"; + + const generalParams = 'idSite=1&period=year&date=2009-01-04', + urlBase = 'module=CoreHome&action=index&' + generalParams; + + async function openMenuItem(page, menuItem) { + const element = await page.jQuery('#secondNavBar .navbar a:contains(' + menuItem + '):visible:first'); + await element.click(); + await page.mouse.move(-10, -10); + await page.waitForTimeout(250); + } + + async function screenshotClippedSelector(selector, maxHeight, screenshotName) { + const element = await page.$(selector); + const box = await element.boundingBox(); + + expect(await page.screenshot({ + clip: { + x: Math.floor(box.x), + y: Math.floor(box.y), + width: Math.ceil(box.width), + height: Math.min(maxHeight, Math.ceil(box.height)), + }, + })).to.matchImage(screenshotName); + } + + beforeEach(function() { + if (testEnvironment.enableProfessionalSupportAdsForUITests) { + delete testEnvironment.enableProfessionalSupportAdsForUITests; + testEnvironment.save(); + } + }); + + // main menu tests + it('should load the main reporting menu correctly', async function() { + await page.goto("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=General_Pages"); + await page.waitForSelector('#secondNavBar', { visible: true }); + + const element = await page.jQuery('#secondNavBar'); + expect(await element.screenshot()).to.matchImage('mainmenu_loaded'); + }); + + // main menu with plugin promos (reloads the previous test's page with new config) + it('should load the main reporting menu with plugin promos correctly', async function() { + testEnvironment.enableProfessionalSupportAdsForUITests = true; + await testEnvironment.save(); + + await page.reload(); // use URL from the previous test and reload to apply the config changes + await page.waitForSelector('#secondNavBar', { visible: true }); + + const element = await page.jQuery('#secondNavBar'); + expect(await element.screenshot()).to.matchImage('mainmenu_loaded_withpromos'); + }); + + it('should change the menu when a upper menu item is clicked in the main menu', async function() { + // reload to remove config override set by previous tests + await page.reload(); // use URL from the previous test and reload to apply the config changes + await page.waitForSelector('#secondNavBar', { visible: true }); + + await openMenuItem(page, 'Visitors'); + + const element = await page.jQuery('#secondNavBar'); + expect(await element.screenshot()).to.matchImage('mainmenu_upper_clicked'); + }); + + it('should change the menu when a lower menu item is clicked in the main menu', async function() { + await openMenuItem(page, 'Custom Variables'); + + const element = await page.jQuery('#secondNavBar'); + expect(await element.screenshot()).to.matchImage('mainmenu_lower_clicked'); + }); + + // AI Insights section + it('should switch to the AI Insights section when its top menu entry is clicked', async function() { + await page.webpage.setViewport({ width: 1500, height: 750 }); + await page.goto("?" + urlBase + "#?" + generalParams + "&category=General_Visitors&subcategory=General_Overview"); + await page.waitForSelector('#secondNavBar', { visible: true }); + + // the "AI Insights" top menu entry is tagged with its reporting group + await page.click('.nav-wrapper .right a[data-reporting-group="CoreHome_AIInsights"]'); + await page.waitForNetworkIdle(); + await page.waitForTimeout(500); + + const element = await page.jQuery('#secondNavBar'); + expect(await element.screenshot()).to.matchImage('ai_insights_menu'); + }); + + // admin menu tests + it('should load the admin reporting menu correctly', async function() { + await page.webpage.setViewport({width: 1500, height: 750 }); + await page.goto("?" + generalParams + "&module=CoreAdminHome&action=generalSettings"); + await page.waitForSelector('#secondNavBar'); + + await screenshotClippedSelector('#secondNavBar', 620, 'admin_loaded'); + }); + + it('should toggle the submenu visibility when main item is clicked', async function() { + await openMenuItem(page, 'Website'); + await page.waitForTimeout(500); // wait for animation + + await screenshotClippedSelector('#secondNavBar', 620, 'admin_websites'); + }); + + it('should change the admin page correctly when an admin menu item is clicked', async function() { + await openMenuItem(page, 'Manage'); + await page.waitForNetworkIdle(); + await page.waitForSelector('#secondNavBar'); + + const element = await page.jQuery('#secondNavBar'); + expect(await element.screenshot()).to.matchImage('admin_changed'); + }); + + it('should load the admin left menu correctly on mobile', async function() { + await page.webpage.setViewport({ width: 815, height: 1650 }); + await page.goto("?module=CoreAdminHome&action=home"); + await page.waitForNetworkIdle(); + await page.click('[data-target="mobile-left-menu"]'); + await page.waitForTimeout(150); + await page.click('ul#mobile-left-menu > li:nth-child(1) a'); + await page.click('ul#mobile-left-menu > li:nth-child(2) a'); + await page.click('ul#mobile-left-menu > li:nth-child(3) a'); + await page.click('ul#mobile-left-menu > li:nth-child(4) a'); + await page.click('ul#mobile-left-menu > li:nth-child(5) a'); + await page.click('ul#mobile-left-menu > li:nth-child(6) a'); + await page.waitForTimeout(500); + + expect(await page.screenshotSelector('#mobile-left-menu', false)).to.matchImage('mobile_left_admin'); + }); + + it('should load the admin top menu correctly on mobile', async function() { + await page.webpage.setViewport({ width: 768, height: 512 }); + await page.reload(); + await page.waitForNetworkIdle(); + await page.evaluate(function(){ + $('.activateTopMenu>span').click(); + }); + await page.waitForTimeout(250); + + expect(await page.screenshotSelector('#mobile-top-menu', false)).to.matchImage('mobile_top'); + }); + + it('should load the left reporting menu correctly on mobile', async function() { + await page.webpage.setViewport({ width: 768, height: 1000 }); + await page.goto("?" + generalParams + "&module=CoreHome&action=index#?category=General_Visitors&subcategory=General_Overview"); + await page.waitForNetworkIdle(); + await page.evaluate(function(){ + $('.activateLeftMenu>span').click(); + }); + await page.waitForTimeout(250); + await (await page.jQuery('#mobile-left-menu>li>ul:contains(Goals)')).click(); + await page.waitForTimeout(500); + + expect(await page.screenshotSelector('#mobile-left-menu', false)).to.matchImage('mobile_left'); + }); +}); diff --git a/tests/UI/specs/OneClickLastForcedUpdate_spec.js b/tests/UI/specs/OneClickLastForcedUpdate_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..290a2e5de77c4890fefccce0e809405e5caa53de --- /dev/null +++ b/tests/UI/specs/OneClickLastForcedUpdate_spec.js @@ -0,0 +1,150 @@ +/*! + * Matomo - free/libre analytics platform + * + * OneClickUpdate screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +var fs = require('fs'), + path = require('../../lib/screenshot-testing/support/path'); + +const request = require('request-promise'); +const exec = require('child_process').exec; + +describe("OneClickLastForcedUpdate", function () { + this.fixture = "Piwik\\Tests\\Fixtures\\LastForcedInstall"; + + var latestStableUrl = config.piwikUrl + '/latestStableInstall/index.php'; + var settingsUrl = latestStableUrl + '?module=CoreAdminHome&action=home&idSite=1&period=day&date=yesterday'; + var pluginsUrl = latestStableUrl + '?module=CorePluginsAdmin&action=plugins'; + + it('should show the new version available button in the admin screen', async function () { + await page.goto(latestStableUrl); + await page.waitForNetworkIdle(); + await page.waitForSelector('#login_form_login', { visible: true }); + + await page.type('#login_form_login', superUserLogin); + await page.type('#login_form_password', superUserPassword); + await page.evaluate(function(){ + $('#login_form_submit').click(); + }); + + await page.waitForNetworkIdle(); + await page.waitForSelector('.pageWrap'); + + await page.goto(settingsUrl); + await page.waitForNetworkIdle(); + + const element = await page.waitForSelector('#header_message', { visible: true }); + + expect(await element.screenshot()).to.matchImage('latest_version_available'); + }); + + it('should show the one click update screen when the update button is clicked', async function () { + await page.click('#header_message'); + + await page.waitForNetworkIdle(); + await page.waitForSelector('.content'); + + await page.evaluate(() => { + $('.content').html($('.content').html().replace(/requires Matomo <([0-9])\.[0-9]+\.[0-9]+(?:-(?:rc|b)[0-9]+)?/i, 'requires Matomo <$1.99.99')); + }); + + await page.waitForTimeout(100); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('update_screen'); + }); + + it('should fail to automatically update when trying to update over https fails', async function () { + await page.click('#updateAutomatically'); + await page.waitForNetworkIdle(); + await page.waitForSelector('.content'); + expect(await page.screenshot({ fullPage: true })).to.matchImage('update_fail'); + }); + + it('should update successfully and show the finished update screen', async function () { + await page.click('#updateUsingHttp'); + await page.waitForNetworkIdle(); + await page.waitForSelector('.content'); + + // redact specific version changes + page.evaluate(() => { + const updateLog = $('.row code').html(); + const redacted = updateLog.replace(/\bv?\d+(?:\.\d+){1,}\b/gi, 'x.x.x'); + $('.row code').text(redacted); + }); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('update_success'); + }); + + it('should login successfully after the update', async function () { + await page.click('.footer a'); + await page.waitForNetworkIdle(); + + // in case a db upgrade is required + while (true) { + const submitButton = await page.$('.content input[type=submit]'); + if (submitButton) { + await submitButton.click(); + await page.waitForNetworkIdle(); + await page.waitForTimeout(250); + + const continueButton = await page.$('.footer a'); + if (continueButton) { // finish page might not be displayed if only one query is executed + await continueButton.click(); + await page.waitForNetworkIdle(); + } + } else { + break; + } + } + + // avoid taking an unnecessary screenshot, as knowing we land on #site-without-data is enough + await page.waitForSelector('#site-without-data', { visible: true }); + await page.evaluate(() => window.stop()); // stop ongoing requests + }); + + it('should have TreemapVisualization plugin active after the update', async function () { + await page.goto(pluginsUrl); + await page.waitForNetworkIdle(); + await page.waitForSelector('#plugins', { visible: true }); + + const activatedPluginRow = page.$('tr.active-plugin:has(td.name a[name="TreemapVisualization"])'); + expect(activatedPluginRow).to.be.ok; + }); + + it('should have a working cron archiving process', async function () { + // track one action + const trackerUrl = config.piwikUrl + "latestStableInstall/piwik.php?"; + + await request({ + method: 'POST', + uri: trackerUrl, + form: { + idsite: 1, + url: 'http://piwik.net/test/url', + action_name: 'test page', + }, + }); + + // run cron archiving + const output = await new Promise((resolve, reject) => { + exec(`${config.php} ${PIWIK_INCLUDE_PATH}/latestStableInstall/console --matomo-domain=${config.phpServer.HTTP_HOST} core:archive`, (error, stdout, stderr) => { + const output = stdout.toString() + "\n" + stderr.toString(); + + if (error) { + console.log(`core:archive failed, output: ${output}`); + reject(error); + return; + } + + resolve(output); + }); + }); + + // check output has no errors + expect(output).to.not.match(/ERROR|WARN/g); + }); +}); diff --git a/tests/UI/specs/OneClickUpdate_spec.js b/tests/UI/specs/OneClickUpdate_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..60f1df46c99fb2d66afc1512f464c284b1294dfc --- /dev/null +++ b/tests/UI/specs/OneClickUpdate_spec.js @@ -0,0 +1,180 @@ +/*! + * Matomo - free/libre analytics platform + * + * OneClickUpdate screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +var fs = require('fs'), + path = require('../../lib/screenshot-testing/support/path'); + +const request = require('request-promise'); +const exec = require('child_process').exec; + +describe("OneClickUpdate", function () { + this.fixture = "Piwik\\Tests\\Fixtures\\LatestStableInstall"; + + const latestStableUrl = config.piwikUrl + '/latestStableInstall/index.php'; + const settingsUrl = latestStableUrl + '?module=CoreAdminHome&action=home&idSite=1&period=day&date=yesterday'; + + async function openHttpsFailureScreen() { + // Recreate the HTTPS failure state directly so the rest of the test + // does not depend on browser history or transport-specific behavior. + await page.evaluate((oneClickResultsUrl) => { + const form = document.createElement('form'); + form.method = 'POST'; + form.action = oneClickResultsUrl; + + [ + ['httpsFail', '1'], + ['error', 'Simulated SSL certificate failure'], + ['messages', 'a:0:{}'], + ].forEach(([name, value]) => { + const input = document.createElement('input'); + input.type = 'hidden'; + input.name = name; + input.value = value; + form.appendChild(input); + }); + + document.body.appendChild(form); + form.submit(); + }, latestStableUrl + '?module=CoreUpdater&action=oneClickResults'); + + await page.waitForNetworkIdle(); + await page.waitForSelector('#updateUsingHttp', { visible: true }); + } + + before(async function () { + // The updater page loads helper code that may register shortcuts before + // Mousetrap is available in this screenshot-test environment. + await page.evaluateOnNewDocument(() => { + window.Mousetrap = window.Mousetrap || { + bind: () => {}, + trigger: () => {}, + }; + }); + }); + + it('should show the new version available button in the admin screen', async function () { + await page.goto(latestStableUrl); + await page.waitForNetworkIdle(); + await page.waitForSelector('#login_form_login', { visible: true }); + + await page.type('#login_form_login', superUserLogin); + await page.type('#login_form_password', superUserPassword); + await page.evaluate(function(){ + $('#login_form_submit').click(); + }); + + await page.waitForNetworkIdle(); + await page.waitForSelector('.pageWrap'); + + await page.goto(settingsUrl); + await page.waitForNetworkIdle(); + + const element = await page.waitForSelector('#header_message', { visible: true }); + expect(await element.screenshot()).to.matchImage('latest_version_available'); + }); + + it('should show the one click update screen when the update button is clicked', async function () { + await page.click('#header_message'); + + await page.waitForNetworkIdle(); + await page.waitForSelector('.content'); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('update_screen'); + }); + + it('should fail to automatically update when trying to update over https fails', async function () { + await openHttpsFailureScreen(); + expect(await page.$('#updateUsingHttp')).to.be.ok; + expect(await page.$('#updateUsingHttps')).to.be.ok; + expect(await page.$('.alert-warning')).to.be.ok; + }); + + it('should fail when a directory is not writable', async function () { + await openHttpsFailureScreen(); + // Force the updater to hit the writable-directory error path. + fs.chmodSync(path.join(PIWIK_INCLUDE_PATH, '/latestStableInstall/core'), 0o555); + await page.click('#updateUsingHttp'); + await page.waitForSelector('.alert-danger', { visible: true }); + const heading = await page.$eval('.header h1', node => node.textContent); + expect(heading).to.match(/update error/i); + expect(await page.$('.alert-danger')).to.be.ok; + expect(await page.$('.footer a')).to.be.ok; + }); + + it('should update successfully and show the finished update screen', async function () { + await openHttpsFailureScreen(); + // Restore permissions so the same flow can complete successfully. + fs.chmodSync(path.join(PIWIK_INCLUDE_PATH, '/latestStableInstall/core'), 0o777); + await page.click('#updateUsingHttp'); + await page.waitForSelector('.footer a', { visible: true }); + const heading = await page.$eval('.header h1', node => node.textContent); + expect(heading).to.match(/successfully updated/i); + expect(await page.$('.footer a')).to.be.ok; + }); + + it('should login successfully after the update', async function () { + await page.click('.footer a'); + await page.waitForNetworkIdle(); + + // in case a db upgrade is required + while (true) { + const submitButton = await page.$('.content input[type=submit]'); + if (submitButton) { + await submitButton.click(); + await page.waitForNetworkIdle(); + await page.waitForTimeout(250); + + const continueButton = await page.$('.footer a'); + if (continueButton) { // finish page might not be displayed if only one query is executed + await continueButton.click(); + await page.waitForNetworkIdle(); + } + } else { + break; + } + } + + // avoid taking an unnecessary screenshot, as knowing we land on #site-without-data is enough + await page.waitForSelector('#site-without-data', { visible: true }); + await page.evaluate(() => window.stop()); // stop ongoing requests + }); + + it('should have a working cron archiving process', async function () { + // track one action + const trackerUrl = config.piwikUrl + "latestStableInstall/piwik.php?"; + + await request({ + method: 'POST', + uri: trackerUrl, + form: { + idsite: 1, + url: 'http://piwik.net/test/url', + action_name: 'test page', + }, + }); + + // run cron archiving + const output = await new Promise((resolve, reject) => { + exec(`${config.php} ${PIWIK_INCLUDE_PATH}/latestStableInstall/console --matomo-domain=${config.phpServer.HTTP_HOST} core:archive`, (error, stdout, stderr) => { + const output = stdout.toString() + "\n" + stderr.toString(); + + if (error) { + console.log(`core:archive failed, output: ${output}`); + reject(error); + return; + } + + resolve(output); + }); + }); + + // check output has no errors + expect(output).to.not.match(/ERROR|WARN/g); + }); +}); diff --git a/tests/UI/specs/OnlyRawDataNotification_spec.js b/tests/UI/specs/OnlyRawDataNotification_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..1e7ace751696558cea7e26368aa7190bf5b5a1b8 --- /dev/null +++ b/tests/UI/specs/OnlyRawDataNotification_spec.js @@ -0,0 +1,44 @@ +/*! + * Matomo - free/libre analytics platform + * + * Only Raw Data Notification screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("OnlyRawDataNotification", function () { + this.fixture = "Piwik\\Tests\\Fixtures\\OneVisit"; + + const generalParams = 'idSite=1&period=range&date=2021-01-01,today'; + const pageUrl = '?module=CoreHome&action=index&' + generalParams; + + before(function () { + testEnvironment.testUseMockAuth = 1; + testEnvironment.configOverride.General = { + browser_archiving_disabled_enforce: '1', + enable_browser_archiving_triggering: '0', + }; + testEnvironment.optionsOverride = { + enableBrowserTriggerArchiving: '0', + }; + testEnvironment.save(); + }); + + it("should show notification when only raw data exists", async function () { + await page.goto(pageUrl); + await page.waitForSelector('.widget'); + const notificationContainer = await page.$('#notificationContainer'); + expect(await notificationContainer.screenshot()).to.matchImage('show_notification_when_only_raw_data_exists'); + }); + + it("should show notification when only raw data exists and visits log is disabled", async function () { + testEnvironment.overrideConfig('Live', 'disable_visitor_log', 1); + testEnvironment.save(); + await page.goto('about:blank'); + await page.goto(pageUrl); + await page.waitForSelector('.widget'); + const notificationContainer = await page.$('#notificationContainer'); + expect(await notificationContainer.screenshot()).to.matchImage('show_notification_when_only_raw_data_exists_no_visits_log'); + }); +}); diff --git a/tests/UI/specs/OptOutIframe_spec.js b/tests/UI/specs/OptOutIframe_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..495deba636be87f5c9c8c92a99ceeeb7149105d6 --- /dev/null +++ b/tests/UI/specs/OptOutIframe_spec.js @@ -0,0 +1,122 @@ +/*! + * Matomo - free/libre analytics platform + * + * Opt-out form tests + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("OptOutIframe", function () { + const siteUrl = "/tests/resources/overlay-test-site-real/opt-out.php?implementation=iframe", + safariUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A", + chromeUserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"; + + function expandIframe() { + return page.evaluate(() => { + const $iframe = $('iframe#optOutIframe'); + $iframe.contents().find('#textError_https').hide(); + $iframe.width(350); + $iframe.height($iframe.contents().outerHeight()); + }); + } + + after(async () => { + await page.setUserAgent(page.originalUserAgent); + }); + + it("should display correctly when embedded in another site", async function () { + await page.clearCookies(); + + page.setUserAgent(chromeUserAgent); + await page.goto(siteUrl); + + await expandIframe(); + + const element = await page.jQuery('iframe#optOutIframe'); + expect(await element.screenshot()).to.matchImage('loaded'); + }); + + it("should reload the iframe when clicking the opt out checkbox and display an empty checkbox", async function () { + await page.evaluate(function () { + $('iframe#optOutIframe').contents().find('input#trackVisits').click(); + }); + + await page.waitForTimeout(5000); // opt out iframe creates a new page, so we can't wait on it that easily + await page.waitForNetworkIdle(); // safety + + await expandIframe(); + + const element = await page.jQuery('iframe#optOutIframe'); + expect(await element.screenshot()).to.matchImage('opted-out'); + }); + + it("should correctly show the checkbox unchecked after reloading after opting-out", async function () { + page.setUserAgent(chromeUserAgent); + await page.goto(siteUrl); + + await expandIframe(); + + const element = await page.jQuery('iframe#optOutIframe'); + expect(await element.screenshot()).to.matchImage('opted-out_reloaded'); + }); + + it("using opt out twice should work correctly", async function () { + page.setUserAgent(chromeUserAgent); + await page.goto(siteUrl); + + await page.evaluate(function () { + $('iframe#optOutIframe').contents().find('input#trackVisits').click(); + }); + + await page.waitForTimeout(5000); + + await expandIframe(); + + // check the box has opted in state after clicking once + var element = await page.jQuery('iframe#optOutIframe'); + expect(await element.screenshot()).to.matchImage('clicked_once'); + + await page.evaluate(function () { + $('iframe#optOutIframe').contents().find('input#trackVisits').click(); + }); + + await page.waitForTimeout(5000); + + // check the box has outed out state after click another time + await page.reload(); + + await expandIframe(); + + var element = await page.jQuery('iframe#optOutIframe'); + expect(await element.screenshot()).to.matchImage('clicked_twice'); + }); + + it("should correctly show display opted-in form when cookies are cleared", async function () { + await page.clearCookies(); + + page.setUserAgent(safariUserAgent); + await page.goto(siteUrl); + + await expandIframe(); + + const element = await page.jQuery('iframe#optOutIframe'); + expect(await element.screenshot()).to.matchImage('safari-loaded'); + }); + + it("should correctly set opt-out cookie on safari", async function () { + await page.evaluate(function () { + $('iframe#optOutIframe').contents().find('input#trackVisits').click(); + }); + + await page.waitForTimeout(5000); // opt out iframe creates a new page, so we can't wait on it that easily + await page.waitForNetworkIdle(); // safety + + await page.goto(siteUrl); // reload to check that cookie was set + + await expandIframe(); + + const element = await page.jQuery('iframe#optOutIframe'); + expect(await element.screenshot()).to.matchImage('safari-opted-out'); + }); +}); diff --git a/tests/UI/specs/OptOutJS_spec.js b/tests/UI/specs/OptOutJS_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..154c356eadb0bcc4778a1b1fb3d5b1e0da496a59 --- /dev/null +++ b/tests/UI/specs/OptOutJS_spec.js @@ -0,0 +1,130 @@ +/*! + * Matomo - free/libre analytics platform + * + * Opt-out form tests + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe('OptOutJS', function () { + const parentSuite = this; + + const siteUrl = '/tests/resources/overlay-test-site-real/opt-out.php?implementation=js'; + + async function expectHasConsentToBe(useTracker, expectedState) { + let hasConsent; + + if (useTracker) { + hasConsent = await page.evaluate(() => window.Matomo.getTracker().hasConsent()); + } else { + hasConsent = await page.evaluate(() => !!window.MatomoConsent.hasConsent()); + } + + expect(hasConsent).to.equal(expectedState); + } + + async function hideHTTPSWarning() { + await page.evaluate(() => $('#matomo-opt-out p:contains("not loaded over HTTPS")').hide()); + } + + async function screenshotOptOut(screenshotName) { + expect(await page.screenshotSelector('#matomo-opt-out')).to.matchImage(screenshotName); + } + + [true, false].forEach(function (loadTracker) { + const optOutUrl = siteUrl + '&loadTracker=' + (loadTracker ? '1' : '0'); + const testSuffix = loadTracker ? ' (with tracker)' : ' (without tracker)'; + + it('should display correctly when integrated' + testSuffix, async function () { + await page.clearCookies(); + await page.goto(optOutUrl); + await page.waitForSelector('#trackVisits'); + await hideHTTPSWarning(); + + await expectHasConsentToBe(loadTracker, true); + + if (loadTracker) { + await screenshotOptOut('loaded'); + } + }); + + it('should register consent withdrawal and display an empty checkbox' + testSuffix, async function () { + await page.click('#trackVisits'); + await hideHTTPSWarning(); + + await expectHasConsentToBe(loadTracker, false); + + if (loadTracker) { + await screenshotOptOut('opted-out'); + } + }); + + it('should correctly show the checkbox unchecked after reloading after opting-out' + testSuffix, async function () { + await page.goto(optOutUrl); + await page.waitForSelector('#trackVisits'); + await hideHTTPSWarning(); + + await expectHasConsentToBe(loadTracker, false); + }); + + it('should allow granting consent again and display a filled checkbox' + testSuffix, async function () { + await page.click('#trackVisits'); + await hideHTTPSWarning(); + + await expectHasConsentToBe(loadTracker, true); + + if (loadTracker) { + await screenshotOptOut('opted-in'); + } + }); + + it('should work correctly when using opt out twice' + testSuffix, async function () { + await page.clearCookies(); + await page.goto(optOutUrl); + await page.waitForSelector('#trackVisits'); + await hideHTTPSWarning(); + + await expectHasConsentToBe(loadTracker, true); + + await page.click('#trackVisits'); + await hideHTTPSWarning(); + await expectHasConsentToBe(loadTracker, false); + + await page.click('#trackVisits'); + await hideHTTPSWarning(); + await expectHasConsentToBe(loadTracker, true); + + if (loadTracker) { + await screenshotOptOut('clicked_twice'); + } + }); + }); + + it('should show a warning if the divId is missing', async function () { + await page.goto(siteUrl + '&divId=missingDivId'); + await page.waitForSelector('#missingDivId-warning'); + await page.evaluate(() => $('#missingDivId-warning').width(640)); + + expect(await page.screenshotSelector('#missingDivId-warning')).to.matchImage('missing-divId'); + }); + + describe('with disabled browser cookies', function () { + this.title = parentSuite.title; // to make sure the screenshot prefix is the same + + before(async function (){ + await page.webpage._client.send('Emulation.setDocumentCookieDisabled', {'disabled': true}); + }); + + after(async function () { + await page.webpage._client.send('Emulation.setDocumentCookieDisabled', {'disabled': false}); + }); + + it('should show a warning', async function () { + await page.goto(siteUrl); + await page.waitForSelector('#matomo-opt-out p'); + + await screenshotOptOut('cookies-disabled'); + }); + }) +}); diff --git a/tests/UI/specs/PeriodSelector_spec.js b/tests/UI/specs/PeriodSelector_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..3e7e24923b9c6d4e7a766fcc7570d28bad3929e0 --- /dev/null +++ b/tests/UI/specs/PeriodSelector_spec.js @@ -0,0 +1,449 @@ +/*! + * Matomo - free/libre analytics platform + * + * Period selector screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("PeriodSelector", function () { + const parentSuite = this; + + const generalParams = 'idSite=1&period=day&date=2012-01-01'; + const url = '?module=CoreHome&action=index&' + generalParams + '#?' + generalParams + '&category=General_Actions&subcategory=General_Pages'; + + const selector = '#periodString,#periodString .dropdown'; + const waitForPeriodChecked = async function (periodId) { + await page.waitForFunction((id) => window.$(id).is(':checked'), {}, periodId); + }; + it("should load correctly", async function() { + await page.goto(url); + + // disable broadcast.propagateNewPage & remove loading gif + await page.evaluate(function () { + piwikHelper.isReportingPage = function () { + return false; + }; + + broadcast.propagateNewPage = function () {}; + + // hide ajaxLoadingCalendar via CSS (can't just remove it since it's managed by vue) + $('head').append(''); + }); + + expect(await page.screenshotSelector(selector)).to.matchImage('loaded'); + }); + + it("should expand when clicked", async function() { + await page.click('.periodSelector .title'); + expect(await page.screenshotSelector(selector)).to.matchImage('expanded'); + }); + + it("should select a date when a date is clicked in day-period mode", async function() { + const element = await page.jQuery('.period-date .ui-datepicker-calendar a:contains(12)'); + await element.click(); + + expect(await page.screenshotSelector(selector)).to.matchImage('day_selected'); + }); + + it("should change the month displayed when a month is selected in the month dropdown", async function() { + await page.evaluate(function () { + $('.ui-datepicker-month').val(1).trigger('change'); + }); + await page.mouse.move(-10, -10); + + expect(await page.screenshotSelector(selector)).to.matchImage('month_changed'); + }); + + it("should change the year displayed when a year is selected in the year dropdown", async function() { + await page.evaluate(function () { + $('.ui-datepicker-year').val(2013).trigger('change'); + }); + await page.mouse.move(-10, -10); + + expect(await page.screenshotSelector(selector)).to.matchImage('year_changed'); + }); + + it("should change the date when a date is clicked in week-period mode", async function() { + await page.click('#period_id_week'); + await waitForPeriodChecked('#period_id_week'); + + const element = await page.jQuery('.period-date .ui-datepicker-calendar a:contains(13)'); + await element.click(); + + expect(await page.screenshotSelector(selector)).to.matchImage('week_selected'); + }); + + it('should activate a period option via Enter key', async function () { + await page.focus('#period_id_week'); + await page.keyboard.press('Enter'); + await waitForPeriodChecked('#period_id_week'); + + const selectedState = await page.evaluate(function () { + return { + weekChecked: $('#period_id_week').is(':checked'), + dayChecked: $('#period_id_day').is(':checked'), + }; + }); + + expect(selectedState.weekChecked).to.equal(true); + expect(selectedState.dayChecked).to.equal(false); + }); + + it('should activate a period option via Space key', async function () { + await page.focus('#period_id_month'); + await page.keyboard.press('Space'); + await waitForPeriodChecked('#period_id_month'); + + const selectedState = await page.evaluate(function () { + return { + monthChecked: $('#period_id_month').is(':checked'), + dayChecked: $('#period_id_day').is(':checked'), + }; + }); + + expect(selectedState.monthChecked).to.equal(true); + expect(selectedState.dayChecked).to.equal(false); + }); + + it("should change the date when a date is clicked in month-period mode", async function() { + await page.click('#period_id_month'); + await waitForPeriodChecked('#period_id_month'); + + const element = await page.jQuery('.period-date .ui-datepicker-calendar a:contains(14)'); + await element.click(); + + expect(await page.screenshotSelector(selector)).to.matchImage('month_selected'); + }); + + it("should change the date when a date is clicked in year-period mode", async function() { + await page.click('#period_id_year'); + await waitForPeriodChecked('#period_id_year'); + + const element = await page.jQuery('.period-date .ui-datepicker-calendar a:contains(15)'); + await element.click(); + + expect(await page.screenshotSelector(selector)).to.matchImage('year_selected'); + }); + + it("should display the range picker when the range radio button is clicked", async function() { + await page.click('#period_id_range'); + await waitForPeriodChecked('#period_id_range'); + await page.waitForSelector('#calendarFrom .ui-datepicker-calendar'); + + expect(await page.screenshotSelector(selector)).to.matchImage('range_picker_displayed'); + }); + + it("should change from & to dates when range picker calendar dates are clicked", async function() { + let element = await page.jQuery('#calendarFrom .ui-datepicker-calendar a:contains(10)'); + await element.click(); + + element = await page.jQuery('#calendarTo .ui-datepicker-calendar a:contains(18)'); + await element.click(); + + await page.hover('#calendarApply'); + await page.waitForFunction(() => !!document.querySelector('#calendarApply:hover')); + + expect(await page.screenshotSelector(selector)).to.matchImage('date_range_selected'); + }); + + it("should enable the comparison dropdown when 'compare' is checked", async function () { + await page.click('#comparePeriodTo + span'); + await page.waitForFunction(() => window.$('#comparePeriodTo').is(':checked')); + + expect(await page.screenshotSelector(selector)).to.matchImage('comparison_checked'); + }); + + it('should show range inputs when custom date range compare is selected', async function () { + await page.evaluate(function () { + $('#comparePeriodToDropdown select').val('string:custom').trigger('change'); + }); + await page.waitForFunction( + () => window.$('#comparePeriodToDropdown select').val() === 'string:custom', + ); + + expect(await page.screenshotSelector(selector)).to.matchImage('custom_comparison'); + }); + + it("should close on click if previously opened", async function () { + await page.click('.periodSelector .title'); + expect(await page.screenshotSelector(selector)).to.matchImage('closed'); + }); + + + it('should apply non-range period selection only after calendar click', async function () { + await page.goto(url); + await page.click('.periodSelector .title'); + await page.evaluate(function () { + piwikHelper.isReportingPage = function () { + return true; + }; + }); + + const initialUrl = await page.url(); + + await page.click('#period_id_week'); + await waitForPeriodChecked('#period_id_week'); + + const stateAfterPeriodClick = await page.evaluate(function () { + return { + expanded: $('.periodSelector').hasClass('expanded'), + applyVisible: $('#calendarApply').is(':visible'), + selectedCells: $('.period-date td.ui-datepicker-current-period').length, + }; + }); + + expect(stateAfterPeriodClick.expanded).to.equal(true); + expect(stateAfterPeriodClick.applyVisible).to.equal(true); + expect(stateAfterPeriodClick.selectedCells).to.equal(0); + expect(await page.url()).to.equal(initialUrl); + + const dateCell = await page.jQuery('.period-date .ui-datepicker-calendar a:contains(13)'); + await dateCell.click(); + await page.waitForFunction((initial) => window.location.href !== initial, {}, initialUrl); + + const appliedUrl = await page.url(); + expect(appliedUrl).to.contain('period=week'); + expect(appliedUrl).to.not.equal(initialUrl); + }); + + it('should keep the calendar interactive after selecting a preset', async function () { + await page.goto('about:blank'); + await page.evaluateOnNewDocument(() => { + Date.now = () => new Date('2012-01-09T12:00:00Z').getTime(); + }); + + await page.goto(url); + await page.click('.periodSelector .title'); + await page.evaluate(function () { + piwikHelper.isReportingPage = function () { + return true; + }; + }); + + await page.click('#preset_date_yesterday'); + await waitForPeriodChecked('#period_id_day'); + await page.waitForFunction(() => window.$('#preset_date_yesterday').is(':checked')); + + const dayToSelect = await page.evaluate(function () { + const selectedDay = $('.period-date td.ui-datepicker-current-period') + .find('a, span') + .first() + .text() + .trim(); + + const clickableDays = $('.period-date .ui-datepicker-calendar a') + .map(function () { + return $(this).text().trim(); + }) + .get(); + + return clickableDays.find((dayText) => dayText !== selectedDay) || null; + }); + + expect(dayToSelect).to.not.equal(null); + + const initialUrl = await page.url(); + + await page.evaluate(function (dayText) { + const link = $('.period-date .ui-datepicker-calendar a').filter(function () { + return $(this).text().trim() === String(dayText); + }).get(0); + + if (!link) { + throw new Error(`Could not find clickable calendar day "${dayText}"`); + } + + link.click(); + }, dayToSelect); + + await page.waitForFunction((initial) => window.location.href !== initial, {}, initialUrl); + + const stateAfterCalendarClick = await page.evaluate(function () { + return { + dayChecked: $('#period_id_day').is(':checked'), + presetChecked: $('#preset_date_yesterday').is(':checked'), + }; + }); + + expect(stateAfterCalendarClick.dayChecked).to.equal(true); + expect(stateAfterCalendarClick.presetChecked).to.equal(false); + }); + + it('should keep range selection pending until apply', async function () { + await page.goto(url); + await page.click('.periodSelector .title'); + await page.evaluate(function () { + piwikHelper.isReportingPage = function () { + return true; + }; + }); + + const initialUrl = await page.url(); + + await page.click('#period_id_range'); + await waitForPeriodChecked('#period_id_range'); + expect(await page.url()).to.equal(initialUrl); + + await page.waitForSelector('#calendarApply', {visible: true, timeout: 250}); + await page.click('#calendarApply'); + await page.waitForFunction((initial) => window.location.href !== initial, {}, initialUrl); + + const appliedUrl = await page.url(); + expect(appliedUrl).to.contain('period=range'); + expect(appliedUrl).to.not.equal(initialUrl); + }); + + it('should keep legacy double-click immediate apply behavior for non-range periods', async function () { + await page.goto(url); + await page.click('.periodSelector .title'); + await page.evaluate(function () { + piwikHelper.isReportingPage = function () { + return true; + }; + }); + + await page.click('#period_id_month', { clickCount: 2 }); + await page.waitForFunction(() => window.location.href.includes('period=month')); + + const currentUrl = await page.url(); + expect(currentUrl).to.contain('period=month'); + }); + + it('should keep rolling last7 token after reload and apply', async function () { + const tokenUrl = '?module=CoreHome&action=index&idSite=1&period=range&date=last7#?idSite=1&period=range&date=last7&category=General_Actions&subcategory=General_Pages'; + await page.goto(tokenUrl); + await page.click('.periodSelector .title'); + await page.evaluate(function () { + piwikHelper.isReportingPage = function () { + return true; + }; + }); + await page.click('#calendarApply'); + await page.waitForNetworkIdle(); + + const currentUrl = await page.url(); + expect(currentUrl).to.contain('period=range'); + expect(currentUrl).to.contain('date=last7'); + expect(currentUrl).to.not.match(/date=\d{4}-\d{2}-\d{2}%2C\d{4}-\d{2}-\d{2}/); + }); + + it("should move forward two days when next period selector is clicked twice", async function () { + await page.goto(url); + + await page.click('.periodSelector .move-period-next'); + await page.waitForNetworkIdle(); + await page.click('.periodSelector .move-period-next'); + + await page.waitForNetworkIdle(); + await page.mouse.move(-10, -10); + + expect(await page.screenshotSelector(selector)).to.matchImage('two_days_forward'); + }); + + it("should move back one days when previous period selector is clicked once", async function () { + await page.click('.periodSelector .move-period-prev'); + + await page.waitForNetworkIdle(); + await page.mouse.move(-10, -10); + + expect(await page.screenshotSelector(selector)).to.matchImage('one_day_back'); + }); + + it("should display disabled previous period button when at the start of site tracking", async function () { + const generalParams = 'idSite=1&period=day&date=2011-01-01'; + const url = '?module=CoreHome&action=index&' + generalParams + '#?' + generalParams + '&category=General_Actions&subcategory=General_Pages'; + + await page.goto(url); + + expect(await page.screenshotSelector(selector)).to.matchImage('disabled_previous_period'); + }); + + it("should hide prev/next buttons when dates range selection", async function () { + const generalParams = 'idSite=1&period=range&date=2011-01-01,2011-02-01'; + const url = '?module=CoreHome&action=index&' + generalParams + '#?' + generalParams + '&category=General_Actions&subcategory=General_Pages'; + + await page.goto(url); + + await page.evaluate(function () { + // disable page propagation again for further tests + broadcast.propagateNewPage = function () {}; + }); + + expect(await page.screenshotSelector(selector)).to.matchImage('hide_prevnext_for_range'); + }); + + describe('match selected compare settings with URL', async function() { + this.title = parentSuite.title; // to make sure the screenshot prefix is the same + + const getSelectedPeriodType = async function () { + const compareToTypeInput = await page.$('#comparePeriodToDropdown input'); + const compareToTypeValue = await compareToTypeInput.getProperty('value'); + + return await compareToTypeValue.jsonValue(); + }; + + it('should select "previous period" from URL', async function () { + await page.goto(url + '&comparePeriods[]=day&comparePeriodType=previousPeriod&compareDates[]=2011-12-31'); + await page.waitForNetworkIdle(); + + expect(await getSelectedPeriodType()).to.match(/Period/); + }); + + it('should select "previous year" from URL', async function () { + await page.goto(url + '&comparePeriods[]=day&comparePeriodType=previousYear&compareDates[]=2011-01-01'); + await page.waitForNetworkIdle(); + + expect(await getSelectedPeriodType()).to.match(/Year/); + }); + + it ('should select "custom" from URL', async function() { + await page.goto(url + '&comparePeriods[]=range&comparePeriodType=custom&compareDates[]=2013-01-01,2013-01-02'); + await page.waitForNetworkIdle(); + + expect(await getSelectedPeriodType()).to.match(/Custom/); + + // ensure inputs are properly filled + await page.click('.periodSelector .title'); + await page.waitForSelector('#calendarApply', {visible: true, timeout: 250}); + + expect(await page.screenshotSelector(selector)).to.matchImage('custom_comparison_url'); + }); + }); + + it('should show an error when invalid date/period combination is given', async function () { + await page.goto('about:blank'); + await page.goto(url.replace(/date=[^&#]+&/, 'date=2020-08-08,2020-08-09&')); + await page.waitForFunction( + () => window.$('.periodSelector .title').text().trim().length > 0, + ); + + expect(await page.screenshotSelector(selector + ',#notificationContainer')).to.matchImage('invalid'); + }); + + it('should rediscover the last week preset for explicit week dates after navigation', async function () { + await page.goto('about:blank'); + await page.evaluateOnNewDocument(() => { + Date.now = () => new Date('2012-01-09T12:00:00Z').getTime(); + }); + + const explicitWeekUrl = '?module=CoreHome&action=index&idSite=1&period=week&date=2012-01-03' + + '#?idSite=1&period=week&date=2012-01-03&category=General_Actions&subcategory=General_Pages'; + + await page.goto(explicitWeekUrl); + await page.click('.periodSelector .title'); + await waitForPeriodChecked('#period_id_week'); + await page.waitForFunction(() => window.$('#preset_date_lastWeekMonSun').is(':checked')); + + const selectedState = await page.evaluate(function () { + return { + weekChecked: $('#period_id_week').is(':checked'), + lastWeekChecked: $('#preset_date_lastWeekMonSun').is(':checked'), + }; + }); + + expect(selectedState.weekChecked).to.equal(true); + expect(selectedState.lastWeekChecked).to.equal(true); + }); +}); diff --git a/tests/UI/specs/PieGraph_spec.js b/tests/UI/specs/PieGraph_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..2716222647e0c7825ed66d0742c22ac98ed567fe --- /dev/null +++ b/tests/UI/specs/PieGraph_spec.js @@ -0,0 +1,66 @@ +/*! + * Matomo - free/libre analytics platform + * + * Pie graph screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("PieGraph", function () { + const url = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&" + + "actionToWidgetize=getKeywords&viewDataTable=graphPie&isFooterExpandedInDashboard=1"; + const multiMetricUrl = url + "&columns=nb_visits,nb_actions,bounce_rate&filter_add_columns_when_show_all_columns=0"; + + it("should load correctly", async function () { + await page.goto(url); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('load'); + }); + + it("should show tooltip on hover", async function () { + await page.hover('.piwik-graph'); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('pie_segment_tooltip'); + }); + + it("should display the metric picker when the metric picker button is clicked", async function () { + await page.click('.metrics-picker__toggle'); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('metric_picker_shown'); + await page.keyboard.press('Escape'); + }); + + it("should change displayed metric when another metric picked", async function () { + await page.click('.metrics-picker__toggle'); + await page.waitForSelector('.metrics-picker__options input'); + var element = await page.jQuery('.metrics-picker__options input:not(:checked):eq(0)'); + await element.click(); + + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('other_metric'); + }); + + it("should render the footer legend for pie graphs", async function () { + await page.goto(multiMetricUrl); + await page.waitForNetworkIdle(); + + const legendState = await page.evaluate(function () { + const footer = document.querySelector('.jqplot-legend-footer.has-legend'); + const labels = footer ? Array.from(footer.querySelectorAll('.jqplot-legend-label')).map(function (label) { + return label.textContent.trim(); + }).filter(Boolean) : []; + + return { + hasLegend: !!footer, + itemCount: labels.length, + labels: labels, + }; + }); + + expect(legendState.hasLegend).to.equal(true); + expect(legendState.itemCount).to.be.above(0); + expect(legendState.labels.length).to.equal(legendState.itemCount); + }); +}); diff --git a/tests/UI/specs/PivotByDimension_spec.js b/tests/UI/specs/PivotByDimension_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..32436e012f1d0ca89188def13e1826bbaa2a0f8d --- /dev/null +++ b/tests/UI/specs/PivotByDimension_spec.js @@ -0,0 +1,56 @@ +/*! + * Matomo - free/libre analytics platform + * + * PivotByDimension UI tests + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("PivotByDimension", function () { + var eventsUrl = "?module=CoreHome&action=index&idSite=1&period=year&date=2012-08-09#?idSite=1&period=year&date=2012-08-09&category=General_Actions&subcategory=Events_Events", + actionsUrl = "?module=CoreHome&action=index&idSite=1&period=year&date=2012-08-09#?idSite=1&period=year&date=2012-08-09&category=General_Actions&subcategory=General_Pages", + cvarsUrl = "?module=CoreHome&action=index&idSite=1&period=year&date=2012-08-09#?idSite=1&period=year&date=2012-08-09&category=General_Visitors&subcategory=CustomVariables_CustomVariables" + ; + + it("should pivot a report correctly when the pivot cog option is selected", async function () { + await page.goto(eventsUrl); + + let element = await page.jQuery('.dimension:contains(Event Names)'); + await element.click(); + await page.waitForNetworkIdle(); + + await page.click('.dropdownConfigureIcon'); + await page.waitForTimeout(100); + await page.click('.dataTablePivotBySubtable'); + await page.waitForNetworkIdle(); + + await page.mouse.move(-150, -150); // make sure nothing is highlighted + + element = await page.$('.theWidgetContent'); + expect(await element.screenshot()).to.matchImage('pivoted'); + }); + + it("should not display the pivot option on actions reports", async function () { + await page.goto(actionsUrl); + + const element = await page.$('.dataTablePivotBySubtable'); + expect(element).to.be.not.ok; + }); + + it("should display the pivot option on reports that set a custom columns_to_display", async function () { + await page.goto(cvarsUrl); + await page.waitForNetworkIdle(); + await page.click('.dropdownConfigureIcon'); + await page.click('.dataTablePivotBySubtable'); + await page.waitForNetworkIdle(); + + await page.mouse.move(-15, -15); // make sure nothing is highlighted + await page.waitForTimeout(100); + + expect(await page.screenshotSelector('.dataTable,.expandDataTableFooterDrawer')).to.matchImage({ + imageName: 'pivoted_columns_report', + comparisonThreshold: 0.01, + }); + }); +}); diff --git a/tests/UI/specs/QuickAccess_spec.js b/tests/UI/specs/QuickAccess_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..b4f7e50a8bfac0a514edbd8375c82cf8ea175a93 --- /dev/null +++ b/tests/UI/specs/QuickAccess_spec.js @@ -0,0 +1,202 @@ +/*! + * Matomo - free/libre analytics platform + * + * ActionsDataTable screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("QuickAccess", function () { + const selectorToCapture = ".quick-access,.quick-access .dropdown"; + const url = "?module=CoreHome&action=index&idSite=1&period=year&date=2012-08-09"; + const pagesResultSelector = '.quick-access .result a'; + + async function enterSearchTerm(searchTermToAdd) { + await page.evaluate(function () { + $('.quick-access input').val(''); + }); + + await page.focus(".quick-access input"); + await page.keyboard.type(searchTermToAdd); + await page.waitForTimeout(100); + await page.waitForNetworkIdle(); + await page.waitForTimeout(100); + + await page.evaluate(function () { + $('.quick-access input').blur(); + }); + } + + async function searchForPages() { + await page.focus('.quick-access input'); + await page.keyboard.type('page'); + await page.waitForTimeout(200); + await page.waitForFunction( + (selector) => Array.from(document.querySelectorAll(selector)).some((element) => element.textContent.includes('Pages')), + {}, + pagesResultSelector, + ); + } + + // Switches to the AI Insights section the way its top-menu entry does (hash-only, no reload) and + // waits for the SPA to finish switching: it rewrites the hash with the section's first page (the + // AI Assistants category) once that section's menu is ready, then the report loads (network idle). + // Waiting for this deterministic state - rather than a fixed sleep - means the result set is + // already complete when the caller searches and asserts. + async function switchToAiInsightsSection() { + await page.evaluate(() => { + window.location.hash = '#?idSite=1&period=year&date=2012-08-09&group=CoreHome_AIInsights'; + }); + await page.waitForFunction(() => window.location.href.includes('category=General_AIAssistants')); + await page.waitForNetworkIdle(); + } + + it("should be displayed", async function () { + await page.goto(url); + expect(await page.screenshotSelector(selectorToCapture)).to.matchImage('initially'); + }); + + it('should display a styled tooltip on hover', async function () { + await page.hover('.quick-access input'); + const content = await page.waitForFunction(() => $('.ui-tooltip:visible').text()); + expect(content).to.match(/Search for Menu entries, Segments, and Websites\. Use the arrow keys to navigate through search results\. Shortcut: Press 'f' to search\./); + }); + + it("should search for something and update view", async function () { + await page.mouse.move(0,0); + await enterSearchTerm('s'); + await page.waitForTimeout(100); + expect(await page.screenshotSelector(selectorToCapture)).to.matchImage('search_1'); + }); + + it("should search again when typing another letter", async function () { + await enterSearchTerm('as'); + await page.waitForTimeout(100); + expect(await page.screenshotSelector(selectorToCapture)).to.matchImage('search_2'); + }); + + it("should show message if no results", async function () { + await enterSearchTerm('alaskdjfs'); + await page.waitForTimeout(100); + expect(await page.screenshotSelector(selectorToCapture)).to.matchImage('search_no_result'); + }); + + it("should be possible to activate via shortcut", async function () { + await page.goto(url); + await page.focus('body'); + await page.keyboard.type('f'); + + await page.evaluate(function () { + $('.quick-access input').blur(); + }); + + expect(await page.screenshotSelector(selectorToCapture)).to.matchImage('shortcut'); + }); + + it("should search for websites", async function () { + await enterSearchTerm('si'); + expect(await page.screenshotSelector(selectorToCapture)).to.matchImage('search_sites'); + }); + + it("clicking on a category should show all items that belong to that category", async function () { + const element = await page.jQuery('.quick-access-category:first'); + await element.click(); + await page.waitForNetworkIdle(); + expect(await page.screenshotSelector(selectorToCapture)).to.matchImage('search_category'); + }); + + it("should close the mobile side menu when selecting a search result", async function () { + await page.webpage.setViewport({ width: 768, height: 1200 }); + await page.goto('?module=CoreHome&action=index&idSite=1&period=year&date=2009-01-04#?idSite=1&period=year&date=2009-01-04&category=General_Visitors&subcategory=General_Overview'); + await page.waitForNetworkIdle(); + + await page.evaluate(function () { + $('.activateLeftMenu>span').click(); + }); + await page.waitForFunction(() => $('#secondNavBar').hasClass('mobileLeftMenuOpen')); + + await searchForPages(); + await page.click(pagesResultSelector); + + await page.waitForFunction(() => !$('#secondNavBar').hasClass('mobileLeftMenuOpen')); + await page.waitForFunction(() => window.location.href.includes('subcategory=General_Pages')); + }); + it("should clear the active state when tabbing away", async function () { + await page.goto(url); + await searchForPages(); + + await page.keyboard.press('Tab'); + + await page.waitForFunction(() => !$('.quick-access').hasClass('active')); + await page.waitForFunction(() => !$('.quick-access .dropdown').is(':visible')); + }); + + it("should navigate when clicking a search result", async function () { + await page.goto(url); + await searchForPages(); + + await page.click(pagesResultSelector); + + await page.waitForFunction(() => window.location.href.includes('subcategory=General_Pages')); + }); + + it("should clear the search field when switching reporting section", async function () { + // Switching section only changes the hash (no remount), so the typed text used to persist here. + await page.goto(url + '#?idSite=1&period=year&date=2012-08-09&category=General_Visitors&subcategory=General_Overview'); + await page.waitForSelector('#secondNavBar', { visible: true }); + await page.waitForNetworkIdle(); + + await enterSearchTerm('visitor'); + await page.waitForFunction((selector) => $(selector).length > 0, {}, pagesResultSelector); + + await switchToAiInsightsSection(); + + const searchValue = await page.evaluate(() => document.querySelector('.quick-access input').value); + expect(searchValue).to.equal(''); + }); + + it("should not show duplicate results after switching reporting section", async function () { + // Regression: a hash-only section switch left this component's scraped menu cache pointed at the + // previous section, duplicating its entries. Start from a hashed URL so the switch stays hash-only + // (a full reload would remount the component and hide the bug). + await page.goto(url + '#?idSite=1&period=year&date=2012-08-09&category=General_Visitors&subcategory=General_Overview'); + await page.waitForSelector('#secondNavBar', { visible: true }); + await page.waitForNetworkIdle(); + + const hasResults = (selector) => $(selector).length > 0; + + // prime the quick search menu cache while in the default (Analytics) section + await enterSearchTerm('visitor'); + await page.waitForFunction(hasResults, {}, pagesResultSelector); + + // switch sections and wait for the new section to fully load before searching, so the result + // set is already complete when asserted (a stale cache surfaces the previous section's entries + // alongside the live cross-section ones) + await switchToAiInsightsSection(); + + // The dropdown still holds the pre-switch search results, and searchMenu is debounced, so force + // a known-empty state first (a non-matching term, wait for zero results); otherwise the assertion + // below could read the stale results before the post-switch search has re-run. + await page.focus('.quick-access input'); + await page.keyboard.type('zzqqxxnomatch'); + await page.waitForFunction((selector) => $(selector).length === 0, {}, pagesResultSelector); + + // now search for an entry that only exists in the Analytics section + await page.evaluate(() => { + const input = document.querySelector('.quick-access input'); + input.value = ''; + input.dispatchEvent(new Event('input', { bubbles: true })); + }); + await page.keyboard.type('visitor'); + await page.waitForFunction(hasResults, {}, pagesResultSelector); + + // menu results only (exclude the website results that share the same .result class) + const resultTexts = await page.evaluate((selector) => Array.from(document.querySelectorAll(selector)) + .filter((a) => !a.closest('.quickAccessMatomoSearch')) + .map((el) => el.textContent.trim()), pagesResultSelector); + + expect(resultTexts.length).to.be.above(0); + expect(resultTexts.length).to.equal(new Set(resultTexts).size); + }); +}); diff --git a/tests/UI/specs/ReportExporting_spec.js b/tests/UI/specs/ReportExporting_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..712d7b3af79f81a77ba38a2ed8dd3980ec2a347a --- /dev/null +++ b/tests/UI/specs/ReportExporting_spec.js @@ -0,0 +1,107 @@ +/*! + * Matomo - free/libre analytics platform + * + * Export link screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("ReportExporting", function () { + var baseUrl = "?module=Widgetize&action=iframe&idSite=1&period=year&date=2012-08-09&isFooterExpandedInDashboard=1", + referrersGetWebsitesUrl = baseUrl + "&moduleToWidgetize=Referrers&actionToWidgetize=getWebsites&filter_limit=5", + visitsSummaryGetUrl = baseUrl + "&moduleToWidgetize=VisitsSummary&actionToWidgetize=get&forceView=1&viewDataTable=graphEvolution"; + + function normalReportTest(format) { + it(`should export a normal report correctly when the ${format} export is chosen`, async function () { + if (await page.url() !== referrersGetWebsitesUrl) { + await page.goto(referrersGetWebsitesUrl); + await page.click('.activateExportSelection'); + } + + await page.waitForSelector('[name="format"] input[value="'+format+'"]'); + + await page.click('[name="format"] input[value="' + format + '"]'); + await page.click('[name="filter_limit_all"] input[value="no"]'); + await page.click('input[name="option_format_metrics"]'); + await page.evaluate(function () { + $('[name=filter_limit] input').val(100).trigger('change'); + }); + await page.waitForTimeout(250); + + var url = await page.evaluate(function () { + return $('#reportExport a.btn').attr('href'); + }); + var pageContents = await page.downloadUrl(url); + + expect.fileMatchesContent('Referrers.getWebsites_exported.' + format.toLowerCase() + '.txt', pageContents); + }); + } + + function evolutionReportTest(format) { + it(`should export an evolution graph report correctly when the ${format} export is chosen`, async function () { + if (await page.url() !== visitsSummaryGetUrl) { + await page.goto(visitsSummaryGetUrl); + await page.click('.activateExportSelection'); + } + + await page.waitForSelector('[name="format"] input[value="'+format+'"]'); + + await page.click('[name="format"] input[value="'+format+'"]'); + await page.click('[name="filter_limit_all"] input[value="no"]'); + await page.click('input[name="option_format_metrics"]'); + await page.evaluate(function(){ + $('[name=filter_limit] input').val(100).trigger('change'); + }); + await page.waitForTimeout(250); + + var url = await page.evaluate(function() { + return $('#reportExport a.btn').attr('href'); + }); + var pageContents = await page.downloadUrl(url); + + expect.fileMatchesContent('VisitsSummary.get_exported.' + format.toLowerCase() + '.txt', pageContents); + }); + } + + function rowEvolutionReportTest(format) { + it(`should export an row evolution graph report correctly when the ${format} export link is clicked`, async function () { + if (!page.url() || page.url().indexOf('popover') === -1) { + await page.goto(referrersGetWebsitesUrl); + + const row = await page.waitForSelector('tbody tr:first-child'); + await row.hover(); + + const icon = await page.waitForSelector('tbody tr:first-child a.actionRowEvolution'); + await icon.click(); + + await page.waitForSelector('.ui-dialog'); + await page.waitForNetworkIdle(); + + await page.click('.ui-dialog .activateExportSelection'); + } + + await page.waitForSelector('[name="format"] input[value="'+format+'"]'); + + await page.click('[name="format"] input[value="'+format+'"]'); + await page.click('[name="filter_limit_all"] input[value="no"]'); + await page.click('input[name="option_format_metrics"]'); + await page.evaluate(function(){ + $('[name=filter_limit] input').val(100).trigger('change'); + }); + await page.waitForTimeout(250); + + var url = await page.evaluate(function() { + return $('#reportExport a.btn').attr('href'); + }); + var pageContents = await page.downloadUrl(url); + + expect.fileMatchesContent('RowEvolution_exported.' + format.toLowerCase() + '.txt', pageContents); + }); + } + + var formats = ['CSV', 'TSV', 'XML', 'JSON']; + formats.forEach(normalReportTest); + formats.forEach(evolutionReportTest); + formats.forEach(rowEvolutionReportTest); +}); diff --git a/tests/UI/specs/RowEvolution_spec.js b/tests/UI/specs/RowEvolution_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..0d42778c505bf18b5b3e866774c643d177e506ba --- /dev/null +++ b/tests/UI/specs/RowEvolution_spec.js @@ -0,0 +1,205 @@ +/*! + * Matomo - free/libre analytics platform + * + * row evolution screenshot tests + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("RowEvolution", function () { + const viewDataTableUrl = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=week&date=2012-02-09&" + + "actionToWidgetize=getKeywords&viewDataTable=table&filter_limit=5"; + + const ecommerceItemReportWidgetized = "?module=Widgetize&action=iframe&moduleToWidgetize=Goals&actionToWidgetize=getItemsSku&idGoal=ecommerceAbandonedCart" + + "&idSite=1&period=year&date=2012-02-09&viewDataTable=ecommerceAbandonedCart&filter_limit=-1"; + + const waitForRowEvolutionAnnotations = async () => { + await page.waitForFunction("$('.ui-dialog .evolution-annotations > span').length > 0"); + }; + + const setThemeMode = async (themeMode) => { + await page.evaluate((mode) => { + window.piwik.setThemeMode(mode); + }, themeMode); + await page.waitForFunction((mode) => window.piwik.getThemeMode() === mode, {}, themeMode); + }; + + it('should load when icon clicked in ViewDataTable', async function() { + await page.goto(viewDataTableUrl); + await page.waitForSelector('tbody tr:first-child') + const row = await page.jQuery('tbody tr:contains("corruption")'); + await row.hover(); + + const icon = await page.jQuery('tbody tr:contains("corruption") a.actionRowEvolution'); + await icon.click(); + + await page.waitForSelector('.ui-dialog'); + await page.waitForNetworkIdle(); + await waitForRowEvolutionAnnotations(); + + const dialog = await page.$('.ui-dialog'); + expect(await dialog.screenshot()).to.matchImage('row_evolution'); + }); + + it('should change the metric shown when a metric sparkline row is clicked', async function() { + await page.click('table.metrics tr[data-i="1"]'); + await page.waitForNetworkIdle(); + + const dialog = await page.$('.ui-dialog'); + expect(await dialog.screenshot()).to.matchImage('row_evolution_other_metric'); + }); + + it('should show two serieses when a metric sparkline row is shift+clicked', async function() { + await page.keyboard.down('Shift'); + await page.click('table.metrics tr[data-i="2"]', ['shift']); + await page.keyboard.up('Shift'); + await page.waitForNetworkIdle(); + + const dialog = await page.$('.ui-dialog'); + expect(await dialog.screenshot()).to.matchImage('row_evolution_multiple_series'); + }); + + it('should load multi-row evolution correctly', async function() { + await page.evaluate(function() { + $('.rowevolution-startmulti').click(); + }); + await page.waitForFunction("$('.ui-dialog').length === 0"); + + const row = await page.waitForSelector('tbody tr:nth-child(2)'); + await row.hover(); + + const icon = await page.waitForSelector('tbody tr:nth-child(2) a.actionRowEvolution'); + await icon.click(); + + await page.waitForSelector('.ui-dialog'); + await page.waitForNetworkIdle(); + + const dialog = await page.$('.ui-dialog'); + await page.waitForNetworkIdle(); + expect(await dialog.screenshot()).to.matchImage('multirow_evolution'); + }); + + it('should display a different row evolution metric when the metric selection is changed', async function() { + await page.evaluate(function () { + $('select.multirowevoltion-metric').val($('select.multirowevoltion-metric option:nth-child(3)').val()).change(); + }); + + await page.waitForSelector('.ui-dialog'); + await page.waitForNetworkIdle(); + + const dialog = await page.$('.ui-dialog'); + expect(await dialog.screenshot()).to.matchImage('multirow_evolution_other_metric'); + }); + + it('should load row evolution for goals view', async function() { + await page.goto(viewDataTableUrl + '&forceView=1&viewDataTable=tableGoals'); + + await page.waitForSelector('tbody tr:first-child') + const row = await page.jQuery('tbody tr:contains("corruption")'); + await row.hover(); + + const icon = await page.jQuery('tbody tr:contains("corruption") a.actionRowEvolution'); + await icon.click(); + + const dialog = await page.waitForSelector('.ui-dialog'); + await page.waitForNetworkIdle(); + expect(await dialog.screenshot()).to.matchImage('row_evolution_goal_view'); + }); + + it('should load row evolution with goal metrics again when reloading the page url', async function() { + // page.reload() won't work with url hashes + const url = await page.evaluate('location.href'); + await page.goto('about:blank'); + await page.goto(url); + + await page.waitForSelector('.ui-dialog'); + await page.waitForNetworkIdle(); + + const dialog = await page.$('.ui-dialog'); + expect(await dialog.screenshot()).to.matchImage('row_evolution_goal_view_reload'); + }); + + it('should display row evolution for an ecommerce item report correctly', async function() { + await page.goto(ecommerceItemReportWidgetized); + const row = await page.waitForSelector('tbody tr:first-child'); + await row.hover(); + + const icon = await page.waitForSelector('tbody tr:first-child a.actionRowEvolution'); + await icon.click(); + + await page.waitForSelector('.ui-dialog', { visible: true }); + await page.waitForNetworkIdle(); + await waitForRowEvolutionAnnotations(); + + const dialog = await page.$('.ui-dialog'); + expect(await dialog.screenshot()).to.matchImage('row_evolution_ecommerce_item'); + }); + + it('should keep row evolution open when the theme changes live', async function() { + await page.goto(viewDataTableUrl); + await setThemeMode('light'); + + const row = await page.jQuery('tbody tr:contains("corruption")'); + await row.hover(); + const icon = await page.jQuery('tbody tr:contains("corruption") a.actionRowEvolution'); + await icon.click(); + + await setThemeMode('dark'); + await waitForRowEvolutionAnnotations(); + + const dialogCount = await page.evaluate(() => $('.ui-dialog').length); + const hasRowEvolution = await page.evaluate(() => $('.ui-dialog .rowevolution').length); + expect(dialogCount).to.be.equal(1); + expect(hasRowEvolution).to.be.equal(1); + + await setThemeMode('light'); + }); + + it('refuses to steer the popover request to a different module/action', async function() { + const attackerJson = JSON.stringify({ + module: 'CoreAdminHome', + action: 'setMailSettings', + mailHost: 'attacker.example', + force_api_session: 0, + format: 'json' + }); + const popoverPayload = 'RowAction:RowEvolution:Actions.getPageUrls:' + + encodeURIComponent(attackerJson) + ':attacker-label'; + const hashValue = encodeURIComponent(popoverPayload).replace(/%/g, '$'); + const attackUrl = '?module=CoreHome&action=index&idSite=1&period=day&date=yesterday' + + '#?popover=' + hashValue; + + const popoverRequests = []; + let listening = true; + const onRequest = (req) => { + if (!listening) { + return; + } + const url = req.url(); + if (url.indexOf('apiMethod=Actions.getPageUrls') !== -1) { + popoverRequests.push(url); + } + }; + page.on('request', onRequest); + + try { + await page.goto('about:blank'); + await page.goto(attackUrl); + await page.waitForNetworkIdle(); + } finally { + listening = false; + } + + expect(popoverRequests.length).to.be.above(0); + popoverRequests.forEach((url) => { + expect(url).to.contain('module=CoreHome'); + expect(url).to.contain('action=getRowEvolutionPopover'); + expect(url).to.not.contain('module=CoreAdminHome'); + expect(url).to.not.contain('action=setMailSettings'); + expect(url).to.not.contain('force_api_session=0'); + expect(url).to.not.match(/[?&]format=json(&|$)/); + expect(url).to.not.contain('mailHost='); + }); + }); +}); diff --git a/tests/UI/specs/SearchFiltersPersistence_spec.js b/tests/UI/specs/SearchFiltersPersistence_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..ba74cc1cf7af1c155816ccdc389fb4d515d97051 --- /dev/null +++ b/tests/UI/specs/SearchFiltersPersistence_spec.js @@ -0,0 +1,75 @@ +/*! + * Matomo - free/libre analytics platform + * + * ViewDataTable screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("SearchFilterPersistenceTest", function () { + var baseUrl = "?module=CoreHome&action=index&idSite=1&period=day&date=2012-08-09&category=General_Actions"; + var url1 = "&subcategory=Actions_SubmenuPagesEntry"; + var url2 = "&subcategory=Actions_SubmenuPagesExit"; + + it("should load correctly", async function () { + await page.goto(baseUrl + url1); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('load_ok'); + }); + + it("should search the table when a search string is entered and the search button clicked", async function () { + await page.click('.dataTableAction.searchAction'); + await page.focus('.searchAction .dataTableSearchInput'); + await page.keyboard.type('lo'); + await page.click('.searchAction .icon-search'); + await page.waitForNetworkIdle(); + await page.evaluate(() => document.activeElement.blur()); + await page.mouse.move(-10, -10); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('search_results'); + }); + + it("should persist the search term when date is moved", async function () { + await page.click('.periodSelector .move-period-next'); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('persisted_date'); + }); + + it("should persist column sorting when date is moved", async function () { + // click twice to sort ascending + await(await page.jQuery('th#sum_bandwidth', { waitFor: true })).click(); + await page.waitForNetworkIdle(); + await page.waitForTimeout(200); + await(await page.jQuery('th#sum_bandwidth', { waitFor: true })).click(); + await page.waitForNetworkIdle(); + await page.waitForTimeout(200); + + await page.click('.periodSelector .move-period-prev'); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('persisted_sorting'); + }); + + it("should persist the search term when segment is changed", async function () { + await page.click('.segmentationContainer'); + await(await page.jQuery('li[data-idsegment=3] .segname', { waitFor: true })).click(); + await page.waitForNetworkIdle(); + await page.evaluate(() => document.activeElement.blur()); + await page.mouse.move(-10, -10); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('persisted_segment'); + }); + + it("should reset the search term when page is changed there and back", async function () { + await page.goto(baseUrl + url1); + await page.waitForNetworkIdle(); + await page.goto(baseUrl + url2); + await page.waitForNetworkIdle(); + await page.goto(baseUrl + url1); + await page.waitForNetworkIdle(); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('load_ok'); + }); +}); diff --git a/tests/UI/specs/SiteSelector_spec.js b/tests/UI/specs/SiteSelector_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..4301f706db4cba0d74c4bdd0161d1a66c15c20a8 --- /dev/null +++ b/tests/UI/specs/SiteSelector_spec.js @@ -0,0 +1,74 @@ +/*! + * Matomo - free/libre analytics platform + * + * Site selector screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("SiteSelector", function () { + const selectorToCapture = '.siteSelector,.siteSelector .dropdown'; + const url = "?module=UsersManager&action=userSettings&idSite=1&period=day&date=yesterday"; + + it("should load correctly", async function() { + await page.goto(url); + await page.waitForNetworkIdle(); + + dialog = await page.$(selectorToCapture); + await page.waitForTimeout(500); + expect(await dialog.screenshot()).to.matchImage('loaded'); + }); + + it("should show tooltip when hovering the element", async function() { + await page.hover('.sites_autocomplete .title'); + const tooltip = await page.waitForSelector('.ui-tooltip', { visible: true }) + + expect(await tooltip.getProperty('textContent')).to.match(/Choose a website, currently selected website: + // | + d._modulePrefixes[module] = { name: module, value: prefix }; + } + + dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){ + // summary: + // Declares translated resources and loads them if necessary, in the + // same style as dojo.require. Contents of the resource bundle are + // typically strings, but may be any name/value pair, represented in + // JSON format. See also dojo.i18n.getLocalization. + // moduleName: + // name of the package containing the "nls" directory in which the + // bundle is found + // bundleName: + // bundle name, i.e. the filename without the '.js' suffix + // locale: + // the locale to load (optional) By default, the browser's user + // locale as defined by dojo.locale + // availableFlatLocales: + // A comma-separated list of the available, flattened locales for this + // bundle. This argument should only be set by the build process. + // description: + // Load translated resource bundles provided underneath the "nls" + // directory within a package. Translated resources may be located in + // different packages throughout the source tree. For example, a + // particular widget may define one or more resource bundles, + // structured in a program as follows, where moduleName is + // mycode.mywidget and bundleNames available include bundleone and + // bundletwo: + // + // | ... + // | mycode/ + // | mywidget/ + // | nls/ + // | bundleone.js (the fallback translation, English in this example) + // | bundletwo.js (also a fallback translation) + // | de/ + // | bundleone.js + // | bundletwo.js + // | de-at/ + // | bundleone.js + // | en/ + // | (empty; use the fallback translation) + // | en-us/ + // | bundleone.js + // | en-gb/ + // | bundleone.js + // | es/ + // | bundleone.js + // | bundletwo.js + // | ...etc + // | ... + // + // Each directory is named for a locale as specified by RFC 3066, + // (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase. + // Note that the two bundles in the example do not define all the + // same variants. For a given locale, bundles will be loaded for + // that locale and all more general locales above it, including a + // fallback at the root directory. For example, a declaration for + // the "de-at" locale will first load `nls/de-at/bundleone.js`, + // then `nls/de/bundleone.js` and finally `nls/bundleone.js`. The + // data will be flattened into a single Object so that lookups + // will follow this cascading pattern. An optional build step can + // preload the bundles to avoid data redundancy and the multiple + // network hits normally required to load these resources. + + d.require("dojo.i18n"); + d.i18n._requireLocalization.apply(d.hostenv, arguments); + }; + + var ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"); + var ire = new RegExp("^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$"); + + dojo._Url = function(/*dojo._Url||String...*/){ + // summary: + // Constructor to create an object representing a URL. + // It is marked as private, since we might consider removing + // or simplifying it. + // description: + // Each argument is evaluated in order relative to the next until + // a canonical uri is produced. To get an absolute Uri relative to + // the current document use: + // new dojo._Url(document.baseURI, url) + + var n = null; + + // TODO: support for IPv6, see RFC 2732 + var _a = arguments; + var uri = [_a[0]]; + // resolve uri components relative to each other + for(var i = 1; i<_a.length; i++){ + if(!_a[i]){ continue; } + + // Safari doesn't support this.constructor so we have to be explicit + // FIXME: Tracked (and fixed) in Webkit bug 3537. + // http://bugs.webkit.org/show_bug.cgi?id=3537 + var relobj = new d._Url(_a[i]+""); + var uriobj = new d._Url(uri[0]+""); + + if( + relobj.path == "" && + !relobj.scheme && + !relobj.authority && + !relobj.query + ){ + if(relobj.fragment != n){ + uriobj.fragment = relobj.fragment; + } + relobj = uriobj; + }else if(!relobj.scheme){ + relobj.scheme = uriobj.scheme; + + if(!relobj.authority){ + relobj.authority = uriobj.authority; + + if(relobj.path.charAt(0) != "/"){ + var path = uriobj.path.substring(0, + uriobj.path.lastIndexOf("/") + 1) + relobj.path; + + var segs = path.split("/"); + for(var j = 0; j < segs.length; j++){ + if(segs[j] == "."){ + // flatten "./" references + if(j == segs.length - 1){ + segs[j] = ""; + }else{ + segs.splice(j, 1); + j--; + } + }else if(j > 0 && !(j == 1 && segs[0] == "") && + segs[j] == ".." && segs[j-1] != ".."){ + // flatten "../" references + if(j == (segs.length - 1)){ + segs.splice(j, 1); + segs[j - 1] = ""; + }else{ + segs.splice(j - 1, 2); + j -= 2; + } + } + } + relobj.path = segs.join("/"); + } + } + } + + uri = []; + if(relobj.scheme){ + uri.push(relobj.scheme, ":"); + } + if(relobj.authority){ + uri.push("//", relobj.authority); + } + uri.push(relobj.path); + if(relobj.query){ + uri.push("?", relobj.query); + } + if(relobj.fragment){ + uri.push("#", relobj.fragment); + } + } + + this.uri = uri.join(""); + + // break the uri into its main components + var r = this.uri.match(ore); + + this.scheme = r[2] || (r[1] ? "" : n); + this.authority = r[4] || (r[3] ? "" : n); + this.path = r[5]; // can never be undefined + this.query = r[7] || (r[6] ? "" : n); + this.fragment = r[9] || (r[8] ? "" : n); + + if(this.authority != n){ + // server based naming authority + r = this.authority.match(ire); + + this.user = r[3] || n; + this.password = r[4] || n; + this.host = r[5]; + this.port = r[7] || n; + } + } + + dojo._Url.prototype.toString = function(){ return this.uri; }; + + dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ + // summary: + // Returns a `dojo._Url` object relative to a module. + // example: + // | var pngPath = dojo.moduleUrl("acme","images/small.png"); + // | console.dir(pngPath); // list the object properties + // | // create an image and set it's source to pngPath's value: + // | var img = document.createElement("img"); + // | // NOTE: we assign the string representation of the url object + // | img.src = pngPath.toString(); + // | // add our image to the document + // | dojo.body().appendChild(img); + // example: + // you may de-reference as far as you like down the package + // hierarchy. This is sometimes handy to avoid lenghty relative + // urls or for building portable sub-packages. In this example, + // the `acme.widget` and `acme.util` directories may be located + // under different roots (see `dojo.registerModulePath`) but the + // the modules which reference them can be unaware of their + // relative locations on the filesystem: + // | // somewhere in a configuration block + // | dojo.registerModulePath("acme.widget", "../../acme/widget"); + // | dojo.registerModulePath("acme.util", "../../util"); + // | + // | // ... + // | + // | // code in a module using acme resources + // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); + // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); + + var loc = d._getModuleSymbols(module).join('/'); + if(!loc){ return null; } + if(loc.lastIndexOf("/") != loc.length-1){ + loc += "/"; + } + + //If the path is an absolute path (starts with a / or is on another + //domain/xdomain) then don't add the baseUrl. + var colonIndex = loc.indexOf(":"); + if(loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > loc.indexOf("/"))){ + loc = d.baseUrl + loc; + } + + return new d._Url(loc, url); // String + } +})(); + +/*===== +dojo.isBrowser = { + // example: + // | if(dojo.isBrowser){ ... } +}; + +dojo.isFF = { + // example: + // | if(dojo.isFF > 1){ ... } +}; + +dojo.isIE = { + // example: + // | if(dojo.isIE > 6){ + // | // we are IE7 + // | } +}; + +dojo.isSafari = { + // example: + // | if(dojo.isSafari){ ... } + // example: + // Detect iPhone: + // | if(dojo.isSafari && (navigator.userAgent.indexOf("iPhone") < 0)){ + // | // we are iPhone. iPod touch reports "iPod" above + // | } +}; + +dojo = { + // isBrowser: Boolean + // True if the client is a web-browser + isBrowser: true, + // isFF: Number + // Greater than zero if client is FireFox. 0 otherwise. Corresponds to + // major detected FireFox version (1.5, 2, 3, etc.) + isFF: 2, + // isIE: Number + // Greater than zero if client is MSIE(PC). 0 otherwise. Corresponds to + // major detected IE version (6, 7, 8, etc.) + isIE: 6, + // isKhtml: Number + // Greater than zero if client is a KTHML-derived browser (Konqueror, + // Safari, etc.). 0 otherwise. Corresponds to major detected version. + isKhtml: 0, + // isMozilla: Number + // Greater than zero if client is a Mozilla-based browser (Firefox, + // SeaMonkey). 0 otherwise. Corresponds to major detected version. + isMozilla: 0, + // isOpera: Number + // Greater than zero if client is Opera. 0 otherwise. Corresponds to + // major detected version. + isOpera: 0, + // isSafari: Number + // Greater than zero if client is Safari or iPhone. 0 otherwise. + isSafari: 0 +} +=====*/ + +if(typeof window != 'undefined'){ + dojo.isBrowser = true; + dojo._name = "browser"; + + // attempt to figure out the path to dojo if it isn't set in the config + (function(){ + var d = dojo; + // this is a scope protection closure. We set browser versions and grab + // the URL we were loaded from here. + + // grab the node we were loaded from + if(document && document.getElementsByTagName){ + var scripts = document.getElementsByTagName("script"); + var rePkg = /dojo(\.xd)?\.js(\W|$)/i; + for(var i = 0; i < scripts.length; i++){ + var src = scripts[i].getAttribute("src"); + if(!src){ continue; } + var m = src.match(rePkg); + if(m){ + // find out where we came from + if(!d.config.baseUrl){ + d.config.baseUrl = src.substring(0, m.index); + } + // and find out if we need to modify our behavior + var cfg = scripts[i].getAttribute("djConfig"); + if(cfg){ + var cfgo = eval("({ "+cfg+" })"); + for(var x in cfgo){ + dojo.config[x] = cfgo[x]; + } + } + break; // "first Dojo wins" + } + } + } + d.baseUrl = d.config.baseUrl; + + // fill in the rendering support information in dojo.render.* + var n = navigator; + var dua = n.userAgent; + var dav = n.appVersion; + var tv = parseFloat(dav); + + d.isOpera = (dua.indexOf("Opera") >= 0) ? tv : 0; + // safari detection derived from: + // http://developer.apple.com/internet/safari/faq.html#anchor2 + // http://developer.apple.com/internet/safari/uamatrix.html + var idx = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0); + if(idx){ + // try to grab the explicit Safari version first. If we don't get + // one, look for 419.3+ as the indication that we're on something + // "Safari 3-ish". Lastly, default to "Safari 2" handling. + d.isSafari = parseFloat(dav.split("Version/")[1]) || ( ( parseFloat(dav.substr(idx+7)) >= 419.3 ) ? 3 : 2 ) || 2; + } + d.isAIR = (dua.indexOf("AdobeAIR") >= 0) ? 1 : 0; + d.isKhtml = (dav.indexOf("Konqueror") >= 0 || d.isSafari) ? tv : 0; + d.isMozilla = d.isMoz = (dua.indexOf("Gecko") >= 0 && !d.isKhtml) ? tv : 0; + d.isFF = d.isIE = 0; + if(d.isMoz){ + d.isFF = parseFloat(dua.split("Firefox/")[1]) || 0; + } + if(document.all && !d.isOpera){ + d.isIE = parseFloat(dav.split("MSIE ")[1]) || 0; + } + + //Workaround to get local file loads of dojo to work on IE 7 + //by forcing to not use native xhr. + if(dojo.isIE && window.location.protocol === "file:"){ + dojo.config.ieForceActiveXXhr=true; + } + + var cm = document.compatMode; + d.isQuirks = cm == "BackCompat" || cm == "QuirksMode" || d.isIE < 6; + + // TODO: is the HTML LANG attribute relevant? + d.locale = dojo.config.locale || (d.isIE ? n.userLanguage : n.language).toLowerCase(); + + // These are in order of decreasing likelihood; this will change in time. + d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; + + d._xhrObj = function(){ + // summary: + // does the work of portably generating a new XMLHTTPRequest + // object. + var http = null; + var last_e = null; + if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){ + try{ http = new XMLHttpRequest(); }catch(e){} + } + if(!http){ + for(var i=0; i<3; ++i){ + var progid = d._XMLHTTP_PROGIDS[i]; + try{ + http = new ActiveXObject(progid); + }catch(e){ + last_e = e; + } + + if(http){ + d._XMLHTTP_PROGIDS = [progid]; // so faster next time + break; + } + } + } + + if(!http){ + throw new Error("XMLHTTP not available: "+last_e); + } + + return http; // XMLHTTPRequest instance + } + + d._isDocumentOk = function(http){ + var stat = http.status || 0; + return (stat >= 200 && stat < 300) || // Boolean + stat == 304 || // allow any 2XX response code + stat == 1223 || // get it out of the cache + (!stat && (location.protocol=="file:" || location.protocol=="chrome:") ); // Internet Explorer mangled the status code + } + + //See if base tag is in use. + //This is to fix http://trac.dojotoolkit.org/ticket/3973, + //but really, we need to find out how to get rid of the dojo._Url reference + //below and still have DOH work with the dojo.i18n test following some other + //test that uses the test frame to load a document (trac #2757). + //Opera still has problems, but perhaps a larger issue of base tag support + //with XHR requests (hasBase is true, but the request is still made to document + //path, not base path). + var owloc = window.location+""; + var base = document.getElementsByTagName("base"); + var hasBase = (base && base.length > 0); + + d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){ + // summary: Read the contents of the specified uri and return those contents. + // uri: + // A relative or absolute uri. If absolute, it still must be in + // the same "domain" as we are. + // fail_ok: + // Default false. If fail_ok and loading fails, return null + // instead of throwing. + // returns: The response text. null is returned when there is a + // failure and failure is okay (an exception otherwise) + + // alert("_getText: " + uri); + + // NOTE: must be declared before scope switches ie. this._xhrObj() + var http = this._xhrObj(); + + if(!hasBase && dojo._Url){ + uri = (new dojo._Url(owloc, uri)).toString(); + } + /* + console.debug("_getText:", uri); + console.debug(window.location+""); + alert(uri); + */ + + if(d.config.cacheBust){ + uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,""); + } + + http.open('GET', uri, false); + try{ + http.send(null); + // alert(http); + if(!d._isDocumentOk(http)){ + var err = Error("Unable to load "+uri+" status:"+ http.status); + err.status = http.status; + err.responseText = http.responseText; + throw err; + } + }catch(e){ + if(fail_ok){ return null; } // null + // rethrow the exception + throw e; + } + return http.responseText; // String + } + })(); + + dojo._initFired = false; + // BEGIN DOMContentLoaded, from Dean Edwards (http://dean.edwards.name/weblog/2006/06/again/) + dojo._loadInit = function(e){ + dojo._initFired = true; + // allow multiple calls, only first one will take effect + // A bug in khtml calls events callbacks for document for event which isnt supported + // for example a created contextmenu event calls DOMContentLoaded, workaround + var type = (e && e.type) ? e.type.toLowerCase() : "load"; + if(arguments.callee.initialized || (type != "domcontentloaded" && type != "load")){ return; } + arguments.callee.initialized = true; + if("_khtmlTimer" in dojo){ + clearInterval(dojo._khtmlTimer); + delete dojo._khtmlTimer; + } + + if(dojo._inFlightCount == 0){ + dojo._modulesLoaded(); + } + } + + dojo._fakeLoadInit = function(){ + dojo._loadInit({type: "load"}); + } + + if(!dojo.config.afterOnLoad){ + // START DOMContentLoaded + // Mozilla and Opera 9 expose the event we could use + if(document.addEventListener){ + // NOTE: + // due to a threading issue in Firefox 2.0, we can't enable + // DOMContentLoaded on that platform. For more information, see: + // http://trac.dojotoolkit.org/ticket/1704 + if(dojo.isOpera || dojo.isFF >= 3 || (dojo.isMoz && dojo.config.enableMozDomContentLoaded === true)){ + document.addEventListener("DOMContentLoaded", dojo._loadInit, null); + } + + // mainly for Opera 8.5, won't be fired if DOMContentLoaded fired already. + // also used for Mozilla because of trac #1640 + window.addEventListener("load", dojo._loadInit, null); + } + + if(dojo.isAIR){ + window.addEventListener("load", dojo._loadInit, null); + }else if(/(WebKit|khtml)/i.test(navigator.userAgent)){ // sniff + dojo._khtmlTimer = setInterval(function(){ + if(/loaded|complete/.test(document.readyState)){ + dojo._loadInit(); // call the onload handler + } + }, 10); + } + // END DOMContentLoaded + } + + (function(){ + var _w = window; + var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){ + // summary: + // non-destructively adds the specified function to the node's + // evtName handler. + // evtName: should be in the form "onclick" for "onclick" handlers. + // Make sure you pass in the "on" part. + var oldHandler = _w[evtName] || function(){}; + _w[evtName] = function(){ + fp.apply(_w, arguments); + oldHandler.apply(_w, arguments); + }; + }; + + if(dojo.isIE){ + // for Internet Explorer. readyState will not be achieved on init + // call, but dojo doesn't need it however, we'll include it + // because we don't know if there are other functions added that + // might. Note that this has changed because the build process + // strips all comments -- including conditional ones. + if(!dojo.config.afterOnLoad){ + document.write('' + + '' + ); + } + + // IE WebControl hosted in an application can fire "beforeunload" and "unload" + // events when control visibility changes, causing Dojo to unload too soon. The + // following code fixes the problem + // Reference: http://support.microsoft.com/default.aspx?scid=kb;en-us;199155 + var _unloading = true; + _handleNodeEvent("onbeforeunload", function(){ + _w.setTimeout(function(){ _unloading = false; }, 0); + }); + _handleNodeEvent("onunload", function(){ + if(_unloading){ dojo.unloaded(); } + }); + + try{ + document.namespaces.add("v","urn:schemas-microsoft-com:vml"); + document.createStyleSheet().addRule("v\\:*", "behavior:url(#default#VML)"); + }catch(e){} + }else{ + // FIXME: dojo.unloaded requires dojo scope, so using anon function wrapper. + _handleNodeEvent("onbeforeunload", function() { dojo.unloaded(); }); + } + + })(); + + /* + OpenAjax.subscribe("OpenAjax", "onload", function(){ + if(dojo._inFlightCount == 0){ + dojo._modulesLoaded(); + } + }); + + OpenAjax.subscribe("OpenAjax", "onunload", function(){ + dojo.unloaded(); + }); + */ +} //if (typeof window != 'undefined') + +//Register any module paths set up in djConfig. Need to do this +//in the hostenvs since hostenv_browser can read djConfig from a +//script tag's attribute. +(function(){ + var mp = dojo.config["modulePaths"]; + if(mp){ + for(var param in mp){ + dojo.registerModulePath(param, mp[param]); + } + } +})(); + +//Load debug code if necessary. +if(dojo.config.isDebug){ + dojo.require("dojo._firebug.firebug"); +} + +if(dojo.config.debugAtAllCosts){ + dojo.config.useXDomain = true; + dojo.require("dojo._base._loader.loader_xd"); + dojo.require("dojo._base._loader.loader_debug"); + dojo.require("dojo.i18n"); +} + +if(!dojo._hasResource["dojo._base.lang"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.lang"] = true; +dojo.provide("dojo._base.lang"); + +// Crockford (ish) functions + +dojo.isString = function(/*anything*/ it){ + // summary: + // Return true if it is a String + return !!arguments.length && it != null && (typeof it == "string" || it instanceof String); // Boolean +} + +dojo.isArray = function(/*anything*/ it){ + // summary: + // Return true if it is an Array + return it && (it instanceof Array || typeof it == "array"); // Boolean +} + +/*===== +dojo.isFunction = function(it){ + // summary: Return true if it is a Function + // it: anything + // return: Boolean +} +=====*/ + +dojo.isFunction = (function(){ + var _isFunction = function(/*anything*/ it){ + return it && (typeof it == "function" || it instanceof Function); // Boolean + }; + + return dojo.isSafari ? + // only slow this down w/ gratuitious casting in Safari since it's what's b0rken + function(/*anything*/ it){ + if(typeof it == "function" && it == "[object NodeList]"){ return false; } + return _isFunction(it); // Boolean + } : _isFunction; +})(); + +dojo.isObject = function(/*anything*/ it){ + // summary: + // Returns true if it is a JavaScript object (or an Array, a Function + // or null) + return it !== undefined && + (it === null || typeof it == "object" || dojo.isArray(it) || dojo.isFunction(it)); // Boolean +} + +dojo.isArrayLike = function(/*anything*/ it){ + // summary: + // similar to dojo.isArray() but more permissive + // description: + // Doesn't strongly test for "arrayness". Instead, settles for "isn't + // a string or number and has a length property". Arguments objects + // and DOM collections will return true when passed to + // dojo.isArrayLike(), but will return false when passed to + // dojo.isArray(). + // return: + // If it walks like a duck and quicks like a duck, return `true` + var d = dojo; + return it && it !== undefined && + // keep out built-in constructors (Number, String, ...) which have length + // properties + !d.isString(it) && !d.isFunction(it) && + !(it.tagName && it.tagName.toLowerCase() == 'form') && + (d.isArray(it) || isFinite(it.length)); // Boolean +} + +dojo.isAlien = function(/*anything*/ it){ + // summary: + // Returns true if it is a built-in function or some other kind of + // oddball that *should* report as a function but doesn't + return it && !dojo.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean +} + +dojo.extend = function(/*Object*/ constructor, /*Object...*/ props){ + // summary: + // Adds all properties and methods of props to constructor's + // prototype, making them available to all instances created with + // constructor. + for(var i=1, l=arguments.length; i 2){ + return dojo._hitchArgs.apply(dojo, arguments); // Function + } + if(!method){ + method = scope; + scope = null; + } + if(dojo.isString(method)){ + scope = scope || dojo.global; + if(!scope[method]){ throw(['dojo.hitch: scope["', method, '"] is null (scope="', scope, '")'].join('')); } + return function(){ return scope[method].apply(scope, arguments || []); }; // Function + } + return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function +} + +/*===== +dojo.delegate = function(obj, props){ + // summary: + // returns a new object which "looks" to obj for properties which it + // does not have a value for. Optionally takes a bag of properties to + // seed the returned object with initially. + // description: + // This is a small implementaton of the Boodman/Crockford delegation + // pattern in JavaScript. An intermediate object constructor mediates + // the prototype chain for the returned object, using it to delegate + // down to obj for property lookup when object-local lookup fails. + // This can be thought of similarly to ES4's "wrap", save that it does + // not act on types but rather on pure objects. + // obj: + // The object to delegate to for properties not found directly on the + // return object or in props. + // props: + // an object containing properties to assign to the returned object + // returns: + // an Object of anonymous type + // example: + // | var foo = { bar: "baz" }; + // | var thinger = dojo.delegate(foo, { thud: "xyzzy"}); + // | thinger.bar == "baz"; // delegated to foo + // | foo.thud == undefined; // by definition + // | thinger.thud == "xyzzy"; // mixed in from props + // | foo.bar = "thonk"; + // | thinger.bar == "thonk"; // still delegated to foo's bar +} +=====*/ + +dojo.delegate = dojo._delegate = function(obj, props){ + + // boodman/crockford delegation + function TMP(){}; + TMP.prototype = obj; + var tmp = new TMP(); + if(props){ + dojo.mixin(tmp, props); + } + return tmp; // Object +} + +dojo.partial = function(/*Function|String*/method /*, ...*/){ + // summary: + // similar to hitch() except that the scope object is left to be + // whatever the execution context eventually becomes. + // description: + // Calling dojo.partial is the functional equivalent of calling: + // | dojo.hitch(null, funcName, ...); + var arr = [ null ]; + return dojo.hitch.apply(dojo, arr.concat(dojo._toArray(arguments))); // Function +} + +dojo._toArray = function(/*Object*/obj, /*Number?*/offset, /*Array?*/ startWith){ + // summary: + // Converts an array-like object (i.e. arguments, DOMCollection) to an + // array. Returns a new Array with the elements of obj. + // obj: + // the object to "arrayify". We expect the object to have, at a + // minimum, a length property which corresponds to integer-indexed + // properties. + // offset: + // the location in obj to start iterating from. Defaults to 0. + // Optional. + // startWith: + // An array to pack with the properties of obj. If provided, + // properties in obj are appended at the end of startWith and + // startWith is the returned array. + var arr = startWith||[]; + for(var x = offset || 0; x < obj.length; x++){ + arr.push(obj[x]); + } + return arr; // Array +} + +dojo.clone = function(/*anything*/ o){ + // summary: + // Clones objects (including DOM nodes) and all children. + // Warning: do not clone cyclic structures. + if(!o){ return o; } + if(dojo.isArray(o)){ + var r = []; + for(var i = 0; i < o.length; ++i){ + r.push(dojo.clone(o[i])); + } + return r; // Array + } + if(!dojo.isObject(o)){ + return o; /*anything*/ + } + if(o.nodeType && o.cloneNode){ // isNode + return o.cloneNode(true); // Node + } + if(o instanceof Date){ + return new Date(o.getTime()); // Date + } + // Generic objects + var r = new o.constructor(); // specific to dojo.declare()'d classes! + for(var i in o){ + if(!(i in r) || r[i] != o[i]){ + r[i] = dojo.clone(o[i]); + } + } + return r; // Object +} + +dojo.trim = function(/*String*/ str){ + // summary: + // trims whitespaces from both sides of the string + // description: + // This version of trim() was selected for inclusion into the base due + // to its compact size and relatively good performance (see Steven + // Levithan's blog: + // http://blog.stevenlevithan.com/archives/faster-trim-javascript). + // The fastest but longest version of this function is located at + // dojo.string.trim() + return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); // String +} + +} + +if(!dojo._hasResource["dojo._base.declare"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.declare"] = true; +dojo.provide("dojo._base.declare"); + +// this file courtesy of the TurboAjax group, licensed under a Dojo CLA + +dojo.declare = function(/*String*/ className, /*Function|Function[]*/ superclass, /*Object*/ props){ + // summary: + // Create a feature-rich constructor from compact notation + // className: + // The name of the constructor (loosely, a "class") + // stored in the "declaredClass" property in the created prototype + // superclass: + // May be null, a Function, or an Array of Functions. If an array, + // the first element is used as the prototypical ancestor and + // any following Functions become mixin ancestors. + // props: + // An object whose properties are copied to the + // created prototype. + // Add an instance-initialization function by making it a property + // named "constructor". + // description: + // Create a constructor using a compact notation for inheritance and + // prototype extension. + // + // All superclasses (including mixins) must be Functions (not simple Objects). + // + // Mixin ancestors provide a type of multiple inheritance. Prototypes of mixin + // ancestors are copied to the new class: changes to mixin prototypes will + // not affect classes to which they have been mixed in. + // + // "className" is cached in "declaredClass" property of the new class. + // + // example: + // | dojo.declare("my.classes.bar", my.classes.foo, { + // | // properties to be added to the class prototype + // | someValue: 2, + // | // initialization function + // | constructor: function(){ + // | this.myComplicatedObject = new ReallyComplicatedObject(); + // | }, + // | // other functions + // | someMethod: function(){ + // | doStuff(); + // | } + // | ); + + // process superclass argument + // var dd=dojo.declare, mixins=null; + var dd = arguments.callee, mixins; + if(dojo.isArray(superclass)){ + mixins = superclass; + superclass = mixins.shift(); + } + // construct intermediate classes for mixins + if(mixins){ + dojo.forEach(mixins, function(m){ + if(!m){ throw(className + ": mixin #" + i + " is null"); } // It's likely a required module is not loaded + superclass = dd._delegate(superclass, m); + }); + } + // prepare values + var init = (props||0).constructor, ctor = dd._delegate(superclass), fn; + // name methods (experimental) + for(var i in props){ if(dojo.isFunction(fn = props[i]) && !0[i]){fn.nom = i;} } // 0[i] checks Object.prototype + // decorate prototype + dojo.extend(ctor, {declaredClass: className, _constructor: init, preamble: null}, props || 0); + // special help for IE + ctor.prototype.constructor = ctor; + // create named reference + return dojo.setObject(className, ctor); // Function +}; + +dojo.mixin(dojo.declare, { + _delegate: function(base, mixin){ + var bp = (base||0).prototype, mp = (mixin||0).prototype; + // fresh constructor, fresh prototype + var ctor = dojo.declare._makeCtor(); + // cache ancestry + dojo.mixin(ctor, {superclass: bp, mixin: mp, extend: dojo.declare._extend}); + // chain prototypes + if(base){ctor.prototype = dojo._delegate(bp);} + // add mixin and core + dojo.extend(ctor, dojo.declare._core, mp||0, {_constructor: null, preamble: null}); + // special help for IE + ctor.prototype.constructor = ctor; + // name this class for debugging + ctor.prototype.declaredClass = (bp||0).declaredClass + '_' + (mp||0).declaredClass; + return ctor; + }, + _extend: function(props){ + for(var i in props){ if(dojo.isFunction(fn=props[i]) && !0[i]){fn.nom=i;} } + dojo.extend(this, props); + }, + _makeCtor: function(){ + // we have to make a function, but don't want to close over anything + return function(){ this._construct(arguments); }; + }, + _core: { + _construct: function(args){ + var c=args.callee, s=c.superclass, ct=s&&s.constructor, m=c.mixin, mct=m&&m.constructor, a=args, ii, fn; + // side-effect of = used on purpose here, lint may complain, don't try this at home + if(a[0]){ + // FIXME: preambles for each mixin should be allowed + // FIXME: + // should we allow the preamble here NOT to modify the + // default args, but instead to act on each mixin + // independently of the class instance being constructed + // (for impedence matching)? + + // allow any first argument w/ a "preamble" property to act as a + // class preamble (not exclusive of the prototype preamble) + if(/*dojo.isFunction*/((fn = a[0].preamble))){ + a = fn.apply(this, a) || a; + } + } + // prototype preamble + if((fn = c.prototype.preamble)){a = fn.apply(this, a) || a;} + // FIXME: + // need to provide an optional prototype-settable + // "_explicitSuper" property which disables this + // initialize superclass + if(ct&&ct.apply){ct.apply(this, a);} + // initialize mixin + if(mct&&mct.apply){mct.apply(this, a);} + // initialize self + if((ii=c.prototype._constructor)){ii.apply(this, args);} + // post construction + if(this.constructor.prototype==c.prototype && (ct=this.postscript)){ ct.apply(this, args); } + }, + _findMixin: function(mixin){ + var c = this.constructor, p, m; + while(c){ + p = c.superclass; + m = c.mixin; + if(m==mixin || (m instanceof mixin.constructor)){return p;} + if(m && (m=m._findMixin(mixin))){return m;} + c = p && p.constructor; + } + }, + _findMethod: function(name, method, ptype, has){ + // consciously trading readability for bytes and speed in this low-level method + var p=ptype, c, m, f; + do{ + c = p.constructor; + m = c.mixin; + // find method by name in our mixin ancestor + if(m && (m=this._findMethod(name, method, m, has))){return m;} + // if we found a named method that either exactly-is or exactly-is-not 'method' + if((f=p[name])&&(has==(f==method))){return p;} + // ascend chain + p = c.superclass; + }while(p); + // if we couldn't find an ancestor in our primary chain, try a mixin chain + return !has && (p=this._findMixin(ptype)) && this._findMethod(name, method, p, has); + }, + inherited: function(name, args, newArgs){ + // optionalize name argument (experimental) + var a = arguments; + if(!dojo.isString(a[0])){newArgs=args; args=name; name=args.callee.nom;} + a = newArgs||args; + var c = args.callee, p = this.constructor.prototype, fn, mp; + // if not an instance override + if(this[name] != c || p[name] == c){ + mp = this._findMethod(name, c, p, true); + if(!mp){throw(this.declaredClass + ': inherited method "' + name + '" mismatch');} + p = this._findMethod(name, c, mp, false); + } + fn = p && p[name]; + if(!fn){throw(mp.declaredClass + ': inherited method "' + name + '" not found');} + // if the function exists, invoke it in our scope + return fn.apply(this, a); + } + } +}); + +} + +if(!dojo._hasResource["dojo._base.connect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.connect"] = true; +dojo.provide("dojo._base.connect"); + +// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA + +// low-level delegation machinery +dojo._listener = { + // create a dispatcher function + getDispatcher: function(){ + // following comments pulled out-of-line to prevent cloning them + // in the returned function. + // - indices (i) that are really in the array of listeners (ls) will + // not be in Array.prototype. This is the 'sparse array' trick + // that keeps us safe from libs that take liberties with built-in + // objects + // - listener is invoked with current scope (this) + return function(){ + var ap=Array.prototype, c=arguments.callee, ls=c._listeners, t=c.target; + // return value comes from original target function + var r=t && t.apply(this, arguments); + // invoke listeners after target function + for(var i in ls){ + if(!(i in ap)){ + ls[i].apply(this, arguments); + } + } + // return value comes from original target function + return r; + } + }, + // add a listener to an object + add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ + // Whenever 'method' is invoked, 'listener' will have the same scope. + // Trying to supporting a context object for the listener led to + // complexity. + // Non trivial to provide 'once' functionality here + // because listener could be the result of a dojo.hitch call, + // in which case two references to the same hitch target would not + // be equivalent. + source = source || dojo.global; + // The source method is either null, a dispatcher, or some other function + var f = source[method]; + // Ensure a dispatcher + if(!f||!f._listeners){ + var d = dojo._listener.getDispatcher(); + // original target function is special + d.target = f; + // dispatcher holds a list of listeners + d._listeners = []; + // redirect source to dispatcher + f = source[method] = d; + } + // The contract is that a handle is returned that can + // identify this listener for disconnect. + // + // The type of the handle is private. Here is it implemented as Integer. + // DOM event code has this same contract but handle is Function + // in non-IE browsers. + // + // We could have separate lists of before and after listeners. + return f._listeners.push(listener) ; /*Handle*/ + }, + // remove a listener from an object + remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){ + var f = (source||dojo.global)[method]; + // remember that handle is the index+1 (0 is not a valid handle) + if(f && f._listeners && handle--){ + delete f._listeners[handle]; + } + } +}; + +// Multiple delegation for arbitrary methods. + +// This unit knows nothing about DOM, +// but we include DOM aware +// documentation and dontFix +// argument here to help the autodocs. +// Actual DOM aware code is in event.js. + +dojo.connect = function(/*Object|null*/ obj, + /*String*/ event, + /*Object|null*/ context, + /*String|Function*/ method, + /*Boolean*/ dontFix){ + // summary: + // Create a link that calls one function when another executes. + // + // description: + // Connects method to event, so that after event fires, method + // does too. All connected functions are passed the same arguments as + // the event function was initially called with. You may connect as + // many methods to event as needed. + // + // event must be a string. If obj is null, dojo.global is used. + // + // null arguments may simply be omitted. + // + // obj[event] can resolve to a function or undefined (null). + // If obj[event] is null, it is assigned a function. + // + // The return value is a handle that is needed to + // remove this connection with dojo.disconnect. + // + // obj: + // The source object for the event function. + // Defaults to dojo.global if null. + // If obj is a DOM node, the connection is delegated + // to the DOM event manager (unless dontFix is true). + // + // event: + // String name of the event function in obj. + // I.e. identifies a property obj[event]. + // + // context: + // The object that method will receive as "this". + // + // If context is null and method is a function, then method + // inherits the context of event. + // + // If method is a string then context must be the source + // object object for method (context[method]). If context is null, + // dojo.global is used. + // + // method: + // A function reference, or name of a function in context. + // The function identified by method fires after event does. + // method receives the same arguments as the event. + // See context argument comments for information on method's scope. + // + // dontFix: + // If obj is a DOM node, set dontFix to true to prevent delegation + // of this connection to the DOM event manager. + // + // example: + // When obj.onchange(), do ui.update(): + // | dojo.connect(obj, "onchange", ui, "update"); + // | dojo.connect(obj, "onchange", ui, ui.update); // same + // + // example: + // Using return value for disconnect: + // | var link = dojo.connect(obj, "onchange", ui, "update"); + // | ... + // | dojo.disconnect(link); + // + // example: + // When onglobalevent executes, watcher.handler is invoked: + // | dojo.connect(null, "onglobalevent", watcher, "handler"); + // + // example: + // When ob.onCustomEvent executes, customEventHandler is invoked: + // | dojo.connect(ob, "onCustomEvent", null, "customEventHandler"); + // | dojo.connect(ob, "onCustomEvent", "customEventHandler"); // same + // + // example: + // When ob.onCustomEvent executes, customEventHandler is invoked + // with the same scope (this): + // | dojo.connect(ob, "onCustomEvent", null, customEventHandler); + // | dojo.connect(ob, "onCustomEvent", customEventHandler); // same + // + // example: + // When globalEvent executes, globalHandler is invoked + // with the same scope (this): + // | dojo.connect(null, "globalEvent", null, globalHandler); + // | dojo.connect("globalEvent", globalHandler); // same + + // normalize arguments + var a=arguments, args=[], i=0; + // if a[0] is a String, obj was ommited + args.push(dojo.isString(a[0]) ? null : a[i++], a[i++]); + // if the arg-after-next is a String or Function, context was NOT omitted + var a1 = a[i+1]; + args.push(dojo.isString(a1)||dojo.isFunction(a1) ? a[i++] : null, a[i++]); + // absorb any additional arguments + for(var l=a.length; i. + // description: + // JavaScript has no threads, and even if it did, threads are hard. + // Deferreds are a way of abstracting non-blocking events, such as the + // final response to an XMLHttpRequest. Deferreds create a promise to + // return a response a some point in the future and an easy way to + // register your interest in receiving that response. + // + // The most important methods for Deffered users are: + // + // * addCallback(handler) + // * addErrback(handler) + // * callback(result) + // * errback(result) + // + // In general, when a function returns a Deferred, users then "fill + // in" the second half of the contract by registering callbacks and + // error handlers. You may register as many callback and errback + // handlers as you like and they will be executed in the order + // registered when a result is provided. Usually this result is + // provided as the result of an asynchronous operation. The code + // "managing" the Deferred (the code that made the promise to provide + // an answer later) will use the callback() and errback() methods to + // communicate with registered listeners about the result of the + // operation. At this time, all registered result handlers are called + // *with the most recent result value*. + // + // Deferred callback handlers are treated as a chain, and each item in + // the chain is required to return a value that will be fed into + // successive handlers. The most minimal callback may be registered + // like this: + // + // | var d = new dojo.Deferred(); + // | d.addCallback(function(result){ return result; }); + // + // Perhaps the most common mistake when first using Deferreds is to + // forget to return a value (in most cases, the value you were + // passed). + // + // The sequence of callbacks is internally represented as a list of + // 2-tuples containing the callback/errback pair. For example, the + // following call sequence: + // + // | var d = new dojo.Deferred(); + // | d.addCallback(myCallback); + // | d.addErrback(myErrback); + // | d.addBoth(myBoth); + // | d.addCallbacks(myCallback, myErrback); + // + // is translated into a Deferred with the following internal + // representation: + // + // | [ + // | [myCallback, null], + // | [null, myErrback], + // | [myBoth, myBoth], + // | [myCallback, myErrback] + // | ] + // + // The Deferred also keeps track of its current status (fired). Its + // status may be one of three things: + // + // * -1: no value yet (initial condition) + // * 0: success + // * 1: error + // + // A Deferred will be in the error state if one of the following three + // conditions are met: + // + // 1. The result given to callback or errback is "instanceof" Error + // 2. The previous callback or errback raised an exception while + // executing + // 3. The previous callback or errback returned a value + // "instanceof" Error + // + // Otherwise, the Deferred will be in the success state. The state of + // the Deferred determines the next element in the callback sequence + // to run. + // + // When a callback or errback occurs with the example deferred chain, + // something equivalent to the following will happen (imagine + // that exceptions are caught and returned): + // + // | // d.callback(result) or d.errback(result) + // | if(!(result instanceof Error)){ + // | result = myCallback(result); + // | } + // | if(result instanceof Error){ + // | result = myErrback(result); + // | } + // | result = myBoth(result); + // | if(result instanceof Error){ + // | result = myErrback(result); + // | }else{ + // | result = myCallback(result); + // | } + // + // The result is then stored away in case another step is added to the + // callback sequence. Since the Deferred already has a value + // available, any new callbacks added will be called immediately. + // + // There are two other "advanced" details about this implementation + // that are useful: + // + // Callbacks are allowed to return Deferred instances themselves, so + // you can build complicated sequences of events with ease. + // + // The creator of the Deferred may specify a canceller. The canceller + // is a function that will be called if Deferred.cancel is called + // before the Deferred fires. You can use this to implement clean + // aborting of an XMLHttpRequest, etc. Note that cancel will fire the + // deferred with a CancelledError (unless your canceller returns + // another kind of error), so the errbacks should be prepared to + // handle that error for cancellable Deferreds. + // example: + // | var deferred = new dojo.Deferred(); + // | setTimeout(function(){ deferred.callback({success: true}); }, 1000); + // | return deferred; + // example: + // Deferred objects are often used when making code asynchronous. It + // may be easiest to write functions in a synchronous manner and then + // split code using a deferred to trigger a response to a long-lived + // operation. For example, instead of register a callback function to + // denote when a rendering operation completes, the function can + // simply return a deferred: + // + // | // callback style: + // | function renderLotsOfData(data, callback){ + // | var success = false + // | try{ + // | for(var x in data){ + // | renderDataitem(data[x]); + // | } + // | success = true; + // | }catch(e){ } + // | if(callback){ + // | callback(success); + // | } + // | } + // + // | // using callback style + // | renderLotsOfData(someDataObj, function(success){ + // | // handles success or failure + // | if(!success){ + // | promptUserToRecover(); + // | } + // | }); + // | // NOTE: no way to add another callback here!! + // example: + // Using a Deferred doesn't simplify the sending code any, but it + // provides a standard interface for callers and senders alike, + // providing both with a simple way to service multiple callbacks for + // an operation and freeing both sides from worrying about details + // such as "did this get called already?". With Deferreds, new + // callbacks can be added at any time. + // + // | // Deferred style: + // | function renderLotsOfData(data){ + // | var d = new dojo.Deferred(); + // | try{ + // | for(var x in data){ + // | renderDataitem(data[x]); + // | } + // | d.callback(true); + // | }catch(e){ + // | d.errback(new Error("rendering failed")); + // | } + // | return d; + // | } + // + // | // using Deferred style + // | renderLotsOfData(someDataObj).addErrback(function(){ + // | promptUserToRecover(); + // | }); + // | // NOTE: addErrback and addCallback both return the Deferred + // | // again, so we could chain adding callbacks or save the + // | // deferred for later should we need to be notified again. + // example: + // In this example, renderLotsOfData is syncrhonous and so both + // versions are pretty artificial. Putting the data display on a + // timeout helps show why Deferreds rock: + // + // | // Deferred style and async func + // | function renderLotsOfData(data){ + // | var d = new dojo.Deferred(); + // | setTimeout(function(){ + // | try{ + // | for(var x in data){ + // | renderDataitem(data[x]); + // | } + // | d.callback(true); + // | }catch(e){ + // | d.errback(new Error("rendering failed")); + // | } + // | }, 100); + // | return d; + // | } + // + // | // using Deferred style + // | renderLotsOfData(someDataObj).addErrback(function(){ + // | promptUserToRecover(); + // | }); + // + // Note that the caller doesn't have to change his code at all to + // handle the asynchronous case. + + this.chain = []; + this.id = this._nextId(); + this.fired = -1; + this.paused = 0; + this.results = [null, null]; + this.canceller = canceller; + this.silentlyCancelled = false; +}; + +dojo.extend(dojo.Deferred, { + /* + makeCalled: function(){ + // summary: + // returns a new, empty deferred, which is already in the called + // state. Calling callback() or errback() on this deferred will + // yeild an error and adding new handlers to it will result in + // them being called immediately. + var deferred = new dojo.Deferred(); + deferred.callback(); + return deferred; + }, + + toString: function(){ + var state; + if(this.fired == -1){ + state = 'unfired'; + }else{ + state = this.fired ? 'success' : 'error'; + } + return 'Deferred(' + this.id + ', ' + state + ')'; + }, + */ + + _nextId: (function(){ + var n = 1; + return function(){ return n++; }; + })(), + + cancel: function(){ + // summary: + // Cancels a Deferred that has not yet received a value, or is + // waiting on another Deferred as its value. + // description: + // If a canceller is defined, the canceller is called. If the + // canceller did not return an error, or there was no canceller, + // then the errback chain is started. + var err; + if(this.fired == -1){ + if(this.canceller){ + err = this.canceller(this); + }else{ + this.silentlyCancelled = true; + } + if(this.fired == -1){ + if(!(err instanceof Error)){ + var res = err; + err = new Error("Deferred Cancelled"); + err.dojoType = "cancel"; + err.cancelResult = res; + } + this.errback(err); + } + }else if( (this.fired == 0) && + (this.results[0] instanceof dojo.Deferred) + ){ + this.results[0].cancel(); + } + }, + + _resback: function(res){ + // summary: + // The private primitive that means either callback or errback + this.fired = ((res instanceof Error) ? 1 : 0); + this.results[this.fired] = res; + this._fire(); + }, + + _check: function(){ + if(this.fired != -1){ + if(!this.silentlyCancelled){ + throw new Error("already called!"); + } + this.silentlyCancelled = false; + return; + } + }, + + callback: function(res){ + // summary: + // Begin the callback sequence with a non-error value. + + /* + callback or errback should only be called once on a given + Deferred. + */ + this._check(); + this._resback(res); + }, + + errback: function(/*Error*/res){ + // summary: + // Begin the callback sequence with an error result. + this._check(); + if(!(res instanceof Error)){ + res = new Error(res); + } + this._resback(res); + }, + + addBoth: function(/*Function|Object*/cb, /*String?*/cbfn){ + // summary: + // Add the same function as both a callback and an errback as the + // next element on the callback sequence.This is useful for code + // that you want to guarantee to run, e.g. a finalizer. + var enclosed = dojo.hitch.apply(dojo, arguments); + return this.addCallbacks(enclosed, enclosed); + }, + + addCallback: function(/*Function|Object*/cb, /*String?*/cbfn /*...*/){ + // summary: + // Add a single callback to the end of the callback sequence. + return this.addCallbacks(dojo.hitch.apply(dojo, arguments)); + }, + + addErrback: function(cb, cbfn){ + // summary: + // Add a single callback to the end of the callback sequence. + return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments)); + }, + + addCallbacks: function(cb, eb){ + // summary: + // Add separate callback and errback to the end of the callback + // sequence. + this.chain.push([cb, eb]) + if(this.fired >= 0){ + this._fire(); + } + return this; + }, + + _fire: function(){ + // summary: + // Used internally to exhaust the callback sequence when a result + // is available. + var chain = this.chain; + var fired = this.fired; + var res = this.results[fired]; + var self = this; + var cb = null; + while( + (chain.length > 0) && + (this.paused == 0) + ){ + // Array + var f = chain.shift()[fired]; + if(!f){ continue; } + try{ + res = f(res); + fired = ((res instanceof Error) ? 1 : 0); + if(res instanceof dojo.Deferred){ + cb = function(res){ + self._resback(res); + // inlined from _pause() + self.paused--; + if( + (self.paused == 0) && + (self.fired >= 0) + ){ + self._fire(); + } + } + // inlined from _unpause + this.paused++; + } + }catch(err){ + console.debug(err); + fired = 1; + res = err; + } + } + this.fired = fired; + this.results[fired] = res; + if((cb)&&(this.paused)){ + // this is for "tail recursion" in case the dependent + // deferred is already fired + res.addBoth(cb); + } + } +}); + +} + +if(!dojo._hasResource["dojo._base.json"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.json"] = true; +dojo.provide("dojo._base.json"); + +dojo.fromJson = function(/*String*/ json){ + // summary: + // Parses a [JSON](http://json.org) string to return a JavaScript object. + // json: + // a string literal of a JSON item, for instance: + // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` + + return eval("(" + json + ")"); // Object +} + +dojo._escapeString = function(/*String*/str){ + //summary: + // Adds escape sequences for non-visual characters, double quote and + // backslash and surrounds with double quotes to form a valid string + // literal. + return ('"' + str.replace(/(["\\])/g, '\\$1') + '"'). + replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n"). + replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r"); // string +} + +dojo.toJsonIndentStr = "\t"; +dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){ + // summary: + // Returns a [JSON](http://json.org) serialization of an object. + // + // description: + // Returns a [JSON](http://json.org) serialization of an object. + // Note that this doesn't check for infinite recursion, so don't do that! + // + // it: + // an object to be serialized. Objects may define their own + // serialization via a special "__json__" or "json" function + // property. If a specialized serializer has been defined, it will + // be used as a fallback. + // + // prettyPrint: + // if true, we indent objects and arrays to make the output prettier. + // The variable dojo.toJsonIndentStr is used as the indent string + // -- to use something other than the default (tab), + // change that variable before calling dojo.toJson(). + // + // _indentStr: + // private variable for recursive calls when pretty printing, do not use. + + if(it === undefined){ + return "undefined"; + } + var objtype = typeof it; + if(objtype == "number" || objtype == "boolean"){ + return it + ""; + } + if(it === null){ + return "null"; + } + if(dojo.isString(it)){ + return dojo._escapeString(it); + } + if(it.nodeType && it.cloneNode){ // isNode + return ""; // FIXME: would something like outerHTML be better here? + } + // recurse + var recurse = arguments.callee; + // short-circuit for objects that support "json" serialization + // if they return "self" then just pass-through... + var newObj; + _indentStr = _indentStr || ""; + var nextIndent = prettyPrint ? _indentStr + dojo.toJsonIndentStr : ""; + if(typeof it.__json__ == "function"){ + newObj = it.__json__(); + if(it !== newObj){ + return recurse(newObj, prettyPrint, nextIndent); + } + } + if(typeof it.json == "function"){ + newObj = it.json(); + if(it !== newObj){ + return recurse(newObj, prettyPrint, nextIndent); + } + } + + var sep = prettyPrint ? " " : ""; + var newLine = prettyPrint ? "\n" : ""; + + // array + if(dojo.isArray(it)){ + var res = dojo.map(it, function(obj){ + var val = recurse(obj, prettyPrint, nextIndent); + if(typeof val != "string"){ + val = "undefined"; + } + return newLine + nextIndent + val; + }); + return "[" + res.join("," + sep) + newLine + _indentStr + "]"; + } + /* + // look in the registry + try { + window.o = it; + newObj = dojo.json.jsonRegistry.match(it); + return recurse(newObj, prettyPrint, nextIndent); + }catch(e){ + // console.debug(e); + } + // it's a function with no adapter, skip it + */ + if(objtype == "function"){ + return null; // null + } + // generic object code path + var output = []; + for(var key in it){ + var keyStr; + if(typeof key == "number"){ + keyStr = '"' + key + '"'; + }else if(typeof key == "string"){ + keyStr = dojo._escapeString(key); + }else{ + // skip non-string or number keys + continue; + } + val = recurse(it[key], prettyPrint, nextIndent); + if(typeof val != "string"){ + // skip non-serializable values + continue; + } + // FIXME: use += on Moz!! + // MOW NOTE: using += is a pain because you have to account for the dangling comma... + output.push(newLine + nextIndent + keyStr + ":" + sep + val); + } + return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String +} + +} + +if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.array"] = true; + +dojo.provide("dojo._base.array"); + +(function(){ + var _getParts = function(arr, obj, cb){ + return [ + dojo.isString(arr) ? arr.split("") : arr, + obj || dojo.global, + // FIXME: cache the anonymous functions we create here? + dojo.isString(cb) ? new Function("item", "index", "array", cb) : cb + ]; + }; + + dojo.mixin(dojo, { + indexOf: function( /*Array*/ array, + /*Object*/ value, + /*Integer?*/ fromIndex, + /*Boolean?*/ findLast){ + // summary: + // locates the first index of the provided value in the + // passed array. If the value is not found, -1 is returned. + // description: + // For details on this method, see: + // + + var step = 1, end = array.length || 0, i = 0; + if(findLast){ + i = end - 1; + step = end = -1; + } + if(fromIndex != undefined){ i = fromIndex; } + if((findLast && i > end) || i < end){ + for(; i != end; i += step){ + if(array[i] == value){ return i; } + } + } + return -1; // Number + }, + + lastIndexOf: function(/*Array*/array, /*Object*/value, /*Integer?*/fromIndex){ + // summary: + // locates the last index of the provided value in the passed array. + // If the value is not found, -1 is returned. + // description: + // For details on this method, see: + // + return dojo.indexOf(array, value, fromIndex, true); // Number + }, + + forEach: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + // summary: + // for every item in arr, callback is invoked. Return values are ignored. + // arr: the array to iterate on. If a string, operates on individual characters. + // callback: a function is invoked with three arguments: item, index, and array + // thisObject: may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.forEach() method. + // In environments that support JavaScript 1.6, this function is a passthrough to the built-in method. + // For more details, see: + // + + // match the behavior of the built-in forEach WRT empty arrs + if(!arr || !arr.length){ return; } + + // FIXME: there are several ways of handilng thisObject. Is + // dojo.global always the default context? + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + for(var i=0,l=_p[0].length; i + // example: + // | dojo.every([1, 2, 3, 4], function(item){ return item>1; }); + // returns false + // example: + // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); + // returns true + return this._everyOrSome(true, arr, callback, thisObject); // Boolean + }, + + some: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + // summary: + // Determines whether or not any item in arr satisfies the + // condition implemented by callback. + // arr: the array to iterate on. If a string, operates on individual characters. + // callback: a function is invoked with three arguments: item, index, and array and returns true + // if the condition is met. + // thisObject: may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.some() method. + // In environments that support JavaScript 1.6, this function is a passthrough to the built-in method. + // For more details, see: + // + // example: + // | dojo.some([1, 2, 3, 4], function(item){ return item>1; }); + // returns true + // example: + // | dojo.some([1, 2, 3, 4], function(item){ return item<1; }); + // returns false + return this._everyOrSome(false, arr, callback, thisObject); // Boolean + }, + + map: function(/*Array|String*/arr, /*Function|String*/callback, /*Function?*/thisObject){ + // summary: + // applies callback to each element of arr and returns + // an Array with the results + // arr: the array to iterate on. If a string, operates on individual characters. + // callback: a function is invoked with three arguments: item, index, and array and returns a value + // thisObject: may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.map() method. + // In environments that support JavaScript 1.6, this function is a passthrough to the built-in method. + // For more details, see: + // + // example: + // | dojo.map([1, 2, 3, 4], function(item){ return item+1 }); + // returns [2, 3, 4, 5] + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + var outArr = (arguments[3] ? (new arguments[3]()) : []); + for(var i=0;i + // example: + // | dojo.filter([1, 2, 3, 4], function(item){ return item>1; }); + // returns [2, 3, 4] + + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + var outArr = []; + for(var i = 0; i < arr.length; i++){ + if(_p[2].call(_p[1], arr[i], i, arr)){ + outArr.push(arr[i]); + } + } + return outArr; // Array + } + }); +})(); + +} + +if(!dojo._hasResource["dojo._base.Color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.Color"] = true; +dojo.provide("dojo._base.Color"); + +dojo.Color = function(/*Array|String|Object*/ color){ + // summary: + // takes a named string, hex string, array of rgb or rgba values, + // an object with r, g, b, and a properties, or another dojo.Color object + if(color){ this.setColor(color); } +}; + +// FIXME: there's got to be a more space-efficient way to encode or discover these!! Use hex? +dojo.Color.named = { + black: [0,0,0], + silver: [192,192,192], + gray: [128,128,128], + white: [255,255,255], + maroon: [128,0,0], + red: [255,0,0], + purple: [128,0,128], + fuchsia: [255,0,255], + green: [0,128,0], + lime: [0,255,0], + olive: [128,128,0], + yellow: [255,255,0], + navy: [0,0,128], + blue: [0,0,255], + teal: [0,128,128], + aqua: [0,255,255] +}; + +dojo.extend(dojo.Color, { + r: 255, g: 255, b: 255, a: 1, + _set: function(r, g, b, a){ + var t = this; t.r = r; t.g = g; t.b = b; t.a = a; + }, + setColor: function(/*Array|String|Object*/ color){ + // summary: + // takes a named string, hex string, array of rgb or rgba values, + // an object with r, g, b, and a properties, or another dojo.Color object + var d = dojo; + if(d.isString(color)){ + d.colorFromString(color, this); + }else if(d.isArray(color)){ + d.colorFromArray(color, this); + }else{ + this._set(color.r, color.g, color.b, color.a); + if(!(color instanceof d.Color)){ this.sanitize(); } + } + return this; // dojo.Color + }, + sanitize: function(){ + // summary: + // makes sure that the object has correct attributes + // description: + // the default implementation does nothing, include dojo.colors to + // augment it to real checks + return this; // dojo.Color + }, + toRgb: function(){ + // summary: returns 3 component array of rgb values + var t = this; + return [t.r, t.g, t.b]; // Array + }, + toRgba: function(){ + // summary: returns a 4 component array of rgba values + var t = this; + return [t.r, t.g, t.b, t.a]; // Array + }, + toHex: function(){ + // summary: returns a css color string in hexadecimal representation + var arr = dojo.map(["r", "g", "b"], function(x){ + var s = this[x].toString(16); + return s.length < 2 ? "0" + s : s; + }, this); + return "#" + arr.join(""); // String + }, + toCss: function(/*Boolean?*/ includeAlpha){ + // summary: returns a css color string in rgb(a) representation + var t = this, rgb = t.r + ", " + t.g + ", " + t.b; + return (includeAlpha ? "rgba(" + rgb + ", " + t.a : "rgb(" + rgb) + ")"; // String + }, + toString: function(){ + // summary: returns a visual representation of the color + return this.toCss(true); // String + } +}); + +dojo.blendColors = function( + /*dojo.Color*/ start, + /*dojo.Color*/ end, + /*Number*/ weight, + /*dojo.Color?*/ obj +){ + // summary: + // blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend, + // can reuse a previously allocated dojo.Color object for the result + var d = dojo, t = obj || new dojo.Color(); + d.forEach(["r", "g", "b", "a"], function(x){ + t[x] = start[x] + (end[x] - start[x]) * weight; + if(x != "a"){ t[x] = Math.round(t[x]); } + }); + return t.sanitize(); // dojo.Color +}; + +dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){ + // summary: get rgb(a) array from css-style color declarations + var m = color.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/); + return m && dojo.colorFromArray(m[1].split(/\s*,\s*/), obj); // dojo.Color +}; + +dojo.colorFromHex = function(/*String*/ color, /*dojo.Color?*/ obj){ + // summary: converts a hex string with a '#' prefix to a color object. + // Supports 12-bit #rgb shorthand. + var d = dojo, t = obj || new d.Color(), + bits = (color.length == 4) ? 4 : 8, + mask = (1 << bits) - 1; + color = Number("0x" + color.substr(1)); + if(isNaN(color)){ + return null; // dojo.Color + } + d.forEach(["b", "g", "r"], function(x){ + var c = color & mask; + color >>= bits; + t[x] = bits == 4 ? 17 * c : c; + }); + t.a = 1; + return t; // dojo.Color +}; + +dojo.colorFromArray = function(/*Array*/ a, /*dojo.Color?*/ obj){ + // summary: builds a color from 1, 2, 3, or 4 element array + var t = obj || new dojo.Color(); + t._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3])); + if(isNaN(t.a)){ t.a = 1; } + return t.sanitize(); // dojo.Color +}; + +dojo.colorFromString = function(/*String*/ str, /*dojo.Color?*/ obj){ + // summary: + // parses str for a color value. + // description: + // Acceptable input values for str may include arrays of any form + // accepted by dojo.colorFromArray, hex strings such as "#aaaaaa", or + // rgb or rgba strings such as "rgb(133, 200, 16)" or "rgba(10, 10, + // 10, 50)" + // returns: + // a dojo.Color object. If obj is passed, it will be the return value. + var a = dojo.Color.named[str]; + return a && dojo.colorFromArray(a, obj) || dojo.colorFromRgb(str, obj) || dojo.colorFromHex(str, obj); +}; + +} + +if(!dojo._hasResource["dojo._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base"] = true; +dojo.provide("dojo._base"); + +} + +if(!dojo._hasResource["dojo._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.window"] = true; +dojo.provide("dojo._base.window"); + +dojo._gearsObject = function(){ + // summary: + // factory method to get a Google Gears plugin instance to + // expose in the browser runtime environment, if present + var factory; + var results; + + var gearsObj = dojo.getObject("google.gears"); + if(gearsObj){ return gearsObj; } // already defined elsewhere + + if(typeof GearsFactory != "undefined"){ // Firefox + factory = new GearsFactory(); + }else{ + if(dojo.isIE){ + // IE + try{ + factory = new ActiveXObject("Gears.Factory"); + }catch(e){ + // ok to squelch; there's no gears factory. move on. + } + }else if(navigator.mimeTypes["application/x-googlegears"]){ + // Safari? + factory = document.createElement("object"); + factory.setAttribute("type", "application/x-googlegears"); + factory.setAttribute("width", 0); + factory.setAttribute("height", 0); + factory.style.display = "none"; + document.documentElement.appendChild(factory); + } + } + + // still nothing? + if(!factory){ return null; } + + // define the global objects now; don't overwrite them though if they + // were somehow set internally by the Gears plugin, which is on their + // dev roadmap for the future + dojo.setObject("google.gears.factory", factory); + return dojo.getObject("google.gears"); +}; + +/*===== +dojo.isGears = { + // summary: True if client is using Google Gears +}; +=====*/ +// see if we have Google Gears installed, and if +// so, make it available in the runtime environment +// and in the Google standard 'google.gears' global object +dojo.isGears = (!!dojo._gearsObject())||0; + +/*===== +dojo.doc = { + // summary: + // Alias for the current document. 'dojo.doc' can be modified + // for temporary context shifting. Also see dojo.withDoc(). + // description: + // Refer to dojo.doc rather + // than referring to 'window.document' to ensure your code runs + // correctly in managed contexts. + // example: + // | n.appendChild(dojo.doc.createElement('div')); +} +=====*/ +dojo.doc = window["document"] || null; + +dojo.body = function(){ + // summary: + // Return the body element of the document + // return the body object associated with dojo.doc + // example: + // | dojo.body().appendChild(dojo.doc.createElement('div')); + + // Note: document.body is not defined for a strict xhtml document + // Would like to memoize this, but dojo.doc can change vi dojo.withDoc(). + return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node +} + +dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){ + // summary: + // changes the behavior of many core Dojo functions that deal with + // namespace and DOM lookup, changing them to work in a new global + // context (e.g., an iframe). The varibles dojo.global and dojo.doc + // are modified as a result of calling this function and the result of + // `dojo.body()` likewise differs. + dojo.global = globalObject; + dojo.doc = globalDocument; +}; + +dojo._fireCallback = function(callback, context, cbArguments){ + if(context && dojo.isString(callback)){ + callback = context[callback]; + } + return callback.apply(context, cbArguments || [ ]); +} + +dojo.withGlobal = function( /*Object*/globalObject, + /*Function*/callback, + /*Object?*/thisObject, + /*Array?*/cbArguments){ + // summary: + // Call callback with globalObject as dojo.global and + // globalObject.document as dojo.doc. If provided, globalObject + // will be executed in the context of object thisObject + // description: + // When callback() returns or throws an error, the dojo.global + // and dojo.doc will be restored to its previous state. + var rval; + var oldGlob = dojo.global; + var oldDoc = dojo.doc; + try{ + dojo.setContext(globalObject, globalObject.document); + rval = dojo._fireCallback(callback, thisObject, cbArguments); + }finally{ + dojo.setContext(oldGlob, oldDoc); + } + return rval; +} + +dojo.withDoc = function( /*Object*/documentObject, + /*Function*/callback, + /*Object?*/thisObject, + /*Array?*/cbArguments){ + // summary: + // Call callback with documentObject as dojo.doc. If provided, + // callback will be executed in the context of object thisObject + // description: + // When callback() returns or throws an error, the dojo.doc will + // be restored to its previous state. + var rval; + var oldDoc = dojo.doc; + try{ + dojo.doc = documentObject; + rval = dojo._fireCallback(callback, thisObject, cbArguments); + }finally{ + dojo.doc = oldDoc; + } + return rval; +}; + +} + +if(!dojo._hasResource["dojo._base.event"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.event"] = true; +dojo.provide("dojo._base.event"); + +// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA + +(function(){ + // DOM event listener machinery + var del = (dojo._event_listener = { + add: function(/*DOMNode*/node, /*String*/name, /*Function*/fp){ + if(!node){return;} + name = del._normalizeEventName(name); + fp = del._fixCallback(name, fp); + var oname = name; + if(!dojo.isIE && (name == "mouseenter" || name == "mouseleave")){ + var ofp = fp; + //oname = name; + name = (name == "mouseenter") ? "mouseover" : "mouseout"; + fp = function(e){ + // thanks ben! + if(!dojo.isDescendant(e.relatedTarget, node)){ + // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable. + return ofp.call(this, e); + } + } + } + node.addEventListener(name, fp, false); + return fp; /*Handle*/ + }, + remove: function(/*DOMNode*/node, /*String*/event, /*Handle*/handle){ + // summary: + // clobbers the listener from the node + // node: + // DOM node to attach the event to + // event: + // the name of the handler to remove the function from + // handle: + // the handle returned from add + if (node){ + node.removeEventListener(del._normalizeEventName(event), handle, false); + } + }, + _normalizeEventName: function(/*String*/name){ + // Generally, name should be lower case, unless it is special + // somehow (e.g. a Mozilla DOM event). + // Remove 'on'. + return name.slice(0,2) =="on" ? name.slice(2) : name; + }, + _fixCallback: function(/*String*/name, fp){ + // By default, we only invoke _fixEvent for 'keypress' + // If code is added to _fixEvent for other events, we have + // to revisit this optimization. + // This also applies to _fixEvent overrides for Safari and Opera + // below. + return name != "keypress" ? fp : function(e){ return fp.call(this, del._fixEvent(e, this)); }; + }, + _fixEvent: function(evt, sender){ + // _fixCallback only attaches us to keypress. + // Switch on evt.type anyway because we might + // be called directly from dojo.fixEvent. + switch(evt.type){ + case "keypress": + del._setKeyChar(evt); + break; + } + return evt; + }, + _setKeyChar: function(evt){ + evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : ''; + } + }); + + // DOM events + + dojo.fixEvent = function(/*Event*/evt, /*DOMNode*/sender){ + // summary: + // normalizes properties on the event object including event + // bubbling methods, keystroke normalization, and x/y positions + // evt: Event + // native event object + // sender: DOMNode + // node to treat as "currentTarget" + return del._fixEvent(evt, sender); + } + + dojo.stopEvent = function(/*Event*/evt){ + // summary: + // prevents propagation and clobbers the default action of the + // passed event + // evt: Event + // The event object. If omitted, window.event is used on IE. + evt.preventDefault(); + evt.stopPropagation(); + // NOTE: below, this method is overridden for IE + } + + // the default listener to use on dontFix nodes, overriden for IE + var node_listener = dojo._listener; + + // Unify connect and event listeners + dojo._connect = function(obj, event, context, method, dontFix){ + // FIXME: need a more strict test + var isNode = obj && (obj.nodeType||obj.attachEvent||obj.addEventListener); + // choose one of three listener options: raw (connect.js), DOM event on a Node, custom event on a Node + // we need the third option to provide leak prevention on broken browsers (IE) + var lid = !isNode ? 0 : (!dontFix ? 1 : 2), l = [dojo._listener, del, node_listener][lid]; + // create a listener + var h = l.add(obj, event, dojo.hitch(context, method)); + // formerly, the disconnect package contained "l" directly, but if client code + // leaks the disconnect package (by connecting it to a node), referencing "l" + // compounds the problem. + // instead we return a listener id, which requires custom _disconnect below. + // return disconnect package + return [ obj, event, h, lid ]; + } + + dojo._disconnect = function(obj, event, handle, listener){ + ([dojo._listener, del, node_listener][listener]).remove(obj, event, handle); + } + + // Constants + + // Public: client code should test + // keyCode against these named constants, as the + // actual codes can vary by browser. + dojo.keys = { + // summary: definitions for common key values + BACKSPACE: 8, + TAB: 9, + CLEAR: 12, + ENTER: 13, + SHIFT: 16, + CTRL: 17, + ALT: 18, + PAUSE: 19, + CAPS_LOCK: 20, + ESCAPE: 27, + SPACE: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + LEFT_ARROW: 37, + UP_ARROW: 38, + RIGHT_ARROW: 39, + DOWN_ARROW: 40, + INSERT: 45, + DELETE: 46, + HELP: 47, + LEFT_WINDOW: 91, + RIGHT_WINDOW: 92, + SELECT: 93, + NUMPAD_0: 96, + NUMPAD_1: 97, + NUMPAD_2: 98, + NUMPAD_3: 99, + NUMPAD_4: 100, + NUMPAD_5: 101, + NUMPAD_6: 102, + NUMPAD_7: 103, + NUMPAD_8: 104, + NUMPAD_9: 105, + NUMPAD_MULTIPLY: 106, + NUMPAD_PLUS: 107, + NUMPAD_ENTER: 108, + NUMPAD_MINUS: 109, + NUMPAD_PERIOD: 110, + NUMPAD_DIVIDE: 111, + F1: 112, + F2: 113, + F3: 114, + F4: 115, + F5: 116, + F6: 117, + F7: 118, + F8: 119, + F9: 120, + F10: 121, + F11: 122, + F12: 123, + F13: 124, + F14: 125, + F15: 126, + NUM_LOCK: 144, + SCROLL_LOCK: 145 + }; + + // IE event normalization + if(dojo.isIE){ + var _trySetKeyCode = function(e, code){ + try{ + // squelch errors when keyCode is read-only + // (e.g. if keyCode is ctrl or shift) + return (e.keyCode = code); + }catch(e){ + return 0; + } + } + + // by default, use the standard listener + var iel = dojo._listener; + // dispatcher tracking property + if(!dojo.config._allow_leaks){ + // custom listener that handles leak protection for DOM events + node_listener = iel = dojo._ie_listener = { + // support handler indirection: event handler functions are + // referenced here. Event dispatchers hold only indices. + handlers: [], + // add a listener to an object + add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ + source = source || dojo.global; + var f = source[method]; + if(!f||!f._listeners){ + var d = dojo._getIeDispatcher(); + // original target function is special + d.target = f && (ieh.push(f) - 1); + // dispatcher holds a list of indices into handlers table + d._listeners = []; + // redirect source to dispatcher + f = source[method] = d; + } + return f._listeners.push(ieh.push(listener) - 1) ; /*Handle*/ + }, + // remove a listener from an object + remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){ + var f = (source||dojo.global)[method], l = f && f._listeners; + if(f && l && handle--){ + delete ieh[l[handle]]; + delete l[handle]; + } + } + }; + // alias used above + var ieh = iel.handlers; + } + + dojo.mixin(del, { + add: function(/*DOMNode*/node, /*String*/event, /*Function*/fp){ + if(!node){return;} // undefined + event = del._normalizeEventName(event); + if(event=="onkeypress"){ + // we need to listen to onkeydown to synthesize + // keypress events that otherwise won't fire + // on IE + var kd = node.onkeydown; + if(!kd || !kd._listeners || !kd._stealthKeydownHandle){ + var h = del.add(node, "onkeydown", del._stealthKeyDown); + kd = node.onkeydown; + kd._stealthKeydownHandle = h; + kd._stealthKeydownRefs = 1; + }else{ + kd._stealthKeydownRefs++; + } + } + return iel.add(node, event, del._fixCallback(fp)); + }, + remove: function(/*DOMNode*/node, /*String*/event, /*Handle*/handle){ + event = del._normalizeEventName(event); + iel.remove(node, event, handle); + if(event=="onkeypress"){ + var kd = node.onkeydown; + if(--kd._stealthKeydownRefs <= 0){ + iel.remove(node, "onkeydown", kd._stealthKeydownHandle); + delete kd._stealthKeydownHandle; + } + } + }, + _normalizeEventName: function(/*String*/eventName){ + // Generally, eventName should be lower case, unless it is + // special somehow (e.g. a Mozilla event) + // ensure 'on' + return eventName.slice(0,2) != "on" ? "on" + eventName : eventName; + }, + _nop: function(){}, + _fixEvent: function(/*Event*/evt, /*DOMNode*/sender){ + // summary: + // normalizes properties on the event object including event + // bubbling methods, keystroke normalization, and x/y positions + // evt: native event object + // sender: node to treat as "currentTarget" + if(!evt){ + var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; + evt = w.event; + } + if(!evt){return(evt);} + evt.target = evt.srcElement; + evt.currentTarget = (sender || evt.srcElement); + evt.layerX = evt.offsetX; + evt.layerY = evt.offsetY; + // FIXME: scroll position query is duped from dojo.html to + // avoid dependency on that entire module. Now that HTML is in + // Base, we should convert back to something similar there. + var se = evt.srcElement, doc = (se && se.ownerDocument) || document; + // DO NOT replace the following to use dojo.body(), in IE, document.documentElement should be used + // here rather than document.body + var docBody = ((dojo.isIE < 6) || (doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement; + var offset = dojo._getIeDocumentElementOffset(); + evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; + evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y; + if(evt.type == "mouseover"){ + evt.relatedTarget = evt.fromElement; + } + if(evt.type == "mouseout"){ + evt.relatedTarget = evt.toElement; + } + evt.stopPropagation = del._stopPropagation; + evt.preventDefault = del._preventDefault; + return del._fixKeys(evt); + }, + _fixKeys: function(evt){ + switch(evt.type){ + case "keypress": + var c = ("charCode" in evt ? evt.charCode : evt.keyCode); + if (c==10){ + // CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla + c=0; + evt.keyCode = 13; + }else if(c==13||c==27){ + c=0; // Mozilla considers ENTER and ESC non-printable + }else if(c==3){ + c=99; // Mozilla maps CTRL-BREAK to CTRL-c + } + // Mozilla sets keyCode to 0 when there is a charCode + // but that stops the event on IE. + evt.charCode = c; + del._setKeyChar(evt); + break; + } + return evt; + }, + // some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE + // we map those virtual key codes to ascii here + // not valid for all (non-US) keyboards, so maybe we shouldn't bother + _punctMap: { + 106:42, + 111:47, + 186:59, + 187:43, + 188:44, + 189:45, + 190:46, + 191:47, + 192:96, + 219:91, + 220:92, + 221:93, + 222:39 + }, + _stealthKeyDown: function(evt){ + // IE doesn't fire keypress for most non-printable characters. + // other browsers do, we simulate it here. + var kp = evt.currentTarget.onkeypress; + // only works if kp exists and is a dispatcher + if(!kp || !kp._listeners){ return; } + // munge key/charCode + var k=evt.keyCode; + // These are Windows Virtual Key Codes + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp + var unprintable = (k!=13)&&(k!=32)&&(k!=27)&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222); + // synthesize keypress for most unprintables and CTRL-keys + if(unprintable||evt.ctrlKey){ + var c = unprintable ? 0 : k; + if(evt.ctrlKey){ + if(k==3 || k==13){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ + c -= 48; // map CTRL-[numpad 0-9] to ASCII + }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ + c += 32; // map CTRL-[A-Z] to lowercase + }else{ + c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII + } + } + // simulate a keypress event + var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); + kp.call(evt.currentTarget, faux); + evt.cancelBubble = faux.cancelBubble; + evt.returnValue = faux.returnValue; + _trySetKeyCode(evt, faux.keyCode); + } + }, + // Called in Event scope + _stopPropagation: function(){ + this.cancelBubble = true; + }, + _preventDefault: function(){ + // Setting keyCode to 0 is the only way to prevent certain keypresses (namely + // ctrl-combinations that correspond to menu accelerator keys). + // Otoh, it prevents upstream listeners from getting this information + // Try to split the difference here by clobbering keyCode only for ctrl + // combinations. If you still need to access the key upstream, bubbledKeyCode is + // provided as a workaround. + this.bubbledKeyCode = this.keyCode; + if(this.ctrlKey){_trySetKeyCode(this, 0);} + this.returnValue = false; + } + }); + + // override stopEvent for IE + dojo.stopEvent = function(evt){ + evt = evt || window.event; + del._stopPropagation.call(evt); + del._preventDefault.call(evt); + } + } + + del._synthesizeEvent = function(evt, props){ + var faux = dojo.mixin({}, evt, props); + del._setKeyChar(faux); + // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); + // but it throws an error when preventDefault is invoked on Safari + // does Event.preventDefault not support "apply" on Safari? + faux.preventDefault = function(){ evt.preventDefault(); }; + faux.stopPropagation = function(){ evt.stopPropagation(); }; + return faux; + } + + // Opera event normalization + if(dojo.isOpera){ + dojo.mixin(del, { + _fixEvent: function(evt, sender){ + switch(evt.type){ + case "keypress": + var c = evt.which; + if(c==3){ + c=99; // Mozilla maps CTRL-BREAK to CTRL-c + } + // can't trap some keys at all, like INSERT and DELETE + // there is no differentiating info between DELETE and ".", or INSERT and "-" + c = ((c<41)&&(!evt.shiftKey) ? 0 : c); + if((evt.ctrlKey)&&(!evt.shiftKey)&&(c>=65)&&(c<=90)){ + // lowercase CTRL-[A-Z] keys + c += 32; + } + return del._synthesizeEvent(evt, { charCode: c }); + } + return evt; + } + }); + } + + // Safari event normalization + if(dojo.isSafari){ + dojo.mixin(del, { + _fixEvent: function(evt, sender){ + switch(evt.type){ + case "keypress": + var c = evt.charCode, s = evt.shiftKey, k = evt.keyCode; + // FIXME: This is a hack, suggest we rethink keyboard strategy. + // Arrow and page keys have 0 "keyCode" in keypress events.on Safari for Windows + k = k || identifierMap[evt.keyIdentifier] || 0; + if(evt.keyIdentifier=="Enter"){ + c = 0; // differentiate Enter from CTRL-m (both code 13) + }else if((evt.ctrlKey)&&(c>0)&&(c<27)){ + c += 96; // map CTRL-[A-Z] codes to ASCII + } else if (c==dojo.keys.SHIFT_TAB) { + c = dojo.keys.TAB; // morph SHIFT_TAB into TAB + shiftKey: true + s = true; + } else { + c = (c>=32 && c<63232 ? c : 0); // avoid generating keyChar for non-printables + } + return del._synthesizeEvent(evt, {charCode: c, shiftKey: s, keyCode: k}); + } + return evt; + } + }); + + dojo.mixin(dojo.keys, { + SHIFT_TAB: 25, + UP_ARROW: 63232, + DOWN_ARROW: 63233, + LEFT_ARROW: 63234, + RIGHT_ARROW: 63235, + F1: 63236, + F2: 63237, + F3: 63238, + F4: 63239, + F5: 63240, + F6: 63241, + F7: 63242, + F8: 63243, + F9: 63244, + F10: 63245, + F11: 63246, + F12: 63247, + PAUSE: 63250, + DELETE: 63272, + HOME: 63273, + END: 63275, + PAGE_UP: 63276, + PAGE_DOWN: 63277, + INSERT: 63302, + PRINT_SCREEN: 63248, + SCROLL_LOCK: 63249, + NUM_LOCK: 63289 + }); + var dk = dojo.keys, identifierMap = { "Up": dk.UP_ARROW, "Down": dk.DOWN_ARROW, "Left": dk.LEFT_ARROW, "Right": dk.RIGHT_ARROW, "PageUp": dk.PAGE_UP, "PageDown": dk.PAGE_DOWN }; + } +})(); + +if(dojo.isIE){ + // keep this out of the closure + // closing over 'iel' or 'ieh' b0rks leak prevention + // ls[i] is an index into the master handler array + dojo._ieDispatcher = function(args, sender){ + var ap=Array.prototype, h=dojo._ie_listener.handlers, c=args.callee, ls=c._listeners, t=h[c.target]; + // return value comes from original target function + var r = t && t.apply(sender, args); + // invoke listeners after target function + for(var i in ls){ + if(!(i in ap)){ + h[ls[i]].apply(sender, args); + } + } + return r; + } + dojo._getIeDispatcher = function(){ + // ensure the returned function closes over nothing + return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)"); // function + } + // keep this out of the closure to reduce RAM allocation + dojo._event_listener._fixCallback = function(fp){ + var f = dojo._event_listener._fixEvent; + return function(e){ return fp.call(this, f(e, this)); }; + } +} + +} + +if(!dojo._hasResource["dojo._base.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.html"] = true; + +dojo.provide("dojo._base.html"); + +// FIXME: need to add unit tests for all the semi-public methods + +try{ + document.execCommand("BackgroundImageCache", false, true); +}catch(e){ + // sane browsers don't have cache "issues" +} + +// ============================= +// DOM Functions +// ============================= + +/*===== +dojo.byId = function(id, doc){ + // summary: + // Returns DOM node with matching `id` attribute or `null` + // if not found, similar to "$" function in another library. + // If `id` is a DomNode, this function is a no-op. + // + // id: String|DOMNode + // A string to match an HTML id attribute or a reference to a DOM Node + // + // doc: Document? + // Document to work in. Defaults to the current value of + // dojo.doc. Can be used to retrieve + // node references from other documents. +=====*/ +if(dojo.isIE || dojo.isOpera){ + dojo.byId = function(id, doc){ + if(dojo.isString(id)){ + var _d = doc || dojo.doc; + var te = _d.getElementById(id); + // attributes.id.value is better than just id in case the + // user has a name=id inside a form + if(te && te.attributes.id.value == id){ + return te; + }else{ + var eles = _d.all[id]; + if(!eles || !eles.length){ return eles; } + // if more than 1, choose first with the correct id + var i=0; + while((te=eles[i++])){ + if(te.attributes.id.value == id){ return te; } + } + } + }else{ + return id; // DomNode + } + } +}else{ + dojo.byId = function(id, doc){ + return dojo.isString(id) ? (doc || dojo.doc).getElementById(id) : id; // DomNode + } +} +/*===== +} +=====*/ + +(function(){ + /* + dojo.createElement = function(obj, parent, position){ + // TODO: need to finish this! + } + */ + + var d = dojo; + + var _destroyContainer = null; + dojo.addOnUnload(function(){ + _destroyContainer=null; //prevent IE leak + }); + dojo._destroyElement = function(/*String||DomNode*/node){ + // summary: + // removes node from its parent, clobbers it and all of its + // children. + // node: + // the element to be destroyed, either as an ID or a reference + + node = d.byId(node); + try{ + if(!_destroyContainer){ + _destroyContainer = document.createElement("div"); + } + _destroyContainer.appendChild(node.parentNode ? node.parentNode.removeChild(node) : node); + // NOTE: see http://trac.dojotoolkit.org/ticket/2931. This may be a bug and not a feature + _destroyContainer.innerHTML = ""; + }catch(e){ + /* squelch */ + } + }; + + dojo.isDescendant = function(/*DomNode|String*/node, /*DomNode|String*/ancestor){ + // summary: + // Returns true if node is a descendant of ancestor + // node: id or node reference to test + // ancestor: id or node reference of potential parent to test against + try{ + node = d.byId(node); + ancestor = d.byId(ancestor); + while(node){ + if(node === ancestor){ + return true; // Boolean + } + node = node.parentNode; + } + }catch(e){ /* squelch, return false */ } + return false; // Boolean + }; + + dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){ + // summary: enable or disable selection on a node + // node: + // id or reference to node + // selectable: + node = d.byId(node); + if(d.isMozilla){ + node.style.MozUserSelect = selectable ? "" : "none"; + }else if(d.isKhtml){ + node.style.KhtmlUserSelect = selectable ? "auto" : "none"; + }else if(d.isIE){ + node.unselectable = selectable ? "" : "on"; + d.query("*", node).forEach(function(descendant){ + descendant.unselectable = selectable ? "" : "on"; + }); + } + //FIXME: else? Opera? + }; + + var _insertBefore = function(/*Node*/node, /*Node*/ref){ + ref.parentNode.insertBefore(node, ref); + return true; // boolean + } + + var _insertAfter = function(/*Node*/node, /*Node*/ref){ + // summary: + // Try to insert node after ref + var pn = ref.parentNode; + if(ref == pn.lastChild){ + pn.appendChild(node); + }else{ + return _insertBefore(node, ref.nextSibling); // boolean + } + return true; // boolean + } + + dojo.place = function(/*String|DomNode*/node, /*String|DomNode*/refNode, /*String|Number*/position){ + // summary: + // Attempt to insert node into the DOM, choosing from various positioning options. + // Returns true if successful, false otherwise. + // node: + // id or node reference to place relative to refNode + // refNode: + // id or node reference to use as basis for placement + // position: + // string noting the position of node relative to refNode or a + // number indicating the location in the childNodes collection of + // refNode. Accepted string values are: + // + // * before + // * after + // * first + // * last + // + // "first" and "last" indicate positions as children of refNode. + + // FIXME: need to write tests for this!!!! + if(!node || !refNode || position === undefined){ + return false; // boolean + } + node = d.byId(node); + refNode = d.byId(refNode); + if(typeof position == "number"){ + var cn = refNode.childNodes; + if((position == 0 && cn.length == 0) || + cn.length == position){ + refNode.appendChild(node); return true; + } + if(position == 0){ + return _insertBefore(node, refNode.firstChild); + } + return _insertAfter(node, cn[position-1]); + } + switch(position.toLowerCase()){ + case "before": + return _insertBefore(node, refNode); // boolean + case "after": + return _insertAfter(node, refNode); // boolean + case "first": + if(refNode.firstChild){ + return _insertBefore(node, refNode.firstChild); // boolean + } + // else fallthrough... + default: // aka: last + refNode.appendChild(node); + return true; // boolean + } + } + + // Box functions will assume this model. + // On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode. + // Can be set to change behavior of box setters. + + // can be either: + // "border-box" + // "content-box" (default) + dojo.boxModel = "content-box"; + + // We punt per-node box mode testing completely. + // If anybody cares, we can provide an additional (optional) unit + // that overrides existing code to include per-node box sensitivity. + + // Opera documentation claims that Opera 9 uses border-box in BackCompat mode. + // but experiments (Opera 9.10.8679 on Windows Vista) indicate that it actually continues to use content-box. + // IIRC, earlier versions of Opera did in fact use border-box. + // Opera guys, this is really confusing. Opera being broken in quirks mode is not our fault. + + if(d.isIE /*|| dojo.isOpera*/){ + var _dcm = document.compatMode; + // client code may have to adjust if compatMode varies across iframes + d.boxModel = _dcm == "BackCompat" || _dcm == "QuirksMode" || d.isIE<6 ? "border-box" : "content-box"; // FIXME: remove IE < 6 support? + } + + // ============================= + // Style Functions + // ============================= + + // getComputedStyle drives most of the style code. + // Wherever possible, reuse the returned object. + // + // API functions below that need to access computed styles accept an + // optional computedStyle parameter. + // If this parameter is omitted, the functions will call getComputedStyle themselves. + // This way, calling code can access computedStyle once, and then pass the reference to + // multiple API functions. + +/*===== + dojo.getComputedStyle = function(node){ + // summary: + // Returns a "computed style" object. + // + // description: + // Gets a "computed style" object which can be used to gather + // information about the current state of the rendered node. + // + // Note that this may behave differently on different browsers. + // Values may have different formats and value encodings across + // browsers. + // + // Note also that this method is expensive. Wherever possible, + // reuse the returned object. + // + // Use the dojo.style() method for more consistent (pixelized) + // return values. + // + // node: DOMNode + // A reference to a DOM node. Does NOT support taking an + // ID string for speed reasons. + // example: + // | dojo.getComputedStyle(dojo.byId('foo')).borderWidth; + return; // CSS2Properties + } +=====*/ + + var gcs, dv = document.defaultView; + if(d.isSafari){ + gcs = function(/*DomNode*/node){ + var s = dv.getComputedStyle(node, null); + if(!s && node.style){ + node.style.display = ""; + s = dv.getComputedStyle(node, null); + } + return s || {}; + }; + }else if(d.isIE){ + gcs = function(node){ + return node.currentStyle; + }; + }else{ + gcs = function(node){ + return dv.getComputedStyle(node, null); + }; + } + dojo.getComputedStyle = gcs; + + if(!d.isIE){ + dojo._toPixelValue = function(element, value){ + // style values can be floats, client code may want + // to round for integer pixels. + return parseFloat(value) || 0; + } + }else{ + dojo._toPixelValue = function(element, avalue){ + if(!avalue){ return 0; } + // on IE7, medium is usually 4 pixels + if(avalue=="medium"){ return 4; } + // style values can be floats, client code may + // want to round this value for integer pixels. + if(avalue.slice && (avalue.slice(-2)=='px')){ return parseFloat(avalue); } + with(element){ + var sLeft = style.left; + var rsLeft = runtimeStyle.left; + runtimeStyle.left = currentStyle.left; + try{ + // 'avalue' may be incompatible with style.left, which can cause IE to throw + // this has been observed for border widths using "thin", "medium", "thick" constants + // those particular constants could be trapped by a lookup + // but perhaps there are more + style.left = avalue; + avalue = style.pixelLeft; + }catch(e){ + avalue = 0; + } + style.left = sLeft; + runtimeStyle.left = rsLeft; + } + return avalue; + } + } + var px = d._toPixelValue; + + // FIXME: there opacity quirks on FF that we haven't ported over. Hrm. + /*===== + dojo._getOpacity = function(node){ + // summary: + // Returns the current opacity of the passed node as a + // floating-point value between 0 and 1. + // node: DomNode + // a reference to a DOM node. Does NOT support taking an + // ID string for speed reasons. + // return: Number between 0 and 1 + } + =====*/ + + dojo._getOpacity = d.isIE ? function(node){ + try{ + return node.filters.alpha.opacity / 100; // Number + }catch(e){ + return 1; // Number + } + } : function(node){ + return gcs(node).opacity; + }; + + /*===== + dojo._setOpacity = function(node, opacity){ + // summary: + // set the opacity of the passed node portably. Returns the + // new opacity of the node. + // node: DOMNode + // a reference to a DOM node. Does NOT support taking an + // ID string for performance reasons. + // opacity: Number + // A Number between 0 and 1. 0 specifies transparent. + // return: Number between 0 and 1 + } + =====*/ + + dojo._setOpacity = d.isIE ? function(/*DomNode*/node, /*Number*/opacity){ + if(opacity == 1){ + // on IE7 Alpha(Filter opacity=100) makes text look fuzzy so remove it altogether (bug #2661) + var filterRE = /FILTER:[^;]*;?/i; + node.style.cssText = node.style.cssText.replace(filterRE, ""); + if(node.nodeName.toLowerCase() == "tr"){ + d.query("> td", node).forEach(function(i){ + i.style.cssText = i.style.cssText.replace(filterRE, ""); + }); + } + }else{ + var o = "Alpha(Opacity="+ opacity * 100 +")"; + node.style.filter = o; + } + if(node.nodeName.toLowerCase() == "tr"){ + d.query("> td", node).forEach(function(i){ + i.style.filter = o; + }); + } + return opacity; + } : function(node, opacity){ + return node.style.opacity = opacity; + }; + + var _pixelNamesCache = { + left: true, top: true + }; + var _pixelRegExp = /margin|padding|width|height|max|min|offset/; // |border + var _toStyleValue = function(node, type, value){ + type = type.toLowerCase(); + if(d.isIE && value == "auto"){ + if(type == "height"){ return node.offsetHeight; } + if(type == "width"){ return node.offsetWidth; } + } + if(!(type in _pixelNamesCache)){ + // if(dojo.isOpera && type == "cssText"){ + // FIXME: add workaround for #2855 here + // } + _pixelNamesCache[type] = _pixelRegExp.test(type); + } + return _pixelNamesCache[type] ? px(node, value) : value; + } + + var _floatStyle = d.isIE ? "styleFloat" : "cssFloat"; + var _floatAliases = { "cssFloat": _floatStyle, "styleFloat": _floatStyle, "float": _floatStyle }; + + // public API + + dojo.style = function( /*DomNode|String*/ node, + /*String?|Object?*/ style, + /*String?*/ value){ + // summary: + // Accesses styles on a node. If 2 arguments are + // passed, acts as a getter. If 3 arguments are passed, acts + // as a setter. + // node: + // id or reference to node to get/set style for + // style: + // the style property to set in DOM-accessor format + // ("borderWidth", not "border-width") or an object with key/value + // pairs suitable for setting each property. + // value: + // If passed, sets value on the node for style, handling + // cross-browser concerns. + // example: + // Passing only an ID or node returns the computed style object of + // the node: + // | dojo.style("thinger"); + // example: + // Passing a node and a style property returns the current + // normalized, computed value for that property: + // | dojo.style("thinger", "opacity"); // 1 by default + // + // example: + // Passing a node, a style property, and a value changes the + // current display of the node and returns the new computed value + // | dojo.style("thinger", "opacity", 0.5); // == 0.5 + // + // example: + // Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node: + // | dojo.style("thinger", { + // | "opacity": 0.5, + // | "border": "3px solid black", + // | "height": 300 + // | }); + // + // example: + // When the CSS style property is hyphenated, the JavaScript property is camelCased. + // font-size becomes fontSize, and so on. + // | dojo.style("thinger",{ + // | fontSize:"14pt", + // | letterSpacing:"1.2em" + // | }); + // + // example: + // dojo.NodeList implements .style() using the same syntax, omitting the "node" parameter, calling + // dojo.style() on every element of the list. See: dojo.query and dojo.NodeList + // | dojo.query(".someClassName").style("visibility","hidden"); + // | // or + // | dojo.query("#baz > div").style({ + // | opacity:0.75, + // | fontSize:"13pt" + // | }); + + var n = d.byId(node), args = arguments.length, op = (style=="opacity"); + style = _floatAliases[style] || style; + if(args == 3){ + return op ? d._setOpacity(n, value) : n.style[style] = value; /*Number*/ + } + if(args == 2 && op){ + return d._getOpacity(n); + } + var s = gcs(n); + if(args == 2 && !d.isString(style)){ + for(var x in style){ + d.style(node, x, style[x]); + } + return s; + } + return (args == 1) ? s : _toStyleValue(n, style, s[style]); /* CSS2Properties||String||Number */ + } + + // ============================= + // Box Functions + // ============================= + + dojo._getPadExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // Returns object with special values specifically useful for node + // fitting. + // + // * l/t = left/top padding (respectively) + // * w = the total of the left and right padding + // * h = the total of the top and bottom padding + // + // If 'node' has position, l/t forms the origin for child nodes. + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + l = px(n, s.paddingLeft), + t = px(n, s.paddingTop); + return { + l: l, + t: t, + w: l+px(n, s.paddingRight), + h: t+px(n, s.paddingBottom) + }; + } + + dojo._getBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // returns an object with properties useful for noting the border + // dimensions. + // + // * l/t = the sum of left/top border (respectively) + // * w = the sum of the left and right border + // * h = the sum of the top and bottom border + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + ne = "none", + s = computedStyle||gcs(n), + bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0), + bt = (s.borderTopStyle != ne ? px(n, s.borderTopWidth) : 0); + return { + l: bl, + t: bt, + w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0), + h: bt + (s.borderBottomStyle!=ne ? px(n, s.borderBottomWidth) : 0) + }; + } + + dojo._getPadBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // returns object with properties useful for box fitting with + // regards to padding. + // + // * l/t = the sum of left/top padding and left/top border (respectively) + // * w = the sum of the left and right padding and border + // * h = the sum of the top and bottom padding and border + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + p = d._getPadExtents(n, s), + b = d._getBorderExtents(n, s); + return { + l: p.l + b.l, + t: p.t + b.t, + w: p.w + b.w, + h: p.h + b.h + }; + } + + dojo._getMarginExtents = function(n, computedStyle){ + // summary: + // returns object with properties useful for box fitting with + // regards to box margins (i.e., the outer-box). + // + // * l/t = marginLeft, marginTop, respectively + // * w = total width, margin inclusive + // * h = total height, margin inclusive + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + l = px(n, s.marginLeft), + t = px(n, s.marginTop), + r = px(n, s.marginRight), + b = px(n, s.marginBottom); + if(d.isSafari && (s.position != "absolute")){ + // FIXME: Safari's version of the computed right margin + // is the space between our right edge and the right edge + // of our offsetParent. + // What we are looking for is the actual margin value as + // determined by CSS. + // Hack solution is to assume left/right margins are the same. + r = l; + } + return { + l: l, + t: t, + w: l+r, + h: t+b + }; + } + + // Box getters work in any box context because offsetWidth/clientWidth + // are invariant wrt box context + // + // They do *not* work for display: inline objects that have padding styles + // because the user agent ignores padding (it's bogus styling in any case) + // + // Be careful with IMGs because they are inline or block depending on + // browser and browser mode. + + // Although it would be easier to read, there are not separate versions of + // _getMarginBox for each browser because: + // 1. the branching is not expensive + // 2. factoring the shared code wastes cycles (function call overhead) + // 3. duplicating the shared code wastes bytes + + dojo._getMarginBox = function(/*DomNode*/node, /*Object*/computedStyle){ + // summary: + // returns an object that encodes the width, height, left and top + // positions of the node's margin box. + var s = computedStyle||gcs(node), me = d._getMarginExtents(node, s); + var l = node.offsetLeft - me.l, t = node.offsetTop - me.t; + if(d.isMoz){ + // Mozilla: + // If offsetParent has a computed overflow != visible, the offsetLeft is decreased + // by the parent's border. + // We don't want to compute the parent's style, so instead we examine node's + // computed left/top which is more stable. + var sl = parseFloat(s.left), st = parseFloat(s.top); + if(!isNaN(sl) && !isNaN(st)){ + l = sl, t = st; + }else{ + // If child's computed left/top are not parseable as a number (e.g. "auto"), we + // have no choice but to examine the parent's computed style. + var p = node.parentNode; + if(p && p.style){ + var pcs = gcs(p); + if(pcs.overflow != "visible"){ + var be = d._getBorderExtents(p, pcs); + l += be.l, t += be.t; + } + } + } + }else if(d.isOpera){ + // On Opera, offsetLeft includes the parent's border + var p = node.parentNode; + if(p){ + var be = d._getBorderExtents(p); + l -= be.l, t -= be.t; + } + } + return { + l: l, + t: t, + w: node.offsetWidth + me.w, + h: node.offsetHeight + me.h + }; + } + + dojo._getContentBox = function(node, computedStyle){ + // summary: + // Returns an object that encodes the width, height, left and top + // positions of the node's content box, irrespective of the + // current box model. + + // clientWidth/Height are important since the automatically account for scrollbars + // fallback to offsetWidth/Height for special cases (see #3378) + var s=computedStyle||gcs(node), pe=d._getPadExtents(node, s), be=d._getBorderExtents(node, s), w=node.clientWidth, h; + if(!w){ + w=node.offsetWidth, h=node.offsetHeight; + }else{ + h=node.clientHeight, be.w = be.h = 0; + } + // On Opera, offsetLeft includes the parent's border + if(d.isOpera){ pe.l += be.l; pe.t += be.t; }; + return { + l: pe.l, + t: pe.t, + w: w - pe.w - be.w, + h: h - pe.h - be.h + }; + } + + dojo._getBorderBox = function(node, computedStyle){ + var s=computedStyle||gcs(node), pe=d._getPadExtents(node, s), cb=d._getContentBox(node, s); + return { + l: cb.l - pe.l, + t: cb.t - pe.t, + w: cb.w + pe.w, + h: cb.h + pe.h + }; + } + + // Box setters depend on box context because interpretation of width/height styles + // vary wrt box context. + // + // The value of dojo.boxModel is used to determine box context. + // dojo.boxModel can be set directly to change behavior. + // + // Beware of display: inline objects that have padding styles + // because the user agent ignores padding (it's a bogus setup anyway) + // + // Be careful with IMGs because they are inline or block depending on + // browser and browser mode. + // + // Elements other than DIV may have special quirks, like built-in + // margins or padding, or values not detectable via computedStyle. + // In particular, margins on TABLE do not seems to appear + // at all in computedStyle on Mozilla. + + dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){ + // summary: + // sets width/height/left/top in the current (native) box-model + // dimentions. Uses the unit passed in u. + // node: DOM Node reference. Id string not supported for performance reasons. + // l: optional. left offset from parent. + // t: optional. top offset from parent. + // w: optional. width in current box model. + // h: optional. width in current box model. + // u: optional. unit measure to use for other measures. Defaults to "px". + u = u || "px"; + var s = node.style; + if(!isNaN(l)){ s.left = l+u; } + if(!isNaN(t)){ s.top = t+u; } + if(w>=0){ s.width = w+u; } + if(h>=0){ s.height = h+u; } + } + + dojo._usesBorderBox = function(/*DomNode*/node){ + // summary: + // True if the node uses border-box layout. + + // We could test the computed style of node to see if a particular box + // has been specified, but there are details and we choose not to bother. + var n = node.tagName; + // For whatever reason, TABLE and BUTTON are always border-box by default. + // If you have assigned a different box to either one via CSS then + // box functions will break. + return d.boxModel=="border-box" || n=="TABLE" || n=="BUTTON"; // boolean + } + + dojo._setContentSize = function(/*DomNode*/node, /*Number*/widthPx, /*Number*/heightPx, /*Object*/computedStyle){ + // summary: + // Sets the size of the node's contents, irrespective of margins, + // padding, or borders. + if(d._usesBorderBox(node)){ + var pb = d._getPadBorderExtents(node, computedStyle); + if(widthPx >= 0){ widthPx += pb.w; } + if(heightPx >= 0){ heightPx += pb.h; } + } + d._setBox(node, NaN, NaN, widthPx, heightPx); + } + + dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, + /*Number?*/widthPx, /*Number?*/heightPx, + /*Object*/computedStyle){ + // summary: + // sets the size of the node's margin box and placement + // (left/top), irrespective of box model. Think of it as a + // passthrough to dojo._setBox that handles box-model vagaries for + // you. + + var s = computedStyle||gcs(node); + // Some elements have special padding, margin, and box-model settings. + // To use box functions you may need to set padding, margin explicitly. + // Controlling box-model is harder, in a pinch you might set dojo.boxModel. + var bb=d._usesBorderBox(node), + pb=bb ? _nilExtents : d._getPadBorderExtents(node, s), + mb=d._getMarginExtents(node, s); + if(widthPx>=0){ widthPx = Math.max(widthPx - pb.w - mb.w, 0); } + if(heightPx>=0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); } + d._setBox(node, leftPx, topPx, widthPx, heightPx); + } + + var _nilExtents = { l:0, t:0, w:0, h:0 }; + + // public API + + dojo.marginBox = function(/*DomNode|String*/node, /*Object?*/box){ + // summary: + // Getter/setter for the margin-box of node. + // description: + // Returns an object in the expected format of box (regardless + // if box is passed). The object might look like: + // `{ l: 50, t: 200, w: 300: h: 150 }` + // for a node offset from its parent 50px to the left, 200px from + // the top with a margin width of 300px and a margin-height of + // 150px. + // node: + // id or reference to DOM Node to get/set box for + // box: + // If passed, denotes that dojo.marginBox() should + // update/set the margin box for node. Box is an object in the + // above format. All properties are optional if passed. + var n=d.byId(node), s=gcs(n), b=box; + return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object + } + + dojo.contentBox = function(/*DomNode|String*/node, /*Object?*/box){ + // summary: + // Getter/setter for the content-box of node. + // description: + // Returns an object in the expected format of box (regardless if box is passed). + // The object might look like: + // `{ l: 50, t: 200, w: 300: h: 150 }` + // for a node offset from its parent 50px to the left, 200px from + // the top with a content width of 300px and a content-height of + // 150px. Note that the content box may have a much larger border + // or margin box, depending on the box model currently in use and + // CSS values set/inherited for node. + // node: + // id or reference to DOM Node to get/set box for + // box: + // If passed, denotes that dojo.contentBox() should + // update/set the content box for node. Box is an object in the + // above format. All properties are optional if passed. + var n=dojo.byId(node), s=gcs(n), b=box; + return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object + } + + // ============================= + // Positioning + // ============================= + + var _sumAncestorProperties = function(node, prop){ + if(!(node = (node||0).parentNode)){return 0}; + var val, retVal = 0, _b = d.body(); + while(node && node.style){ + if(gcs(node).position == "fixed"){ + return 0; + } + val = node[prop]; + if(val){ + retVal += val - 0; + // opera and khtml #body & #html has the same values, we only + // need one value + if(node == _b){ break; } + } + node = node.parentNode; + } + return retVal; // integer + } + + dojo._docScroll = function(){ + var + _b = d.body(), + _w = d.global, + de = d.doc.documentElement; + return { + y: (_w.pageYOffset || de.scrollTop || _b.scrollTop || 0), + x: (_w.pageXOffset || d._fixIeBiDiScrollLeft(de.scrollLeft) || _b.scrollLeft || 0) + }; + }; + + dojo._isBodyLtr = function(){ + //FIXME: could check html and body tags directly instead of computed style? need to ignore case, accept empty values + return !("_bodyLtr" in d) ? + d._bodyLtr = gcs(d.body()).direction == "ltr" : + d._bodyLtr; // Boolean + } + + dojo._getIeDocumentElementOffset = function(){ + // summary + // The following values in IE contain an offset: + // event.clientX + // event.clientY + // node.getBoundingClientRect().left + // node.getBoundingClientRect().top + // But other position related values do not contain this offset, such as + // node.offsetLeft, node.offsetTop, node.style.left and node.style.top. + // The offset is always (2, 2) in LTR direction. When the body is in RTL + // direction, the offset counts the width of left scroll bar's width. + // This function computes the actual offset. + + //NOTE: assumes we're being called in an IE browser + + var de = d.doc.documentElement; + //FIXME: use this instead? var de = d.compatMode == "BackCompat" ? d.body : d.documentElement; + + return (d.isIE >= 7) ? + {x: de.getBoundingClientRect().left, y: de.getBoundingClientRect().top} + : + // IE 6.0 + {x: d._isBodyLtr() || window.parent == window ? + de.clientLeft : de.offsetWidth - de.clientWidth - de.clientLeft, + y: de.clientTop}; // Object + }; + + dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ + // In RTL direction, scrollLeft should be a negative value, but IE + // returns a positive one. All codes using documentElement.scrollLeft + // must call this function to fix this error, otherwise the position + // will offset to right when there is a horizontal scrollbar. + var dd = d.doc; + if(d.isIE && !dojo._isBodyLtr()){ + var de = dd.compatMode == "BackCompat" ? dd.body : dd.documentElement; + return scrollLeft + de.clientWidth - de.scrollWidth; // Integer + } + return scrollLeft; // Integer + } + + dojo._abs = function(/*DomNode*/node, /*Boolean?*/includeScroll){ + // summary: + // Gets the position of the passed element relative to + // the viewport (if includeScroll==false), or relative to the + // document root (if includeScroll==true). + // + // Returns an object of the form: + // { x: 100, y: 300 } + // if includeScroll is passed, the x and y values will include any + // document offsets that may affect the position relative to the + // viewport. + + // FIXME: need to decide in the brave-new-world if we're going to be + // margin-box or border-box. + var ownerDocument = node.ownerDocument; + var ret = { + x: 0, + y: 0 + }; + + // targetBoxType == "border-box" + var db = d.body(); + if(d.isIE || (d.isFF >= 3)){ + var client = node.getBoundingClientRect(); + var offset = (d.isIE) ? d._getIeDocumentElementOffset() : { x: 0, y: 0}; + ret.x = client.left - offset.x; + ret.y = client.top - offset.y; + }else if(ownerDocument["getBoxObjectFor"]){ + // mozilla + var bo = ownerDocument.getBoxObjectFor(node), + b = d._getBorderExtents(node); + ret.x = bo.x - b.l - _sumAncestorProperties(node, "scrollLeft"); + ret.y = bo.y - b.t - _sumAncestorProperties(node, "scrollTop"); + }else{ + if(node["offsetParent"]){ + var endNode; + // in Safari, if the node is an absolutely positioned child of + // the body and the body has a margin the offset of the child + // and the body contain the body's margins, so we need to end + // at the body + // FIXME: getting contrary results to the above in latest WebKit. + if(d.isSafari && + //(node.style.getPropertyValue("position") == "absolute") && + (gcs(node).position == "absolute") && + (node.parentNode == db)){ + endNode = db; + }else{ + endNode = db.parentNode; + } + if(node.parentNode != db){ + var nd = node; + if(d.isOpera){ nd = db; } + ret.x -= _sumAncestorProperties(nd, "scrollLeft"); + ret.y -= _sumAncestorProperties(nd, "scrollTop"); + } + var curnode = node; + do{ + var n = curnode.offsetLeft; + //FIXME: ugly hack to workaround the submenu in + //popupmenu2 does not shown up correctly in opera. + //Someone have a better workaround? + if(!d.isOpera || n > 0){ + ret.x += isNaN(n) ? 0 : n; + } + var t = curnode.offsetTop; + ret.y += isNaN(t) ? 0 : t; + if(d.isSafari && curnode != node){ + var cs = gcs(curnode); + ret.x += px(curnode, cs.borderLeftWidth); + ret.y += px(curnode, cs.borderTopWidth); + } + curnode = curnode.offsetParent; + }while((curnode != endNode) && curnode); + }else if(node.x && node.y){ + ret.x += isNaN(node.x) ? 0 : node.x; + ret.y += isNaN(node.y) ? 0 : node.y; + } + } + // account for document scrolling + // if offsetParent is used, ret value already includes scroll position + // so we may have to actually remove that value if !includeScroll + if(includeScroll){ + var scroll = d._docScroll(); + ret.y += scroll.y; + ret.x += scroll.x; + } + + return ret; // object + } + + // FIXME: need a setter for coords or a moveTo!! + dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){ + // summary: + // Returns an object that measures margin box width/height and + // absolute positioning data from dojo._abs(). + // + // description: + // Returns an object that measures margin box width/height and + // absolute positioning data from dojo._abs(). + // Return value will be in the form: + // `{ l: 50, t: 200, w: 300: h: 150, x: 100, y: 300 }` + // Does not act as a setter. If includeScroll is passed, the x and + // y params are affected as one would expect in dojo._abs(). + var n=d.byId(node), s=gcs(n), mb=d._getMarginBox(n, s); + var abs = d._abs(n, includeScroll); + mb.x = abs.x; + mb.y = abs.y; + return mb; + } + + // ============================= + // Element attribute Functions + // ============================= + + var _fixAttrName = function(/*String*/name){ + switch(name.toLowerCase()){ + case "tabindex": + // Internet Explorer will only set or remove tabindex + // if it is spelled "tabIndex" + // console.debug((dojo.isIE && dojo.isIE < 8)? "tabIndex" : "tabindex"); + return (d.isIE && d.isIE < 8) ? "tabIndex" : "tabindex"; + default: + return name; + } + } + + // non-deprecated HTML4 attributes with default values + // http://www.w3.org/TR/html401/index/attributes.html + // FF and Safari will return the default values if you + // access the attributes via a property but not + // via getAttribute() + var _attrProps = { + colspan: "colSpan", + enctype: "enctype", + frameborder: "frameborder", + method: "method", + rowspan: "rowSpan", + scrolling: "scrolling", + shape: "shape", + span: "span", + type: "type", + valuetype: "valueType" + } + + dojo.hasAttr = function(/*DomNode|String*/node, /*String*/name){ + // summary: + // Returns true if the requested attribute is specified on the + // given element, and false otherwise. + // node: + // id or reference to the element to check + // name: + // the name of the attribute + // returns: + // true if the requested attribute is specified on the + // given element, and false otherwise + var attr = d.byId(node).getAttributeNode(_fixAttrName(name)); + return attr ? attr.specified : false; // Boolean + } + + var _evtHdlrMap = { + + } + + var _ctr = 0; + var _attrId = dojo._scopeName + "attrid"; + + dojo.attr = function(/*DomNode|String*/node, /*String|Object*/name, /*String?*/value){ + // summary: + // Gets or sets an attribute on an HTML element. + // description: + // Handles normalized getting and setting of attributes on DOM + // Nodes. If 2 arguments are passed, and a the second argumnt is a + // string, acts as a getter. + // + // If a third argument is passed, or if the second argumnt is a + // map of attributes, acts as a setter. + // + // When passing functions as values, note that they will not be + // directly assigned to slots on the node, but rather the default + // behavior will be removed and the new behavior will be added + // using `dojo.connect()`, meaning that event handler properties + // will be normalized and that some caveats with regards to + // non-standard behaviors for onsubmit apply. Namely that you + // should cancel form submission using `dojo.stopEvent()` on the + // passed event object instead of returning a boolean value from + // the handler itself. + // node: + // id or reference to the element to get or set the attribute on + // name: + // the name of the attribute to get or set. + // value: + // The value to set for the attribute + // returns: + // when used as a getter, the value of the requested attribute + // or null if that attribute does not have a specified or + // default value; + // + // when user as a setter, undefined + // example: + // | // get the current value of the "foo" attribute on a node + // | dojo.attr(dojo.byId("nodeId"), "foo"); + // | + // | // we can just pass the id: + // | dojo.attr("nodeId", "foo"); + // | + // | // use attr() to set the tab index + // | dojo.attr("nodeId", "tabindex", 3); + // | + // | // set multiple values at once, including event handlers: + // | dojo.attr("formId", { + // | "foo": "bar", + // | "tabindex": -1, + // | "method": "POST", + // | "onsubmit": function(e){ + // | // stop submitting the form. Note that the IE behavior + // | // of returning true or false will have no effect here + // | // since our handler is connect()ed to the built-in + // | // onsubmit behavior and so we need to use + // | // dojo.stopEvent() to ensure that the submission + // | // doesn't proceed. + // | dojo.stopEvent(e); + // | + // | // submit the form with Ajax + // | dojo.xhrPost({ form: "formId" }); + // | } + // | }); + + var args = arguments.length; + if(args == 2 && !d.isString(name)){ + for(var x in name){ d.attr(node, x, name[x]); } + return; + } + node = d.byId(node); + name = _fixAttrName(name); + if(args == 3){ + if(d.isFunction(value)){ + // clobber if we can + var attrId = d.attr(node, _attrId); + if(!attrId){ + attrId = _ctr++; + d.attr(node, _attrId, attrId); + } + if(!_evtHdlrMap[attrId]){ + _evtHdlrMap[attrId] = {}; + } + var h = _evtHdlrMap[attrId][name]; + if(h){ + d.disconnect(h); + }else{ + try{ + delete node[name]; + }catch(e){} + } + + // ensure that event objects are normalized, etc. + _evtHdlrMap[attrId][name] = d.connect(node, name, value); + + }else if(typeof value == "boolean"){ // e.g. onsubmit, disabled + // if a function, we should normalize the event object here!!! + node[name] = value; + }else{ + node.setAttribute(name, value); + } + return; + }else{ + // should we access this attribute via a property or + // via getAttribute()? + var prop = _attrProps[name.toLowerCase()]; + if(prop){ + return node[prop]; + }else{ + var value = node[name]; + return (typeof value == 'boolean' || typeof value == 'function') ? value : (d.hasAttr(node, name) ? node.getAttribute(name) : null); + } + } + } + + dojo.removeAttr = function(/*DomNode|String*/node, /*String*/name){ + // summary: + // Removes an attribute from an HTML element. + // node: + // id or reference to the element to remove the attribute from + // name: + // the name of the attribute to remove + d.byId(node).removeAttribute(_fixAttrName(name)); + } +})(); + +// ============================= +// (CSS) Class Functions +// ============================= + +dojo.hasClass = function(/*DomNode|String*/node, /*String*/classStr){ + // summary: + // Returns whether or not the specified classes are a portion of the + // class list currently applied to the node. + return ((" "+dojo.byId(node).className+" ").indexOf(" "+classStr+" ") >= 0); // Boolean +}; + +dojo.addClass = function(/*DomNode|String*/node, /*String*/classStr){ + // summary: + // Adds the specified classes to the end of the class list on the + // passed node. + node = dojo.byId(node); + var cls = node.className; + if((" "+cls+" ").indexOf(" "+classStr+" ") < 0){ + node.className = cls + (cls ? ' ' : '') + classStr; + } +}; + +dojo.removeClass = function(/*DomNode|String*/node, /*String*/classStr){ + // summary: Removes the specified classes from node. + node = dojo.byId(node); + var t = dojo.trim((" " + node.className + " ").replace(" " + classStr + " ", " ")); + if(node.className != t){ node.className = t; } +}; + +dojo.toggleClass = function(/*DomNode|String*/node, /*String*/classStr, /*Boolean?*/condition){ + // summary: + // Adds a class to node if not present, or removes if present. + // Pass a boolean condition if you want to explicitly add or remove. + // condition: + // If passed, true means to add the class, false means to remove. + if(condition === undefined){ + condition = !dojo.hasClass(node, classStr); + } + dojo[condition ? "addClass" : "removeClass"](node, classStr); +}; + +} + +if(!dojo._hasResource["dojo._base.NodeList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.NodeList"] = true; +dojo.provide("dojo._base.NodeList"); + +(function(){ + + var d = dojo; + + var tnl = function(arr){ + // decorate an array to make it look like a NodeList + arr.constructor = dojo.NodeList; + dojo._mixin(arr, dojo.NodeList.prototype); + return arr; + } + + var _mapIntoDojo = function(func, alwaysThis){ + // returns a function which, when executed in the scope of its caller, + // applies the passed arguments to a particular dojo.* function (named + // in func) and aggregates the returns. if alwaysThis is true, it + // always returns the scope object and not the collected returns from + // the Dojo method + return function(){ + var _a = arguments; + var aa = d._toArray(_a, 0, [null]); + var s = this.map(function(i){ + aa[0] = i; + return d[func].apply(d, aa); + }); + return (alwaysThis || ( (_a.length > 1) || !d.isString(_a[0]) )) ? this : s; // String||dojo.NodeList + } + }; + + dojo.NodeList = function(){ + // summary: + // dojo.NodeList is as subclass of Array which adds syntactic + // sugar for chaining, common iteration operations, animation, + // and node manipulation. NodeLists are most often returned as + // the result of dojo.query() calls. + // example: + // create a node list from a node + // | new dojo.NodeList(dojo.byId("foo")); + + return tnl(Array.apply(null, arguments)); + } + + dojo.NodeList._wrap = tnl; + + dojo.extend(dojo.NodeList, { + // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array#Methods + + // FIXME: handle return values for #3244 + // http://trac.dojotoolkit.org/ticket/3244 + + // FIXME: + // need to wrap or implement: + // join (perhaps w/ innerHTML/outerHTML overload for toString() of items?) + // reduce + // reduceRight + + slice: function(/*===== begin, end =====*/){ + // summary: + // Returns a new NodeList, maintaining this one in place + // description: + // This method behaves exactly like the Array.slice method + // with the caveat that it returns a dojo.NodeList and not a + // raw Array. For more details, see: + // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:slice + // begin: Integer + // Can be a positive or negative integer, with positive + // integers noting the offset to begin at, and negative + // integers denoting an offset from the end (i.e., to the left + // of the end) + // end: Integer? + // Optional parameter to describe what position relative to + // the NodeList's zero index to end the slice at. Like begin, + // can be positive or negative. + var a = dojo._toArray(arguments); + return tnl(a.slice.apply(this, a)); + }, + + splice: function(/*===== index, howmany, item =====*/){ + // summary: + // Returns a new NodeList, manipulating this NodeList based on + // the arguments passed, potentially splicing in new elements + // at an offset, optionally deleting elements + // description: + // This method behaves exactly like the Array.splice method + // with the caveat that it returns a dojo.NodeList and not a + // raw Array. For more details, see: + // + // index: Integer + // begin can be a positive or negative integer, with positive + // integers noting the offset to begin at, and negative + // integers denoting an offset from the end (i.e., to the left + // of the end) + // howmany: Integer? + // Optional parameter to describe what position relative to + // the NodeList's zero index to end the slice at. Like begin, + // can be positive or negative. + // item: Object...? + // Any number of optional parameters may be passed in to be + // spliced into the NodeList + // returns: + // dojo.NodeList + var a = dojo._toArray(arguments); + return tnl(a.splice.apply(this, a)); + }, + + concat: function(/*===== item =====*/){ + // summary: + // Returns a new NodeList comprised of items in this NodeList + // as well as items passed in as parameters + // description: + // This method behaves exactly like the Array.concat method + // with the caveat that it returns a dojo.NodeList and not a + // raw Array. For more details, see: + // + // item: Object...? + // Any number of optional parameters may be passed in to be + // spliced into the NodeList + // returns: + // dojo.NodeList + var a = dojo._toArray(arguments, 0, [this]); + return tnl(a.concat.apply([], a)); + }, + + indexOf: function(/*Object*/ value, /*Integer?*/ fromIndex){ + // summary: + // see dojo.indexOf(). The primary difference is that the acted-on + // array is implicitly this NodeList + // value: + // The value to search for. + // fromIndex: + // The loction to start searching from. Optional. Defaults to 0. + // description: + // For more details on the behavior of indexOf, see: + // + // returns: + // Positive Integer or 0 for a match, -1 of not found. + return d.indexOf(this, value, fromIndex); // Integer + }, + + lastIndexOf: function(/*===== value, fromIndex =====*/){ + // summary: + // see dojo.lastIndexOf(). The primary difference is that the + // acted-on array is implicitly this NodeList + // description: + // For more details on the behavior of lastIndexOf, see: + // + // value: Object + // The value to search for. + // fromIndex: Integer? + // The loction to start searching from. Optional. Defaults to 0. + // returns: + // Positive Integer or 0 for a match, -1 of not found. + return d.lastIndexOf.apply(d, d._toArray(arguments, 0, [this])); // Integer + }, + + every: function(/*Function*/callback, /*Object?*/thisObject){ + // summary: + // see `dojo.every()` and: + // + // Takes the same structure of arguments and returns as + // dojo.every() with the caveat that the passed array is + // implicitly this NodeList + return d.every(this, callback, thisObject); // Boolean + }, + + some: function(/*Function*/callback, /*Object?*/thisObject){ + // summary: + // see dojo.some() and: + // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:some + // Takes the same structure of arguments and returns as + // dojo.some() with the caveat that the passed array is + // implicitly this NodeList + return d.some(this, callback, thisObject); // Boolean + }, + + map: function(/*Function*/ func, /*Function?*/ obj){ + // summary: + // see dojo.map(). The primary difference is that the acted-on + // array is implicitly this NodeList and the return is a + // dojo.NodeList (a subclass of Array) + + return d.map(this, func, obj, d.NodeList); // dojo.NodeList + }, + + forEach: function(callback, thisObj){ + // summary: + // see dojo.forEach(). The primary difference is that the acted-on + // array is implicitly this NodeList + + d.forEach(this, callback, thisObj); + // non-standard return to allow easier chaining + return this; // dojo.NodeList + }, + + // custom methods + + coords: function(){ + // summary: + // Returns the box objects all elements in a node list as + // an Array (*not* a NodeList) + + return d.map(this, d.coords); // Array + }, + + /*===== + attr: function(property, value){ + // summary: + // gets or sets the DOM attribute for every element in the + // NodeList + // property: String + // the attribute to get/set + // value: String? + // optional. The value to set the property to + // return: + // if no value is passed, the result is an array of attribute values + // If a value is passed, the return is this NodeList + }, + + style: function(property, value){ + // summary: + // gets or sets the CSS property for every element in the NodeList + // property: String + // the CSS property to get/set, in JavaScript notation + // ("lineHieght" instead of "line-height") + // value: String? + // optional. The value to set the property to + // return: + // if no value is passed, the result is an array of strings. + // If a value is passed, the return is this NodeList + }, + + addClass: function(className){ + // summary: + // adds the specified class to every node in the list + // className: String + // the CSS class to add + // return: + // dojo.NodeList, this list + }, + + removeClass: function(className){ + // summary: + // removes the specified class from every node in the list + // className: String + // the CSS class to add + // return: + // dojo.NodeList, this list + }, + + toggleClass: function(className, condition){ + // summary: + // Adds a class to node if not present, or removes if present. + // Pass a boolean condition if you want to explicitly add or remove. + // condition: Boolean? + // If passed, true means to add the class, false means to remove. + // className: String + // the CSS class to add + // return: dojo.NodeList + // this list + }, + + connect: function(methodName, objOrFunc, funcName){ + // summary: + // attach event handlers to every item of the NodeList. Uses dojo.connect() + // so event properties are normalized + // methodName: String + // the name of the method to attach to. For DOM events, this should be + // the lower-case name of the event + // objOrFunc: Object|Function|String + // if 2 arguments are passed (methodName, objOrFunc), objOrFunc should + // reference a function or be the name of the function in the global + // namespace to attach. If 3 arguments are provided + // (methodName, objOrFunc, funcName), objOrFunc must be the scope to + // locate the bound function in + // funcName: String? + // optional. A string naming the function in objOrFunc to bind to the + // event. May also be a function reference. + // example: + // add an onclick handler to every button on the page + // | dojo.query("div:nth-child(odd)").connect("onclick", function(e){ + // | console.debug("clicked!"); + // | }); + // example: + // attach foo.bar() to every odd div's onmouseover + // | dojo.query("div:nth-child(odd)").connect("onmouseover", foo, "bar"); + }, + =====*/ + attr: _mapIntoDojo("attr"), + style: _mapIntoDojo("style"), + addClass: _mapIntoDojo("addClass", true), + removeClass: _mapIntoDojo("removeClass", true), + toggleClass: _mapIntoDojo("toggleClass", true), + connect: _mapIntoDojo("connect", true), + + // FIXME: connectPublisher()? connectRunOnce()? + + place: function(/*String||Node*/ queryOrNode, /*String*/ position){ + // summary: + // places elements of this node list relative to the first element matched + // by queryOrNode. Returns the original NodeList. + // queryOrNode: + // may be a string representing any valid CSS3 selector or a DOM node. + // In the selector case, only the first matching element will be used + // for relative positioning. + // position: + // can be one of: + // * "last"||"end" (default) + // * "first||"start" + // * "before" + // * "after" + // or an offset in the childNodes property + var item = d.query(queryOrNode)[0]; + return this.forEach(function(i){ d.place(i, item, (position||"last")); }); // dojo.NodeList + }, + + orphan: function(/*String?*/ simpleFilter){ + // summary: + // removes elements in this list that match the simple + // filter from their parents and returns them as a new + // NodeList. + // simpleFilter: + // single-expression CSS filter + // return: + // `dojo.NodeList` the orpahned elements + var orphans = simpleFilter ? d._filterQueryResult(this, simpleFilter) : this; + orphans.forEach(function(item){ + if(item.parentNode){ + item.parentNode.removeChild(item); + } + }); + return orphans; // dojo.NodeList + }, + + adopt: function(/*String||Array||DomNode*/ queryOrListOrNode, /*String?*/ position){ + // summary: + // places any/all elements in queryOrListOrNode at a + // position relative to the first element in this list. + // Returns a dojo.NodeList of the adopted elements. + // queryOrListOrNode: + // a DOM node or a query string or a query result. + // Represents the nodes to be adopted relative to the + // first element of this NodeList. + // position: + // can be one of: + // * "last"||"end" (default) + // * "first||"start" + // * "before" + // * "after" + // or an offset in the childNodes property + var item = this[0]; + return d.query(queryOrListOrNode).forEach(function(ai){ d.place(ai, item, position || "last"); }); // dojo.NodeList + }, + + // FIXME: do we need this? + query: function(/*String*/ queryStr){ + // summary: + // Returns a new, flattened NodeList. Elements of the new list + // satisfy the passed query but use elements of the + // current NodeList as query roots. + + if(!queryStr){ return this; } + + // FIXME: probably slow + // FIXME: use map? + var ret = d.NodeList(); + this.forEach(function(item){ + d.query(queryStr, item).forEach(function(subItem){ + if(subItem !== undefined){ + ret.push(subItem); + } + }); + }); + return ret; // dojo.NodeList + }, + + filter: function(/*String*/ simpleQuery){ + // summary: + // "masks" the built-in javascript filter() method to support + // passing a simple string filter in addition to supporting + // filtering function objects. + // example: + // "regular" JS filter syntax as exposed in dojo.filter: + // | dojo.query("*").filter(function(item){ + // | // highlight every paragraph + // | return (item.nodeName == "p"); + // | }).styles("backgroundColor", "yellow"); + // example: + // the same filtering using a CSS selector + // | dojo.query("*").filter("p").styles("backgroundColor", "yellow"); + + var items = this; + var _a = arguments; + var r = d.NodeList(); + var rp = function(t){ + if(t !== undefined){ + r.push(t); + } + } + if(d.isString(simpleQuery)){ + items = d._filterQueryResult(this, _a[0]); + if(_a.length == 1){ + // if we only got a string query, pass back the filtered results + return items; // dojo.NodeList + } + // if we got a callback, run it over the filtered items + _a.shift(); + } + // handle the (callback, [thisObject]) case + d.forEach(d.filter(items, _a[0], _a[1]), rp); + return r; // dojo.NodeList + }, + + /* + // FIXME: should this be "copyTo" and include parenting info? + clone: function(){ + // summary: + // creates node clones of each element of this list + // and returns a new list containing the clones + }, + */ + + addContent: function(/*String*/ content, /*String||Integer?*/ position){ + // summary: + // add a node or some HTML as a string to every item in the list. + // Returns the original list. + // description: + // a copy of the HTML content is added to each item in the + // list, with an optional position argument. If no position + // argument is provided, the content is appended to the end of + // each item. + // content: + // the HTML in string format to add at position to every item + // position: + // can be one of: + // * "last"||"end" (default) + // * "first||"start" + // * "before" + // * "after" + // or an offset in the childNodes property + // example: + // appends content to the end if the position is ommitted + // | dojo.query("h3 > p").addContent("hey there!"); + // example: + // add something to the front of each element that has a "thinger" property: + // | dojo.query("[thinger]").addContent("...", "first"); + // example: + // adds a header before each element of the list + // | dojo.query(".note").addContent("

NOTE:

", "before"); + var ta = d.doc.createElement("span"); + if(d.isString(content)){ + ta.innerHTML = content; + }else{ + ta.appendChild(content); + } + if(position === undefined){ + position = "last"; + } + var ct = (position == "first" || position == "after") ? "lastChild" : "firstChild"; + this.forEach(function(item){ + var tn = ta.cloneNode(true); + while(tn[ct]){ + d.place(tn[ct], item, position); + } + }); + return this; // dojo.NodeList + }, + + empty: function(){ + // summary: + // clears all content from each node in the list + return this.forEach("item.innerHTML='';"); // dojo.NodeList + + // FIXME: should we be checking for and/or disposing of widgets below these nodes? + }, + + instantiate: function(/*String|Object*/ declaredClass, /*Object?*/ properties){ + // summary: + // Create a new instance of a specified class, using the + // specified properties and each node in the nodeList as a + // srcNodeRef + // + var c = d.isFunction(declaredClass) ? declaredClass : d.getObject(declaredClass); + return this.forEach(function(i){ + new c(properties||{},i); + }) // dojo.NodeList + } + + }); + + // syntactic sugar for DOM events + d.forEach([ + "blur", "focus", "click", "keydown", "keypress", "keyup", "mousedown", + "mouseenter", "mouseleave", "mousemove", "mouseout", "mouseover", + "mouseup" + ], function(evt){ + var _oe = "on"+evt; + dojo.NodeList.prototype[_oe] = function(a, b){ + return this.connect(_oe, a, b); + } + // FIXME: should these events trigger publishes? + /* + return (a ? this.connect(_oe, a, b) : + this.forEach(function(n){ + // FIXME: + // listeners get buried by + // addEventListener and can't be dug back + // out to be triggered externally. + // see: + // http://developer.mozilla.org/en/docs/DOM:element + + console.debug(n, evt, _oe); + + // FIXME: need synthetic event support! + var _e = { target: n, faux: true, type: evt }; + // dojo._event_listener._synthesizeEvent({}, { target: n, faux: true, type: evt }); + try{ n[evt](_e); }catch(e){ console.debug(e); } + try{ n[_oe](_e); }catch(e){ console.debug(e); } + }) + ); + } + */ + } + ); + +})(); + +} + +if(!dojo._hasResource["dojo._base.query"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.query"] = true; +dojo.provide("dojo._base.query"); + +/* + dojo.query() architectural overview: + + dojo.query is a relatively full-featured CSS3 query library. It is + designed to take any valid CSS3 selector and return the nodes matching + the selector. To do this quickly, it processes queries in several + steps, applying caching where profitable. + + The steps (roughly in reverse order of the way they appear in the code): + 1.) check to see if we already have a "query dispatcher" + - if so, use that with the given parameterization. Skip to step 4. + 2.) attempt to determine which branch to dispatch the query to: + - JS (optimized DOM iteration) + - xpath (for browsers that support it and where it's fast) + - native (not available in any browser yet) + 3.) tokenize and convert to executable "query dispatcher" + - this is where the lion's share of the complexity in the + system lies. In the DOM version, the query dispatcher is + assembled as a chain of "yes/no" test functions pertaining to + a section of a simple query statement (".blah:nth-child(odd)" + but not "div div", which is 2 simple statements). Individual + statement dispatchers are cached (to prevent re-definition) + as are entire dispatch chains (to make re-execution of the + same query fast) + - in the xpath path, tokenization yeilds a concatenation of + parameterized xpath selectors. As with the DOM version, both + simple selector blocks and overall evaluators are cached to + prevent re-defintion + 4.) the resulting query dispatcher is called in the passed scope (by default the top-level document) + - for DOM queries, this results in a recursive, top-down + evaluation of nodes based on each simple query section + - xpath queries can, thankfully, be executed in one shot + 5.) matched nodes are pruned to ensure they are unique +*/ + +;(function(){ + // define everything in a closure for compressability reasons. "d" is an + // alias to "dojo" since it's so frequently used. This seems a + // transformation that the build system could perform on a per-file basis. + + //////////////////////////////////////////////////////////////////////// + // Utility code + //////////////////////////////////////////////////////////////////////// + + var d = dojo; + var childNodesName = dojo.isIE ? "children" : "childNodes"; + var caseSensitive = false; + + var getQueryParts = function(query){ + // summary: state machine for query tokenization + if(">~+".indexOf(query.charAt(query.length-1)) >= 0){ + query += " *" + } + query += " "; // ensure that we terminate the state machine + + var ts = function(s, e){ + return d.trim(query.slice(s, e)); + } + + // the overall data graph of the full query, as represented by queryPart objects + var qparts = []; + // state keeping vars + var inBrackets = -1; + var inParens = -1; + var inMatchFor = -1; + var inPseudo = -1; + var inClass = -1; + var inId = -1; + var inTag = -1; + var lc = ""; // the last character + var cc = ""; // the current character + var pStart; + // iteration vars + var x = 0; // index in the query + var ql = query.length; + var currentPart = null; // data structure representing the entire clause + var _cp = null; // the current pseudo or attr matcher + + var endTag = function(){ + if(inTag >= 0){ + var tv = (inTag == x) ? null : ts(inTag, x).toLowerCase(); + currentPart[ (">~+".indexOf(tv) < 0) ? "tag" : "oper" ] = tv; + inTag = -1; + } + } + + var endId = function(){ + if(inId >= 0){ + currentPart.id = ts(inId, x).replace(/\\/g, ""); + inId = -1; + } + } + + var endClass = function(){ + if(inClass >= 0){ + currentPart.classes.push(ts(inClass+1, x).replace(/\\/g, "")); + inClass = -1; + } + } + + var endAll = function(){ + endId(); endTag(); endClass(); + } + + for(; lc=cc, cc=query.charAt(x),x= 0){ + // look for a the close first + if(cc == "]"){ + if(!_cp.attr){ + _cp.attr = ts(inBrackets+1, x); + }else{ + _cp.matchFor = ts((inMatchFor||inBrackets+1), x); + } + var cmf = _cp.matchFor; + if(cmf){ + if( (cmf.charAt(0) == '"') || (cmf.charAt(0) == "'") ){ + _cp.matchFor = cmf.substring(1, cmf.length-1); + } + } + currentPart.attrs.push(_cp); + _cp = null; // necessaray? + inBrackets = inMatchFor = -1; + }else if(cc == "="){ + var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : ""; + _cp.type = addToCc+cc; + _cp.attr = ts(inBrackets+1, x-addToCc.length); + inMatchFor = x+1; + } + // now look for other clause parts + }else if(inParens >= 0){ + if(cc == ")"){ + if(inPseudo >= 0){ + _cp.value = ts(inParens+1, x); + } + inPseudo = inParens = -1; + } + }else if(cc == "#"){ + endAll(); + inId = x+1; + }else if(cc == "."){ + endAll(); + inClass = x; + }else if(cc == ":"){ + endAll(); + inPseudo = x; + }else if(cc == "["){ + endAll(); + inBrackets = x; + _cp = { + /*===== + attr: null, type: null, matchFor: null + =====*/ + }; + }else if(cc == "("){ + if(inPseudo >= 0){ + _cp = { + name: ts(inPseudo+1, x), + value: null + } + currentPart.pseudos.push(_cp); + } + inParens = x; + }else if(cc == " " && lc != cc){ + // note that we expect the string to be " " terminated + endAll(); + if(inPseudo >= 0){ + currentPart.pseudos.push({ name: ts(inPseudo+1, x) }); + } + currentPart.hasLoops = ( + currentPart.pseudos.length || + currentPart.attrs.length || + currentPart.classes.length ); + currentPart.query = ts(pStart, x); + currentPart.tag = (currentPart["oper"]) ? null : (currentPart.tag || "*"); + qparts.push(currentPart); + currentPart = null; + } + } + return qparts; + }; + + //////////////////////////////////////////////////////////////////////// + // XPath query code + //////////////////////////////////////////////////////////////////////// + + // this array is a lookup used to generate an attribute matching function. + // There is a similar lookup/generator list for the DOM branch with similar + // calling semantics. + var xPathAttrs = { + "*=": function(attr, value){ + return "[contains(@"+attr+", '"+ value +"')]"; + }, + "^=": function(attr, value){ + return "[starts-with(@"+attr+", '"+ value +"')]"; + }, + "$=": function(attr, value){ + return "[substring(@"+attr+", string-length(@"+attr+")-"+(value.length-1)+")='"+value+"']"; + }, + "~=": function(attr, value){ + return "[contains(concat(' ',@"+attr+",' '), ' "+ value +" ')]"; + }, + "|=": function(attr, value){ + return "[contains(concat(' ',@"+attr+",' '), ' "+ value +"-')]"; + }, + "=": function(attr, value){ + return "[@"+attr+"='"+ value +"']"; + } + }; + + // takes a list of attribute searches, the overall query, a function to + // generate a default matcher, and a closure-bound method for providing a + // matching function that generates whatever type of yes/no distinguisher + // the query method needs. The method is a bit tortured and hard to read + // because it needs to be used in both the XPath and DOM branches. + var handleAttrs = function( attrList, + query, + getDefault, + handleMatch){ + d.forEach(query.attrs, function(attr){ + var matcher; + // type, attr, matchFor + if(attr.type && attrList[attr.type]){ + matcher = attrList[attr.type](attr.attr, attr.matchFor); + }else if(attr.attr.length){ + matcher = getDefault(attr.attr); + } + if(matcher){ handleMatch(matcher); } + }); + } + + var buildPath = function(query){ + var xpath = "."; + var qparts = getQueryParts(d.trim(query)); + while(qparts.length){ + var tqp = qparts.shift(); + var prefix; + var postfix = ""; + if(tqp.oper == ">"){ + prefix = "/"; + // prefix = "/child::*"; + tqp = qparts.shift(); + }else if(tqp.oper == "~"){ + prefix = "/following-sibling::"; // get element following siblings + tqp = qparts.shift(); + }else if(tqp.oper == "+"){ + // FIXME: + // fails when selecting subsequent siblings by node type + // because the position() checks the position in the list + // of matching elements and not the localized siblings + prefix = "/following-sibling::"; + postfix = "[position()=1]"; + tqp = qparts.shift(); + }else{ + prefix = "//"; + // prefix = "/descendant::*" + } + + // get the tag name (if any) + + xpath += prefix + tqp.tag + postfix; + + // check to see if it's got an id. Needs to come first in xpath. + if(tqp.id){ + xpath += "[@id='"+tqp.id+"'][1]"; + } + + d.forEach(tqp.classes, function(cn){ + var cnl = cn.length; + var padding = " "; + if(cn.charAt(cnl-1) == "*"){ + padding = ""; cn = cn.substr(0, cnl-1); + } + xpath += + "[contains(concat(' ',@class,' '), ' "+ + cn + padding + "')]"; + }); + + handleAttrs(xPathAttrs, tqp, + function(condition){ + return "[@"+condition+"]"; + }, + function(matcher){ + xpath += matcher; + } + ); + + // FIXME: need to implement pseudo-class checks!! + }; + return xpath; + }; + + var _xpathFuncCache = {}; + var getXPathFunc = function(path){ + if(_xpathFuncCache[path]){ + return _xpathFuncCache[path]; + } + + var doc = d.doc; + // don't need to memoize. The closure scope handles it for us. + var xpath = buildPath(path); + + var tf = function(parent){ + // XPath query strings are memoized. + var ret = []; + var xpathResult; + try{ + xpathResult = doc.evaluate(xpath, parent, null, + // XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null); + XPathResult.ANY_TYPE, null); + }catch(e){ + console.debug("failure in exprssion:", xpath, "under:", parent); + console.debug(e); + } + var result = xpathResult.iterateNext(); + while(result){ + ret.push(result); + result = xpathResult.iterateNext(); + } + return ret; + } + return _xpathFuncCache[path] = tf; + }; + + /* + d.xPathMatch = function(query){ + // XPath based DOM query system. Handles a small subset of CSS + // selectors, subset is identical to the non-XPath version of this + // function. + + return getXPathFunc(query)(); + } + */ + + //////////////////////////////////////////////////////////////////////// + // DOM query code + //////////////////////////////////////////////////////////////////////// + + var _filtersCache = {}; + var _simpleFiltersCache = {}; + + // the basic building block of the yes/no chaining system. agree(f1, f2) + // generates a new function which returns the boolean results of both of + // the passed functions to a single logical-anded result. + var agree = function(first, second){ + if(!first){ return second; } + if(!second){ return first; } + + return function(){ + return first.apply(window, arguments) && second.apply(window, arguments); + } + } + + var _childElements = function(root){ + var ret = []; + var te, x=0, tret = root[childNodesName]; + while(te=tret[x++]){ + if(te.nodeType == 1){ ret.push(te); } + } + return ret; + } + + var _nextSiblings = function(root, single){ + var ret = []; + var te = root; + while(te = te.nextSibling){ + if(te.nodeType == 1){ + ret.push(te); + if(single){ break; } + } + } + return ret; + } + + var _filterDown = function(element, queryParts, matchArr, idx){ + // NOTE: + // in the fast path! this function is called recursively and for + // every run of a query. + var nidx = idx+1; + var isFinal = (queryParts.length == nidx); + var tqp = queryParts[idx]; + + // see if we can constrain our next level to direct children + if(tqp.oper){ + var ecn = (tqp.oper == ">") ? + _childElements(element) : + _nextSiblings(element, (tqp.oper == "+")); + + if(!ecn || !ecn.length){ + return; + } + nidx++; + isFinal = (queryParts.length == nidx); + // kinda janky, too much array alloc + var tf = getFilterFunc(queryParts[idx+1]); + // for(var x=ecn.length-1, te; x>=0, te=ecn[x]; x--){ + for(var x=0, ecnl=ecn.length, te; x=0, te=elements[x]; x--){ + var x = elements.length - 1, te; + while(te = elements[x--]){ + _filterDown(te, queryParts, ret, 0); + } + return ret; + } + + var getFilterFunc = function(q){ + // note: query can't have spaces! + if(_filtersCache[q.query]){ + return _filtersCache[q.query]; + } + var ff = null; + + // does it have a tagName component? + if(q.tag){ + if(q.tag == "*"){ + ff = agree(ff, + function(elem){ + return (elem.nodeType == 1); + } + ); + }else{ + // tag name match + ff = agree(ff, + function(elem){ + return ( + (elem.nodeType == 1) && + (q.tag == elem.tagName.toLowerCase()) + ); + // return isTn; + } + ); + } + } + + // does the node have an ID? + if(q.id){ + ff = agree(ff, + function(elem){ + return ( + (elem.nodeType == 1) && + (elem.id == q.id) + ); + } + ); + } + + if(q.hasLoops){ + // if we have other query param parts, make sure we add them to the + // filter chain + ff = agree(ff, getSimpleFilterFunc(q)); + } + + return _filtersCache[q.query] = ff; + } + + var getNodeIndex = function(node){ + // NOTE: + // we could have a more accurate caching mechanism by invalidating + // caches after the query has finished, but I think that'd lead to + // significantly more cache churn than the cache would provide + // value for in the common case. Generally, we're more + // conservative (and therefore, more accurate) than jQuery and + // DomQuery WRT node node indexes, but there may be corner cases + // in which we fall down. How much we care about them is TBD. + + var pn = node.parentNode; + var pnc = pn.childNodes; + + // check to see if we can trust the cache. If not, re-key the whole + // thing and return our node match from that. + + var nidx = -1; + var child = pn.firstChild; + if(!child){ + return nidx; + } + + var ci = node["__cachedIndex"]; + var cl = pn["__cachedLength"]; + + // only handle cache building if we've gone out of sync + if(((typeof cl == "number")&&(cl != pnc.length))||(typeof ci != "number")){ + // rip though the whole set, building cache indexes as we go + pn["__cachedLength"] = pnc.length; + var idx = 1; + do{ + // we only assign indexes for nodes with nodeType == 1, as per: + // http://www.w3.org/TR/css3-selectors/#nth-child-pseudo + // only elements are counted in the search order, and they + // begin at 1 for the first child's index + + if(child === node){ + nidx = idx; + } + if(child.nodeType == 1){ + child["__cachedIndex"] = idx; + idx++; + } + child = child.nextSibling; + }while(child); + }else{ + // NOTE: + // could be incorrect in some cases (node swaps involving the + // passed node, etc.), but we ignore those due to the relative + // unlikelihood of that occuring + nidx = ci; + } + return nidx; + } + + var firedCount = 0; + + var blank = ""; + var _getAttr = function(elem, attr){ + if(attr == "class"){ + return elem.className || blank; + } + if(attr == "for"){ + return elem.htmlFor || blank; + } + return elem.getAttribute(attr, 2) || blank; + } + + var attrs = { + "*=": function(attr, value){ + return function(elem){ + // E[foo*="bar"] + // an E element whose "foo" attribute value contains + // the substring "bar" + return (_getAttr(elem, attr).indexOf(value)>=0); + } + }, + "^=": function(attr, value){ + // E[foo^="bar"] + // an E element whose "foo" attribute value begins exactly + // with the string "bar" + return function(elem){ + return (_getAttr(elem, attr).indexOf(value)==0); + } + }, + "$=": function(attr, value){ + // E[foo$="bar"] + // an E element whose "foo" attribute value ends exactly + // with the string "bar" + var tval = " "+value; + return function(elem){ + var ea = " "+_getAttr(elem, attr); + return (ea.lastIndexOf(value)==(ea.length-value.length)); + } + }, + "~=": function(attr, value){ + // E[foo~="bar"] + // an E element whose "foo" attribute value is a list of + // space-separated values, one of which is exactly equal + // to "bar" + + // return "[contains(concat(' ',@"+attr+",' '), ' "+ value +" ')]"; + var tval = " "+value+" "; + return function(elem){ + var ea = " "+_getAttr(elem, attr)+" "; + return (ea.indexOf(tval)>=0); + } + }, + "|=": function(attr, value){ + // E[hreflang|="en"] + // an E element whose "hreflang" attribute has a + // hyphen-separated list of values beginning (from the + // left) with "en" + var valueDash = " "+value+"-"; + return function(elem){ + var ea = " "+(elem.getAttribute(attr, 2) || ""); + return ( + (ea == value) || + (ea.indexOf(valueDash)==0) + ); + } + }, + "=": function(attr, value){ + return function(elem){ + return (_getAttr(elem, attr) == value); + } + } + }; + + var pseudos = { + "first-child": function(name, condition){ + return function(elem){ + if(elem.nodeType != 1){ return false; } + // check to see if any of the previous siblings are elements + var fc = elem.previousSibling; + while(fc && (fc.nodeType != 1)){ + fc = fc.previousSibling; + } + return (!fc); + } + }, + "last-child": function(name, condition){ + return function(elem){ + if(elem.nodeType != 1){ return false; } + // check to see if any of the next siblings are elements + var nc = elem.nextSibling; + while(nc && (nc.nodeType != 1)){ + nc = nc.nextSibling; + } + return (!nc); + } + }, + "empty": function(name, condition){ + return function(elem){ + // DomQuery and jQuery get this wrong, oddly enough. + // The CSS 3 selectors spec is pretty explicit about + // it, too. + var cn = elem.childNodes; + var cnl = elem.childNodes.length; + // if(!cnl){ return true; } + for(var x=cnl-1; x >= 0; x--){ + var nt = cn[x].nodeType; + if((nt == 1)||(nt == 3)){ return false; } + } + return true; + } + }, + "contains": function(name, condition){ + return function(elem){ + // FIXME: I dislike this version of "contains", as + // whimsical attribute could set it off. An inner-text + // based version might be more accurate, but since + // jQuery and DomQuery also potentially get this wrong, + // I'm leaving it for now. + return (elem.innerHTML.indexOf(condition) >= 0); + } + }, + "not": function(name, condition){ + var ntf = getFilterFunc(getQueryParts(condition)[0]); + return function(elem){ + return (!ntf(elem)); + } + }, + "nth-child": function(name, condition){ + var pi = parseInt; + if(condition == "odd"){ + return function(elem){ + return ( + ((getNodeIndex(elem)) % 2) == 1 + ); + } + }else if((condition == "2n")|| + (condition == "even")){ + return function(elem){ + return ((getNodeIndex(elem) % 2) == 0); + } + }else if(condition.indexOf("0n+") == 0){ + var ncount = pi(condition.substr(3)); + return function(elem){ + return (elem.parentNode[childNodesName][ncount-1] === elem); + } + }else if( (condition.indexOf("n+") > 0) && + (condition.length > 3) ){ + var tparts = condition.split("n+", 2); + var pred = pi(tparts[0]); + var idx = pi(tparts[1]); + return function(elem){ + return ((getNodeIndex(elem) % pred) == idx); + } + }else if(condition.indexOf("n") == -1){ + var ncount = pi(condition); + return function(elem){ + return (getNodeIndex(elem) == ncount); + } + } + } + }; + + var defaultGetter = (d.isIE) ? function(cond){ + var clc = cond.toLowerCase(); + return function(elem){ + return elem[cond]||elem[clc]; + } + } : function(cond){ + return function(elem){ + return (elem && elem.getAttribute && elem.hasAttribute(cond)); + } + }; + + var getSimpleFilterFunc = function(query){ + + var fcHit = (_simpleFiltersCache[query.query]||_filtersCache[query.query]); + if(fcHit){ return fcHit; } + + var ff = null; + + // the only case where we'll need the tag name is if we came from an ID query + if(query.id){ // do we have an ID component? + if(query.tag != "*"){ + ff = agree(ff, function(elem){ + return (elem.tagName.toLowerCase() == query.tag); + }); + } + } + + // if there's a class in our query, generate a match function for it + d.forEach(query.classes, function(cname, idx, arr){ + // get the class name + var isWildcard = cname.charAt(cname.length-1) == "*"; + if(isWildcard){ + cname = cname.substr(0, cname.length-1); + } + // I dislike the regex thing, even if memozied in a cache, but it's VERY short + var re = new RegExp("(?:^|\\s)" + cname + (isWildcard ? ".*" : "") + "(?:\\s|$)"); + ff = agree(ff, function(elem){ + return re.test(elem.className); + }); + ff.count = idx; + }); + + d.forEach(query.pseudos, function(pseudo){ + if(pseudos[pseudo.name]){ + ff = agree(ff, pseudos[pseudo.name](pseudo.name, pseudo.value)); + } + }); + + handleAttrs(attrs, query, defaultGetter, + function(tmatcher){ ff = agree(ff, tmatcher); } + ); + if(!ff){ + ff = function(){ return true; }; + } + return _simpleFiltersCache[query.query] = ff; + } + + var _getElementsFuncCache = { }; + + var getElementsFunc = function(query, root){ + var fHit = _getElementsFuncCache[query.query]; + if(fHit){ return fHit; } + + // NOTE: this function is in the fast path! not memoized!!! + + // the query doesn't contain any spaces, so there's only so many + // things it could be + + if(query.id && !query.hasLoops && !query.tag){ + // ID-only query. Easy. + return _getElementsFuncCache[query.query] = function(root){ + // FIXME: if root != document, check for parenting! + return [ d.byId(query.id) ]; + } + } + + var filterFunc = getSimpleFilterFunc(query); + + var retFunc; + if(query.tag && query.id && !query.hasLoops){ + // we got a filtered ID search (e.g., "h4#thinger") + retFunc = function(root){ + var te = d.byId(query.id); + if(filterFunc(te)){ + return [ te ]; + } + } + }else{ + var tret; + + if(!query.hasLoops){ + // it's just a plain-ol elements-by-tag-name query from the root + retFunc = function(root){ + var ret = []; + var te, x=0, tret = root.getElementsByTagName(query.tag); + while(te=tret[x++]){ + ret.push(te); + } + return ret; + } + }else{ + retFunc = function(root){ + var ret = []; + var te, x=0, tret = root.getElementsByTagName(query.tag); + while(te=tret[x++]){ + if(filterFunc(te)){ + ret.push(te); + } + } + return ret; + } + } + } + return _getElementsFuncCache[query.query] = retFunc; + } + + var _partsCache = {}; + + //////////////////////////////////////////////////////////////////////// + // the query runner + //////////////////////////////////////////////////////////////////////// + + // this is the second level of spliting, from full-length queries (e.g., + // "div.foo .bar") into simple query expressions (e.g., ["div.foo", + // ".bar"]) + var _queryFuncCache = { + "*": d.isIE ? + function(root){ + return root.all; + } : + function(root){ + return root.getElementsByTagName("*"); + }, + "~": _nextSiblings, + "+": function(root){ return _nextSiblings(root, true); }, + ">": _childElements + }; + + var getStepQueryFunc = function(query){ + // if it's trivial, get a fast-path dispatcher + var qparts = getQueryParts(d.trim(query)); + // if(query[query.length-1] == ">"){ query += " *"; } + if(qparts.length == 1){ + var tt = getElementsFunc(qparts[0]); + tt.nozip = true; + return tt; + } + + // otherwise, break it up and return a runner that iterates over the parts recursively + var sqf = function(root){ + var localQueryParts = qparts.slice(0); // clone the src arr + var candidates; + if(localQueryParts[0].oper == ">"){ // FIXME: what if it's + or ~? + candidates = [ root ]; + // root = document; + }else{ + candidates = getElementsFunc(localQueryParts.shift())(root); + } + return filterDown(candidates, localQueryParts); + } + return sqf; + } + + // a specialized method that implements our primoridal "query optimizer". + // This allows us to dispatch queries to the fastest subsystem we can get. + var _getQueryFunc = ( + // NOTE: + // XPath on the Webkit nighlies is slower than it's DOM iteration + // for most test cases + // FIXME: + // we should try to capture some runtime speed data for each query + // function to determine on the fly if we should stick w/ the + // potentially optimized variant or if we should try something + // new. + (document["evaluate"] && !d.isSafari) ? + function(query){ + // has xpath support that's faster than DOM + var qparts = query.split(" "); + // can we handle it? + if( (document["evaluate"])&& + (query.indexOf(":") == -1)&& + (query.indexOf("+") == -1) // skip direct sibling matches. See line ~344 + ){ + // dojo.debug(query); + // should we handle it? + + // kind of a lame heuristic, but it works + if( + // a "div div div" style query + ((qparts.length > 2)&&(query.indexOf(">") == -1))|| + // or something else with moderate complexity. kinda janky + (qparts.length > 3)|| + (query.indexOf("[")>=0)|| + // or if it's a ".thinger" query + ((1 == qparts.length)&&(0 <= query.indexOf("."))) + + ){ + // use get and cache a xpath runner for this selector + return getXPathFunc(query); + } + } + + // fallthrough + return getStepQueryFunc(query); + } : getStepQueryFunc + ); + // uncomment to disable XPath for testing and tuning the DOM path + // _getQueryFunc = getStepQueryFunc; + + // FIXME: we've got problems w/ the NodeList query()/filter() functions if we go XPath for everything + + // uncomment to disable DOM queries for testing and tuning XPath + // _getQueryFunc = getXPathFunc; + + // this is the primary caching for full-query results. The query dispatcher + // functions are generated here and then pickled for hash lookup in the + // future + var getQueryFunc = function(query){ + // return a cached version if one is available + if(_queryFuncCache[query]){ return _queryFuncCache[query]; } + if(0 > query.indexOf(",")){ + // if it's not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher + return _queryFuncCache[query] = _getQueryFunc(query); + }else{ + // if it's a complex query, break it up into it's constituent parts + // and return a dispatcher that will merge the parts when run + + // var parts = query.split(", "); + var parts = query.split(/\s*,\s*/); + var tf = function(root){ + var pindex = 0; // avoid array alloc for every invocation + var ret = []; + var tp; + while(tp = parts[pindex++]){ + ret = ret.concat(_getQueryFunc(tp, tp.indexOf(" "))(root)); + } + return ret; + } + // ...cache and return + return _queryFuncCache[query] = tf; + } + } + + // FIXME: + // Dean's Base2 uses a system whereby queries themselves note if + // they'll need duplicate filtering. We need to get on that plan!! + + // attempt to efficiently determine if an item in a list is a dupe, + // returning a list of "uniques", hopefully in doucment order + var _zipIdx = 0; + var _zip = function(arr){ + if(arr && arr.nozip){ return d.NodeList._wrap(arr); } + var ret = new d.NodeList(); + if(!arr){ return ret; } + if(arr[0]){ + ret.push(arr[0]); + } + if(arr.length < 2){ return ret; } + _zipIdx++; + arr[0]["_zipIdx"] = _zipIdx; + for(var x=1, te; te = arr[x]; x++){ + if(arr[x]["_zipIdx"] != _zipIdx){ + ret.push(te); + } + te["_zipIdx"] = _zipIdx; + } + // FIXME: should we consider stripping these properties? + return ret; + } + + // the main executor + d.query = function(/*String*/ query, /*String|DOMNode?*/ root){ + // summary: + // Returns nodes which match the given CSS3 selector, searching the + // entire document by default but optionally taking a node to scope + // the search by. Returns an instance of dojo.NodeList. + // description: + // dojo.query() is the swiss army knife of DOM node manipulation in + // Dojo. Much like Prototype's "$$" (bling-bling) function or JQuery's + // "$" function, dojo.query provides robust, high-performance + // CSS-based node selector support with the option of scoping searches + // to a particular sub-tree of a document. + // + // Supported Selectors: + // -------------------- + // + // dojo.query() supports a rich set of CSS3 selectors, including: + // + // * class selectors (e.g., `.foo`) + // * node type selectors like `span` + // * ` ` descendant selectors + // * `>` child element selectors + // * `#foo` style ID selectors + // * `*` universal selector + // * `~`, the immediately preceeded-by sibling selector + // * `+`, the preceeded-by sibling selector + // * attribute queries: + // | * `[foo]` attribute presence selector + // | * `[foo='bar']` attribute value exact match + // | * `[foo~='bar']` attribute value list item match + // | * `[foo^='bar']` attribute start match + // | * `[foo$='bar']` attribute end match + // | * `[foo*='bar']` attribute substring match + // * `:first-child`, `:last-child` positional selectors + // * `:empty` content emtpy selector + // * `:empty` content emtpy selector + // * `:nth-child(n)`, `:nth-child(2n+1)` style positional calculations + // * `:nth-child(even)`, `:nth-child(odd)` positional selectors + // * `:not(...)` negation pseudo selectors + // + // Any legal combination of these selectors will work with + // `dojo.query()`, including compound selectors ("," delimited). + // Very complex and useful searches can be constructed with this + // palette of selectors and when combined with functions for + // maniplation presented by dojo.NodeList, many types of DOM + // manipulation operations become very straightforward. + // + // Unsupported Selectors: + // ---------------------- + // + // While dojo.query handles many CSS3 selectors, some fall outside of + // what's resaonable for a programmatic node querying engine to + // handle. Currently unsupported selectors include: + // + // * namespace-differentiated selectors of any form + // * all `::` pseduo-element selectors + // * certain pseduo-selectors which don't get a lot of day-to-day use: + // | * `:root`, `:lang()`, `:target`, `:focus` + // * all visual and state selectors: + // | * `:root`, `:active`, `:hover`, `:visisted`, `:link`, + // `:enabled`, `:disabled`, `:checked` + // * `:*-of-type` pseudo selectors + // + // dojo.query and XML Documents: + // ----------------------------- + // + // `dojo.query` currently only supports searching XML documents + // whose tags and attributes are 100% lower-case. This is a known + // limitation and will [be addressed soon](http://trac.dojotoolkit.org/ticket/3866) + // Non-selector Queries: + // --------------------- + // + // If something other than a String is passed for the query, + // `dojo.query` will return a new `dojo.NodeList` constructed from + // that parameter alone and all further processing will stop. This + // means that if you have a reference to a node or NodeList, you + // can quickly construct a new NodeList from the original by + // calling `dojo.query(node)` or `dojo.query(list)`. + // + // query: + // The CSS3 expression to match against. For details on the syntax of + // CSS3 selectors, see + // root: + // A DOMNode (or node id) to scope the search from. Optional. + // returns: dojo.NodeList + // An instance of `dojo.NodeList`. Many methods are available on + // NodeLists for searching, iterating, manipulating, and handling + // events on the matched nodes in the returned list. + // example: + // search the entire document for elements with the class "foo": + // | dojo.query(".foo"); + // these elements will match: + // | + // | + // |

+ // example: + // search the entire document for elements with the classes "foo" *and* "bar": + // | dojo.query(".foo.bar"); + // these elements will match: + // | + // while these will not: + // | + // |

+ // example: + // find `` elements which are descendants of paragraphs and + // which have a "highlighted" class: + // | dojo.query("p span.highlighted"); + // the innermost span in this fragment matches: + // |

+ // | ... + // | ... + // | + // |

+ // example: + // set an "odd" class on all odd table rows inside of the table + // `#tabular_data`, using the `>` (direct child) selector to avoid + // affecting any nested tables: + // | dojo.query("#tabular_data > tbody > tr:nth-child(odd)").addClass("odd"); + // example: + // remove all elements with the class "error" from the document + // and store them in a list: + // | var errors = dojo.query(".error").orphan(); + // example: + // add an onclick handler to every submit button in the document + // which causes the form to be sent via Ajax instead: + // | dojo.query("input[type='submit']").onclick(function(e){ + // | dojo.stopEvent(e); // prevent sending the form + // | var btn = e.target; + // | dojo.xhrPost({ + // | form: btn.form, + // | load: function(data){ + // | // replace the form with the response + // | var div = dojo.doc.createElement("div"); + // | dojo.place(div, btn.form, "after"); + // | div.innerHTML = data; + // | dojo.style(btn.form, "display", "none"); + // | } + // | }); + // | }); + + // NOTE: elementsById is not currently supported + // NOTE: ignores xpath-ish queries for now + + if(query.constructor == d.NodeList){ + return query; + } + if(!d.isString(query)){ + return new d.NodeList(query); // dojo.NodeList + } + if(d.isString(root)){ + root = d.byId(root); + } + + return _zip(getQueryFunc(query)(root||d.doc)); // dojo.NodeList + } + + /* + // exposing this was a mistake + d.query.attrs = attrs; + */ + // exposing this because new pseudo matches are only executed through the + // DOM query path (never through the xpath optimizing branch) + d.query.pseudos = pseudos; + + // one-off function for filtering a NodeList based on a simple selector + d._filterQueryResult = function(nodeList, simpleFilter){ + var tnl = new d.NodeList(); + var ff = (simpleFilter) ? getFilterFunc(getQueryParts(simpleFilter)[0]) : function(){ return true; }; + for(var x=0, te; te = nodeList[x]; x++){ + if(ff(te)){ tnl.push(te); } + } + return tnl; + } +})(); + +} + +if(!dojo._hasResource["dojo._base.xhr"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.xhr"] = true; +dojo.provide("dojo._base.xhr"); + +(function(){ + var _d = dojo; + function setValue(/*Object*/obj, /*String*/name, /*String*/value){ + //summary: + // For the nameed property in object, set the value. If a value + // already exists and it is a string, convert the value to be an + // array of values. + var val = obj[name]; + if(_d.isString(val)){ + obj[name] = [val, value]; + }else if(_d.isArray(val)){ + val.push(value); + }else{ + obj[name] = value; + } + } + + dojo.formToObject = function(/*DOMNode||String*/ formNode){ + // summary: + // dojo.formToObject returns the values encoded in an HTML form as + // string properties in an object which it then returns. Disabled form + // elements, buttons, and other non-value form elements are skipped. + // Multi-select elements are returned as an array of string values. + // description: + // This form: + // + // |
+ // | + // | + // | + // | + // |
+ // + // yields this object structure as the result of a call to + // formToObject(): + // + // | { + // | blah: "blah", + // | multi: [ + // | "thud", + // | "thonk" + // | ] + // | }; + + var ret = {}; + var iq = "input:not([type=file]):not([type=submit]):not([type=image]):not([type=reset]):not([type=button]), select, textarea"; + _d.query(iq, formNode).filter(function(node){ + return !node.disabled && node.name; + }).forEach(function(item){ + var _in = item.name; + var type = (item.type||"").toLowerCase(); + if(type == "radio" || type == "checkbox"){ + if(item.checked){ setValue(ret, _in, item.value); } + }else if(item.multiple){ + ret[_in] = []; + _d.query("option", item).forEach(function(opt){ + if(opt.selected){ + setValue(ret, _in, opt.value); + } + }); + }else{ + setValue(ret, _in, item.value); + if(type == "image"){ + ret[_in+".x"] = ret[_in+".y"] = ret[_in].x = ret[_in].y = 0; + } + } + }); + return ret; // Object + } + + dojo.objectToQuery = function(/*Object*/ map){ + // summary: + // takes a name/value mapping object and returns a string representing + // a URL-encoded version of that object. + // example: + // this object: + // + // | { + // | blah: "blah", + // | multi: [ + // | "thud", + // | "thonk" + // | ] + // | }; + // + // yields the following query string: + // + // | "blah=blah&multi=thud&multi=thonk" + + // FIXME: need to implement encodeAscii!! + var enc = encodeURIComponent; + var pairs = []; + var backstop = {}; + for(var name in map){ + var value = map[name]; + if(value != backstop[name]){ + var assign = enc(name) + "="; + if(_d.isArray(value)){ + for(var i=0; i < value.length; i++){ + pairs.push(assign + enc(value[i])); + } + }else{ + pairs.push(assign + enc(value)); + } + } + } + return pairs.join("&"); // String + } + + dojo.formToQuery = function(/*DOMNode||String*/ formNode){ + // summary: + // Returns a URL-encoded string representing the form passed as either a + // node or string ID identifying the form to serialize + return _d.objectToQuery(_d.formToObject(formNode)); // String + } + + dojo.formToJson = function(/*DOMNode||String*/ formNode, /*Boolean?*/prettyPrint){ + // summary: + // return a serialized JSON string from a form node or string + // ID identifying the form to serialize + return _d.toJson(_d.formToObject(formNode), prettyPrint); // String + } + + dojo.queryToObject = function(/*String*/ str){ + // summary: + // returns an object representing a de-serialized query section of a + // URL. Query keys with multiple values are returned in an array. + // description: + // This string: + // + // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" + // + // results in this object structure: + // + // | { + // | foo: [ "bar", "baz" ], + // | thinger: " spaces =blah", + // | zonk: "blarg" + // | } + // + // Note that spaces and other urlencoded entities are correctly + // handled. + + // FIXME: should we grab the URL string if we're not passed one? + var ret = {}; + var qp = str.split("&"); + var dec = decodeURIComponent; + _d.forEach(qp, function(item){ + if(item.length){ + var parts = item.split("="); + var name = dec(parts.shift()); + var val = dec(parts.join("=")); + if(_d.isString(ret[name])){ + ret[name] = [ret[name]]; + } + if(_d.isArray(ret[name])){ + ret[name].push(val); + }else{ + ret[name] = val; + } + } + }); + return ret; // Object + } + + /* + from refactor.txt: + + all bind() replacement APIs take the following argument structure: + + { + url: "blah.html", + + // all below are optional, but must be supported in some form by + // every IO API + timeout: 1000, // milliseconds + handleAs: "text", // replaces the always-wrong "mimetype" + content: { + key: "value" + }, + + // browser-specific, MAY be unsupported + sync: true, // defaults to false + form: dojo.byId("someForm") + } + */ + + // need to block async callbacks from snatching this thread as the result + // of an async callback might call another sync XHR, this hangs khtml forever + // must checked by watchInFlight() + + dojo._blockAsync = false; + + dojo._contentHandlers = { + "text": function(xhr){ return xhr.responseText; }, + "json": function(xhr){ + if(!dojo.config.usePlainJson){ + console.warn("Consider using mimetype:text/json-comment-filtered" + + " to avoid potential security issues with JSON endpoints" + + " (use djConfig.usePlainJson=true to turn off this message)"); + } + return (xhr.status == 204) ? undefined : _d.fromJson(xhr.responseText); + }, + "json-comment-filtered": function(xhr){ + // NOTE: we provide the json-comment-filtered option as one solution to + // the "JavaScript Hijacking" issue noted by Fortify and others. It is + // not appropriate for all circumstances. + + var value = xhr.responseText; + var cStartIdx = value.indexOf("\/*"); + var cEndIdx = value.lastIndexOf("*\/"); + if(cStartIdx == -1 || cEndIdx == -1){ + throw new Error("JSON was not comment filtered"); + } + return (xhr.status == 204) ? undefined : + _d.fromJson(value.substring(cStartIdx+2, cEndIdx)); + }, + "javascript": function(xhr){ + // FIXME: try Moz and IE specific eval variants? + return _d.eval(xhr.responseText); + }, + "xml": function(xhr){ + var result = xhr.responseXML; + if(_d.isIE && (!result || window.location.protocol == "file:")){ + _d.forEach(["MSXML2", "Microsoft", "MSXML", "MSXML3"], function(prefix){ + try{ + var dom = new ActiveXObject(prefix + ".XMLDOM"); + dom.async = false; + dom.loadXML(xhr.responseText); + result = dom; + }catch(e){ /* Not available. Squelch and try next one. */ } + }); + } + return result; // DOMDocument + } + }; + + dojo._contentHandlers["json-comment-optional"] = function(xhr){ + var handlers = _d._contentHandlers; + try{ + return handlers["json-comment-filtered"](xhr); + }catch(e){ + return handlers["json"](xhr); + } + }; + + /*===== + dojo.__IoArgs = function(){ + // url: String + // URL to server endpoint. + // content: Object? + // Contains properties with string values. These + // properties will be serialized as name1=value2 and + // passed in the request. + // timeout: Integer? + // Milliseconds to wait for the response. If this time + // passes, the then error callbacks are called. + // form: DOMNode? + // DOM node for a form. Used to extract the form values + // and send to the server. + // preventCache: Boolean? + // Default is false. If true, then a + // "dojo.preventCache" parameter is sent in the request + // with a value that changes with each request + // (timestamp). Useful only with GET-type requests. + // handleAs: String? + // Acceptable values depend on the type of IO + // transport (see specific IO calls for more information). + // load: Function? + // function(response, ioArgs){}. response is an Object, ioArgs + // is of type dojo.__IoCallbackArgs. The load function will be + // called on a successful response. + // error: Function? + // function(response, ioArgs){}. response is an Object, ioArgs + // is of type dojo.__IoCallbackArgs. The error function will + // be called in an error case. + // handle: Function? + // function(response, ioArgs){}. response is an Object, ioArgs + // is of type dojo.__IoCallbackArgs. The handle function will + // be called in either the successful or error case. For + // the load, error and handle functions, the ioArgs object + // will contain the following properties: + this.url = url; + this.content = content; + this.timeout = timeout; + this.form = form; + this.preventCache = preventCache; + this.handleAs = handleAs; + this.load = load; + this.error = error; + this.handle = handle; + } + =====*/ + + /*===== + dojo.__IoCallbackArgs = function(args, xhr, url, query, handleAs, id, canDelete, json){ + // args: Object + // the original object argument to the IO call. + // xhr: XMLHttpRequest + // For XMLHttpRequest calls only, the + // XMLHttpRequest object that was used for the + // request. + // url: String + // The final URL used for the call. Many times it + // will be different than the original args.url + // value. + // query: String + // For non-GET requests, the + // name1=value1&name2=value2 parameters sent up in + // the request. + // handleAs: String + // The final indicator on how the response will be + // handled. + // id: String + // For dojo.io.script calls only, the internal + // script ID used for the request. + // canDelete: Boolean + // For dojo.io.script calls only, indicates + // whether the script tag that represents the + // request can be deleted after callbacks have + // been called. Used internally to know when + // cleanup can happen on JSONP-type requests. + // json: Object + // For dojo.io.script calls only: holds the JSON + // response for JSONP-type requests. Used + // internally to hold on to the JSON responses. + // You should not need to access it directly -- + // the same object should be passed to the success + // callbacks directly. + this.args = args; + this.xhr = xhr; + this.url = url; + this.query = query; + this.handleAs = handleAs; + this.id = id; + this.canDelete = canDelete; + this.json = json; + } + =====*/ + + dojo._ioSetArgs = function(/*dojo.__IoArgs*/args, + /*Function*/canceller, + /*Function*/okHandler, + /*Function*/errHandler){ + // summary: + // sets up the Deferred and ioArgs property on the Deferred so it + // can be used in an io call. + // args: + // The args object passed into the public io call. Recognized properties on + // the args object are: + // canceller: + // The canceller function used for the Deferred object. The function + // will receive one argument, the Deferred object that is related to the + // canceller. + // okHandler: + // The first OK callback to be registered with Deferred. It has the opportunity + // to transform the OK response. It will receive one argument -- the Deferred + // object returned from this function. + // errHandler: + // The first error callback to be registered with Deferred. It has the opportunity + // to do cleanup on an error. It will receive two arguments: error (the + // Error object) and dfd, the Deferred object returned from this function. + + var ioArgs = {args: args, url: args.url}; + + //Get values from form if requestd. + var formObject = null; + if(args.form){ + var form = _d.byId(args.form); + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //so use it for all. See #2844 + var actnNode = form.getAttributeNode("action"); + ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); + formObject = _d.formToObject(form); + } + + // set up the query params + var miArgs = [{}]; + + if(formObject){ + // potentially over-ride url-provided params w/ form values + miArgs.push(formObject); + } + if(args.content){ + // stuff in content over-rides what's set by form + miArgs.push(args.content); + } + if(args.preventCache){ + miArgs.push({"dojo.preventCache": new Date().valueOf()}); + } + ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs)); + + // .. and the real work of getting the deferred in order, etc. + ioArgs.handleAs = args.handleAs || "text"; + var d = new _d.Deferred(canceller); + d.addCallbacks(okHandler, function(error){ + return errHandler(error, d); + }); + + //Support specifying load, error and handle callback functions from the args. + //For those callbacks, the "this" object will be the args object. + //The callbacks will get the deferred result value as the + //first argument and the ioArgs object as the second argument. + var ld = args.load; + if(ld && _d.isFunction(ld)){ + d.addCallback(function(value){ + return ld.call(args, value, ioArgs); + }); + } + var err = args.error; + if(err && _d.isFunction(err)){ + d.addErrback(function(value){ + return err.call(args, value, ioArgs); + }); + } + var handle = args.handle; + if(handle && _d.isFunction(handle)){ + d.addBoth(function(value){ + return handle.call(args, value, ioArgs); + }); + } + + d.ioArgs = ioArgs; + + // FIXME: need to wire up the xhr object's abort method to something + // analagous in the Deferred + return d; + } + + var _deferredCancel = function(/*Deferred*/dfd){ + //summary: canceller function for dojo._ioSetArgs call. + + dfd.canceled = true; + var xhr = dfd.ioArgs.xhr; + var _at = typeof xhr.abort; + if(_at == "function" || _at == "unknown"){ + xhr.abort(); + } + var err = new Error("xhr cancelled"); + err.dojoType = "cancel"; + return err; + } + var _deferredOk = function(/*Deferred*/dfd){ + //summary: okHandler function for dojo._ioSetArgs call. + + return _d._contentHandlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr); + } + var _deferError = function(/*Error*/error, /*Deferred*/dfd){ + //summary: errHandler function for dojo._ioSetArgs call. + + // console.debug("xhr error in:", dfd.ioArgs.xhr); + console.debug(error); + return error; + } + + var _makeXhrDeferred = function(/*dojo.__XhrArgs*/args){ + //summary: makes the Deferred object for this xhr request. + var dfd = _d._ioSetArgs(args, _deferredCancel, _deferredOk, _deferError); + //Pass the args to _xhrObj, to allow xhr iframe proxy interceptions. + dfd.ioArgs.xhr = _d._xhrObj(dfd.ioArgs.args); + return dfd; + } + + // avoid setting a timer per request. It degrades performance on IE + // something fierece if we don't use unified loops. + var _inFlightIntvl = null; + var _inFlight = []; + var _watchInFlight = function(){ + //summary: + // internal method that checks each inflight XMLHttpRequest to see + // if it has completed or if the timeout situation applies. + + var now = (new Date()).getTime(); + // make sure sync calls stay thread safe, if this callback is called + // during a sync call and this results in another sync call before the + // first sync call ends the browser hangs + if(!_d._blockAsync){ + // we need manual loop because we often modify _inFlight (and therefore 'i') while iterating + // note: the second clause is an assigment on purpose, lint may complain + for(var i = 0, tif; i < _inFlight.length && (tif = _inFlight[i]); i++){ + var dfd = tif.dfd; + try{ + if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ + _inFlight.splice(i--, 1); + }else if(tif.ioCheck(dfd)){ + _inFlight.splice(i--, 1); + tif.resHandle(dfd); + }else if(dfd.startTime){ + //did we timeout? + if(dfd.startTime + (dfd.ioArgs.args.timeout || 0) < now){ + _inFlight.splice(i--, 1); + var err = new Error("timeout exceeded"); + err.dojoType = "timeout"; + dfd.errback(err); + //Cancel the request so the io module can do appropriate cleanup. + dfd.cancel(); + } + } + }catch(e){ + // FIXME: make sure we errback! (fixed? remove console.debug?) + console.debug(e); + dfd.errback(new Error("_watchInFlightError!")); + } + } + } + + if(!_inFlight.length){ + clearInterval(_inFlightIntvl); + _inFlightIntvl = null; + return; + } + + } + + dojo._ioCancelAll = function(){ + //summary: Cancels all pending IO requests, regardless of IO type + //(xhr, script, iframe). + try{ + _d.forEach(_inFlight, function(i){ + i.dfd.cancel(); + }); + }catch(e){/*squelch*/} + } + + //Automatically call cancel all io calls on unload + //in IE for trac issue #2357. + if(_d.isIE){ + _d.addOnUnload(_d._ioCancelAll); + } + + _d._ioWatch = function(/*Deferred*/dfd, + /*Function*/validCheck, + /*Function*/ioCheck, + /*Function*/resHandle){ + //summary: watches the io request represented by dfd to see if it completes. + //dfd: + // The Deferred object to watch. + //validCheck: + // Function used to check if the IO request is still valid. Gets the dfd + // object as its only argument. + //ioCheck: + // Function used to check if basic IO call worked. Gets the dfd + // object as its only argument. + //resHandle: + // Function used to process response. Gets the dfd + // object as its only argument. + if(dfd.ioArgs.args.timeout){ + dfd.startTime = (new Date()).getTime(); + } + _inFlight.push({dfd: dfd, validCheck: validCheck, ioCheck: ioCheck, resHandle: resHandle}); + if(!_inFlightIntvl){ + _inFlightIntvl = setInterval(_watchInFlight, 50); + } + _watchInFlight(); // handle sync requests + } + + var _defaultContentType = "application/x-www-form-urlencoded"; + + var _validCheck = function(/*Deferred*/dfd){ + return dfd.ioArgs.xhr.readyState; //boolean + } + var _ioCheck = function(/*Deferred*/dfd){ + return 4 == dfd.ioArgs.xhr.readyState; //boolean + } + var _resHandle = function(/*Deferred*/dfd){ + var xhr = dfd.ioArgs.xhr; + if(_d._isDocumentOk(xhr)){ + dfd.callback(dfd); + }else{ + var err = new Error("Unable to load " + dfd.ioArgs.url + " status:" + xhr.status); + err.status = xhr.status; + err.responseText = xhr.responseText; + dfd.errback(err); + } + } + + var _doIt = function(/*String*/type, /*Deferred*/dfd){ + // IE 6 is a steaming pile. It won't let you call apply() on the native function (xhr.open). + // workaround for IE6's apply() "issues" + var ioArgs = dfd.ioArgs; + var args = ioArgs.args; + var xhr = ioArgs.xhr; + xhr.open(type, ioArgs.url, args.sync !== true, args.user || undefined, args.password || undefined); + if(args.headers){ + for(var hdr in args.headers){ + if(hdr.toLowerCase() === "content-type" && !args.contentType){ + args.contentType = args.headers[hdr]; + }else{ + xhr.setRequestHeader(hdr, args.headers[hdr]); + } + } + } + // FIXME: is this appropriate for all content types? + xhr.setRequestHeader("Content-Type", args.contentType || _defaultContentType); + if(!args.headers || !args.headers["X-Requested-With"]){ + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + } + // FIXME: set other headers here! + try{ + xhr.send(ioArgs.query); + }catch(e){ + dfd.cancel(); + } + _d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle); + xhr = null; + return dfd; //Deferred + } + + dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){ + //summary: Adds query params discovered by the io deferred construction to the URL. + //Only use this for operations which are fundamentally GET-type operations. + if(ioArgs.query.length){ + ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; + ioArgs.query = null; + } + } + + /*===== + dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, { + constructor: function(){ + // summary: + // In addition to the properties listed for the dojo._IoArgs type, + // the following properties are allowed for dojo.xhr* methods. + // handleAs: String? + // Acceptable values are: text (default), json, json-comment-optional, + // json-comment-filtered, javascript, xml + // sync: Boolean? + // false is default. Indicates whether the request should + // be a synchronous (blocking) request. + // headers: Object? + // Additional HTTP headers to send in the request. + this.handleAs = handleAs; + this.sync = sync; + this.headers = headers; + } + }); + =====*/ + + dojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){ + // summary: + // Sends an HTTP request with the given method. If the request has an + // HTTP body, then pass true for hasBody. The method argument should be uppercase. + // Also look at dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts + // for those HTTP methods. There are also methods for "raw" PUT and POST methods + // via dojo.rawXhrPut() and dojo.rawXhrPost() respectively. + var dfd = _makeXhrDeferred(args); + if(!hasBody){ + _d._ioAddQueryToUrl(dfd.ioArgs); + } + return _doIt(method, dfd); // dojo.Deferred + } + + dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP GET request to the server. + return _d.xhr("GET", args); //dojo.Deferred + } + + dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){ + //summary: + // Sends an HTTP POST request to the server. + return _d.xhr("POST", args, true); // dojo.Deferred + } + + dojo.rawXhrPost = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP POST request to the server. In addtion to the properties + // listed for the dojo.__XhrArgs type, the following property is allowed: + // postData: + // String. The raw data to send in the body of the POST request. + var dfd = _makeXhrDeferred(args); + dfd.ioArgs.query = args.postData; + return _doIt("POST", dfd); // dojo.Deferred + } + + dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP PUT request to the server. + return _d.xhr("PUT", args, true); // dojo.Deferred + } + + dojo.rawXhrPut = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP PUT request to the server. In addtion to the properties + // listed for the dojo.__XhrArgs type, the following property is allowed: + // putData: + // String. The raw data to send in the body of the PUT request. + var dfd = _makeXhrDeferred(args); + var ioArgs = dfd.ioArgs; + if(args.putData){ + ioArgs.query = args.putData; + args.putData = null; + } + return _doIt("PUT", dfd); // dojo.Deferred + } + + dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP DELETE request to the server. + return _d.xhr("DELETE", args); //dojo.Deferred + } + + /* + dojo.wrapForm = function(formNode){ + //summary: + // A replacement for FormBind, but not implemented yet. + + // FIXME: need to think harder about what extensions to this we might + // want. What should we allow folks to do w/ this? What events to + // set/send? + throw new Error("dojo.wrapForm not yet implemented"); + } + */ +})(); + +} + +if(!dojo._hasResource["dojo._base.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.fx"] = true; +dojo.provide("dojo._base.fx"); + +/* + Animation losely package based on Dan Pupius' work, contributed under CLA: + http://pupius.co.uk/js/Toolkit.Drawing.js +*/ +(function(){ + + var d = dojo; + + dojo._Line = function(/*int*/ start, /*int*/ end){ + // summary: + // dojo._Line is the object used to generate values from a start value + // to an end value + // start: int + // Beginning value for range + // end: int + // Ending value for range + this.start = start; + this.end = end; + this.getValue = function(/*float*/ n){ + // summary: returns the point on the line + // n: a floating point number greater than 0 and less than 1 + return ((this.end - this.start) * n) + this.start; // Decimal + } + } + + d.declare("dojo._Animation", null, { + // summary + // A generic animation class that fires callbacks into its handlers + // object at various states. Nearly all dojo animation functions + // return an instance of this method, usually without calling the + // .play() method beforehand. Therefore, you will likely need to + // call .play() on instances of dojo._Animation when one is + // returned. + constructor: function(/*Object*/ args){ + d.mixin(this, args); + if(d.isArray(this.curve)){ + /* curve: Array + pId: a */ + this.curve = new d._Line(this.curve[0], this.curve[1]); + } + }, + + // duration: Integer + // The time in milliseonds the animation will take to run + duration: 350, + + /*===== + // curve: dojo._Line||Array + // A two element array of start and end values, or a dojo._Line instance to be + // used in the Animation. + curve: null, + + // easing: Function + // A Function to adjust the acceleration (or deceleration) of the progress + // across a dojo._Line + easing: null, + =====*/ + + // repeat: Integer + // The number of times to loop the animation + repeat: 0, + + // rate: Integer + // the time in milliseconds to wait before advancing to next frame + // (used as a fps timer: rate/1000 = fps) + rate: 10 /* 100 fps */, + + /*===== + // delay: Integer + // The time in milliseconds to wait before starting animation after it has been .play()'ed + delay: null, + + // events + // + // beforeBegin: Event + // Synthetic event fired before a dojo._Animation begins playing (synchronous) + beforeBegin: null, + + // onBegin: Event + // Synthetic event fired as a dojo._Animation begins playing (useful?) + onBegin: null, + + // onAnimate: Event + // Synthetic event fired at each interval of a dojo._Animation + onAnimate: null, + + // onEnd: Event + // Synthetic event fired after the final frame of a dojo._Animation + onEnd: null, + + // onPlay: Event + // Synthetic event fired any time a dojo._Animation is play()'ed + onPlay: null, + + // onPause: Event + // Synthetic event fired when a dojo._Animation is paused + onPause: null, + + // onStop: Event + // Synthetic event fires when a dojo._Animation is stopped + onStop: null, + + =====*/ + + _percent: 0, + _startRepeatCount: 0, + + _fire: function(/*Event*/ evt, /*Array?*/ args){ + // summary: + // Convenience function. Fire event "evt" and pass it the + // arguments specified in "args". + // evt: + // The event to fire. + // args: + // The arguments to pass to the event. + try{ + if(this[evt]){ + this[evt].apply(this, args||[]); + } + }catch(e){ + // squelch and log because we shouldn't allow exceptions in + // synthetic event handlers to cause the internal timer to run + // amuck, potentially pegging the CPU. I'm not a fan of this + // squelch, but hopefully logging will make it clear what's + // going on + console.error("exception in animation handler for:", evt); + console.error(e); + } + return this; // dojo._Animation + }, + + play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){ + // summary: + // Start the animation. + // delay: + // How many milliseconds to delay before starting. + // gotoStart: + // If true, starts the animation from the beginning; otherwise, + // starts it from its current position. + var _t = this; + if(gotoStart){ + _t._stopTimer(); + _t._active = _t._paused = false; + _t._percent = 0; + }else if(_t._active && !_t._paused){ + return _t; // dojo._Animation + } + + _t._fire("beforeBegin"); + + var de = delay||_t.delay; + var _p = dojo.hitch(_t, "_play", gotoStart); + if(de > 0){ + setTimeout(_p, de); + return _t; // dojo._Animation + } + _p(); + return _t; + }, + + _play: function(gotoStart){ + var _t = this; + _t._startTime = new Date().valueOf(); + if(_t._paused){ + _t._startTime -= _t.duration * _t._percent; + } + _t._endTime = _t._startTime + _t.duration; + + _t._active = true; + _t._paused = false; + + var value = _t.curve.getValue(_t._percent); + if(!_t._percent){ + if(!_t._startRepeatCount){ + _t._startRepeatCount = _t.repeat; + } + _t._fire("onBegin", [value]); + } + + _t._fire("onPlay", [value]); + + _t._cycle(); + return _t; // dojo._Animation + }, + + pause: function(){ + // summary: Pauses a running animation. + this._stopTimer(); + if(!this._active){ return this; /*dojo._Animation*/ } + this._paused = true; + this._fire("onPause", [this.curve.getValue(this._percent)]); + return this; // dojo._Animation + }, + + gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){ + // summary: + // Sets the progress of the animation. + // percent: + // A percentage in decimal notation (between and including 0.0 and 1.0). + // andPlay: + // If true, play the animation after setting the progress. + this._stopTimer(); + this._active = this._paused = true; + this._percent = percent; + if(andPlay){ this.play(); } + return this; // dojo._Animation + }, + + stop: function(/*boolean?*/ gotoEnd){ + // summary: Stops a running animation. + // gotoEnd: If true, the animation will end. + if(!this._timer){ return this; /* dojo._Animation */ } + this._stopTimer(); + if(gotoEnd){ + this._percent = 1; + } + this._fire("onStop", [this.curve.getValue(this._percent)]); + this._active = this._paused = false; + return this; // dojo._Animation + }, + + status: function(){ + // summary: Returns a string token representation of the status of + // the animation, one of: "paused", "playing", "stopped" + if(this._active){ + return this._paused ? "paused" : "playing"; // String + } + return "stopped"; // String + }, + + _cycle: function(){ + var _t = this; + if(_t._active){ + var curr = new Date().valueOf(); + var step = (curr - _t._startTime) / (_t._endTime - _t._startTime); + + if(step >= 1){ + step = 1; + } + _t._percent = step; + + // Perform easing + if(_t.easing){ + step = _t.easing(step); + } + + _t._fire("onAnimate", [_t.curve.getValue(step)]); + + if(_t._percent < 1){ + _t._startTimer(); + }else{ + _t._active = false; + + if(_t.repeat > 0){ + _t.repeat--; + _t.play(null, true); + }else if(_t.repeat == -1){ + _t.play(null, true); + }else{ + if(_t._startRepeatCount){ + _t.repeat = _t._startRepeatCount; + _t._startRepeatCount = 0; + } + } + _t._percent = 0; + _t._fire("onEnd"); + _t._stopTimer(); + } + } + return _t; // dojo._Animation + } + }); + + var ctr = 0; + var _globalTimerList = []; + var runner = { + run: function(){ } + }; + var timer = null; + dojo._Animation.prototype._startTimer = function(){ + // this._timer = setTimeout(dojo.hitch(this, "_cycle"), this.rate); + if(!this._timer){ + this._timer = d.connect(runner, "run", this, "_cycle"); + ctr++; + } + if(!timer){ + timer = setInterval(d.hitch(runner, "run"), this.rate); + } + }; + + dojo._Animation.prototype._stopTimer = function(){ + if(this._timer){ + d.disconnect(this._timer); + this._timer = null; + ctr--; + } + if(ctr <= 0){ + clearInterval(timer); + timer = null; + ctr = 0; + } + }; + + var _makeFadeable = (d.isIE) ? function(node){ + // only set the zoom if the "tickle" value would be the same as the + // default + var ns = node.style; + if(!ns.zoom.length && d.style(node, "zoom") == "normal"){ + // make sure the node "hasLayout" + // NOTE: this has been tested with larger and smaller user-set text + // sizes and works fine + ns.zoom = "1"; + // node.style.zoom = "normal"; + } + // don't set the width to auto if it didn't already cascade that way. + // We don't want to f anyones designs + if(!ns.width.length && d.style(node, "width") == "auto"){ + ns.width = "auto"; + } + } : function(){}; + + dojo._fade = function(/*Object*/ args){ + // summary: + // Returns an animation that will fade the node defined by + // args.node from the start to end values passed (args.start + // args.end) (end is mandatory, start is optional) + + args.node = d.byId(args.node); + var fArgs = d.mixin({ properties: {} }, args); + var props = (fArgs.properties.opacity = {}); + props.start = !("start" in fArgs) ? + function(){ + return Number(d.style(fArgs.node, "opacity")); + } : fArgs.start; + props.end = fArgs.end; + + var anim = d.animateProperty(fArgs); + d.connect(anim, "beforeBegin", d.partial(_makeFadeable, fArgs.node)); + + return anim; // dojo._Animation + } + + /*===== + dojo.__FadeArgs = function(node, duration, easing){ + // node: DOMNode|String + // The node referenced in the animation + // duration: Integer? + // Duration of the animation in milliseconds. + // easing: Function? + // An easing function. + this.node = node; + this.duration = duration; + this.easing = easing; + } + =====*/ + + dojo.fadeIn = function(/*dojo.__FadeArgs*/ args){ + // summary: + // Returns an animation that will fade node defined in 'args' from + // its current opacity to fully opaque. + return d._fade(d.mixin({ end: 1 }, args)); // dojo._Animation + } + + dojo.fadeOut = function(/*dojo.__FadeArgs*/ args){ + // summary: + // Returns an animation that will fade node defined in 'args' + // from its current opacity to fully transparent. + return d._fade(d.mixin({ end: 0 }, args)); // dojo._Animation + } + + dojo._defaultEasing = function(/*Decimal?*/ n){ + // summary: The default easing function for dojo._Animation(s) + return 0.5 + ((Math.sin((n + 1.5) * Math.PI))/2); + } + + var PropLine = function(properties){ + // PropLine is an internal class which is used to model the values of + // an a group of CSS properties across an animation lifecycle. In + // particular, the "getValue" function handles getting interpolated + // values between start and end for a particular CSS value. + this._properties = properties; + for(var p in properties){ + var prop = properties[p]; + if(prop.start instanceof d.Color){ + // create a reusable temp color object to keep intermediate results + prop.tempColor = new d.Color(); + } + } + this.getValue = function(r){ + var ret = {}; + for(var p in this._properties){ + var prop = this._properties[p]; + var start = prop.start; + if(start instanceof d.Color){ + ret[p] = d.blendColors(start, prop.end, r, prop.tempColor).toCss(); + }else if(!d.isArray(start)){ + ret[p] = ((prop.end - start) * r) + start + (p != "opacity" ? prop.units||"px" : ""); + } + } + return ret; + } + } + + /*===== + dojo.declare("dojo.__AnimArgs", [dojo.__FadeArgs], { + // Properties: Object? + // A hash map of style properties to Objects describing the transition, + // such as the properties of dojo._Line with an additional 'unit' property + properties: {} + + //TODOC: add event callbacks + }); + =====*/ + + dojo.animateProperty = function(/*dojo.__AnimArgs*/ args){ + // summary: + // Returns an animation that will transition the properties of + // node defined in 'args' depending how they are defined in + // 'args.properties' + // + // description: + // dojo.animateProperty is the foundation of most dojo.fx + // animations. It takes an object of "properties" corresponding to + // style properties, and animates them in parallel over a set + // duration. + // + // example: + // A simple animation that changes the width of the specified node. + // | dojo.animateProperty({ + // | node: "nodeId", + // | properties: { width: 400 }, + // | }).play(); + // Dojo figures out the start value for the width and converts the + // integer specified for the width to the more expressive but + // verbose form `{ width: { end: '400', units: 'px' } }` which you + // can also specify directly + // example: + // animate width, height, and padding over 2 seconds...the + // pedantic way: + // | dojo.animateProperty({ node: node, duration:2000, + // | properties: { + // | width: { start: '200', end: '400', unit:"px" }, + // | height: { start:'200', end: '400', unit:"px" }, + // | paddingTop: { start:'5', end:'50', unit:"px" } + // | } + // | }).play(); + // + // example: + // plug in a different easing function and register a callback for + // when the animation ends. Easing functions accept values between + // zero and one and return a value on that basis. In this case, an + // exponential-in curve. + // | dojo.animateProperty({ + // | node: "nodeId", + // | // dojo figures out the start value + // | properties: { width: { end: 400 } }, + // | easing: function(n){ + // | return (n==0) ? 0 : Math.pow(2, 10 * (n - 1)); + // | }, + // | onEnd: function(){ + // | // called when the animation finishes + // | } + // | }).play(500); // delay playing half a second + + args.node = d.byId(args.node); + if(!args.easing){ args.easing = d._defaultEasing; } + + var anim = new d._Animation(args); + d.connect(anim, "beforeBegin", anim, function(){ + var pm = {}; + for(var p in this.properties){ + // Make shallow copy of properties into pm because we overwrite + // some values below. In particular if start/end are functions + // we don't want to overwrite them or the functions won't be + // called if the animation is reused. + if(p == "width" || p == "height"){ + this.node.display = "block"; + } + var prop = this.properties[p]; + prop = pm[p] = d.mixin({}, (d.isObject(prop) ? prop: { end: prop })); + + if(d.isFunction(prop.start)){ + prop.start = prop.start(); + } + if(d.isFunction(prop.end)){ + prop.end = prop.end(); + } + var isColor = (p.toLowerCase().indexOf("color") >= 0); + function getStyle(node, p){ + // dojo.style(node, "height") can return "auto" or "" on IE; this is more reliable: + var v = ({height: node.offsetHeight, width: node.offsetWidth})[p]; + if(v !== undefined){ return v; } + v = d.style(node, p); + return (p=="opacity") ? Number(v) : (isColor ? v : parseFloat(v)); + } + if(!("end" in prop)){ + prop.end = getStyle(this.node, p); + }else if(!("start" in prop)){ + prop.start = getStyle(this.node, p); + } + + if(isColor){ + prop.start = new d.Color(prop.start); + prop.end = new d.Color(prop.end); + }else{ + prop.start = (p == "opacity") ? Number(prop.start) : parseFloat(prop.start); + } + } + this.curve = new PropLine(pm); + }); + d.connect(anim, "onAnimate", anim, function(propValues){ + // try{ + for(var s in propValues){ + d.style(this.node, s, propValues[s]); + // this.node.style[s] = propValues[s]; + } + }); + return anim; // dojo._Animation + } + + dojo.anim = function( /*DOMNode|String*/ node, + /*Object*/ properties, + /*Integer?*/ duration, + /*Function?*/ easing, + /*Function?*/ onEnd, + /*Integer?*/ delay){ + // summary: + // A simpler interface to `dojo.animateProperty()`, also returns + // an instance of `dojo._Animation` but begins the animation + // immediately, unlike nearly every other Dojo animation API. + // description: + // `dojo.anim` is a simpler (but somewhat less powerful) version + // of `dojo.animateProperty`. It uses defaults for many basic properties + // and allows for positional parameters to be used in place of the + // packed "property bag" which is used for other Dojo animation + // methods. + // + // The `dojo._Animation` object returned from `dojo.anim` will be + // already playing when it is returned from this function, so + // calling play() on it again is (usually) a no-op. + // node: + // a DOM node or the id of a node to animate CSS properties on + // duration: + // The number of milliseconds over which the animation + // should run. Defaults to the global animation default duration + // (350ms). + // easing: + // An easing function over which to calculate acceleration + // and deceleration of the animation through its duration. + // A default easing algorithm is provided, but you may + // plug in any you wish. A large selection of easing algorithms + // are available in `dojox.fx.easing`. + // onEnd: + // A function to be called when the animation finishes + // running. + // delay: + // The number of milliseconds to delay beginning the + // animation by. The default is 0. + // example: + // Fade out a node + // | dojo.anim("id", { opacity: 0 }); + // example: + // Fade out a node over a full second + // | dojo.anim("id", { opacity: 0 }, 1000); + return d.animateProperty({ + node: node, + duration: duration||d._Animation.prototype.duration, + properties: properties, + easing: easing, + onEnd: onEnd + }).play(delay||0); + } +})(); + +} + +if(!dojo._hasResource["dojo._base.browser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.browser"] = true; +dojo.provide("dojo._base.browser"); + +//Need this to be the last code segment in base, so do not place any +//dojo.requireIf calls in this file. Otherwise, due to how the build system +//puts all requireIf dependencies after the current file, the require calls +//could be called before all of base is defined. +if(dojo.config.require){ + dojo.forEach(dojo.config.require, "dojo['require'](item);"); +} + +} + + if(dojo.config.afterOnLoad && dojo.isBrowser){ + //Dojo is being added to the page after page load, so just trigger + //the init sequence after a timeout. Using a timeout so the rest of this + //script gets evaluated properly. This work needs to happen after the + //dojo.config.require work done in dojo._base. + window.setTimeout(dojo._fakeLoadInit, 1000); + } + +})(); + diff --git a/tests/javascript/frameworks/dojo/dojo-1.2.4.js b/tests/javascript/frameworks/dojo/dojo-1.2.4.js new file mode 100644 index 0000000000000000000000000000000000000000..6a2824679e976298a84cc98ec0ce4163db6b7191 --- /dev/null +++ b/tests/javascript/frameworks/dojo/dojo-1.2.4.js @@ -0,0 +1,16 @@ +/* + Copyright (c) 2004-2008, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + +/* + This is a compiled version of Dojo, built for deployment and not for + development. To get an editable version, please visit: + + http://dojotoolkit.org + + for documentation and information on getting the source. +*/ + +(function(){var _1=null;if((_1||(typeof djConfig!="undefined"&&djConfig.scopeMap))&&(typeof window!="undefined")){var _2="",_3="",_4="",_5={},_6={};_1=_1||djConfig.scopeMap;for(var i=0;i<_1.length;i++){var _8=_1[i];_2+="var "+_8[0]+" = {}; "+_8[1]+" = "+_8[0]+";"+_8[1]+"._scopeName = '"+_8[1]+"';";_3+=(i==0?"":",")+_8[0];_4+=(i==0?"":",")+_8[1];_5[_8[0]]=_8[1];_6[_8[1]]=_8[0];}eval(_2+"dojo._scopeArgs = ["+_4+"];");dojo._scopePrefixArgs=_3;dojo._scopePrefix="(function("+_3+"){";dojo._scopeSuffix="})("+_4+")";dojo._scopeMap=_5;dojo._scopeMapRev=_6;}(function(){if(!this["console"]){this.console={};}var cn=["assert","count","debug","dir","dirxml","error","group","groupEnd","info","profile","profileEnd","time","timeEnd","trace","warn","log"];var i=0,tn;while((tn=cn[i++])){if(!console[tn]){(function(){var _c=tn+"";console[_c]=("log" in console)?function(){var a=Array.apply({},arguments);a.unshift(_c+":");console["log"](a.join(" "));}:function(){};})();}}if(typeof dojo=="undefined"){this.dojo={_scopeName:"dojo",_scopePrefix:"",_scopePrefixArgs:"",_scopeSuffix:"",_scopeMap:{},_scopeMapRev:{}};}var d=dojo;if(typeof dijit=="undefined"){this.dijit={_scopeName:"dijit"};}if(typeof dojox=="undefined"){this.dojox={_scopeName:"dojox"};}if(!d._scopeArgs){d._scopeArgs=[dojo,dijit,dojox];}d.global=this;d.config={isDebug:false,debugAtAllCosts:false};if(typeof djConfig!="undefined"){for(var _f in djConfig){d.config[_f]=djConfig[_f];}}var _10=["Browser","Rhino","Spidermonkey","Mobile"];var t;while((t=_10.shift())){d["is"+t]=false;}dojo.locale=d.config.locale;var rev="$Rev: 21540 $".match(/\d+/);dojo.version={major:1,minor:2,patch:4,flag:"",revision:rev?+rev[0]:999999,toString:function(){with(d.version){return major+"."+minor+"."+patch+flag+" ("+revision+")";}}};if(typeof OpenAjax!="undefined"){OpenAjax.hub.registerLibrary(dojo._scopeName,"http://dojotoolkit.org",d.version.toString());}dojo._mixin=function(obj,_14){var _15={};for(var x in _14){if(_15[x]===undefined||_15[x]!=_14[x]){obj[x]=_14[x];}}if(d["isIE"]&&_14){var p=_14.toString;if(typeof p=="function"&&p!=obj.toString&&p!=_15.toString&&p!="\nfunction toString() {\n [native code]\n}\n"){obj.toString=_14.toString;}}return obj;};dojo.mixin=function(obj,_19){for(var i=1,l=arguments.length;i0){console.warn("files still in flight!");return;}d._callLoaded();};dojo._callLoaded=function(){if(typeof setTimeout=="object"||(dojo.config.useXDomain&&d.isOpera)){if(dojo.isAIR){setTimeout(function(){dojo.loaded();},0);}else{setTimeout(dojo._scopeName+".loaded();",0);}}else{d.loaded();}};dojo._getModuleSymbols=function(_4b){var _4c=_4b.split(".");for(var i=_4c.length;i>0;i--){var _4e=_4c.slice(0,i).join(".");if((i==1)&&!this._moduleHasPrefix(_4e)){_4c[0]="../"+_4c[0];}else{var _4f=this._getModulePrefix(_4e);if(_4f!=_4e){_4c.splice(0,i,_4f);break;}}}return _4c;};dojo._global_omit_module_check=false;dojo.loadInit=function(_50){_50();};dojo._loadModule=dojo.require=function(_51,_52){_52=this._global_omit_module_check||_52;var _53=this._loadedModules[_51];if(_53){return _53;}var _54=this._getModuleSymbols(_51).join("/")+".js";var _55=(!_52)?_51:null;var ok=this._loadPath(_54,_55);if(!ok&&!_52){throw new Error("Could not load '"+_51+"'; last tried '"+_54+"'");}if(!_52&&!this._isXDomain){_53=this._loadedModules[_51];if(!_53){throw new Error("symbol '"+_51+"' is not defined after loading '"+_54+"'");}}return _53;};dojo.provide=function(_57){_57=_57+"";return (d._loadedModules[_57]=d.getObject(_57,true));};dojo.platformRequire=function(_58){var _59=_58.common||[];var _5a=_59.concat(_58[d._name]||_58["default"]||[]);for(var x=0;x<_5a.length;x++){var _5c=_5a[x];if(_5c.constructor==Array){d._loadModule.apply(d,_5c);}else{d._loadModule(_5c);}}};dojo.requireIf=function(_5d,_5e){if(_5d===true){var _5f=[];for(var i=1;i0&&!(j==1&&_70[0]=="")&&_70[j]==".."&&_70[j-1]!=".."){if(j==(_70.length-1)){_70.splice(j,1);_70[j-1]="";}else{_70.splice(j-1,2);j-=2;}}}}_6d.path=_70.join("/");}}}}uri=[];if(_6d.scheme){uri.push(_6d.scheme,":");}if(_6d.authority){uri.push("//",_6d.authority);}uri.push(_6d.path);if(_6d.query){uri.push("?",_6d.query);}if(_6d.fragment){uri.push("#",_6d.fragment);}}this.uri=uri.join("");var r=this.uri.match(ore);this.scheme=r[2]||(r[1]?"":n);this.authority=r[4]||(r[3]?"":n);this.path=r[5];this.query=r[7]||(r[6]?"":n);this.fragment=r[9]||(r[8]?"":n);if(this.authority!=n){r=this.authority.match(ire);this.user=r[3]||n;this.password=r[4]||n;this.host=r[6]||r[7];this.port=r[9]||n;}};dojo._Url.prototype.toString=function(){return this.uri;};dojo.moduleUrl=function(_73,url){var loc=d._getModuleSymbols(_73).join("/");if(!loc){return null;}if(loc.lastIndexOf("/")!=loc.length-1){loc+="/";}var _76=loc.indexOf(":");if(loc.charAt(0)!="/"&&(_76==-1||_76>loc.indexOf("/"))){loc=d.baseUrl+loc;}return new d._Url(loc,url);};})();if(typeof window!="undefined"){dojo.isBrowser=true;dojo._name="browser";(function(){var d=dojo;if(document&&document.getElementsByTagName){var _78=document.getElementsByTagName("script");var _79=/dojo(\.xd)?\.js(\W|$)/i;for(var i=0;i<_78.length;i++){var src=_78[i].getAttribute("src");if(!src){continue;}var m=src.match(_79);if(m){if(!d.config.baseUrl){d.config.baseUrl=src.substring(0,m.index);}var cfg=_78[i].getAttribute("djConfig");if(cfg){var _7e=eval("({ "+cfg+" })");for(var x in _7e){dojo.config[x]=_7e[x];}}break;}}}d.baseUrl=d.config.baseUrl;var n=navigator;var dua=n.userAgent;var dav=n.appVersion;var tv=parseFloat(dav);if(dua.indexOf("Opera")>=0){d.isOpera=tv;}var _84=Math.max(dav.indexOf("WebKit"),dav.indexOf("Safari"),0);if(_84){d.isSafari=parseFloat(dav.split("Version/")[1])||(parseFloat(dav.substr(_84+7))>419.3)?3:2;}if(dua.indexOf("AdobeAIR")>=0){d.isAIR=1;}if(dav.indexOf("Konqueror")>=0||d.isSafari){d.isKhtml=tv;}if(dua.indexOf("Gecko")>=0&&!d.isKhtml){d.isMozilla=d.isMoz=tv;}if(d.isMoz){d.isFF=parseFloat(dua.split("Firefox/")[1])||undefined;}if(document.all&&!d.isOpera){d.isIE=parseFloat(dav.split("MSIE ")[1])||undefined;}if(dojo.isIE&&window.location.protocol==="file:"){dojo.config.ieForceActiveXXhr=true;}var cm=document.compatMode;d.isQuirks=cm=="BackCompat"||cm=="QuirksMode"||d.isIE<6;d.locale=dojo.config.locale||(d.isIE?n.userLanguage:n.language).toLowerCase();d._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];d._xhrObj=function(){var _86=null;var _87=null;if(!dojo.isIE||!dojo.config.ieForceActiveXXhr){try{_86=new XMLHttpRequest();}catch(e){}}if(!_86){for(var i=0;i<3;++i){var _89=d._XMLHTTP_PROGIDS[i];try{_86=new ActiveXObject(_89);}catch(e){_87=e;}if(_86){d._XMLHTTP_PROGIDS=[_89];break;}}}if(!_86){throw new Error("XMLHTTP not available: "+_87);}return _86;};d._isDocumentOk=function(_8a){var _8b=_8a.status||0;return (_8b>=200&&_8b<300)||_8b==304||_8b==1223||(!_8b&&(location.protocol=="file:"||location.protocol=="chrome:"));};var _8c=window.location+"";var _8d=document.getElementsByTagName("base");var _8e=(_8d&&_8d.length>0);d._getText=function(uri,_90){var _91=this._xhrObj();if(!_8e&&dojo._Url){uri=(new dojo._Url(_8c,uri)).toString();}if(d.config.cacheBust){uri+="";uri+=(uri.indexOf("?")==-1?"?":"&")+String(d.config.cacheBust).replace(/\W+/g,"");}_91.open("GET",uri,false);try{_91.send(null);if(!d._isDocumentOk(_91)){var err=Error("Unable to load "+uri+" status:"+_91.status);err.status=_91.status;err.responseText=_91.responseText;throw err;}}catch(e){if(_90){return null;}throw e;}return _91.responseText;};d._windowUnloaders=[];d.windowUnloaded=function(){var mll=this._windowUnloaders;while(mll.length){(mll.pop())();}};d.addOnWindowUnload=function(obj,_95){d._onto(d._windowUnloaders,obj,_95);};})();dojo._initFired=false;dojo._loadInit=function(e){dojo._initFired=true;var _97=(e&&e.type)?e.type.toLowerCase():"load";if(arguments.callee.initialized||(_97!="domcontentloaded"&&_97!="load")){return;}arguments.callee.initialized=true;if("_khtmlTimer" in dojo){clearInterval(dojo._khtmlTimer);delete dojo._khtmlTimer;}if(dojo._inFlightCount==0){dojo._modulesLoaded();}};dojo._fakeLoadInit=function(){dojo._loadInit({type:"load"});};if(!dojo.config.afterOnLoad){if(document.addEventListener){if(dojo.isOpera||dojo.isFF>=3||(dojo.isMoz&&dojo.config.enableMozDomContentLoaded===true)){document.addEventListener("DOMContentLoaded",dojo._loadInit,null);}window.addEventListener("load",dojo._loadInit,null);}if(dojo.isAIR){window.addEventListener("load",dojo._loadInit,null);}else{if(/(WebKit|khtml)/i.test(navigator.userAgent)){dojo._khtmlTimer=setInterval(function(){if(/loaded|complete/.test(document.readyState)){dojo._loadInit();}},10);}}}(function(){var _w=window;var _99=function(_9a,fp){var _9c=_w[_9a]||function(){};_w[_9a]=function(){fp.apply(_w,arguments);_9c.apply(_w,arguments);};};if(dojo.isIE){if(!dojo.config.afterOnLoad){document.write(""+"");}try{document.namespaces.add("v","urn:schemas-microsoft-com:vml");document.createStyleSheet().addRule("v\\:*","behavior:url(#default#VML)");}catch(e){}}_99("onbeforeunload",function(){dojo.unloaded();});_99("onunload",function(){dojo.windowUnloaded();});})();}(function(){var mp=dojo.config["modulePaths"];if(mp){for(var _9e in mp){dojo.registerModulePath(_9e,mp[_9e]);}}})();if(dojo.config.isDebug){dojo.require("dojo._firebug.firebug");}if(dojo.config.debugAtAllCosts){dojo.config.useXDomain=true;dojo.require("dojo._base._loader.loader_xd");dojo.require("dojo._base._loader.loader_debug");dojo.require("dojo.i18n");}if(!dojo._hasResource["dojo._base.lang"]){dojo._hasResource["dojo._base.lang"]=true;dojo.provide("dojo._base.lang");dojo.isString=function(it){return !!arguments.length&&it!=null&&(typeof it=="string"||it instanceof String);};dojo.isArray=function(it){return it&&(it instanceof Array||typeof it=="array");};dojo.isFunction=(function(){var _a1=function(it){return it&&(typeof it=="function"||it instanceof Function);};return dojo.isSafari?function(it){if(typeof it=="function"&&it=="[object NodeList]"){return false;}return _a1(it);}:_a1;})();dojo.isObject=function(it){return it!==undefined&&(it===null||typeof it=="object"||dojo.isArray(it)||dojo.isFunction(it));};dojo.isArrayLike=function(it){var d=dojo;return it&&it!==undefined&&!d.isString(it)&&!d.isFunction(it)&&!(it.tagName&&it.tagName.toLowerCase()=="form")&&(d.isArray(it)||isFinite(it.length));};dojo.isAlien=function(it){return it&&!dojo.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));};dojo.extend=function(_a8,_a9){for(var i=1,l=arguments.length;i2){return dojo._hitchArgs.apply(dojo,arguments);}if(!_b3){_b3=_b2;_b2=null;}if(dojo.isString(_b3)){_b2=_b2||dojo.global;if(!_b2[_b3]){throw (["dojo.hitch: scope[\"",_b3,"\"] is null (scope=\"",_b2,"\")"].join(""));}return function(){return _b2[_b3].apply(_b2,arguments||[]);};}return !_b2?_b3:function(){return _b3.apply(_b2,arguments||[]);};};dojo.delegate=dojo._delegate=(function(){function TMP(){};return function(obj,_b5){TMP.prototype=obj;var tmp=new TMP();if(_b5){dojo._mixin(tmp,_b5);}return tmp;};})();(function(){var _b7=function(obj,_b9,_ba){return (_ba||[]).concat(Array.prototype.slice.call(obj,_b9||0));};var _bb=function(obj,_bd,_be){var arr=_be||[];for(var x=_bd||0;x=0){this._fire();}return this;},_fire:function(){var _134=this.chain;var _135=this.fired;var res=this.results[_135];var self=this;var cb=null;while((_134.length>0)&&(this.paused==0)){var f=_134.shift()[_135];if(!f){continue;}var func=function(){var ret=f(res);if(typeof ret!="undefined"){res=ret;}_135=((res instanceof Error)?1:0);if(res instanceof dojo.Deferred){cb=function(res){self._resback(res);self.paused--;if((self.paused==0)&&(self.fired>=0)){self._fire();}};this.paused++;}};if(dojo.config.isDebug){func.call(this);}else{try{func.call(this);}catch(err){_135=1;res=err;}}}this.fired=_135;this.results[_135]=res;if((cb)&&(this.paused)){res.addBoth(cb);}}});}if(!dojo._hasResource["dojo._base.json"]){dojo._hasResource["dojo._base.json"]=true;dojo.provide("dojo._base.json");dojo.fromJson=function(json){return eval("("+json+")");};dojo._escapeString=function(str){return ("\""+str.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");};dojo.toJsonIndentStr="\t";dojo.toJson=function(it,_140,_141){if(it===undefined){return "undefined";}var _142=typeof it;if(_142=="number"||_142=="boolean"){return it+"";}if(it===null){return "null";}if(dojo.isString(it)){return dojo._escapeString(it);}var _143=arguments.callee;var _144;_141=_141||"";var _145=_140?_141+dojo.toJsonIndentStr:"";var tf=it.__json__||it.json;if(dojo.isFunction(tf)){_144=tf.call(it);if(it!==_144){return _143(_144,_140,_145);}}if(it.nodeType&&it.cloneNode){throw new Error("Can't serialize DOM nodes");}var sep=_140?" ":"";var _148=_140?"\n":"";if(dojo.isArray(it)){var res=dojo.map(it,function(obj){var val=_143(obj,_140,_145);if(typeof val!="string"){val="undefined";}return _148+_145+val;});return "["+res.join(","+sep)+_148+_141+"]";}if(_142=="function"){return null;}var _14c=[],key;for(key in it){var _14e,val;if(typeof key=="number"){_14e="\""+key+"\"";}else{if(typeof key=="string"){_14e=dojo._escapeString(key);}else{continue;}}val=_143(it[key],_140,_145);if(typeof val!="string"){continue;}_14c.push(_148+_145+_14e+":"+sep+val);}return "{"+_14c.join(","+sep)+_148+_141+"}";};}if(!dojo._hasResource["dojo._base.array"]){dojo._hasResource["dojo._base.array"]=true;dojo.provide("dojo._base.array");(function(){var _150=function(arr,obj,cb){return [dojo.isString(arr)?arr.split(""):arr,obj||dojo.global,dojo.isString(cb)?new Function("item","index","array",cb):cb];};dojo.mixin(dojo,{indexOf:function(_154,_155,_156,_157){var step=1,end=_154.length||0,i=0;if(_157){i=end-1;step=end=-1;}if(_156!=undefined){i=_156;}if((_157&&i>end)||i>=bits;t[x]=bits==4?17*c:c;});t.a=1;return t;};dojo.colorFromArray=function(a,obj){var t=obj||new dojo.Color();t._set(Number(a[0]),Number(a[1]),Number(a[2]),Number(a[3]));if(isNaN(t.a)){t.a=1;}return t.sanitize();};dojo.colorFromString=function(str,obj){var a=dojo.Color.named[str];return a&&dojo.colorFromArray(a,obj)||dojo.colorFromRgb(str,obj)||dojo.colorFromHex(str,obj);};}if(!dojo._hasResource["dojo._base"]){dojo._hasResource["dojo._base"]=true;dojo.provide("dojo._base");}if(!dojo._hasResource["dojo._base.window"]){dojo._hasResource["dojo._base.window"]=true;dojo.provide("dojo._base.window");dojo.doc=window["document"]||null;dojo.body=function(){return dojo.doc.body||dojo.doc.getElementsByTagName("body")[0];};dojo.setContext=function(_1a7,_1a8){dojo.global=_1a7;dojo.doc=_1a8;};dojo._fireCallback=function(_1a9,_1aa,_1ab){if(_1aa&&dojo.isString(_1a9)){_1a9=_1aa[_1a9];}return _1a9.apply(_1aa,_1ab||[]);};dojo.withGlobal=function(_1ac,_1ad,_1ae,_1af){var rval;var _1b1=dojo.global;var _1b2=dojo.doc;try{dojo.setContext(_1ac,_1ac.document);rval=dojo._fireCallback(_1ad,_1ae,_1af);}finally{dojo.setContext(_1b1,_1b2);}return rval;};dojo.withDoc=function(_1b3,_1b4,_1b5,_1b6){var rval;var _1b8=dojo.doc;try{dojo.doc=_1b3;rval=dojo._fireCallback(_1b4,_1b5,_1b6);}finally{dojo.doc=_1b8;}return rval;};}if(!dojo._hasResource["dojo._base.event"]){dojo._hasResource["dojo._base.event"]=true;dojo.provide("dojo._base.event");(function(){var del=(dojo._event_listener={add:function(node,name,fp){if(!node){return;}name=del._normalizeEventName(name);fp=del._fixCallback(name,fp);var _1bd=name;if(!dojo.isIE&&(name=="mouseenter"||name=="mouseleave")){var ofp=fp;name=(name=="mouseenter")?"mouseover":"mouseout";fp=function(e){try{e.relatedTarget.tagName;}catch(e2){return;}if(!dojo.isDescendant(e.relatedTarget,node)){return ofp.call(this,e);}};}node.addEventListener(name,fp,false);return fp;},remove:function(node,_1c1,_1c2){if(node){_1c1=del._normalizeEventName(_1c1);if(!dojo.isIE&&(_1c1=="mouseenter"||_1c1=="mouseleave")){_1c1=(_1c1=="mouseenter")?"mouseover":"mouseout";}node.removeEventListener(_1c1,_1c2,false);}},_normalizeEventName:function(name){return name.slice(0,2)=="on"?name.slice(2):name;},_fixCallback:function(name,fp){return name!="keypress"?fp:function(e){return fp.call(this,del._fixEvent(e,this));};},_fixEvent:function(evt,_1c8){switch(evt.type){case "keypress":del._setKeyChar(evt);break;}return evt;},_setKeyChar:function(evt){evt.keyChar=evt.charCode?String.fromCharCode(evt.charCode):"";evt.charOrCode=evt.keyChar||evt.keyCode;},_punctMap:{106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39}});dojo.fixEvent=function(evt,_1cb){return del._fixEvent(evt,_1cb);};dojo.stopEvent=function(evt){evt.preventDefault();evt.stopPropagation();};var _1cd=dojo._listener;dojo._connect=function(obj,_1cf,_1d0,_1d1,_1d2){var _1d3=obj&&(obj.nodeType||obj.attachEvent||obj.addEventListener);var lid=!_1d3?0:(!_1d2?1:2),l=[dojo._listener,del,_1cd][lid];var h=l.add(obj,_1cf,dojo.hitch(_1d0,_1d1));return [obj,_1cf,h,lid];};dojo._disconnect=function(obj,_1d8,_1d9,_1da){([dojo._listener,del,_1cd][_1da]).remove(obj,_1d8,_1d9);};dojo.keys={BACKSPACE:8,TAB:9,CLEAR:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,INSERT:45,DELETE:46,HELP:47,LEFT_WINDOW:91,RIGHT_WINDOW:92,SELECT:93,NUMPAD_0:96,NUMPAD_1:97,NUMPAD_2:98,NUMPAD_3:99,NUMPAD_4:100,NUMPAD_5:101,NUMPAD_6:102,NUMPAD_7:103,NUMPAD_8:104,NUMPAD_9:105,NUMPAD_MULTIPLY:106,NUMPAD_PLUS:107,NUMPAD_ENTER:108,NUMPAD_MINUS:109,NUMPAD_PERIOD:110,NUMPAD_DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,NUM_LOCK:144,SCROLL_LOCK:145};if(dojo.isIE){var _1db=function(e,code){try{return (e.keyCode=code);}catch(e){return 0;}};var iel=dojo._listener;var _1df=dojo._ieListenersName="_"+dojo._scopeName+"_listeners";if(!dojo.config._allow_leaks){_1cd=iel=dojo._ie_listener={handlers:[],add:function(_1e0,_1e1,_1e2){_1e0=_1e0||dojo.global;var f=_1e0[_1e1];if(!f||!f[_1df]){var d=dojo._getIeDispatcher();d.target=f&&(ieh.push(f)-1);d[_1df]=[];f=_1e0[_1e1]=d;}return f[_1df].push(ieh.push(_1e2)-1);},remove:function(_1e6,_1e7,_1e8){var f=(_1e6||dojo.global)[_1e7],l=f&&f[_1df];if(f&&l&&_1e8--){delete ieh[l[_1e8]];delete l[_1e8];}}};var ieh=iel.handlers;}dojo.mixin(del,{add:function(node,_1ec,fp){if(!node){return;}_1ec=del._normalizeEventName(_1ec);if(_1ec=="onkeypress"){var kd=node.onkeydown;if(!kd||!kd[_1df]||!kd._stealthKeydownHandle){var h=del.add(node,"onkeydown",del._stealthKeyDown);kd=node.onkeydown;kd._stealthKeydownHandle=h;kd._stealthKeydownRefs=1;}else{kd._stealthKeydownRefs++;}}return iel.add(node,_1ec,del._fixCallback(fp));},remove:function(node,_1f1,_1f2){_1f1=del._normalizeEventName(_1f1);iel.remove(node,_1f1,_1f2);if(_1f1=="onkeypress"){var kd=node.onkeydown;if(--kd._stealthKeydownRefs<=0){iel.remove(node,"onkeydown",kd._stealthKeydownHandle);delete kd._stealthKeydownHandle;}}},_normalizeEventName:function(_1f4){return _1f4.slice(0,2)!="on"?"on"+_1f4:_1f4;},_nop:function(){},_fixEvent:function(evt,_1f6){if(!evt){var w=_1f6&&(_1f6.ownerDocument||_1f6.document||_1f6).parentWindow||window;evt=w.event;}if(!evt){return (evt);}evt.target=evt.srcElement;evt.currentTarget=(_1f6||evt.srcElement);evt.layerX=evt.offsetX;evt.layerY=evt.offsetY;var se=evt.srcElement,doc=(se&&se.ownerDocument)||document;var _1fa=((dojo.isIE<6)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;var _1fb=dojo._getIeDocumentElementOffset();evt.pageX=evt.clientX+dojo._fixIeBiDiScrollLeft(_1fa.scrollLeft||0)-_1fb.x;evt.pageY=evt.clientY+(_1fa.scrollTop||0)-_1fb.y;if(evt.type=="mouseover"){evt.relatedTarget=evt.fromElement;}if(evt.type=="mouseout"){evt.relatedTarget=evt.toElement;}evt.stopPropagation=del._stopPropagation;evt.preventDefault=del._preventDefault;return del._fixKeys(evt);},_fixKeys:function(evt){switch(evt.type){case "keypress":var c=("charCode" in evt?evt.charCode:evt.keyCode);if(c==10){c=0;evt.keyCode=13;}else{if(c==13||c==27){c=0;}else{if(c==3){c=99;}}}evt.charCode=c;del._setKeyChar(evt);break;}return evt;},_stealthKeyDown:function(evt){var kp=evt.currentTarget.onkeypress;if(!kp||!kp[_1df]){return;}var k=evt.keyCode;var _201=(k!=13)&&(k!=32)&&(k!=27)&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222);if(_201||evt.ctrlKey){var c=_201?0:k;if(evt.ctrlKey){if(k==3||k==13){return;}else{if(c>95&&c<106){c-=48;}else{if((!evt.shiftKey)&&(c>=65&&c<=90)){c+=32;}else{c=del._punctMap[c]||c;}}}}var faux=del._synthesizeEvent(evt,{type:"keypress",faux:true,charCode:c});kp.call(evt.currentTarget,faux);evt.cancelBubble=faux.cancelBubble;evt.returnValue=faux.returnValue;_1db(evt,faux.keyCode);}},_stopPropagation:function(){this.cancelBubble=true;},_preventDefault:function(){this.bubbledKeyCode=this.keyCode;if(this.ctrlKey){_1db(this,0);}this.returnValue=false;}});dojo.stopEvent=function(evt){evt=evt||window.event;del._stopPropagation.call(evt);del._preventDefault.call(evt);};}del._synthesizeEvent=function(evt,_206){var faux=dojo.mixin({},evt,_206);del._setKeyChar(faux);faux.preventDefault=function(){evt.preventDefault();};faux.stopPropagation=function(){evt.stopPropagation();};return faux;};if(dojo.isOpera){dojo.mixin(del,{_fixEvent:function(evt,_209){switch(evt.type){case "keypress":var c=evt.which;if(c==3){c=99;}c=((c<41)&&(!evt.shiftKey)?0:c);if((evt.ctrlKey)&&(!evt.shiftKey)&&(c>=65)&&(c<=90)){c+=32;}return del._synthesizeEvent(evt,{charCode:c});}return evt;}});}if(dojo.isSafari){del._add=del.add;del._remove=del.remove;dojo.mixin(del,{add:function(node,_20c,fp){if(!node){return;}var _20e=del._add(node,_20c,fp);if(del._normalizeEventName(_20c)=="keypress"){_20e._stealthKeyDownHandle=del._add(node,"keydown",function(evt){var k=evt.keyCode;var _211=(k!=13)&&(k!=32)&&(k!=27)&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222);if(_211||evt.ctrlKey){var c=_211?0:k;if(evt.ctrlKey){if(k==3||k==13){return;}else{if(c>95&&c<106){c-=48;}else{if((!evt.shiftKey)&&(c>=65&&c<=90)){c+=32;}else{c=del._punctMap[c]||c;}}}}var faux=del._synthesizeEvent(evt,{type:"keypress",faux:true,charCode:c});fp.call(evt.currentTarget,faux);}});}return _20e;},remove:function(node,_215,_216){if(node){if(_216._stealthKeyDownHandle){del._remove(node,"keydown",_216._stealthKeyDownHandle);}del._remove(node,_215,_216);}},_fixEvent:function(evt,_218){switch(evt.type){case "keypress":if(evt.faux){return evt;}var c=evt.charCode;c=c>=32?c:0;return del._synthesizeEvent(evt,{charCode:c,faux:true});}return evt;}});}})();if(dojo.isIE){dojo._ieDispatcher=function(args,_21b){var ap=Array.prototype,h=dojo._ie_listener.handlers,c=args.callee,ls=c[dojo._ieListenersName],t=h[c.target];var r=t&&t.apply(_21b,args);var lls=[].concat(ls);for(var i in lls){if(!(i in ap)){h[lls[i]].apply(_21b,args);}}return r;};dojo._getIeDispatcher=function(){return new Function(dojo._scopeName+"._ieDispatcher(arguments, this)");};dojo._event_listener._fixCallback=function(fp){var f=dojo._event_listener._fixEvent;return function(e){return fp.call(this,f(e,this));};};}}if(!dojo._hasResource["dojo._base.html"]){dojo._hasResource["dojo._base.html"]=true;dojo.provide("dojo._base.html");try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}if(dojo.isIE||dojo.isOpera){dojo.byId=function(id,doc){if(dojo.isString(id)){var _d=doc||dojo.doc;var te=_d.getElementById(id);if(te&&te.attributes.id.value==id){return te;}else{var eles=_d.all[id];if(!eles||!eles.length){return eles;}var i=0;while((te=eles[i++])){if(te.attributes.id.value==id){return te;}}}}else{return id;}};}else{dojo.byId=function(id,doc){return dojo.isString(id)?(doc||dojo.doc).getElementById(id):id;};}(function(){var d=dojo;var _230=null;dojo.addOnWindowUnload(function(){_230=null;});dojo._destroyElement=function(node){node=d.byId(node);try{if(!_230||_230.ownerDocument!=node.ownerDocument){_230=node.ownerDocument.createElement("div");}_230.appendChild(node.parentNode?node.parentNode.removeChild(node):node);_230.innerHTML="";}catch(e){}};dojo.isDescendant=function(node,_233){try{node=d.byId(node);_233=d.byId(_233);while(node){if(node===_233){return true;}node=node.parentNode;}}catch(e){}return false;};dojo.setSelectable=function(node,_235){node=d.byId(node);if(d.isMozilla){node.style.MozUserSelect=_235?"":"none";}else{if(d.isKhtml){node.style.KhtmlUserSelect=_235?"auto":"none";}else{if(d.isIE){var v=(node.unselectable=_235?"":"on");d.query("*",node).forEach("item.unselectable = '"+v+"'");}}}};var _237=function(node,ref){ref.parentNode.insertBefore(node,ref);return true;};var _23a=function(node,ref){var pn=ref.parentNode;if(ref==pn.lastChild){pn.appendChild(node);}else{return _237(node,ref.nextSibling);}return true;};dojo.place=function(node,_23f,_240){if(!node||!_23f){return false;}node=d.byId(node);_23f=d.byId(_23f);if(typeof _240=="number"){var cn=_23f.childNodes;if(!cn.length||cn.length<=_240){_23f.appendChild(node);return true;}return _237(node,_240<=0?_23f.firstChild:cn[_240]);}switch(_240){case "before":return _237(node,_23f);case "after":return _23a(node,_23f);case "first":if(_23f.firstChild){return _237(node,_23f.firstChild);}default:_23f.appendChild(node);return true;}};dojo.boxModel="content-box";if(d.isIE){var _dcm=document.compatMode;d.boxModel=_dcm=="BackCompat"||_dcm=="QuirksMode"||d.isIE<6?"border-box":"content-box";}var gcs;if(d.isSafari){gcs=function(node){var s;if(node instanceof HTMLElement){var dv=node.ownerDocument.defaultView;s=dv.getComputedStyle(node,null);if(!s&&node.style){node.style.display="";s=dv.getComputedStyle(node,null);}}return s||{};};}else{if(d.isIE){gcs=function(node){return node.nodeType==1?node.currentStyle:{};};}else{gcs=function(node){return node instanceof HTMLElement?node.ownerDocument.defaultView.getComputedStyle(node,null):{};};}}dojo.getComputedStyle=gcs;if(!d.isIE){dojo._toPixelValue=function(_249,_24a){return parseFloat(_24a)||0;};}else{dojo._toPixelValue=function(_24b,_24c){if(!_24c){return 0;}if(_24c=="medium"){return 4;}if(_24c.slice&&(_24c.slice(-2)=="px")){return parseFloat(_24c);}with(_24b){var _24d=style.left;var _24e=runtimeStyle.left;runtimeStyle.left=currentStyle.left;try{style.left=_24c;_24c=style.pixelLeft;}catch(e){_24c=0;}style.left=_24d;runtimeStyle.left=_24e;}return _24c;};}var px=d._toPixelValue;var astr="DXImageTransform.Microsoft.Alpha";var af=function(n,f){try{return n.filters.item(astr);}catch(e){return f?{}:null;}};dojo._getOpacity=d.isIE?function(node){try{return af(node).Opacity/100;}catch(e){return 1;}}:function(node){return gcs(node).opacity;};dojo._setOpacity=d.isIE?function(node,_257){var ov=_257*100;node.style.zoom=1;af(node,1).Enabled=(_257==1?false:true);if(!af(node)){node.style.filter+=" progid:"+astr+"(Opacity="+ov+")";}else{af(node,1).Opacity=ov;}if(node.nodeName.toLowerCase()=="tr"){d.query("> td",node).forEach(function(i){d._setOpacity(i,_257);});}return _257;}:function(node,_25b){return node.style.opacity=_25b;};var _25c={left:true,top:true};var _25d=/margin|padding|width|height|max|min|offset/;var _25e=function(node,type,_261){type=type.toLowerCase();if(d.isIE){if(_261=="auto"){if(type=="height"){return node.offsetHeight;}if(type=="width"){return node.offsetWidth;}}if(type=="fontweight"){switch(_261){case 700:return "bold";case 400:default:return "normal";}}}if(!(type in _25c)){_25c[type]=_25d.test(type);}return _25c[type]?px(node,_261):_261;};var _262=d.isIE?"styleFloat":"cssFloat";var _263={"cssFloat":_262,"styleFloat":_262,"float":_262};dojo.style=function(node,_265,_266){var n=d.byId(node),args=arguments.length,op=(_265=="opacity");_265=_263[_265]||_265;if(args==3){return op?d._setOpacity(n,_266):n.style[_265]=_266;}if(args==2&&op){return d._getOpacity(n);}var s=gcs(n);if(args==2&&!d.isString(_265)){for(var x in _265){d.style(node,x,_265[x]);}return s;}return (args==1)?s:_25e(n,_265,s[_265]||n.style[_265]);};dojo._getPadExtents=function(n,_26d){var s=_26d||gcs(n),l=px(n,s.paddingLeft),t=px(n,s.paddingTop);return {l:l,t:t,w:l+px(n,s.paddingRight),h:t+px(n,s.paddingBottom)};};dojo._getBorderExtents=function(n,_272){var ne="none",s=_272||gcs(n),bl=(s.borderLeftStyle!=ne?px(n,s.borderLeftWidth):0),bt=(s.borderTopStyle!=ne?px(n,s.borderTopWidth):0);return {l:bl,t:bt,w:bl+(s.borderRightStyle!=ne?px(n,s.borderRightWidth):0),h:bt+(s.borderBottomStyle!=ne?px(n,s.borderBottomWidth):0)};};dojo._getPadBorderExtents=function(n,_278){var s=_278||gcs(n),p=d._getPadExtents(n,s),b=d._getBorderExtents(n,s);return {l:p.l+b.l,t:p.t+b.t,w:p.w+b.w,h:p.h+b.h};};dojo._getMarginExtents=function(n,_27d){var s=_27d||gcs(n),l=px(n,s.marginLeft),t=px(n,s.marginTop),r=px(n,s.marginRight),b=px(n,s.marginBottom);if(d.isSafari&&(s.position!="absolute")){r=l;}return {l:l,t:t,w:l+r,h:t+b};};dojo._getMarginBox=function(node,_284){var s=_284||gcs(node),me=d._getMarginExtents(node,s);var l=node.offsetLeft-me.l,t=node.offsetTop-me.t,p=node.parentNode;if(d.isMoz){var sl=parseFloat(s.left),st=parseFloat(s.top);if(!isNaN(sl)&&!isNaN(st)){l=sl,t=st;}else{if(p&&p.style){var pcs=gcs(p);if(pcs.overflow!="visible"){var be=d._getBorderExtents(p,pcs);l+=be.l,t+=be.t;}}}}else{if(d.isOpera){if(p){var be=d._getBorderExtents(p);l-=be.l;t-=be.t;}}}return {l:l,t:t,w:node.offsetWidth+me.w,h:node.offsetHeight+me.h};};dojo._getContentBox=function(node,_28f){var s=_28f||gcs(node),pe=d._getPadExtents(node,s),be=d._getBorderExtents(node,s),w=node.clientWidth,h;if(!w){w=node.offsetWidth,h=node.offsetHeight;}else{h=node.clientHeight,be.w=be.h=0;}if(d.isOpera){pe.l+=be.l;pe.t+=be.t;}return {l:pe.l,t:pe.t,w:w-pe.w-be.w,h:h-pe.h-be.h};};dojo._getBorderBox=function(node,_296){var s=_296||gcs(node),pe=d._getPadExtents(node,s),cb=d._getContentBox(node,s);return {l:cb.l-pe.l,t:cb.t-pe.t,w:cb.w+pe.w,h:cb.h+pe.h};};dojo._setBox=function(node,l,t,w,h,u){u=u||"px";var s=node.style;if(!isNaN(l)){s.left=l+u;}if(!isNaN(t)){s.top=t+u;}if(w>=0){s.width=w+u;}if(h>=0){s.height=h+u;}};dojo._isButtonTag=function(node){return node.tagName=="BUTTON"||node.tagName=="INPUT"&&node.getAttribute("type").toUpperCase()=="BUTTON";};dojo._usesBorderBox=function(node){var n=node.tagName;return d.boxModel=="border-box"||n=="TABLE"||dojo._isButtonTag(node);};dojo._setContentSize=function(node,_2a5,_2a6,_2a7){if(d._usesBorderBox(node)){var pb=d._getPadBorderExtents(node,_2a7);if(_2a5>=0){_2a5+=pb.w;}if(_2a6>=0){_2a6+=pb.h;}}d._setBox(node,NaN,NaN,_2a5,_2a6);};dojo._setMarginBox=function(node,_2aa,_2ab,_2ac,_2ad,_2ae){var s=_2ae||gcs(node);var bb=d._usesBorderBox(node),pb=bb?_2b2:d._getPadBorderExtents(node,s);if(dojo.isSafari){if(dojo._isButtonTag(node)){var ns=node.style;if(_2ac>=0&&!ns.width){ns.width="4px";}if(_2ad>=0&&!ns.height){ns.height="4px";}}}var mb=d._getMarginExtents(node,s);if(_2ac>=0){_2ac=Math.max(_2ac-pb.w-mb.w,0);}if(_2ad>=0){_2ad=Math.max(_2ad-pb.h-mb.h,0);}d._setBox(node,_2aa,_2ab,_2ac,_2ad);};var _2b2={l:0,t:0,w:0,h:0};dojo.marginBox=function(node,box){var n=d.byId(node),s=gcs(n),b=box;return !b?d._getMarginBox(n,s):d._setMarginBox(n,b.l,b.t,b.w,b.h,s);};dojo.contentBox=function(node,box){var n=d.byId(node),s=gcs(n),b=box;return !b?d._getContentBox(n,s):d._setContentSize(n,b.w,b.h,s);};var _2bf=function(node,prop){if(!(node=(node||0).parentNode)){return 0;}var val,_2c3=0,_b=d.body();while(node&&node.style){if(gcs(node).position=="fixed"){return 0;}val=node[prop];if(val){_2c3+=val-0;if(node==_b){break;}}node=node.parentNode;}return _2c3;};dojo._docScroll=function(){var _b=d.body(),_w=d.global,de=d.doc.documentElement;return {y:(_w.pageYOffset||de.scrollTop||_b.scrollTop||0),x:(_w.pageXOffset||d._fixIeBiDiScrollLeft(de.scrollLeft)||_b.scrollLeft||0)};};dojo._isBodyLtr=function(){return !("_bodyLtr" in d)?d._bodyLtr=gcs(d.body()).direction=="ltr":d._bodyLtr;};dojo._getIeDocumentElementOffset=function(){var de=d.doc.documentElement;return (d.isIE>=7)?{x:de.getBoundingClientRect().left,y:de.getBoundingClientRect().top}:{x:d._isBodyLtr()||window.parent==window?de.clientLeft:de.offsetWidth-de.clientWidth-de.clientLeft,y:de.clientTop};};dojo._fixIeBiDiScrollLeft=function(_2c9){var dd=d.doc;if(d.isIE&&!dojo._isBodyLtr()){var de=dd.compatMode=="BackCompat"?dd.body:dd.documentElement;return _2c9+de.clientWidth-de.scrollWidth;}return _2c9;};dojo._abs=function(node,_2cd){var _2ce=node.ownerDocument;var ret={x:0,y:0};var db=d.body();if(d.isIE||(d.isFF>=3)){var _2d1=node.getBoundingClientRect();var cs;if(d.isFF){var dv=node.ownerDocument.defaultView;cs=dv.getComputedStyle(db.parentNode,null);}var _2d4=(d.isIE)?d._getIeDocumentElementOffset():{x:px(db.parentNode,cs.marginLeft),y:px(db.parentNode,cs.marginTop)};ret.x=_2d1.left-_2d4.x;ret.y=_2d1.top-_2d4.y;}else{if(node["offsetParent"]){var _2d5;if(d.isSafari&&(gcs(node).position=="absolute")&&(node.parentNode==db)){_2d5=db;}else{_2d5=db.parentNode;}var cs=gcs(node);var n=node;if(d.isOpera&&cs.position!="absolute"){n=n.offsetParent;}ret.x-=_2bf(n,"scrollLeft");ret.y-=_2bf(n,"scrollTop");var _2d7=node;do{var n=_2d7.offsetLeft;if(!d.isOpera||n>0){ret.x+=isNaN(n)?0:n;}var t=_2d7.offsetTop;ret.y+=isNaN(t)?0:t;var cs=gcs(_2d7);if(_2d7!=node){if(d.isSafari){ret.x+=px(_2d7,cs.borderLeftWidth);ret.y+=px(_2d7,cs.borderTopWidth);}else{if(d.isFF){ret.x+=2*px(_2d7,cs.borderLeftWidth);ret.y+=2*px(_2d7,cs.borderTopWidth);}}}if(d.isFF&&cs.position=="static"){var _2d9=_2d7.parentNode;while(_2d9!=_2d7.offsetParent){var pcs=gcs(_2d9);if(pcs.position=="static"){ret.x+=px(_2d7,pcs.borderLeftWidth);ret.y+=px(_2d7,pcs.borderTopWidth);}_2d9=_2d9.parentNode;}}_2d7=_2d7.offsetParent;}while((_2d7!=_2d5)&&_2d7);}else{if(node.x&&node.y){ret.x+=isNaN(node.x)?0:node.x;ret.y+=isNaN(node.y)?0:node.y;}}}if(_2cd){var _2db=d._docScroll();ret.y+=_2db.y;ret.x+=_2db.x;}return ret;};dojo.coords=function(node,_2dd){var n=d.byId(node),s=gcs(n),mb=d._getMarginBox(n,s);var abs=d._abs(n,_2dd);mb.x=abs.x;mb.y=abs.y;return mb;};var _2e2=d.isIE<8;var _2e3=function(name){switch(name.toLowerCase()){case "tabindex":return _2e2?"tabIndex":"tabindex";case "for":case "htmlfor":return _2e2?"htmlFor":"for";case "class":return d.isIE?"className":"class";default:return name;}};var _2e5={colspan:"colSpan",enctype:"enctype",frameborder:"frameborder",method:"method",rowspan:"rowSpan",scrolling:"scrolling",shape:"shape",span:"span",type:"type",valuetype:"valueType"};dojo.hasAttr=function(node,name){node=d.byId(node);var _2e8=_2e3(name);_2e8=_2e8=="htmlFor"?"for":_2e8;var attr=node.getAttributeNode&&node.getAttributeNode(_2e8);return attr?attr.specified:false;};var _2ea={};var _ctr=0;var _2ec=dojo._scopeName+"attrid";dojo.attr=function(node,name,_2ef){var args=arguments.length;if(args==2&&!d.isString(name)){for(var x in name){d.attr(node,x,name[x]);}return;}node=d.byId(node);name=_2e3(name);if(args==3){if(d.isFunction(_2ef)){var _2f2=d.attr(node,_2ec);if(!_2f2){_2f2=_ctr++;d.attr(node,_2ec,_2f2);}if(!_2ea[_2f2]){_2ea[_2f2]={};}var h=_2ea[_2f2][name];if(h){d.disconnect(h);}else{try{delete node[name];}catch(e){}}_2ea[_2f2][name]=d.connect(node,name,_2ef);}else{if((typeof _2ef=="boolean")||(name=="innerHTML")){node[name]=_2ef;}else{if((name=="style")&&(!d.isString(_2ef))){d.style(node,_2ef);}else{node.setAttribute(name,_2ef);}}}return;}else{var prop=_2e5[name.toLowerCase()];if(prop){return node[prop];}else{var _2f5=node[name];return (typeof _2f5=="boolean"||typeof _2f5=="function")?_2f5:(d.hasAttr(node,name)?node.getAttribute(name):null);}}};dojo.removeAttr=function(node,name){d.byId(node).removeAttribute(_2e3(name));};var _2f8="className";dojo.hasClass=function(node,_2fa){return ((" "+d.byId(node)[_2f8]+" ").indexOf(" "+_2fa+" ")>=0);};dojo.addClass=function(node,_2fc){node=d.byId(node);var cls=node[_2f8];if((" "+cls+" ").indexOf(" "+_2fc+" ")<0){node[_2f8]=cls+(cls?" ":"")+_2fc;}};dojo.removeClass=function(node,_2ff){node=d.byId(node);var t=d.trim((" "+node[_2f8]+" ").replace(" "+_2ff+" "," "));if(node[_2f8]!=t){node[_2f8]=t;}};dojo.toggleClass=function(node,_302,_303){if(_303===undefined){_303=!d.hasClass(node,_302);}d[_303?"addClass":"removeClass"](node,_302);};})();}if(!dojo._hasResource["dojo._base.NodeList"]){dojo._hasResource["dojo._base.NodeList"]=true;dojo.provide("dojo._base.NodeList");(function(){var d=dojo;var tnl=function(arr){arr.constructor=dojo.NodeList;dojo._mixin(arr,dojo.NodeList.prototype);return arr;};var _307=function(func,_309){return function(){var _a=arguments;var aa=d._toArray(_a,0,[null]);var s=this.map(function(i){aa[0]=i;return d[func].apply(d,aa);});return (_309||((_a.length>1)||!d.isString(_a[0])))?this:s;};};dojo.NodeList=function(){return tnl(Array.apply(null,arguments));};dojo.NodeList._wrap=tnl;dojo.extend(dojo.NodeList,{slice:function(){var a=d._toArray(arguments);return tnl(a.slice.apply(this,a));},splice:function(){var a=d._toArray(arguments);return tnl(a.splice.apply(this,a));},concat:function(){var a=d._toArray(arguments,0,[this]);return tnl(a.concat.apply([],a));},indexOf:function(_311,_312){return d.indexOf(this,_311,_312);},lastIndexOf:function(){return d.lastIndexOf.apply(d,d._toArray(arguments,0,[this]));},every:function(_313,_314){return d.every(this,_313,_314);},some:function(_315,_316){return d.some(this,_315,_316);},map:function(func,obj){return d.map(this,func,obj,d.NodeList);},forEach:function(_319,_31a){d.forEach(this,_319,_31a);return this;},coords:function(){return d.map(this,d.coords);},attr:_307("attr"),style:_307("style"),addClass:_307("addClass",true),removeClass:_307("removeClass",true),toggleClass:_307("toggleClass",true),connect:_307("connect",true),place:function(_31b,_31c){var item=d.query(_31b)[0];return this.forEach(function(i){d.place(i,item,_31c);});},orphan:function(_31f){return (_31f?d._filterQueryResult(this,_31f):this).forEach("if(item.parentNode){ item.parentNode.removeChild(item); }");},adopt:function(_320,_321){var item=this[0];return d.query(_320).forEach(function(ai){d.place(ai,item,_321||"last");});},query:function(_324){if(!_324){return this;}var ret=d.NodeList();this.forEach(function(item){ret=ret.concat(d.query(_324,item).filter(function(_327){return (_327!==undefined);}));});return ret;},filter:function(_328){var _329=this;var _a=arguments;var r=d.NodeList();var rp=function(t){if(t!==undefined){r.push(t);}};if(d.isString(_328)){_329=d._filterQueryResult(this,_a[0]);if(_a.length==1){return _329;}_a.shift();}d.forEach(d.filter(_329,_a[0],_a[1]),rp);return r;},addContent:function(_32e,_32f){var ta=d.doc.createElement("span");if(d.isString(_32e)){ta.innerHTML=_32e;}else{ta.appendChild(_32e);}if(_32f===undefined){_32f="last";}var ct=(_32f=="first"||_32f=="after")?"lastChild":"firstChild";this.forEach(function(item){var tn=ta.cloneNode(true);while(tn[ct]){d.place(tn[ct],item,_32f);}});return this;},empty:function(){return this.forEach("item.innerHTML='';");},instantiate:function(_334,_335){var c=d.isFunction(_334)?_334:d.getObject(_334);return this.forEach(function(i){new c(_335||{},i);});},at:function(){var nl=new dojo.NodeList();dojo.forEach(arguments,function(i){if(this[i]){nl.push(this[i]);}},this);return nl;}});d.forEach(["blur","focus","click","keydown","keypress","keyup","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","submit","load","error"],function(evt){var _oe="on"+evt;d.NodeList.prototype[_oe]=function(a,b){return this.connect(_oe,a,b);};});})();}if(!dojo._hasResource["dojo._base.query"]){dojo._hasResource["dojo._base.query"]=true;dojo.provide("dojo._base.query");(function(){var d=dojo;var _33f=dojo.isIE?"children":"childNodes";var _340=false;var _341=function(_342){if(">~+".indexOf(_342.charAt(_342.length-1))>=0){_342+=" *";}_342+=" ";var ts=function(s,e){return d.trim(_342.slice(s,e));};var _346=[];var _347=-1;var _348=-1;var _349=-1;var _34a=-1;var _34b=-1;var inId=-1;var _34d=-1;var lc="";var cc="";var _350;var x=0;var ql=_342.length;var _353=null;var _cp=null;var _355=function(){if(_34d>=0){var tv=(_34d==x)?null:ts(_34d,x);_353[(">~+".indexOf(tv)<0)?"tag":"oper"]=tv;_34d=-1;}};var _357=function(){if(inId>=0){_353.id=ts(inId,x).replace(/\\/g,"");inId=-1;}};var _358=function(){if(_34b>=0){_353.classes.push(ts(_34b+1,x).replace(/\\/g,""));_34b=-1;}};var _359=function(){_357();_355();_358();};for(;lc=cc,cc=_342.charAt(x),x=0){if(cc=="]"){if(!_cp.attr){_cp.attr=ts(_347+1,x);}else{_cp.matchFor=ts((_349||_347+1),x);}var cmf=_cp.matchFor;if(cmf){if((cmf.charAt(0)=="\"")||(cmf.charAt(0)=="'")){_cp.matchFor=cmf.substring(1,cmf.length-1);}}_353.attrs.push(_cp);_cp=null;_347=_349=-1;}else{if(cc=="="){var _35b=("|~^$*".indexOf(lc)>=0)?lc:"";_cp.type=_35b+cc;_cp.attr=ts(_347+1,x-_35b.length);_349=x+1;}}}else{if(_348>=0){if(cc==")"){if(_34a>=0){_cp.value=ts(_348+1,x);}_34a=_348=-1;}}else{if(cc=="#"){_359();inId=x+1;}else{if(cc=="."){_359();_34b=x;}else{if(cc==":"){_359();_34a=x;}else{if(cc=="["){_359();_347=x;_cp={};}else{if(cc=="("){if(_34a>=0){_cp={name:ts(_34a+1,x),value:null};_353.pseudos.push(_cp);}_348=x;}else{if(cc==" "&&lc!=cc){_359();if(_34a>=0){_353.pseudos.push({name:ts(_34a+1,x)});}_353.hasLoops=(_353.pseudos.length||_353.attrs.length||_353.classes.length);_353.query=ts(_350,x);_353.otag=_353.tag=(_353["oper"])?null:(_353.tag||"*");if(_353.tag){_353.tag=_353.tag.toUpperCase();}_346.push(_353);_353=null;}}}}}}}}}return _346;};var _35c={"*=":function(attr,_35e){return "[contains(@"+attr+", '"+_35e+"')]";},"^=":function(attr,_360){return "[starts-with(@"+attr+", '"+_360+"')]";},"$=":function(attr,_362){return "[substring(@"+attr+", string-length(@"+attr+")-"+(_362.length-1)+")='"+_362+"']";},"~=":function(attr,_364){return "[contains(concat(' ',@"+attr+",' '), ' "+_364+" ')]";},"|=":function(attr,_366){return "[contains(concat(' ',@"+attr+",' '), ' "+_366+"-')]";},"=":function(attr,_368){return "[@"+attr+"='"+_368+"']";}};var _369=function(_36a,_36b,_36c,_36d){d.forEach(_36b.attrs,function(attr){var _36f;if(attr.type&&_36a[attr.type]){_36f=_36a[attr.type](attr.attr,attr.matchFor);}else{if(attr.attr.length){_36f=_36c(attr.attr);}}if(_36f){_36d(_36f);}});};var _370=function(_371){var _372=".";var _373=_341(d.trim(_371));while(_373.length){var tqp=_373.shift();var _375;var _376="";if(tqp.oper==">"){_375="/";tqp=_373.shift();}else{if(tqp.oper=="~"){_375="/following-sibling::";tqp=_373.shift();}else{if(tqp.oper=="+"){_375="/following-sibling::";_376="[position()=1]";tqp=_373.shift();}else{_375="//";}}}_372+=_375+tqp.tag+_376;if(tqp.id){_372+="[@id='"+tqp.id+"'][1]";}d.forEach(tqp.classes,function(cn){var cnl=cn.length;var _379=" ";if(cn.charAt(cnl-1)=="*"){_379="";cn=cn.substr(0,cnl-1);}_372+="[contains(concat(' ',@class,' '), ' "+cn+_379+"')]";});_369(_35c,tqp,function(_37a){return "[@"+_37a+"]";},function(_37b){_372+=_37b;});}return _372;};var _37c={};var _37d=function(path){if(_37c[path]){return _37c[path];}var doc=d.doc;var _380=_370(path);var tf=function(_382){var ret=[];var _384;var tdoc=doc;if(_382){tdoc=(_382.nodeType==9)?_382:_382.ownerDocument;}try{_384=tdoc.evaluate(_380,_382,null,XPathResult.ANY_TYPE,null);}catch(e){}var _386=_384.iterateNext();while(_386){ret.push(_386);_386=_384.iterateNext();}return ret;};return _37c[path]=tf;};var _387={};var _388={};var _389=function(_38a,_38b){if(!_38a){return _38b;}if(!_38b){return _38a;}return function(){return _38a.apply(window,arguments)&&_38b.apply(window,arguments);};};var _38c=function(root){var ret=[];var te,x=0,tret=root[_33f];while((te=tret[x++])){if(te.nodeType==1){ret.push(te);}}return ret;};var _392=function(root,_394){var ret=[];var te=root;while(te=te.nextSibling){if(te.nodeType==1){ret.push(te);if(_394){break;}}}return ret;};var _397=function(_398,_399,_39a,idx){var nidx=idx+1;var _39d=(_399.length==nidx);var tqp=_399[idx];if(tqp.oper){var ecn=(tqp.oper==">")?_38c(_398):_392(_398,(tqp.oper=="+"));if(!ecn||!ecn.length){return;}nidx++;_39d=(_399.length==nidx);var tf=_3a1(_399[idx+1]);for(var x=0,ecnl=ecn.length,te;x=0);};},"^=":function(attr,_3c6){return function(elem){return (_3be(elem,attr).indexOf(_3c6)==0);};},"$=":function(attr,_3c9){var tval=" "+_3c9;return function(elem){var ea=" "+_3be(elem,attr);return (ea.lastIndexOf(_3c9)==(ea.length-_3c9.length));};},"~=":function(attr,_3ce){var tval=" "+_3ce+" ";return function(elem){var ea=" "+_3be(elem,attr)+" ";return (ea.indexOf(tval)>=0);};},"|=":function(attr,_3d3){var _3d4=" "+_3d3+"-";return function(elem){var ea=" "+(elem.getAttribute(attr,2)||"");return ((ea==_3d3)||(ea.indexOf(_3d4)==0));};},"=":function(attr,_3d8){return function(elem){return (_3be(elem,attr)==_3d8);};}};var _3da={"checked":function(name,_3dc){return function(elem){return !!d.attr(elem,"checked");};},"first-child":function(name,_3df){return function(elem){if(elem.nodeType!=1){return false;}var fc=elem.previousSibling;while(fc&&(fc.nodeType!=1)){fc=fc.previousSibling;}return (!fc);};},"last-child":function(name,_3e3){return function(elem){if(elem.nodeType!=1){return false;}var nc=elem.nextSibling;while(nc&&(nc.nodeType!=1)){nc=nc.nextSibling;}return (!nc);};},"empty":function(name,_3e7){return function(elem){var cn=elem.childNodes;var cnl=elem.childNodes.length;for(var x=cnl-1;x>=0;x--){var nt=cn[x].nodeType;if((nt==1)||(nt==3)){return false;}}return true;};},"contains":function(name,_3ee){return function(elem){if(_3ee.charAt(0)=="\""||_3ee.charAt(0)=="'"){_3ee=_3ee.substr(1,_3ee.length-2);}return (elem.innerHTML.indexOf(_3ee)>=0);};},"not":function(name,_3f1){var ntf=_3a1(_341(_3f1)[0]);return function(elem){return (!ntf(elem));};},"nth-child":function(name,_3f5){var pi=parseInt;if(_3f5=="odd"){_3f5="2n+1";}else{if(_3f5=="even"){_3f5="2n";}}if(_3f5.indexOf("n")!=-1){var _3f7=_3f5.split("n",2);var pred=_3f7[0]?(_3f7[0]=="-"?-1:pi(_3f7[0])):1;var idx=_3f7[1]?pi(_3f7[1]):0;var lb=0,ub=-1;if(pred>0){if(idx<0){idx=(idx%pred)&&(pred+(idx%pred));}else{if(idx>0){if(idx>=pred){lb=idx-idx%pred;}idx=idx%pred;}}}else{if(pred<0){pred*=-1;if(idx>0){ub=idx;idx=idx%pred;}}}if(pred>0){return function(elem){var i=_3b3(elem);return (i>=lb)&&(ub<0||i<=ub)&&((i%pred)==idx);};}else{_3f5=idx;}}var _3fe=pi(_3f5);return function(elem){return (_3b3(elem)==_3fe);};}};var _400=(d.isIE)?function(cond){var clc=cond.toLowerCase();return function(elem){return (_340?elem.getAttribute(cond):elem[cond]||elem[clc]);};}:function(cond){return function(elem){return (elem&&elem.getAttribute&&elem.hasAttribute(cond));};};var _3b2=function(_406){var _407=(_388[_406.query]||_387[_406.query]);if(_407){return _407;}var ff=null;if(_406.id){if(_406.tag!="*"){ff=_389(ff,function(elem){return (elem.tagName==_406[_340?"otag":"tag"]);});}}d.forEach(_406.classes,function(_40a,idx,arr){var _40d=_40a.charAt(_40a.length-1)=="*";if(_40d){_40a=_40a.substr(0,_40a.length-1);}var re=new RegExp("(?:^|\\s)"+_40a+(_40d?".*":"")+"(?:\\s|$)");ff=_389(ff,function(elem){return re.test(elem.className);});ff.count=idx;});d.forEach(_406.pseudos,function(_410){if(_3da[_410.name]){ff=_389(ff,_3da[_410.name](_410.name,_410.value));}});_369(_3c1,_406,_400,function(_411){ff=_389(ff,_411);});if(!ff){ff=function(){return true;};}return _388[_406.query]=ff;};var _412={};var _3a6=function(_413,root){var fHit=_412[_413.query];if(fHit){return fHit;}if(_413.id&&!_413.hasLoops&&!_413.tag){return _412[_413.query]=function(root){return [d.byId(_413.id)];};}var _417=_3b2(_413);var _418;if(_413.tag&&_413.id&&!_413.hasLoops){_418=function(root){var te=d.byId(_413.id,(root.ownerDocument||root));if(_417(te)){return [te];}};}else{var tret;if(!_413.hasLoops){_418=function(root){var ret=[];var te,x=0,tret=root.getElementsByTagName(_413[_340?"otag":"tag"]);while((te=tret[x++])){ret.push(te);}return ret;};}else{_418=function(root){var ret=[];var te,x=0,tret=root.getElementsByTagName(_413[_340?"otag":"tag"]);while((te=tret[x++])){if(_417(te)){ret.push(te);}}return ret;};}}return _412[_413.query]=_418;};var _424={};var _425={"*":d.isIE?function(root){return root.all;}:function(root){return root.getElementsByTagName("*");},"~":_392,"+":function(root){return _392(root,true);},">":_38c};var _429=function(_42a){var _42b=_341(d.trim(_42a));if(_42b.length==1){var tt=_3a6(_42b[0]);tt.nozip=true;return tt;}var sqf=function(root){var _42f=_42b.slice(0);var _430;if(_42f[0].oper==">"){_430=[root];}else{_430=_3a6(_42f.shift())(root);}return _3a7(_430,_42f);};return sqf;};var _431=((document["evaluate"]&&!d.isSafari)?function(_432,root){var _434=_432.split(" ");if((!_340)&&(document["evaluate"])&&(_432.indexOf(":")==-1)&&(_432.indexOf("+")==-1)){if(((_434.length>2)&&(_432.indexOf(">")==-1))||(_434.length>3)||(_432.indexOf("[")>=0)||((1==_434.length)&&(0<=_432.indexOf(".")))){return _37d(_432);}}return _429(_432);}:_429);var _435=function(_436){if(_425[_436]){return _425[_436];}if(0>_436.indexOf(",")){return _425[_436]=_431(_436);}else{var _437=_436.split(/\s*,\s*/);var tf=function(root){var _43a=0;var ret=[];var tp;while((tp=_437[_43a++])){ret=ret.concat(_431(tp,tp.indexOf(" "))(root));}return ret;};return _425[_436]=tf;}};var _43d=0;var _zip=function(arr){if(arr&&arr.nozip){return d.NodeList._wrap(arr);}var ret=new d.NodeList();if(!arr){return ret;}if(arr[0]){ret.push(arr[0]);}if(arr.length<2){return ret;}_43d++;if(d.isIE&&_340){var _441=_43d+"";arr[0].setAttribute("_zipIdx",_441);for(var x=1,te;te=arr[x];x++){if(arr[x].getAttribute("_zipIdx")!=_441){ret.push(te);}te.setAttribute("_zipIdx",_441);}}else{arr[0]["_zipIdx"]=_43d;for(var x=1,te;te=arr[x];x++){if(arr[x]["_zipIdx"]!=_43d){ret.push(te);}te["_zipIdx"]=_43d;}}return ret;};d.query=function(_444,root){if(_444.constructor==d.NodeList){return _444;}if(!d.isString(_444)){return new d.NodeList(_444);}if(d.isString(root)){root=d.byId(root);}root=root||d.doc;var od=root.ownerDocument||root.documentElement;_340=(root.contentType&&root.contentType=="application/xml")||(!!od)&&(d.isIE?od.xml:(root.xmlVersion||od.xmlVersion));return _zip(_435(_444)(root));};d.query.pseudos=_3da;d._filterQueryResult=function(_447,_448){var tnl=new d.NodeList();var ff=(_448)?_3a1(_341(_448)[0]):function(){return true;};for(var x=0,te;te=_447[x];x++){if(ff(te)){tnl.push(te);}}return tnl;};})();}if(!dojo._hasResource["dojo._base.xhr"]){dojo._hasResource["dojo._base.xhr"]=true;dojo.provide("dojo._base.xhr");(function(){var _d=dojo;function setValue(obj,name,_450){var val=obj[name];if(_d.isString(val)){obj[name]=[val,_450];}else{if(_d.isArray(val)){val.push(_450);}else{obj[name]=_450;}}};dojo.formToObject=function(_452){var ret={};var _454="file|submit|image|reset|button|";_d.forEach(dojo.byId(_452).elements,function(item){var _in=item.name;var type=(item.type||"").toLowerCase();if(_in&&type&&_454.indexOf(type)==-1&&!item.disabled){if(type=="radio"||type=="checkbox"){if(item.checked){setValue(ret,_in,item.value);}}else{if(item.multiple){ret[_in]=[];_d.query("option",item).forEach(function(opt){if(opt.selected){setValue(ret,_in,opt.value);}});}else{setValue(ret,_in,item.value);if(type=="image"){ret[_in+".x"]=ret[_in+".y"]=ret[_in].x=ret[_in].y=0;}}}}});return ret;};dojo.objectToQuery=function(map){var enc=encodeURIComponent;var _45b=[];var _45c={};for(var name in map){var _45e=map[name];if(_45e!=_45c[name]){var _45f=enc(name)+"=";if(_d.isArray(_45e)){for(var i=0;i<_45e.length;i++){_45b.push(_45f+enc(_45e[i]));}}else{_45b.push(_45f+enc(_45e));}}}return _45b.join("&");};dojo.formToQuery=function(_461){return _d.objectToQuery(_d.formToObject(_461));};dojo.formToJson=function(_462,_463){return _d.toJson(_d.formToObject(_462),_463);};dojo.queryToObject=function(str){var ret={};var qp=str.split("&");var dec=decodeURIComponent;_d.forEach(qp,function(item){if(item.length){var _469=item.split("=");var name=dec(_469.shift());var val=dec(_469.join("="));if(_d.isString(ret[name])){ret[name]=[ret[name]];}if(_d.isArray(ret[name])){ret[name].push(val);}else{ret[name]=val;}}});return ret;};dojo._blockAsync=false;dojo._contentHandlers={"text":function(xhr){return xhr.responseText;},"json":function(xhr){return _d.fromJson(xhr.responseText||null);},"json-comment-filtered":function(xhr){if(!dojo.config.useCommentedJson){console.warn("Consider using the standard mimetype:application/json."+" json-commenting can introduce security issues. To"+" decrease the chances of hijacking, use the standard the 'json' handler and"+" prefix your json with: {}&&\n"+"Use djConfig.useCommentedJson=true to turn off this message.");}var _46f=xhr.responseText;var _470=_46f.indexOf("/*");var _471=_46f.lastIndexOf("*/");if(_470==-1||_471==-1){throw new Error("JSON was not comment filtered");}return _d.fromJson(_46f.substring(_470+2,_471));},"javascript":function(xhr){return _d.eval(xhr.responseText);},"xml":function(xhr){var _474=xhr.responseXML;if(_d.isIE&&(!_474||_474.documentElement==null)){_d.forEach(["MSXML2","Microsoft","MSXML","MSXML3"],function(_475){try{var dom=new ActiveXObject(_475+".XMLDOM");dom.async=false;dom.loadXML(xhr.responseText);_474=dom;}catch(e){}});}return _474;}};dojo._contentHandlers["json-comment-optional"]=function(xhr){var _478=_d._contentHandlers;if(xhr.responseText&&xhr.responseText.indexOf("/*")!=-1){return _478["json-comment-filtered"](xhr);}else{return _478["json"](xhr);}};dojo._ioSetArgs=function(args,_47a,_47b,_47c){var _47d={args:args,url:args.url};var _47e=null;if(args.form){var form=_d.byId(args.form);var _480=form.getAttributeNode("action");_47d.url=_47d.url||(_480?_480.value:null);_47e=_d.formToObject(form);}var _481=[{}];if(_47e){_481.push(_47e);}if(args.content){_481.push(args.content);}if(args.preventCache){_481.push({"dojo.preventCache":new Date().valueOf()});}_47d.query=_d.objectToQuery(_d.mixin.apply(null,_481));_47d.handleAs=args.handleAs||"text";var d=new _d.Deferred(_47a);d.addCallbacks(_47b,function(_483){return _47c(_483,d);});var ld=args.load;if(ld&&_d.isFunction(ld)){d.addCallback(function(_485){return ld.call(args,_485,_47d);});}var err=args.error;if(err&&_d.isFunction(err)){d.addErrback(function(_487){return err.call(args,_487,_47d);});}var _488=args.handle;if(_488&&_d.isFunction(_488)){d.addBoth(function(_489){return _488.call(args,_489,_47d);});}d.ioArgs=_47d;return d;};var _48a=function(dfd){dfd.canceled=true;var xhr=dfd.ioArgs.xhr;var _at=typeof xhr.abort;if(_at=="function"||_at=="object"||_at=="unknown"){xhr.abort();}var err=dfd.ioArgs.error;if(!err){err=new Error("xhr cancelled");err.dojoType="cancel";}return err;};var _48f=function(dfd){var ret=_d._contentHandlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);return (typeof ret=="undefined")?null:ret;};var _492=function(_493,dfd){return _493;};var _495=null;var _496=[];var _497=function(){var now=(new Date()).getTime();if(!_d._blockAsync){for(var i=0,tif;i<_496.length&&(tif=_496[i]);i++){var dfd=tif.dfd;var func=function(){if(!dfd||dfd.canceled||!tif.validCheck(dfd)){_496.splice(i--,1);}else{if(tif.ioCheck(dfd)){_496.splice(i--,1);tif.resHandle(dfd);}else{if(dfd.startTime){if(dfd.startTime+(dfd.ioArgs.args.timeout||0)0){setTimeout(_p,de);return _t;}_p();return _t;},_play:function(_4c4){var _t=this;_t._startTime=new Date().valueOf();if(_t._paused){_t._startTime-=_t.duration*_t._percent;}_t._endTime=_t._startTime+_t.duration;_t._active=true;_t._paused=false;var _4c6=_t.curve.getValue(_t._percent);if(!_t._percent){if(!_t._startRepeatCount){_t._startRepeatCount=_t.repeat;}_t._fire("onBegin",[_4c6]);}_t._fire("onPlay",[_4c6]);_t._cycle();return _t;},pause:function(){this._stopTimer();if(!this._active){return this;}this._paused=true;this._fire("onPause",[this.curve.getValue(this._percent)]);return this;},gotoPercent:function(_4c7,_4c8){this._stopTimer();this._active=this._paused=true;this._percent=_4c7;if(_4c8){this.play();}return this;},stop:function(_4c9){if(!this._timer){return this;}this._stopTimer();if(_4c9){this._percent=1;}this._fire("onStop",[this.curve.getValue(this._percent)]);this._active=this._paused=false;return this;},status:function(){if(this._active){return this._paused?"paused":"playing";}return "stopped";},_cycle:function(){var _t=this;if(_t._active){var curr=new Date().valueOf();var step=(curr-_t._startTime)/(_t._endTime-_t._startTime);if(step>=1){step=1;}_t._percent=step;if(_t.easing){step=_t.easing(step);}_t._fire("onAnimate",[_t.curve.getValue(step)]);if(_t._percent<1){_t._startTimer();}else{_t._active=false;if(_t.repeat>0){_t.repeat--;_t.play(null,true);}else{if(_t.repeat==-1){_t.play(null,true);}else{if(_t._startRepeatCount){_t.repeat=_t._startRepeatCount;_t._startRepeatCount=0;}}}_t._percent=0;_t._fire("onEnd");_t._stopTimer();}}return _t;}});var ctr=0;var _4ce=[];var _4cf={run:function(){}};var _4d0=null;dojo._Animation.prototype._startTimer=function(){if(!this._timer){this._timer=d.connect(_4cf,"run",this,"_cycle");ctr++;}if(!_4d0){_4d0=setInterval(d.hitch(_4cf,"run"),this.rate);}};dojo._Animation.prototype._stopTimer=function(){if(this._timer){d.disconnect(this._timer);this._timer=null;ctr--;}if(ctr<=0){clearInterval(_4d0);_4d0=null;ctr=0;}};var _4d1=(d.isIE)?function(node){var ns=node.style;if(!ns.width.length&&d.style(node,"width")=="auto"){ns.width="auto";}}:function(){};dojo._fade=function(args){args.node=d.byId(args.node);var _4d5=d.mixin({properties:{}},args);var _4d6=(_4d5.properties.opacity={});_4d6.start=!("start" in _4d5)?function(){return Number(d.style(_4d5.node,"opacity"));}:_4d5.start;_4d6.end=_4d5.end;var anim=d.animateProperty(_4d5);d.connect(anim,"beforeBegin",d.partial(_4d1,_4d5.node));return anim;};dojo.fadeIn=function(args){return d._fade(d.mixin({end:1},args));};dojo.fadeOut=function(args){return d._fade(d.mixin({end:0},args));};dojo._defaultEasing=function(n){return 0.5+((Math.sin((n+1.5)*Math.PI))/2);};var _4db=function(_4dc){this._properties=_4dc;for(var p in _4dc){var prop=_4dc[p];if(prop.start instanceof d.Color){prop.tempColor=new d.Color();}}this.getValue=function(r){var ret={};for(var p in this._properties){var prop=this._properties[p];var _4e3=prop.start;if(_4e3 instanceof d.Color){ret[p]=d.blendColors(_4e3,prop.end,r,prop.tempColor).toCss();}else{if(!d.isArray(_4e3)){ret[p]=((prop.end-_4e3)*r)+_4e3+(p!="opacity"?prop.units||"px":"");}}}return ret;};};dojo.animateProperty=function(args){args.node=d.byId(args.node);if(!args.easing){args.easing=d._defaultEasing;}var anim=new d._Animation(args);d.connect(anim,"beforeBegin",anim,function(){var pm={};for(var p in this.properties){if(p=="width"||p=="height"){this.node.display="block";}var prop=this.properties[p];prop=pm[p]=d.mixin({},(d.isObject(prop)?prop:{end:prop}));if(d.isFunction(prop.start)){prop.start=prop.start();}if(d.isFunction(prop.end)){prop.end=prop.end();}var _4e9=(p.toLowerCase().indexOf("color")>=0);function getStyle(node,p){var v=({height:node.offsetHeight,width:node.offsetWidth})[p];if(v!==undefined){return v;}v=d.style(node,p);return (p=="opacity")?Number(v):(_4e9?v:parseFloat(v));};if(!("end" in prop)){prop.end=getStyle(this.node,p);}else{if(!("start" in prop)){prop.start=getStyle(this.node,p);}}if(_4e9){prop.start=new d.Color(prop.start);prop.end=new d.Color(prop.end);}else{prop.start=(p=="opacity")?Number(prop.start):parseFloat(prop.start);}}this.curve=new _4db(pm);});d.connect(anim,"onAnimate",d.hitch(d,"style",anim.node));return anim;};dojo.anim=function(node,_4ee,_4ef,_4f0,_4f1,_4f2){return d.animateProperty({node:node,duration:_4ef||d._Animation.prototype.duration,properties:_4ee,easing:_4f0,onEnd:_4f1}).play(_4f2||0);};})();}if(!dojo._hasResource["dojo._base.browser"]){dojo._hasResource["dojo._base.browser"]=true;dojo.provide("dojo._base.browser");if(dojo.config.require){dojo.forEach(dojo.config.require,"dojo['require'](item);");}}if(dojo.config.afterOnLoad&&dojo.isBrowser){window.setTimeout(dojo._fakeLoadInit,1000);}})(); diff --git a/tests/javascript/frameworks/dojo/dojo-1.3.3.js b/tests/javascript/frameworks/dojo/dojo-1.3.3.js new file mode 100644 index 0000000000000000000000000000000000000000..a7b343fbedf2d7c8168fc0247b56b4aa05b38c1d --- /dev/null +++ b/tests/javascript/frameworks/dojo/dojo-1.3.3.js @@ -0,0 +1,9382 @@ +/* + Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + +/* + This is a compiled version of Dojo, built for deployment and not for + development. To get an editable version, please visit: + + http://dojotoolkit.org + + for documentation and information on getting the source. +*/ + +;(function(){ + + /* + dojo, dijit, and dojox must always be the first three, and in that order. + djConfig.scopeMap = [ + ["dojo", "fojo"], + ["dijit", "fijit"], + ["dojox", "fojox"] + + ] + */ + + /**Build will replace this comment with a scoped djConfig **/ + + //The null below can be relaced by a build-time value used instead of djConfig.scopeMap. + var sMap = null; + + //See if new scopes need to be defined. + if((sMap || (typeof djConfig != "undefined" && djConfig.scopeMap)) && (typeof window != "undefined")){ + var scopeDef = "", scopePrefix = "", scopeSuffix = "", scopeMap = {}, scopeMapRev = {}; + sMap = sMap || djConfig.scopeMap; + for(var i = 0; i < sMap.length; i++){ + //Make local variables, then global variables that use the locals. + var newScope = sMap[i]; + scopeDef += "var " + newScope[0] + " = {}; " + newScope[1] + " = " + newScope[0] + ";" + newScope[1] + "._scopeName = '" + newScope[1] + "';"; + scopePrefix += (i == 0 ? "" : ",") + newScope[0]; + scopeSuffix += (i == 0 ? "" : ",") + newScope[1]; + scopeMap[newScope[0]] = newScope[1]; + scopeMapRev[newScope[1]] = newScope[0]; + } + + eval(scopeDef + "dojo._scopeArgs = [" + scopeSuffix + "];"); + + dojo._scopePrefixArgs = scopePrefix; + dojo._scopePrefix = "(function(" + scopePrefix + "){"; + dojo._scopeSuffix = "})(" + scopeSuffix + ")"; + dojo._scopeMap = scopeMap; + dojo._scopeMapRev = scopeMapRev; + } + +/*===== +// note: +// 'djConfig' does not exist under 'dojo.*' so that it can be set before the +// 'dojo' variable exists. +// note: +// Setting any of these variables *after* the library has loaded does +// nothing at all. + +djConfig = { + // summary: + // Application code can set the global 'djConfig' prior to loading + // the library to override certain global settings for how dojo works. + // + // isDebug: Boolean + // Defaults to `false`. If set to `true`, ensures that Dojo provides + // extended debugging feedback via Firebug. If Firebug is not available + // on your platform, setting `isDebug` to `true` will force Dojo to + // pull in (and display) the version of Firebug Lite which is + // integrated into the Dojo distribution, thereby always providing a + // debugging/logging console when `isDebug` is enabled. Note that + // Firebug's `console.*` methods are ALWAYS defined by Dojo. If + // `isDebug` is false and you are on a platform without Firebug, these + // methods will be defined as no-ops. + isDebug: false, + // debugAtAllCosts: Boolean + // Defaults to `false`. If set to `true`, this triggers an alternate + // mode of the package system in which dependencies are detected and + // only then are resources evaluated in dependency order via + // ` + // | + d._modulePrefixes[module] = { name: module, value: prefix }; + } + + dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){ + // summary: + // Declares translated resources and loads them if necessary, in the + // same style as dojo.require. Contents of the resource bundle are + // typically strings, but may be any name/value pair, represented in + // JSON format. See also `dojo.i18n.getLocalization`. + // + // description: + // Load translated resource bundles provided underneath the "nls" + // directory within a package. Translated resources may be located in + // different packages throughout the source tree. + // + // Each directory is named for a locale as specified by RFC 3066, + // (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase. + // Note that the two bundles in the example do not define all the + // same variants. For a given locale, bundles will be loaded for + // that locale and all more general locales above it, including a + // fallback at the root directory. For example, a declaration for + // the "de-at" locale will first load `nls/de-at/bundleone.js`, + // then `nls/de/bundleone.js` and finally `nls/bundleone.js`. The + // data will be flattened into a single Object so that lookups + // will follow this cascading pattern. An optional build step can + // preload the bundles to avoid data redundancy and the multiple + // network hits normally required to load these resources. + // + // moduleName: + // name of the package containing the "nls" directory in which the + // bundle is found + // + // bundleName: + // bundle name, i.e. the filename without the '.js' suffix + // + // locale: + // the locale to load (optional) By default, the browser's user + // locale as defined by dojo.locale + // + // availableFlatLocales: + // A comma-separated list of the available, flattened locales for this + // bundle. This argument should only be set by the build process. + // + // example: + // A particular widget may define one or more resource bundles, + // structured in a program as follows, where moduleName is + // mycode.mywidget and bundleNames available include bundleone and + // bundletwo: + // | ... + // | mycode/ + // | mywidget/ + // | nls/ + // | bundleone.js (the fallback translation, English in this example) + // | bundletwo.js (also a fallback translation) + // | de/ + // | bundleone.js + // | bundletwo.js + // | de-at/ + // | bundleone.js + // | en/ + // | (empty; use the fallback translation) + // | en-us/ + // | bundleone.js + // | en-gb/ + // | bundleone.js + // | es/ + // | bundleone.js + // | bundletwo.js + // | ...etc + // | ... + // + + d.require("dojo.i18n"); + d.i18n._requireLocalization.apply(d.hostenv, arguments); + }; + + var ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"); + var ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"); + + dojo._Url = function(/*dojo._Url||String...*/){ + // summary: + // Constructor to create an object representing a URL. + // It is marked as private, since we might consider removing + // or simplifying it. + // description: + // Each argument is evaluated in order relative to the next until + // a canonical uri is produced. To get an absolute Uri relative to + // the current document use: + // new dojo._Url(document.baseURI, url) + + var n = null; + + var _a = arguments; + var uri = [_a[0]]; + // resolve uri components relative to each other + for(var i = 1; i<_a.length; i++){ + if(!_a[i]){ continue; } + + // Safari doesn't support this.constructor so we have to be explicit + // FIXME: Tracked (and fixed) in Webkit bug 3537. + // http://bugs.webkit.org/show_bug.cgi?id=3537 + var relobj = new d._Url(_a[i]+""); + var uriobj = new d._Url(uri[0]+""); + + if( + relobj.path == "" && + !relobj.scheme && + !relobj.authority && + !relobj.query + ){ + if(relobj.fragment != n){ + uriobj.fragment = relobj.fragment; + } + relobj = uriobj; + }else if(!relobj.scheme){ + relobj.scheme = uriobj.scheme; + + if(!relobj.authority){ + relobj.authority = uriobj.authority; + + if(relobj.path.charAt(0) != "/"){ + var path = uriobj.path.substring(0, + uriobj.path.lastIndexOf("/") + 1) + relobj.path; + + var segs = path.split("/"); + for(var j = 0; j < segs.length; j++){ + if(segs[j] == "."){ + // flatten "./" references + if(j == segs.length - 1){ + segs[j] = ""; + }else{ + segs.splice(j, 1); + j--; + } + }else if(j > 0 && !(j == 1 && segs[0] == "") && + segs[j] == ".." && segs[j-1] != ".."){ + // flatten "../" references + if(j == (segs.length - 1)){ + segs.splice(j, 1); + segs[j - 1] = ""; + }else{ + segs.splice(j - 1, 2); + j -= 2; + } + } + } + relobj.path = segs.join("/"); + } + } + } + + uri = []; + if(relobj.scheme){ + uri.push(relobj.scheme, ":"); + } + if(relobj.authority){ + uri.push("//", relobj.authority); + } + uri.push(relobj.path); + if(relobj.query){ + uri.push("?", relobj.query); + } + if(relobj.fragment){ + uri.push("#", relobj.fragment); + } + } + + this.uri = uri.join(""); + + // break the uri into its main components + var r = this.uri.match(ore); + + this.scheme = r[2] || (r[1] ? "" : n); + this.authority = r[4] || (r[3] ? "" : n); + this.path = r[5]; // can never be undefined + this.query = r[7] || (r[6] ? "" : n); + this.fragment = r[9] || (r[8] ? "" : n); + + if(this.authority != n){ + // server based naming authority + r = this.authority.match(ire); + + this.user = r[3] || n; + this.password = r[4] || n; + this.host = r[6] || r[7]; // ipv6 || ipv4 + this.port = r[9] || n; + } + } + + dojo._Url.prototype.toString = function(){ return this.uri; }; + + dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ + // summary: + // Returns a `dojo._Url` object relative to a module. + // example: + // | var pngPath = dojo.moduleUrl("acme","images/small.png"); + // | // list the object properties + // | // create an image and set it's source to pngPath's value: + // | var img = document.createElement("img"); + // | // NOTE: we assign the string representation of the url object + // | img.src = pngPath.toString(); + // | // add our image to the document + // | dojo.body().appendChild(img); + // example: + // you may de-reference as far as you like down the package + // hierarchy. This is sometimes handy to avoid lenghty relative + // urls or for building portable sub-packages. In this example, + // the `acme.widget` and `acme.util` directories may be located + // under different roots (see `dojo.registerModulePath`) but the + // the modules which reference them can be unaware of their + // relative locations on the filesystem: + // | // somewhere in a configuration block + // | dojo.registerModulePath("acme.widget", "../../acme/widget"); + // | dojo.registerModulePath("acme.util", "../../util"); + // | + // | // ... + // | + // | // code in a module using acme resources + // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); + // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); + + var loc = d._getModuleSymbols(module).join('/'); + if(!loc){ return null; } + if(loc.lastIndexOf("/") != loc.length-1){ + loc += "/"; + } + + //If the path is an absolute path (starts with a / or is on another + //domain/xdomain) then don't add the baseUrl. + var colonIndex = loc.indexOf(":"); + if(loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > loc.indexOf("/"))){ + loc = d.baseUrl + loc; + } + + return new d._Url(loc, url); // String + } +})(); + +/*===== +dojo.isBrowser = { + // example: + // | if(dojo.isBrowser){ ... } +}; + +dojo.isFF = { + // example: + // | if(dojo.isFF > 1){ ... } +}; + +dojo.isIE = { + // example: + // | if(dojo.isIE > 6){ + // | // we are IE7 + // | } +}; + +dojo.isSafari = { + // example: + // | if(dojo.isSafari){ ... } + // example: + // Detect iPhone: + // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ + // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test. + // | } +}; + +dojo = { + // isBrowser: Boolean + // True if the client is a web-browser + isBrowser: true, + // isFF: Number | undefined + // Version as a Number if client is FireFox. undefined otherwise. Corresponds to + // major detected FireFox version (1.5, 2, 3, etc.) + isFF: 2, + // isIE: Number | undefined + // Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to + // major detected IE version (6, 7, 8, etc.) + isIE: 6, + // isKhtml: Number | undefined + // Version as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major + // detected version. + isKhtml: 0, + // isWebKit: Number | undefined + // Version as a Number if client is a WebKit-derived browser (Konqueror, + // Safari, Chrome, etc.). undefined otherwise. + isWebKit: 0, + // isMozilla: Number | undefined + // Version as a Number if client is a Mozilla-based browser (Firefox, + // SeaMonkey). undefined otherwise. Corresponds to major detected version. + isMozilla: 0, + // isOpera: Number | undefined + // Version as a Number if client is Opera. undefined otherwise. Corresponds to + // major detected version. + isOpera: 0, + // isSafari: Number | undefined + // Version as a Number if client is Safari or iPhone. undefined otherwise. + isSafari: 0 + // isChrome: Number | undefined + // Version as a Number if client is Chrome browser. undefined otherwise. + isChrome: 0 +} +=====*/ + +if(typeof window != 'undefined'){ + dojo.isBrowser = true; + dojo._name = "browser"; + + // attempt to figure out the path to dojo if it isn't set in the config + (function(){ + var d = dojo; + + // this is a scope protection closure. We set browser versions and grab + // the URL we were loaded from here. + + // grab the node we were loaded from + if(document && document.getElementsByTagName){ + var scripts = document.getElementsByTagName("script"); + var rePkg = /dojo(\.xd)?\.js(\W|$)/i; + for(var i = 0; i < scripts.length; i++){ + var src = scripts[i].getAttribute("src"); + if(!src){ continue; } + var m = src.match(rePkg); + if(m){ + // find out where we came from + if(!d.config.baseUrl){ + d.config.baseUrl = src.substring(0, m.index); + } + // and find out if we need to modify our behavior + var cfg = scripts[i].getAttribute("djConfig"); + if(cfg){ + var cfgo = eval("({ "+cfg+" })"); + for(var x in cfgo){ + dojo.config[x] = cfgo[x]; + } + } + break; // "first Dojo wins" + } + } + } + d.baseUrl = d.config.baseUrl; + + // fill in the rendering support information in dojo.render.* + var n = navigator; + var dua = n.userAgent, + dav = n.appVersion, + tv = parseFloat(dav); + + if(dua.indexOf("Opera") >= 0){ d.isOpera = tv; } + if(dua.indexOf("AdobeAIR") >= 0){ d.isAIR = 1; } + d.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : 0; + d.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined; + d.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined; + + // safari detection derived from: + // http://developer.apple.com/internet/safari/faq.html#anchor2 + // http://developer.apple.com/internet/safari/uamatrix.html + var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0); + if(index && !dojo.isChrome){ + // try to grab the explicit Safari version first. If we don't get + // one, look for less than 419.3 as the indication that we're on something + // "Safari 2-ish". + d.isSafari = parseFloat(dav.split("Version/")[1]); + if(!d.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){ + d.isSafari = 2; + } + } + + if(dua.indexOf("Gecko") >= 0 && !d.isKhtml && !d.isWebKit){ d.isMozilla = d.isMoz = tv; } + if(d.isMoz){ + //We really need to get away from this. Consider a sane isGecko approach for the future. + d.isFF = parseFloat(dua.split("Firefox/")[1] || dua.split("Minefield/")[1] || dua.split("Shiretoko/")[1]) || undefined; + } + if(document.all && !d.isOpera){ + d.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined; + //In cases where the page has an HTTP header or META tag with + //X-UA-Compatible, then it is in emulation mode, for a previous + //version. Make sure isIE reflects the desired version. + //document.documentMode of 5 means quirks mode. + if(d.isIE >= 8 && document.documentMode != 5){ + d.isIE = document.documentMode; + } + } + + //Workaround to get local file loads of dojo to work on IE 7 + //by forcing to not use native xhr. + if(dojo.isIE && window.location.protocol === "file:"){ + dojo.config.ieForceActiveXXhr=true; + } + + var cm = document.compatMode; + d.isQuirks = cm == "BackCompat" || cm == "QuirksMode" || d.isIE < 6; + + // TODO: is the HTML LANG attribute relevant? + d.locale = dojo.config.locale || (d.isIE ? n.userLanguage : n.language).toLowerCase(); + + // These are in order of decreasing likelihood; this will change in time. + d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; + + d._xhrObj = function(){ + // summary: + // does the work of portably generating a new XMLHTTPRequest object. + var http, last_e; + if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){ + try{ http = new XMLHttpRequest(); }catch(e){} + } + if(!http){ + for(var i=0; i<3; ++i){ + var progid = d._XMLHTTP_PROGIDS[i]; + try{ + http = new ActiveXObject(progid); + }catch(e){ + last_e = e; + } + + if(http){ + d._XMLHTTP_PROGIDS = [progid]; // so faster next time + break; + } + } + } + + if(!http){ + throw new Error("XMLHTTP not available: "+last_e); + } + + return http; // XMLHTTPRequest instance + } + + d._isDocumentOk = function(http){ + var stat = http.status || 0; + return (stat >= 200 && stat < 300) || // Boolean + stat == 304 || // allow any 2XX response code + stat == 1223 || // get it out of the cache + (!stat && (location.protocol=="file:" || location.protocol=="chrome:") ); // Internet Explorer mangled the status code + } + + //See if base tag is in use. + //This is to fix http://trac.dojotoolkit.org/ticket/3973, + //but really, we need to find out how to get rid of the dojo._Url reference + //below and still have DOH work with the dojo.i18n test following some other + //test that uses the test frame to load a document (trac #2757). + //Opera still has problems, but perhaps a larger issue of base tag support + //with XHR requests (hasBase is true, but the request is still made to document + //path, not base path). + var owloc = window.location+""; + var base = document.getElementsByTagName("base"); + var hasBase = (base && base.length > 0); + + d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){ + // summary: Read the contents of the specified uri and return those contents. + // uri: + // A relative or absolute uri. If absolute, it still must be in + // the same "domain" as we are. + // fail_ok: + // Default false. If fail_ok and loading fails, return null + // instead of throwing. + // returns: The response text. null is returned when there is a + // failure and failure is okay (an exception otherwise) + + // NOTE: must be declared before scope switches ie. this._xhrObj() + var http = this._xhrObj(); + + if(!hasBase && dojo._Url){ + uri = (new dojo._Url(owloc, uri)).toString(); + } + + if(d.config.cacheBust){ + //Make sure we have a string before string methods are used on uri + uri += ""; + uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,""); + } + + http.open('GET', uri, false); + try{ + http.send(null); + if(!d._isDocumentOk(http)){ + var err = Error("Unable to load "+uri+" status:"+ http.status); + err.status = http.status; + err.responseText = http.responseText; + throw err; + } + }catch(e){ + if(fail_ok){ return null; } // null + // rethrow the exception + throw e; + } + return http.responseText; // String + } + + var _w = window; + var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){ + // summary: + // non-destructively adds the specified function to the node's + // evtName handler. + // evtName: should be in the form "onclick" for "onclick" handlers. + // Make sure you pass in the "on" part. + var oldHandler = _w[evtName] || function(){}; + _w[evtName] = function(){ + fp.apply(_w, arguments); + oldHandler.apply(_w, arguments); + }; + }; + + d._windowUnloaders = []; + + d.windowUnloaded = function(){ + // summary: + // signal fired by impending window destruction. You may use + // dojo.addOnWindowUnload() to register a listener for this + // event. NOTE: if you wish to dojo.connect() to this method + // to perform page/application cleanup, be aware that this + // event WILL NOT fire if no handler has been registered with + // dojo.addOnWindowUnload. This behavior started in Dojo 1.3. + // Previous versions always triggered dojo.windowUnloaded. See + // dojo.addOnWindowUnload for more info. + var mll = d._windowUnloaders; + while(mll.length){ + (mll.pop())(); + } + }; + + var _onWindowUnloadAttached = 0; + d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ + // summary: + // registers a function to be triggered when window.onunload + // fires. + // description: + // The first time that addOnWindowUnload is called Dojo + // will register a page listener to trigger your unload + // handler with. Note that registering these handlers may + // destory "fastback" page caching in browsers that support + // it. Be careful trying to modify the DOM or access + // JavaScript properties during this phase of page unloading: + // they may not always be available. Consider + // dojo.addOnUnload() if you need to modify the DOM or do + // heavy JavaScript work since it fires at the eqivalent of + // the page's "onbeforeunload" event. + // example: + // | dojo.addOnWindowUnload(functionPointer) + // | dojo.addOnWindowUnload(object, "functionName"); + // | dojo.addOnWindowUnload(object, function(){ /* ... */}); + + d._onto(d._windowUnloaders, obj, functionName); + if(!_onWindowUnloadAttached){ + _onWindowUnloadAttached = 1; + _handleNodeEvent("onunload", d.windowUnloaded); + } + }; + + var _onUnloadAttached = 0; + d.addOnUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ + // summary: + // registers a function to be triggered when the page unloads. + // description: + // The first time that addOnUnload is called Dojo will + // register a page listener to trigger your unload handler + // with. + // + // In a browser enviroment, the functions will be triggered + // during the window.onbeforeunload event. Be careful of doing + // too much work in an unload handler. onbeforeunload can be + // triggered if a link to download a file is clicked, or if + // the link is a javascript: link. In these cases, the + // onbeforeunload event fires, but the document is not + // actually destroyed. So be careful about doing destructive + // operations in a dojo.addOnUnload callback. + // + // Further note that calling dojo.addOnUnload will prevent + // browsers from using a "fast back" cache to make page + // loading via back button instantaneous. + // example: + // | dojo.addOnUnload(functionPointer) + // | dojo.addOnUnload(object, "functionName") + // | dojo.addOnUnload(object, function(){ /* ... */}); + + d._onto(d._unloaders, obj, functionName); + if(!_onUnloadAttached){ + _onUnloadAttached = 1; + _handleNodeEvent("onbeforeunload", dojo.unloaded); + } + }; + + })(); + + dojo._initFired = false; + // BEGIN DOMContentLoaded, from Dean Edwards (http://dean.edwards.name/weblog/2006/06/again/) + dojo._loadInit = function(e){ + dojo._initFired = true; + // allow multiple calls, only first one will take effect + // A bug in khtml calls events callbacks for document for event which isnt supported + // for example a created contextmenu event calls DOMContentLoaded, workaround + var type = e && e.type ? e.type.toLowerCase() : "load"; + if(arguments.callee.initialized || (type != "domcontentloaded" && type != "load")){ return; } + arguments.callee.initialized = true; + if("_khtmlTimer" in dojo){ + clearInterval(dojo._khtmlTimer); + delete dojo._khtmlTimer; + } + + if(dojo._inFlightCount == 0){ + dojo._modulesLoaded(); + } + } + + if(!dojo.config.afterOnLoad){ + // START DOMContentLoaded + // Mozilla and Opera 9 expose the event we could use + if(document.addEventListener){ + // NOTE: + // due to a threading issue in Firefox 2.0, we can't enable + // DOMContentLoaded on that platform. For more information, see: + // http://trac.dojotoolkit.org/ticket/1704 + if(dojo.isWebKit > 525 || dojo.isOpera || dojo.isFF >= 3 || (dojo.isMoz && dojo.config.enableMozDomContentLoaded === true)){ + document.addEventListener("DOMContentLoaded", dojo._loadInit, null); + } + + // mainly for Opera 8.5, won't be fired if DOMContentLoaded fired already. + // also used for Mozilla because of trac #1640 + window.addEventListener("load", dojo._loadInit, null); + } + + if(dojo.isAIR){ + window.addEventListener("load", dojo._loadInit, null); + }else if((dojo.isWebKit < 525) || dojo.isKhtml){ + dojo._khtmlTimer = setInterval(function(){ + if(/loaded|complete/.test(document.readyState)){ + dojo._loadInit(); // call the onload handler + } + }, 10); + } + // END DOMContentLoaded + } + + if(dojo.isIE){ + // for Internet Explorer. readyState will not be achieved on init + // call, but dojo doesn't need it however, we'll include it + // because we don't know if there are other functions added that + // might. Note that this has changed because the build process + // strips all comments -- including conditional ones. + if(!dojo.config.afterOnLoad){ + document.write('' + + '' + ); + } + + try{ + document.namespaces.add("v","urn:schemas-microsoft-com:vml"); + document.createStyleSheet().addRule("v\\:*", "behavior:url(#default#VML); display:inline-block"); + }catch(e){} + } + + /* + OpenAjax.subscribe("OpenAjax", "onload", function(){ + if(dojo._inFlightCount == 0){ + dojo._modulesLoaded(); + } + }); + + OpenAjax.subscribe("OpenAjax", "onunload", function(){ + dojo.unloaded(); + }); + */ +} //if (typeof window != 'undefined') + +//Register any module paths set up in djConfig. Need to do this +//in the hostenvs since hostenv_browser can read djConfig from a +//script tag's attribute. +(function(){ + var mp = dojo.config["modulePaths"]; + if(mp){ + for(var param in mp){ + dojo.registerModulePath(param, mp[param]); + } + } +})(); + +//Load debug code if necessary. +if(dojo.config.isDebug){ + dojo.require("dojo._firebug.firebug"); +} + +if(dojo.config.debugAtAllCosts){ + dojo.config.useXDomain = true; + dojo.require("dojo._base._loader.loader_xd"); + dojo.require("dojo._base._loader.loader_debug"); + dojo.require("dojo.i18n"); +} + +if(!dojo._hasResource["dojo._base.lang"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.lang"] = true; +dojo.provide("dojo._base.lang"); + +// Crockford (ish) functions + +dojo.isString = function(/*anything*/ it){ + // summary: + // Return true if it is a String + return !!arguments.length && it != null && (typeof it == "string" || it instanceof String); // Boolean +} + +dojo.isArray = function(/*anything*/ it){ + // summary: + // Return true if it is an Array + return it && (it instanceof Array || typeof it == "array"); // Boolean +} + +/*===== +dojo.isFunction = function(it){ + // summary: Return true if it is a Function + // it: anything + return; // Boolean +} +=====*/ + +dojo.isFunction = (function(){ + var _isFunction = function(/*anything*/ it){ + var t = typeof it; // must evaluate separately due to bizarre Opera bug. See #8937 + return it && (t == "function" || it instanceof Function); // Boolean + }; + + return dojo.isSafari ? + // only slow this down w/ gratuitious casting in Safari (not WebKit) + function(/*anything*/ it){ + if(typeof it == "function" && it == "[object NodeList]"){ return false; } + return _isFunction(it); // Boolean + } : _isFunction; +})(); + +dojo.isObject = function(/*anything*/ it){ + // summary: + // Returns true if it is a JavaScript object (or an Array, a Function + // or null) + return it !== undefined && + (it === null || typeof it == "object" || dojo.isArray(it) || dojo.isFunction(it)); // Boolean +} + +dojo.isArrayLike = function(/*anything*/ it){ + // summary: + // similar to dojo.isArray() but more permissive + // description: + // Doesn't strongly test for "arrayness". Instead, settles for "isn't + // a string or number and has a length property". Arguments objects + // and DOM collections will return true when passed to + // dojo.isArrayLike(), but will return false when passed to + // dojo.isArray(). + // returns: + // If it walks like a duck and quacks like a duck, return `true` + var d = dojo; + return it && it !== undefined && // Boolean + // keep out built-in constructors (Number, String, ...) which have length + // properties + !d.isString(it) && !d.isFunction(it) && + !(it.tagName && it.tagName.toLowerCase() == 'form') && + (d.isArray(it) || isFinite(it.length)); +} + +dojo.isAlien = function(/*anything*/ it){ + // summary: + // Returns true if it is a built-in function or some other kind of + // oddball that *should* report as a function but doesn't + return it && !dojo.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean +} + +dojo.extend = function(/*Object*/ constructor, /*Object...*/ props){ + // summary: + // Adds all properties and methods of props to constructor's + // prototype, making them available to all instances created with + // constructor. + for(var i=1, l=arguments.length; i 2){ + return dojo._hitchArgs.apply(dojo, arguments); // Function + } + if(!method){ + method = scope; + scope = null; + } + if(dojo.isString(method)){ + scope = scope || dojo.global; + if(!scope[method]){ throw(['dojo.hitch: scope["', method, '"] is null (scope="', scope, '")'].join('')); } + return function(){ return scope[method].apply(scope, arguments || []); }; // Function + } + return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function +} + +/*===== +dojo.delegate = function(obj, props){ + // summary: + // Returns a new object which "looks" to obj for properties which it + // does not have a value for. Optionally takes a bag of properties to + // seed the returned object with initially. + // description: + // This is a small implementaton of the Boodman/Crockford delegation + // pattern in JavaScript. An intermediate object constructor mediates + // the prototype chain for the returned object, using it to delegate + // down to obj for property lookup when object-local lookup fails. + // This can be thought of similarly to ES4's "wrap", save that it does + // not act on types but rather on pure objects. + // obj: + // The object to delegate to for properties not found directly on the + // return object or in props. + // props: + // an object containing properties to assign to the returned object + // returns: + // an Object of anonymous type + // example: + // | var foo = { bar: "baz" }; + // | var thinger = dojo.delegate(foo, { thud: "xyzzy"}); + // | thinger.bar == "baz"; // delegated to foo + // | foo.thud == undefined; // by definition + // | thinger.thud == "xyzzy"; // mixed in from props + // | foo.bar = "thonk"; + // | thinger.bar == "thonk"; // still delegated to foo's bar +} +=====*/ + +dojo.delegate = dojo._delegate = (function(){ + // boodman/crockford delegation w/ cornford optimization + function TMP(){} + return function(obj, props){ + TMP.prototype = obj; + var tmp = new TMP(); + if(props){ + dojo._mixin(tmp, props); + } + return tmp; // Object + } +})(); + +/*===== +dojo._toArray = function(obj, offset, startWith){ + // summary: + // Converts an array-like object (i.e. arguments, DOMCollection) to an + // array. Returns a new Array with the elements of obj. + // obj: Object + // the object to "arrayify". We expect the object to have, at a + // minimum, a length property which corresponds to integer-indexed + // properties. + // offset: Number? + // the location in obj to start iterating from. Defaults to 0. + // Optional. + // startWith: Array? + // An array to pack with the properties of obj. If provided, + // properties in obj are appended at the end of startWith and + // startWith is the returned array. +} +=====*/ + +(function(){ + var efficient = function(obj, offset, startWith){ + return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0)); + }; + + var slow = function(obj, offset, startWith){ + var arr = startWith||[]; + for(var x = offset || 0; x < obj.length; x++){ + arr.push(obj[x]); + } + return arr; + }; + + dojo._toArray = + dojo.isIE ? function(obj){ + return ((obj.item) ? slow : efficient).apply(this, arguments); + } : + efficient; + +})(); + +dojo.partial = function(/*Function|String*/method /*, ...*/){ + // summary: + // similar to hitch() except that the scope object is left to be + // whatever the execution context eventually becomes. + // description: + // Calling dojo.partial is the functional equivalent of calling: + // | dojo.hitch(null, funcName, ...); + var arr = [ null ]; + return dojo.hitch.apply(dojo, arr.concat(dojo._toArray(arguments))); // Function +} + +dojo.clone = function(/*anything*/ o){ + // summary: + // Clones objects (including DOM nodes) and all children. + // Warning: do not clone cyclic structures. + if(!o){ return o; } + if(dojo.isArray(o)){ + var r = []; + for(var i = 0; i < o.length; ++i){ + r.push(dojo.clone(o[i])); + } + return r; // Array + } + if(!dojo.isObject(o)){ + return o; /*anything*/ + } + if(o.nodeType && o.cloneNode){ // isNode + return o.cloneNode(true); // Node + } + if(o instanceof Date){ + return new Date(o.getTime()); // Date + } + // Generic objects + r = new o.constructor(); // specific to dojo.declare()'d classes! + for(i in o){ + if(!(i in r) || r[i] != o[i]){ + r[i] = dojo.clone(o[i]); + } + } + return r; // Object +} + +/*===== +dojo.trim = function(str){ + // summary: + // Trims whitespace from both sides of the string + // str: String + // String to be trimmed + // returns: String + // Returns the trimmed string + // description: + // This version of trim() was selected for inclusion into the base due + // to its compact size and relatively good performance + // (see [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript) + // Uses String.prototype.trim instead, if available. + // The fastest but longest version of this function is located at + // dojo.string.trim() + return ""; // String +} +=====*/ + +dojo.trim = String.prototype.trim ? + function(str){ return str.trim(); } : + function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }; + +} + +if(!dojo._hasResource["dojo._base.declare"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.declare"] = true; +dojo.provide("dojo._base.declare"); + +// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA + +dojo.declare = function(/*String*/ className, /*Function|Function[]*/ superclass, /*Object*/ props){ + // summary: + // Create a feature-rich constructor from compact notation + // className: + // The name of the constructor (loosely, a "class") + // stored in the "declaredClass" property in the created prototype + // superclass: + // May be null, a Function, or an Array of Functions. If an array, + // the first element is used as the prototypical ancestor and + // any following Functions become mixin ancestors. + // props: + // An object whose properties are copied to the + // created prototype. + // Add an instance-initialization function by making it a property + // named "constructor". + // description: + // Create a constructor using a compact notation for inheritance and + // prototype extension. + // + // All superclasses (including mixins) must be Functions (not simple Objects). + // + // Mixin ancestors provide a type of multiple inheritance. Prototypes of mixin + // ancestors are copied to the new class: changes to mixin prototypes will + // not affect classes to which they have been mixed in. + // + // "className" is cached in "declaredClass" property of the new class. + // + // example: + // | dojo.declare("my.classes.bar", my.classes.foo, { + // | // properties to be added to the class prototype + // | someValue: 2, + // | // initialization function + // | constructor: function(){ + // | this.myComplicatedObject = new ReallyComplicatedObject(); + // | }, + // | // other functions + // | someMethod: function(){ + // | doStuff(); + // | } + // | ); + + // process superclass argument + var dd = arguments.callee, mixins; + if(dojo.isArray(superclass)){ + mixins = superclass; + superclass = mixins.shift(); + } + // construct intermediate classes for mixins + if(mixins){ + dojo.forEach(mixins, function(m, i){ + if(!m){ throw(className + ": mixin #" + i + " is null"); } // It's likely a required module is not loaded + superclass = dd._delegate(superclass, m); + }); + } + // create constructor + var ctor = dd._delegate(superclass); + // extend with "props" + props = props || {}; + ctor.extend(props); + // more prototype decoration + dojo.extend(ctor, {declaredClass: className, _constructor: props.constructor/*, preamble: null*/}); + // special help for IE + ctor.prototype.constructor = ctor; + // create named reference + return dojo.setObject(className, ctor); // Function +}; + +dojo.mixin(dojo.declare, { + _delegate: function(base, mixin){ + var bp = (base||0).prototype, mp = (mixin||0).prototype, dd=dojo.declare; + // fresh constructor, fresh prototype + var ctor = dd._makeCtor(); + // cache ancestry + dojo.mixin(ctor, {superclass: bp, mixin: mp, extend: dd._extend}); + // chain prototypes + if(base){ctor.prototype = dojo._delegate(bp);} + // add mixin and core + dojo.extend(ctor, dd._core, mp||0, {_constructor: null, preamble: null}); + // special help for IE + ctor.prototype.constructor = ctor; + // name this class for debugging + ctor.prototype.declaredClass = (bp||0).declaredClass + '_' + (mp||0).declaredClass; + return ctor; + }, + _extend: function(props){ + var i, fn; + for(i in props){ if(dojo.isFunction(fn=props[i]) && !0[i]){fn.nom=i;fn.ctor=this;} } + dojo.extend(this, props); + }, + _makeCtor: function(){ + // we have to make a function, but don't want to close over anything + return function(){ this._construct(arguments); }; + }, + _core: { + _construct: function(args){ + var c=args.callee, s=c.superclass, ct=s&&s.constructor, m=c.mixin, mct=m&&m.constructor, a=args, ii, fn; + // side-effect of = used on purpose here, lint may complain, don't try this at home + if(a[0]){ + // FIXME: preambles for each mixin should be allowed + // FIXME: + // should we allow the preamble here NOT to modify the + // default args, but instead to act on each mixin + // independently of the class instance being constructed + // (for impedence matching)? + + // allow any first argument w/ a "preamble" property to act as a + // class preamble (not exclusive of the prototype preamble) + if(/*dojo.isFunction*/((fn = a[0].preamble))){ + a = fn.apply(this, a) || a; + } + } + // prototype preamble + if((fn = c.prototype.preamble)){a = fn.apply(this, a) || a;} + // FIXME: + // need to provide an optional prototype-settable + // "_explicitSuper" property which disables this + // initialize superclass + if(ct&&ct.apply){ct.apply(this, a);} + // initialize mixin + if(mct&&mct.apply){mct.apply(this, a);} + // initialize self + if((ii=c.prototype._constructor)){ii.apply(this, args);} + // post construction + if(this.constructor.prototype==c.prototype && (ct=this.postscript)){ ct.apply(this, args); } + }, + _findMixin: function(mixin){ + var c = this.constructor, p, m; + while(c){ + p = c.superclass; + m = c.mixin; + if(m==mixin || (m instanceof mixin.constructor)){return p;} + if(m && m._findMixin && (m=m._findMixin(mixin))){return m;} + c = p && p.constructor; + } + }, + _findMethod: function(name, method, ptype, has){ + // consciously trading readability for bytes and speed in this low-level method + var p=ptype, c, m, f; + do{ + c = p.constructor; + m = c.mixin; + // find method by name in our mixin ancestor + if(m && (m=this._findMethod(name, method, m, has))){return m;} + // if we found a named method that either exactly-is or exactly-is-not 'method' + if((f=p[name])&&(has==(f==method))){return p;} + // ascend chain + p = c.superclass; + }while(p); + // if we couldn't find an ancestor in our primary chain, try a mixin chain + return !has && (p=this._findMixin(ptype)) && this._findMethod(name, method, p, has); + }, + inherited: function(name, args, newArgs){ + // optionalize name argument + var a = arguments; + if(!dojo.isString(a[0])){newArgs=args; args=name; name=args.callee.nom;} + a = newArgs||args; + var c = args.callee, p = this.constructor.prototype, fn, mp; + // if not an instance override + if(this[name] != c || p[name] == c){ + // start from memoized prototype, or + // find a prototype that has property 'name' == 'c' + mp = (c.ctor||0).superclass || this._findMethod(name, c, p, true); + if(!mp){throw(this.declaredClass + ': inherited method "' + name + '" mismatch');} + // find a prototype that has property 'name' != 'c' + p = this._findMethod(name, c, mp, false); + } + // we expect 'name' to be in prototype 'p' + fn = p && p[name]; + if(!fn){throw(mp.declaredClass + ': inherited method "' + name + '" not found');} + // if the function exists, invoke it in our scope + return fn.apply(this, a); + } + } +}); + +} + +if(!dojo._hasResource["dojo._base.connect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.connect"] = true; +dojo.provide("dojo._base.connect"); + +// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA + +// low-level delegation machinery +dojo._listener = { + // create a dispatcher function + getDispatcher: function(){ + // following comments pulled out-of-line to prevent cloning them + // in the returned function. + // - indices (i) that are really in the array of listeners (ls) will + // not be in Array.prototype. This is the 'sparse array' trick + // that keeps us safe from libs that take liberties with built-in + // objects + // - listener is invoked with current scope (this) + return function(){ + var ap=Array.prototype, c=arguments.callee, ls=c._listeners, t=c.target; + // return value comes from original target function + var r = t && t.apply(this, arguments); + // make local copy of listener array so it is immutable during processing + var lls; + lls = [].concat(ls); + + // invoke listeners after target function + for(var i in lls){ + if(!(i in ap)){ + lls[i].apply(this, arguments); + } + } + // return value comes from original target function + return r; + } + }, + // add a listener to an object + add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ + // Whenever 'method' is invoked, 'listener' will have the same scope. + // Trying to supporting a context object for the listener led to + // complexity. + // Non trivial to provide 'once' functionality here + // because listener could be the result of a dojo.hitch call, + // in which case two references to the same hitch target would not + // be equivalent. + source = source || dojo.global; + // The source method is either null, a dispatcher, or some other function + var f = source[method]; + // Ensure a dispatcher + if(!f||!f._listeners){ + var d = dojo._listener.getDispatcher(); + // original target function is special + d.target = f; + // dispatcher holds a list of listeners + d._listeners = []; + // redirect source to dispatcher + f = source[method] = d; + } + // The contract is that a handle is returned that can + // identify this listener for disconnect. + // + // The type of the handle is private. Here is it implemented as Integer. + // DOM event code has this same contract but handle is Function + // in non-IE browsers. + // + // We could have separate lists of before and after listeners. + return f._listeners.push(listener) ; /*Handle*/ + }, + // remove a listener from an object + remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){ + var f = (source||dojo.global)[method]; + // remember that handle is the index+1 (0 is not a valid handle) + if(f && f._listeners && handle--){ + delete f._listeners[handle]; + } + } +}; + +// Multiple delegation for arbitrary methods. + +// This unit knows nothing about DOM, +// but we include DOM aware +// documentation and dontFix +// argument here to help the autodocs. +// Actual DOM aware code is in event.js. + +dojo.connect = function(/*Object|null*/ obj, + /*String*/ event, + /*Object|null*/ context, + /*String|Function*/ method, + /*Boolean*/ dontFix){ + // summary: + // Create a link that calls one function when another executes. + // + // description: + // Connects method to event, so that after event fires, method + // does too. All connected functions are passed the same arguments as + // the event function was initially called with. You may connect as + // many methods to event as needed. + // + // event must be a string. If obj is null, dojo.global is used. + // + // null arguments may simply be omitted. + // + // obj[event] can resolve to a function or undefined (null). + // If obj[event] is null, it is assigned a function. + // + // The return value is a handle that is needed to + // remove this connection with dojo.disconnect. + // + // obj: + // The source object for the event function. + // Defaults to dojo.global if null. + // If obj is a DOM node, the connection is delegated + // to the DOM event manager (unless dontFix is true). + // + // event: + // String name of the event function in obj. + // I.e. identifies a property obj[event]. + // + // context: + // The object that method will receive as "this". + // + // If context is null and method is a function, then method + // inherits the context of event. + // + // If method is a string then context must be the source + // object object for method (context[method]). If context is null, + // dojo.global is used. + // + // method: + // A function reference, or name of a function in context. + // The function identified by method fires after event does. + // method receives the same arguments as the event. + // See context argument comments for information on method's scope. + // + // dontFix: + // If obj is a DOM node, set dontFix to true to prevent delegation + // of this connection to the DOM event manager. + // + // example: + // When obj.onchange(), do ui.update(): + // | dojo.connect(obj, "onchange", ui, "update"); + // | dojo.connect(obj, "onchange", ui, ui.update); // same + // + // example: + // Using return value for disconnect: + // | var link = dojo.connect(obj, "onchange", ui, "update"); + // | ... + // | dojo.disconnect(link); + // + // example: + // When onglobalevent executes, watcher.handler is invoked: + // | dojo.connect(null, "onglobalevent", watcher, "handler"); + // + // example: + // When ob.onCustomEvent executes, customEventHandler is invoked: + // | dojo.connect(ob, "onCustomEvent", null, "customEventHandler"); + // | dojo.connect(ob, "onCustomEvent", "customEventHandler"); // same + // + // example: + // When ob.onCustomEvent executes, customEventHandler is invoked + // with the same scope (this): + // | dojo.connect(ob, "onCustomEvent", null, customEventHandler); + // | dojo.connect(ob, "onCustomEvent", customEventHandler); // same + // + // example: + // When globalEvent executes, globalHandler is invoked + // with the same scope (this): + // | dojo.connect(null, "globalEvent", null, globalHandler); + // | dojo.connect("globalEvent", globalHandler); // same + + // normalize arguments + var a=arguments, args=[], i=0; + // if a[0] is a String, obj was ommited + args.push(dojo.isString(a[0]) ? null : a[i++], a[i++]); + // if the arg-after-next is a String or Function, context was NOT omitted + var a1 = a[i+1]; + args.push(dojo.isString(a1)||dojo.isFunction(a1) ? a[i++] : null, a[i++]); + // absorb any additional arguments + for(var l=a.length; i. + // description: + // JavaScript has no threads, and even if it did, threads are hard. + // Deferreds are a way of abstracting non-blocking events, such as the + // final response to an XMLHttpRequest. Deferreds create a promise to + // return a response a some point in the future and an easy way to + // register your interest in receiving that response. + // + // The most important methods for Deffered users are: + // + // * addCallback(handler) + // * addErrback(handler) + // * callback(result) + // * errback(result) + // + // In general, when a function returns a Deferred, users then "fill + // in" the second half of the contract by registering callbacks and + // error handlers. You may register as many callback and errback + // handlers as you like and they will be executed in the order + // registered when a result is provided. Usually this result is + // provided as the result of an asynchronous operation. The code + // "managing" the Deferred (the code that made the promise to provide + // an answer later) will use the callback() and errback() methods to + // communicate with registered listeners about the result of the + // operation. At this time, all registered result handlers are called + // *with the most recent result value*. + // + // Deferred callback handlers are treated as a chain, and each item in + // the chain is required to return a value that will be fed into + // successive handlers. The most minimal callback may be registered + // like this: + // + // | var d = new dojo.Deferred(); + // | d.addCallback(function(result){ return result; }); + // + // Perhaps the most common mistake when first using Deferreds is to + // forget to return a value (in most cases, the value you were + // passed). + // + // The sequence of callbacks is internally represented as a list of + // 2-tuples containing the callback/errback pair. For example, the + // following call sequence: + // + // | var d = new dojo.Deferred(); + // | d.addCallback(myCallback); + // | d.addErrback(myErrback); + // | d.addBoth(myBoth); + // | d.addCallbacks(myCallback, myErrback); + // + // is translated into a Deferred with the following internal + // representation: + // + // | [ + // | [myCallback, null], + // | [null, myErrback], + // | [myBoth, myBoth], + // | [myCallback, myErrback] + // | ] + // + // The Deferred also keeps track of its current status (fired). Its + // status may be one of three things: + // + // * -1: no value yet (initial condition) + // * 0: success + // * 1: error + // + // A Deferred will be in the error state if one of the following three + // conditions are met: + // + // 1. The result given to callback or errback is "instanceof" Error + // 2. The previous callback or errback raised an exception while + // executing + // 3. The previous callback or errback returned a value + // "instanceof" Error + // + // Otherwise, the Deferred will be in the success state. The state of + // the Deferred determines the next element in the callback sequence + // to run. + // + // When a callback or errback occurs with the example deferred chain, + // something equivalent to the following will happen (imagine + // that exceptions are caught and returned): + // + // | // d.callback(result) or d.errback(result) + // | if(!(result instanceof Error)){ + // | result = myCallback(result); + // | } + // | if(result instanceof Error){ + // | result = myErrback(result); + // | } + // | result = myBoth(result); + // | if(result instanceof Error){ + // | result = myErrback(result); + // | }else{ + // | result = myCallback(result); + // | } + // + // The result is then stored away in case another step is added to the + // callback sequence. Since the Deferred already has a value + // available, any new callbacks added will be called immediately. + // + // There are two other "advanced" details about this implementation + // that are useful: + // + // Callbacks are allowed to return Deferred instances themselves, so + // you can build complicated sequences of events with ease. + // + // The creator of the Deferred may specify a canceller. The canceller + // is a function that will be called if Deferred.cancel is called + // before the Deferred fires. You can use this to implement clean + // aborting of an XMLHttpRequest, etc. Note that cancel will fire the + // deferred with a CancelledError (unless your canceller returns + // another kind of error), so the errbacks should be prepared to + // handle that error for cancellable Deferreds. + // example: + // | var deferred = new dojo.Deferred(); + // | setTimeout(function(){ deferred.callback({success: true}); }, 1000); + // | return deferred; + // example: + // Deferred objects are often used when making code asynchronous. It + // may be easiest to write functions in a synchronous manner and then + // split code using a deferred to trigger a response to a long-lived + // operation. For example, instead of register a callback function to + // denote when a rendering operation completes, the function can + // simply return a deferred: + // + // | // callback style: + // | function renderLotsOfData(data, callback){ + // | var success = false + // | try{ + // | for(var x in data){ + // | renderDataitem(data[x]); + // | } + // | success = true; + // | }catch(e){ } + // | if(callback){ + // | callback(success); + // | } + // | } + // + // | // using callback style + // | renderLotsOfData(someDataObj, function(success){ + // | // handles success or failure + // | if(!success){ + // | promptUserToRecover(); + // | } + // | }); + // | // NOTE: no way to add another callback here!! + // example: + // Using a Deferred doesn't simplify the sending code any, but it + // provides a standard interface for callers and senders alike, + // providing both with a simple way to service multiple callbacks for + // an operation and freeing both sides from worrying about details + // such as "did this get called already?". With Deferreds, new + // callbacks can be added at any time. + // + // | // Deferred style: + // | function renderLotsOfData(data){ + // | var d = new dojo.Deferred(); + // | try{ + // | for(var x in data){ + // | renderDataitem(data[x]); + // | } + // | d.callback(true); + // | }catch(e){ + // | d.errback(new Error("rendering failed")); + // | } + // | return d; + // | } + // + // | // using Deferred style + // | renderLotsOfData(someDataObj).addErrback(function(){ + // | promptUserToRecover(); + // | }); + // | // NOTE: addErrback and addCallback both return the Deferred + // | // again, so we could chain adding callbacks or save the + // | // deferred for later should we need to be notified again. + // example: + // In this example, renderLotsOfData is syncrhonous and so both + // versions are pretty artificial. Putting the data display on a + // timeout helps show why Deferreds rock: + // + // | // Deferred style and async func + // | function renderLotsOfData(data){ + // | var d = new dojo.Deferred(); + // | setTimeout(function(){ + // | try{ + // | for(var x in data){ + // | renderDataitem(data[x]); + // | } + // | d.callback(true); + // | }catch(e){ + // | d.errback(new Error("rendering failed")); + // | } + // | }, 100); + // | return d; + // | } + // + // | // using Deferred style + // | renderLotsOfData(someDataObj).addErrback(function(){ + // | promptUserToRecover(); + // | }); + // + // Note that the caller doesn't have to change his code at all to + // handle the asynchronous case. + + this.chain = []; + this.id = this._nextId(); + this.fired = -1; + this.paused = 0; + this.results = [null, null]; + this.canceller = canceller; + this.silentlyCancelled = false; +}; + +dojo.extend(dojo.Deferred, { + /* + makeCalled: function(){ + // summary: + // returns a new, empty deferred, which is already in the called + // state. Calling callback() or errback() on this deferred will + // yeild an error and adding new handlers to it will result in + // them being called immediately. + var deferred = new dojo.Deferred(); + deferred.callback(); + return deferred; + }, + + toString: function(){ + var state; + if(this.fired == -1){ + state = 'unfired'; + }else{ + state = this.fired ? 'success' : 'error'; + } + return 'Deferred(' + this.id + ', ' + state + ')'; + }, + */ + + _nextId: (function(){ + var n = 1; + return function(){ return n++; }; + })(), + + cancel: function(){ + // summary: + // Cancels a Deferred that has not yet received a value, or is + // waiting on another Deferred as its value. + // description: + // If a canceller is defined, the canceller is called. If the + // canceller did not return an error, or there was no canceller, + // then the errback chain is started. + var err; + if(this.fired == -1){ + if(this.canceller){ + err = this.canceller(this); + }else{ + this.silentlyCancelled = true; + } + if(this.fired == -1){ + if(!(err instanceof Error)){ + var res = err; + var msg = "Deferred Cancelled"; + if(err && err.toString){ + msg += ": " + err.toString(); + } + err = new Error(msg); + err.dojoType = "cancel"; + err.cancelResult = res; + } + this.errback(err); + } + }else if( (this.fired == 0) && + (this.results[0] instanceof dojo.Deferred) + ){ + this.results[0].cancel(); + } + }, + + _resback: function(res){ + // summary: + // The private primitive that means either callback or errback + this.fired = ((res instanceof Error) ? 1 : 0); + this.results[this.fired] = res; + this._fire(); + }, + + _check: function(){ + if(this.fired != -1){ + if(!this.silentlyCancelled){ + throw new Error("already called!"); + } + this.silentlyCancelled = false; + return; + } + }, + + callback: function(res){ + // summary: + // Begin the callback sequence with a non-error value. + + /* + callback or errback should only be called once on a given + Deferred. + */ + this._check(); + this._resback(res); + }, + + errback: function(/*Error*/res){ + // summary: + // Begin the callback sequence with an error result. + this._check(); + if(!(res instanceof Error)){ + res = new Error(res); + } + this._resback(res); + }, + + addBoth: function(/*Function|Object*/cb, /*String?*/cbfn){ + // summary: + // Add the same function as both a callback and an errback as the + // next element on the callback sequence.This is useful for code + // that you want to guarantee to run, e.g. a finalizer. + var enclosed = dojo.hitch.apply(dojo, arguments); + return this.addCallbacks(enclosed, enclosed); // dojo.Deferred + }, + + addCallback: function(/*Function|Object*/cb, /*String?*/cbfn /*...*/){ + // summary: + // Add a single callback to the end of the callback sequence. + return this.addCallbacks(dojo.hitch.apply(dojo, arguments)); // dojo.Deferred + }, + + addErrback: function(cb, cbfn){ + // summary: + // Add a single callback to the end of the callback sequence. + return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments)); // dojo.Deferred + }, + + addCallbacks: function(cb, eb){ + // summary: + // Add separate callback and errback to the end of the callback + // sequence. + this.chain.push([cb, eb]) + if(this.fired >= 0){ + this._fire(); + } + return this; // dojo.Deferred + }, + + _fire: function(){ + // summary: + // Used internally to exhaust the callback sequence when a result + // is available. + var chain = this.chain; + var fired = this.fired; + var res = this.results[fired]; + var self = this; + var cb = null; + while( + (chain.length > 0) && + (this.paused == 0) + ){ + // Array + var f = chain.shift()[fired]; + if(!f){ continue; } + var func = function(){ + var ret = f(res); + //If no response, then use previous response. + if(typeof ret != "undefined"){ + res = ret; + } + fired = ((res instanceof Error) ? 1 : 0); + if(res instanceof dojo.Deferred){ + cb = function(res){ + self._resback(res); + // inlined from _pause() + self.paused--; + if( + (self.paused == 0) && + (self.fired >= 0) + ){ + self._fire(); + } + } + // inlined from _unpause + this.paused++; + } + }; + if(dojo.config.debugAtAllCosts){ + func.call(this); + }else{ + try{ + func.call(this); + }catch(err){ + fired = 1; + res = err; + } + } + } + this.fired = fired; + this.results[fired] = res; + if((cb)&&(this.paused)){ + // this is for "tail recursion" in case the dependent + // deferred is already fired + res.addBoth(cb); + } + } +}); + +} + +if(!dojo._hasResource["dojo._base.json"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.json"] = true; +dojo.provide("dojo._base.json"); + +dojo.fromJson = function(/*String*/ json){ + // summary: + // Parses a [JSON](http://json.org) string to return a JavaScript object. Throws for invalid JSON strings. + // json: + // a string literal of a JSON item, for instance: + // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` + + return eval("(" + json + ")"); // Object +} + +dojo._escapeString = function(/*String*/str){ + //summary: + // Adds escape sequences for non-visual characters, double quote and + // backslash and surrounds with double quotes to form a valid string + // literal. + return ('"' + str.replace(/(["\\])/g, '\\$1') + '"'). + replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n"). + replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r"); // string +} + +dojo.toJsonIndentStr = "\t"; +dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){ + // summary: + // Returns a [JSON](http://json.org) serialization of an object. + // + // description: + // Returns a [JSON](http://json.org) serialization of an object. + // Note that this doesn't check for infinite recursion, so don't do that! + // + // it: + // an object to be serialized. Objects may define their own + // serialization via a special "__json__" or "json" function + // property. If a specialized serializer has been defined, it will + // be used as a fallback. + // + // prettyPrint: + // if true, we indent objects and arrays to make the output prettier. + // The variable dojo.toJsonIndentStr is used as the indent string + // -- to use something other than the default (tab), + // change that variable before calling dojo.toJson(). + // + // _indentStr: + // private variable for recursive calls when pretty printing, do not use. + + if(it === undefined){ + return "undefined"; + } + var objtype = typeof it; + if(objtype == "number" || objtype == "boolean"){ + return it + ""; + } + if(it === null){ + return "null"; + } + if(dojo.isString(it)){ + return dojo._escapeString(it); + } + // recurse + var recurse = arguments.callee; + // short-circuit for objects that support "json" serialization + // if they return "self" then just pass-through... + var newObj; + _indentStr = _indentStr || ""; + var nextIndent = prettyPrint ? _indentStr + dojo.toJsonIndentStr : ""; + var tf = it.__json__||it.json; + if(dojo.isFunction(tf)){ + newObj = tf.call(it); + if(it !== newObj){ + return recurse(newObj, prettyPrint, nextIndent); + } + } + if(it.nodeType && it.cloneNode){ // isNode + // we can't seriailize DOM nodes as regular objects because they have cycles + // DOM nodes could be serialized with something like outerHTML, but + // that can be provided by users in the form of .json or .__json__ function. + throw new Error("Can't serialize DOM nodes"); + } + + var sep = prettyPrint ? " " : ""; + var newLine = prettyPrint ? "\n" : ""; + + // array + if(dojo.isArray(it)){ + var res = dojo.map(it, function(obj){ + var val = recurse(obj, prettyPrint, nextIndent); + if(typeof val != "string"){ + val = "undefined"; + } + return newLine + nextIndent + val; + }); + return "[" + res.join("," + sep) + newLine + _indentStr + "]"; + } + /* + // look in the registry + try { + window.o = it; + newObj = dojo.json.jsonRegistry.match(it); + return recurse(newObj, prettyPrint, nextIndent); + }catch(e){ + // + } + // it's a function with no adapter, skip it + */ + if(objtype == "function"){ + return null; // null + } + // generic object code path + var output = [], key; + for(key in it){ + var keyStr, val; + if(typeof key == "number"){ + keyStr = '"' + key + '"'; + }else if(typeof key == "string"){ + keyStr = dojo._escapeString(key); + }else{ + // skip non-string or number keys + continue; + } + val = recurse(it[key], prettyPrint, nextIndent); + if(typeof val != "string"){ + // skip non-serializable values + continue; + } + // FIXME: use += on Moz!! + // MOW NOTE: using += is a pain because you have to account for the dangling comma... + output.push(newLine + nextIndent + keyStr + ":" + sep + val); + } + return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String +} + +} + +if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.array"] = true; + +dojo.provide("dojo._base.array"); + +(function(){ + var _getParts = function(arr, obj, cb){ + return [ + dojo.isString(arr) ? arr.split("") : arr, + obj || dojo.global, + // FIXME: cache the anonymous functions we create here? + dojo.isString(cb) ? new Function("item", "index", "array", cb) : cb + ]; + }; + + dojo.mixin(dojo, { + indexOf: function( /*Array*/ array, + /*Object*/ value, + /*Integer?*/ fromIndex, + /*Boolean?*/ findLast){ + // summary: + // locates the first index of the provided value in the + // passed array. If the value is not found, -1 is returned. + // description: + // For details on this method, see: + // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:indexOf + + var step = 1, end = array.length || 0, i = 0; + if(findLast){ + i = end - 1; + step = end = -1; + } + if(fromIndex != undefined){ i = fromIndex; } + if((findLast && i > end) || i < end){ + for(; i != end; i += step){ + if(array[i] == value){ return i; } + } + } + return -1; // Number + }, + + lastIndexOf: function(/*Array*/array, /*Object*/value, /*Integer?*/fromIndex){ + // summary: + // locates the last index of the provided value in the passed + // array. If the value is not found, -1 is returned. + // description: + // For details on this method, see: + // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:lastIndexOf + return dojo.indexOf(array, value, fromIndex, true); // Number + }, + + forEach: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + // summary: + // for every item in arr, callback is invoked. Return values are ignored. + // arr: + // the array to iterate over. If a string, operates on individual characters. + // callback: + // a function is invoked with three arguments: item, index, and array + // thisObject: + // may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 + // Array.forEach() method. For more details, see: + // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:forEach + // example: + // | // log out all members of the array: + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | function(item){ + // | + // | } + // | ); + // example: + // | // log out the members and their indexes + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | function(item, idx, arr){ + // | + // | } + // | ); + // example: + // | // use a scoped object member as the callback + // | + // | var obj = { + // | prefix: "logged via obj.callback:", + // | callback: function(item){ + // | + // | } + // | }; + // | + // | // specifying the scope function executes the callback in that scope + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | obj.callback, + // | obj + // | ); + // | + // | // alternately, we can accomplish the same thing with dojo.hitch() + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | dojo.hitch(obj, "callback") + // | ); + + // match the behavior of the built-in forEach WRT empty arrs + if(!arr || !arr.length){ return; } + + // FIXME: there are several ways of handilng thisObject. Is + // dojo.global always the default context? + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + for(var i=0,l=arr.length; i1; }); + // example: + // | // returns true + // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); + return dojo._everyOrSome(true, arr, callback, thisObject); // Boolean + }, + + some: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + // summary: + // Determines whether or not any item in arr satisfies the + // condition implemented by callback. + // arr: + // the array to iterate over. If a string, operates on individual characters. + // callback: + // a function is invoked with three arguments: item, index, + // and array and returns true if the condition is met. + // thisObject: + // may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 + // Array.some() method. For more details, see: + // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:some + // example: + // | // is true + // | dojo.some([1, 2, 3, 4], function(item){ return item>1; }); + // example: + // | // is false + // | dojo.some([1, 2, 3, 4], function(item){ return item<1; }); + return dojo._everyOrSome(false, arr, callback, thisObject); // Boolean + }, + + map: function(/*Array|String*/arr, /*Function|String*/callback, /*Function?*/thisObject){ + // summary: + // applies callback to each element of arr and returns + // an Array with the results + // arr: + // the array to iterate on. If a string, operates on + // individual characters. + // callback: + // a function is invoked with three arguments, (item, index, + // array), and returns a value + // thisObject: + // may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.map() + // method. For more details, see: + // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:map + // example: + // | // returns [2, 3, 4, 5] + // | dojo.map([1, 2, 3, 4], function(item){ return item+1 }); + + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + var outArr = (arguments[3] ? (new arguments[3]()) : []); + for(var i=0,l=arr.length; i1; }); + + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + var outArr = []; + for(var i=0,l=arr.length; i>= bits; + t[x] = bits == 4 ? 17 * c : c; + }); + t.a = 1; + return t; // dojo.Color + }; + + dojo.colorFromArray = function(/*Array*/ a, /*dojo.Color?*/ obj){ + // summary: builds a color from 1, 2, 3, or 4 element array + var t = obj || new d.Color(); + t._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3])); + if(isNaN(t.a)){ t.a = 1; } + return t.sanitize(); // dojo.Color + }; + + dojo.colorFromString = function(/*String*/ str, /*dojo.Color?*/ obj){ + // summary: + // parses str for a color value. + // description: + // Acceptable input values for str may include arrays of any form + // accepted by dojo.colorFromArray, hex strings such as "#aaaaaa", or + // rgb or rgba strings such as "rgb(133, 200, 16)" or "rgba(10, 10, + // 10, 50)" + // returns: + // a dojo.Color object. If obj is passed, it will be the return value. + var a = d.Color.named[str]; + return a && d.colorFromArray(a, obj) || d.colorFromRgb(str, obj) || d.colorFromHex(str, obj); + }; + +})(); + +} + +if(!dojo._hasResource["dojo._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base"] = true; +dojo.provide("dojo._base"); + +} + +if(!dojo._hasResource["dojo._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.window"] = true; +dojo.provide("dojo._base.window"); + +/*===== +dojo.doc = { + // summary: + // Alias for the current document. 'dojo.doc' can be modified + // for temporary context shifting. Also see dojo.withDoc(). + // description: + // Refer to dojo.doc rather + // than referring to 'window.document' to ensure your code runs + // correctly in managed contexts. + // example: + // | n.appendChild(dojo.doc.createElement('div')); +} +=====*/ +dojo.doc = window["document"] || null; + +dojo.body = function(){ + // summary: + // Return the body element of the document + // return the body object associated with dojo.doc + // example: + // | dojo.body().appendChild(dojo.doc.createElement('div')); + + // Note: document.body is not defined for a strict xhtml document + // Would like to memoize this, but dojo.doc can change vi dojo.withDoc(). + return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node +} + +dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){ + // summary: + // changes the behavior of many core Dojo functions that deal with + // namespace and DOM lookup, changing them to work in a new global + // context (e.g., an iframe). The varibles dojo.global and dojo.doc + // are modified as a result of calling this function and the result of + // `dojo.body()` likewise differs. + dojo.global = globalObject; + dojo.doc = globalDocument; +}; + +dojo.withGlobal = function( /*Object*/globalObject, + /*Function*/callback, + /*Object?*/thisObject, + /*Array?*/cbArguments){ + // summary: + // Invoke callback with globalObject as dojo.global and + // globalObject.document as dojo.doc. + // description: + // Invoke callback with globalObject as dojo.global and + // globalObject.document as dojo.doc. If provided, globalObject + // will be executed in the context of object thisObject + // When callback() returns or throws an error, the dojo.global + // and dojo.doc will be restored to its previous state. + + var oldGlob = dojo.global; + try{ + dojo.global = globalObject; + return dojo.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments); + }finally{ + dojo.global = oldGlob; + } +} + +dojo.withDoc = function( /*DocumentElement*/documentObject, + /*Function*/callback, + /*Object?*/thisObject, + /*Array?*/cbArguments){ + // summary: + // Invoke callback with documentObject as dojo.doc. + // description: + // Invoke callback with documentObject as dojo.doc. If provided, + // callback will be executed in the context of object thisObject + // When callback() returns or throws an error, the dojo.doc will + // be restored to its previous state. + + var oldDoc = dojo.doc, + oldLtr = dojo._bodyLtr; + + try{ + dojo.doc = documentObject; + delete dojo._bodyLtr; // uncache + + if(thisObject && dojo.isString(callback)){ + callback = thisObject[callback]; + } + + return callback.apply(thisObject, cbArguments || []); + }finally{ + dojo.doc = oldDoc; + if(oldLtr !== undefined){ dojo._bodyLtr = oldLtr; } + } +}; + +} + +if(!dojo._hasResource["dojo._base.event"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.event"] = true; +dojo.provide("dojo._base.event"); + +// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA + +(function(){ + // DOM event listener machinery + var del = (dojo._event_listener = { + add: function(/*DOMNode*/node, /*String*/name, /*Function*/fp){ + if(!node){return;} + name = del._normalizeEventName(name); + fp = del._fixCallback(name, fp); + var oname = name; + if( + !dojo.isIE && + (name == "mouseenter" || name == "mouseleave") + ){ + var ofp = fp; + //oname = name; + name = (name == "mouseenter") ? "mouseover" : "mouseout"; + fp = function(e){ + if(dojo.isFF <= 2) { + // check tagName to fix a FF2 bug with invalid nodes (hidden child DIV of INPUT) + // which causes isDescendant to return false which causes + // spurious, and more importantly, incorrect mouse events to fire. + // TODO: remove tagName check when Firefox 2 is no longer supported + try{ e.relatedTarget.tagName; }catch(e2){ return; } + } + if(!dojo.isDescendant(e.relatedTarget, node)){ + // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable. + return ofp.call(this, e); + } + } + } + node.addEventListener(name, fp, false); + return fp; /*Handle*/ + }, + remove: function(/*DOMNode*/node, /*String*/event, /*Handle*/handle){ + // summary: + // clobbers the listener from the node + // node: + // DOM node to attach the event to + // event: + // the name of the handler to remove the function from + // handle: + // the handle returned from add + if(node){ + event = del._normalizeEventName(event); + if(!dojo.isIE && (event == "mouseenter" || event == "mouseleave")){ + event = (event == "mouseenter") ? "mouseover" : "mouseout"; + } + + node.removeEventListener(event, handle, false); + } + }, + _normalizeEventName: function(/*String*/name){ + // Generally, name should be lower case, unless it is special + // somehow (e.g. a Mozilla DOM event). + // Remove 'on'. + return name.slice(0,2) =="on" ? name.slice(2) : name; + }, + _fixCallback: function(/*String*/name, fp){ + // By default, we only invoke _fixEvent for 'keypress' + // If code is added to _fixEvent for other events, we have + // to revisit this optimization. + // This also applies to _fixEvent overrides for Safari and Opera + // below. + return name != "keypress" ? fp : function(e){ return fp.call(this, del._fixEvent(e, this)); }; + }, + _fixEvent: function(evt, sender){ + // _fixCallback only attaches us to keypress. + // Switch on evt.type anyway because we might + // be called directly from dojo.fixEvent. + switch(evt.type){ + case "keypress": + del._setKeyChar(evt); + break; + } + return evt; + }, + _setKeyChar: function(evt){ + evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : ''; + evt.charOrCode = evt.keyChar || evt.keyCode; + }, + // For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE + // we map those virtual key codes to ascii here + // not valid for all (non-US) keyboards, so maybe we shouldn't bother + _punctMap: { + 106:42, + 111:47, + 186:59, + 187:43, + 188:44, + 189:45, + 190:46, + 191:47, + 192:96, + 219:91, + 220:92, + 221:93, + 222:39 + } + }); + + // DOM events + + dojo.fixEvent = function(/*Event*/evt, /*DOMNode*/sender){ + // summary: + // normalizes properties on the event object including event + // bubbling methods, keystroke normalization, and x/y positions + // evt: Event + // native event object + // sender: DOMNode + // node to treat as "currentTarget" + return del._fixEvent(evt, sender); + } + + dojo.stopEvent = function(/*Event*/evt){ + // summary: + // prevents propagation and clobbers the default action of the + // passed event + // evt: Event + // The event object. If omitted, window.event is used on IE. + evt.preventDefault(); + evt.stopPropagation(); + // NOTE: below, this method is overridden for IE + } + + // the default listener to use on dontFix nodes, overriden for IE + var node_listener = dojo._listener; + + // Unify connect and event listeners + dojo._connect = function(obj, event, context, method, dontFix){ + // FIXME: need a more strict test + var isNode = obj && (obj.nodeType||obj.attachEvent||obj.addEventListener); + // choose one of three listener options: raw (connect.js), DOM event on a Node, custom event on a Node + // we need the third option to provide leak prevention on broken browsers (IE) + var lid = isNode ? (dontFix ? 2 : 1) : 0, l = [dojo._listener, del, node_listener][lid]; + // create a listener + var h = l.add(obj, event, dojo.hitch(context, method)); + // formerly, the disconnect package contained "l" directly, but if client code + // leaks the disconnect package (by connecting it to a node), referencing "l" + // compounds the problem. + // instead we return a listener id, which requires custom _disconnect below. + // return disconnect package + return [ obj, event, h, lid ]; + } + + dojo._disconnect = function(obj, event, handle, listener){ + ([dojo._listener, del, node_listener][listener]).remove(obj, event, handle); + } + + // Constants + + // Public: client code should test + // keyCode against these named constants, as the + // actual codes can vary by browser. + dojo.keys = { + // summary: definitions for common key values + BACKSPACE: 8, + TAB: 9, + CLEAR: 12, + ENTER: 13, + SHIFT: 16, + CTRL: 17, + ALT: 18, + PAUSE: 19, + CAPS_LOCK: 20, + ESCAPE: 27, + SPACE: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + LEFT_ARROW: 37, + UP_ARROW: 38, + RIGHT_ARROW: 39, + DOWN_ARROW: 40, + INSERT: 45, + DELETE: 46, + HELP: 47, + LEFT_WINDOW: 91, + RIGHT_WINDOW: 92, + SELECT: 93, + NUMPAD_0: 96, + NUMPAD_1: 97, + NUMPAD_2: 98, + NUMPAD_3: 99, + NUMPAD_4: 100, + NUMPAD_5: 101, + NUMPAD_6: 102, + NUMPAD_7: 103, + NUMPAD_8: 104, + NUMPAD_9: 105, + NUMPAD_MULTIPLY: 106, + NUMPAD_PLUS: 107, + NUMPAD_ENTER: 108, + NUMPAD_MINUS: 109, + NUMPAD_PERIOD: 110, + NUMPAD_DIVIDE: 111, + F1: 112, + F2: 113, + F3: 114, + F4: 115, + F5: 116, + F6: 117, + F7: 118, + F8: 119, + F9: 120, + F10: 121, + F11: 122, + F12: 123, + F13: 124, + F14: 125, + F15: 126, + NUM_LOCK: 144, + SCROLL_LOCK: 145 + }; + + // IE event normalization + if(dojo.isIE){ + var _trySetKeyCode = function(e, code){ + try{ + // squelch errors when keyCode is read-only + // (e.g. if keyCode is ctrl or shift) + return (e.keyCode = code); + }catch(e){ + return 0; + } + } + + // by default, use the standard listener + var iel = dojo._listener; + var listenersName = (dojo._ieListenersName = "_" + dojo._scopeName + "_listeners"); + // dispatcher tracking property + if(!dojo.config._allow_leaks){ + // custom listener that handles leak protection for DOM events + node_listener = iel = dojo._ie_listener = { + // support handler indirection: event handler functions are + // referenced here. Event dispatchers hold only indices. + handlers: [], + // add a listener to an object + add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ + source = source || dojo.global; + var f = source[method]; + if(!f||!f[listenersName]){ + var d = dojo._getIeDispatcher(); + // original target function is special + d.target = f && (ieh.push(f) - 1); + // dispatcher holds a list of indices into handlers table + d[listenersName] = []; + // redirect source to dispatcher + f = source[method] = d; + } + return f[listenersName].push(ieh.push(listener) - 1) ; /*Handle*/ + }, + // remove a listener from an object + remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){ + var f = (source||dojo.global)[method], l = f && f[listenersName]; + if(f && l && handle--){ + delete ieh[l[handle]]; + delete l[handle]; + } + } + }; + // alias used above + var ieh = iel.handlers; + } + + dojo.mixin(del, { + add: function(/*DOMNode*/node, /*String*/event, /*Function*/fp){ + if(!node){return;} // undefined + event = del._normalizeEventName(event); + if(event=="onkeypress"){ + // we need to listen to onkeydown to synthesize + // keypress events that otherwise won't fire + // on IE + var kd = node.onkeydown; + if(!kd || !kd[listenersName] || !kd._stealthKeydownHandle){ + var h = del.add(node, "onkeydown", del._stealthKeyDown); + kd = node.onkeydown; + kd._stealthKeydownHandle = h; + kd._stealthKeydownRefs = 1; + }else{ + kd._stealthKeydownRefs++; + } + } + return iel.add(node, event, del._fixCallback(fp)); + }, + remove: function(/*DOMNode*/node, /*String*/event, /*Handle*/handle){ + event = del._normalizeEventName(event); + iel.remove(node, event, handle); + if(event=="onkeypress"){ + var kd = node.onkeydown; + if(--kd._stealthKeydownRefs <= 0){ + iel.remove(node, "onkeydown", kd._stealthKeydownHandle); + delete kd._stealthKeydownHandle; + } + } + }, + _normalizeEventName: function(/*String*/eventName){ + // Generally, eventName should be lower case, unless it is + // special somehow (e.g. a Mozilla event) + // ensure 'on' + return eventName.slice(0,2) != "on" ? "on" + eventName : eventName; + }, + _nop: function(){}, + _fixEvent: function(/*Event*/evt, /*DOMNode*/sender){ + // summary: + // normalizes properties on the event object including event + // bubbling methods, keystroke normalization, and x/y positions + // evt: native event object + // sender: node to treat as "currentTarget" + if(!evt){ + var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; + evt = w.event; + } + if(!evt){return(evt);} + evt.target = evt.srcElement; + evt.currentTarget = (sender || evt.srcElement); + evt.layerX = evt.offsetX; + evt.layerY = evt.offsetY; + // FIXME: scroll position query is duped from dojo.html to + // avoid dependency on that entire module. Now that HTML is in + // Base, we should convert back to something similar there. + var se = evt.srcElement, doc = (se && se.ownerDocument) || document; + // DO NOT replace the following to use dojo.body(), in IE, document.documentElement should be used + // here rather than document.body + var docBody = ((dojo.isIE < 6) || (doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement; + var offset = dojo._getIeDocumentElementOffset(); + evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; + evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y; + if(evt.type == "mouseover"){ + evt.relatedTarget = evt.fromElement; + } + if(evt.type == "mouseout"){ + evt.relatedTarget = evt.toElement; + } + evt.stopPropagation = del._stopPropagation; + evt.preventDefault = del._preventDefault; + return del._fixKeys(evt); + }, + _fixKeys: function(evt){ + switch(evt.type){ + case "keypress": + var c = ("charCode" in evt ? evt.charCode : evt.keyCode); + if (c==10){ + // CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla + c=0; + evt.keyCode = 13; + }else if(c==13||c==27){ + c=0; // Mozilla considers ENTER and ESC non-printable + }else if(c==3){ + c=99; // Mozilla maps CTRL-BREAK to CTRL-c + } + // Mozilla sets keyCode to 0 when there is a charCode + // but that stops the event on IE. + evt.charCode = c; + del._setKeyChar(evt); + break; + } + return evt; + }, + _stealthKeyDown: function(evt){ + // IE doesn't fire keypress for most non-printable characters. + // other browsers do, we simulate it here. + var kp = evt.currentTarget.onkeypress; + // only works if kp exists and is a dispatcher + if(!kp || !kp[listenersName]){ return; } + // munge key/charCode + var k=evt.keyCode; + // These are Windows Virtual Key Codes + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp + var unprintable = k!=13 && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222); + // synthesize keypress for most unprintables and CTRL-keys + if(unprintable||evt.ctrlKey){ + var c = unprintable ? 0 : k; + if(evt.ctrlKey){ + if(k==3 || k==13){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ + c -= 48; // map CTRL-[numpad 0-9] to ASCII + }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ + c += 32; // map CTRL-[A-Z] to lowercase + }else{ + c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII + } + } + // simulate a keypress event + var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); + kp.call(evt.currentTarget, faux); + evt.cancelBubble = faux.cancelBubble; + evt.returnValue = faux.returnValue; + _trySetKeyCode(evt, faux.keyCode); + } + }, + // Called in Event scope + _stopPropagation: function(){ + this.cancelBubble = true; + }, + _preventDefault: function(){ + // Setting keyCode to 0 is the only way to prevent certain keypresses (namely + // ctrl-combinations that correspond to menu accelerator keys). + // Otoh, it prevents upstream listeners from getting this information + // Try to split the difference here by clobbering keyCode only for ctrl + // combinations. If you still need to access the key upstream, bubbledKeyCode is + // provided as a workaround. + this.bubbledKeyCode = this.keyCode; + if(this.ctrlKey){_trySetKeyCode(this, 0);} + this.returnValue = false; + } + }); + + // override stopEvent for IE + dojo.stopEvent = function(evt){ + evt = evt || window.event; + del._stopPropagation.call(evt); + del._preventDefault.call(evt); + } + } + + del._synthesizeEvent = function(evt, props){ + var faux = dojo.mixin({}, evt, props); + del._setKeyChar(faux); + // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); + // but it throws an error when preventDefault is invoked on Safari + // does Event.preventDefault not support "apply" on Safari? + faux.preventDefault = function(){ evt.preventDefault(); }; + faux.stopPropagation = function(){ evt.stopPropagation(); }; + return faux; + } + + // Opera event normalization + if(dojo.isOpera){ + dojo.mixin(del, { + _fixEvent: function(evt, sender){ + switch(evt.type){ + case "keypress": + var c = evt.which; + if(c==3){ + c=99; // Mozilla maps CTRL-BREAK to CTRL-c + } + // can't trap some keys at all, like INSERT and DELETE + // there is no differentiating info between DELETE and ".", or INSERT and "-" + c = c<41 && !evt.shiftKey ? 0 : c; + if(evt.ctrlKey && !evt.shiftKey && c>=65 && c<=90){ + // lowercase CTRL-[A-Z] keys + c += 32; + } + return del._synthesizeEvent(evt, { charCode: c }); + } + return evt; + } + }); + } + + // Webkit event normalization + if(dojo.isWebKit){ + del._add = del.add; + del._remove = del.remove; + + dojo.mixin(del, { + add: function(/*DOMNode*/node, /*String*/event, /*Function*/fp){ + if(!node){return;} // undefined + var handle = del._add(node, event, fp); + if(del._normalizeEventName(event) == "keypress"){ + // we need to listen to onkeydown to synthesize + // keypress events that otherwise won't fire + // in Safari 3.1+: https://lists.webkit.org/pipermail/webkit-dev/2007-December/002992.html + handle._stealthKeyDownHandle = del._add(node, "keydown", function(evt){ + //A variation on the IE _stealthKeydown function + //Synthesize an onkeypress event, but only for unprintable characters. + var k=evt.keyCode; + // These are Windows Virtual Key Codes + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp + var unprintable = k!=13 && k!=32 && k!=27 && (k<48 || k>90) && (k<96 || k>111) && (k<186 || k>192) && (k<219 || k>222); + // synthesize keypress for most unprintables and CTRL-keys + if(unprintable || evt.ctrlKey){ + var c = unprintable ? 0 : k; + if(evt.ctrlKey){ + if(k==3 || k==13){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ + c -= 48; // map CTRL-[numpad 0-9] to ASCII + }else if(!evt.shiftKey && c>=65 && c<=90){ + c += 32; // map CTRL-[A-Z] to lowercase + }else{ + c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII + } + } + // simulate a keypress event + var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); + fp.call(evt.currentTarget, faux); + } + }); + } + return handle; /*Handle*/ + }, + + remove: function(/*DOMNode*/node, /*String*/event, /*Handle*/handle){ + if(node){ + if(handle._stealthKeyDownHandle){ + del._remove(node, "keydown", handle._stealthKeyDownHandle); + } + del._remove(node, event, handle); + } + }, + _fixEvent: function(evt, sender){ + switch(evt.type){ + case "keypress": + if(evt.faux){ return evt; } + var c = evt.charCode; + c = c>=32 ? c : 0; + return del._synthesizeEvent(evt, {charCode: c, faux: true}); + } + return evt; + } + }); + } + })(); + +if(dojo.isIE){ + // keep this out of the closure + // closing over 'iel' or 'ieh' b0rks leak prevention + // ls[i] is an index into the master handler array + dojo._ieDispatcher = function(args, sender){ + var ap=Array.prototype, h=dojo._ie_listener.handlers, c=args.callee, ls=c[dojo._ieListenersName], t=h[c.target]; + // return value comes from original target function + var r = t && t.apply(sender, args); + // make local copy of listener array so it's immutable during processing + var lls = [].concat(ls); + // invoke listeners after target function + for(var i in lls){ + var f = h[lls[i]]; + if(!(i in ap) && f){ + f.apply(sender, args); + } + } + return r; + } + dojo._getIeDispatcher = function(){ + // ensure the returned function closes over nothing ("new Function" apparently doesn't close) + return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)"); // function + } + // keep this out of the closure to reduce RAM allocation + dojo._event_listener._fixCallback = function(fp){ + var f = dojo._event_listener._fixEvent; + return function(e){ return fp.call(this, f(e, this)); }; + } +} + +} + +if(!dojo._hasResource["dojo._base.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.html"] = true; + +dojo.provide("dojo._base.html"); + +// FIXME: need to add unit tests for all the semi-public methods + +try{ + document.execCommand("BackgroundImageCache", false, true); +}catch(e){ + // sane browsers don't have cache "issues" +} + +// ============================= +// DOM Functions +// ============================= + +/*===== +dojo.byId = function(id, doc){ + // summary: + // Returns DOM node with matching `id` attribute or `null` + // if not found, similar to "$" function in another library. + // If `id` is a DomNode, this function is a no-op. + // + // id: String|DOMNode + // A string to match an HTML id attribute or a reference to a DOM Node + // + // doc: Document? + // Document to work in. Defaults to the current value of + // dojo.doc. Can be used to retrieve + // node references from other documents. + // + // example: + // Look up a node by ID: + // | var n = dojo.byId("foo"); + // + // example: + // Check if a node exists. + // | if(dojo.byId("bar")){ ... } + // + // example: + // Allow string or DomNode references to be passed to a custom function: + // | var foo = function(nodeOrId){ + // | nodeOrId = dojo.byId(nodeOrId); + // | // ... more stuff + // | } +=====*/ + +if(dojo.isIE || dojo.isOpera){ + dojo.byId = function(id, doc){ + if(dojo.isString(id)){ + var _d = doc || dojo.doc; + var te = _d.getElementById(id); + // attributes.id.value is better than just id in case the + // user has a name=id inside a form + if(te && (te.attributes.id.value == id || te.id == id)){ + return te; + }else{ + var eles = _d.all[id]; + if(!eles || eles.nodeName){ + eles = [eles]; + } + // if more than 1, choose first with the correct id + var i=0; + while((te=eles[i++])){ + if((te.attributes && te.attributes.id && te.attributes.id.value == id) + || te.id == id){ + return te; + } + } + } + }else{ + return id; // DomNode + } + }; +}else{ + dojo.byId = function(id, doc){ + return dojo.isString(id) ? (doc || dojo.doc).getElementById(id) : id; // DomNode + }; +} +/*===== +} +=====*/ + +(function(){ + var d = dojo; + + var _destroyContainer = null; + d.addOnWindowUnload(function(){ + _destroyContainer = null; //prevent IE leak + }); + +/*===== + dojo._destroyElement = function(node){ + // summary: Existing alias for `dojo.destroy`. Deprecated, will be removed in 2.0 + } +=====*/ + dojo._destroyElement = dojo.destroy = function(/*String|DomNode*/node){ + // summary: + // Removes a node from its parent, clobbering it and all of its + // children. + // + // description: + // Removes a node from its parent, clobbering it and all of its + // children. Function only works with DomNodes, and returns nothing. + // + // node: + // A String ID or DomNode reference of the element to be destroyed + // + // example: + // Destroy a node byId: + // | dojo.destroy("someId"); + // + // example: + // Destroy all nodes in a list by reference: + // | dojo.query(".someNode").forEach(dojo.destroy); + + node = d.byId(node); + try{ + if(!_destroyContainer || _destroyContainer.ownerDocument != node.ownerDocument){ + _destroyContainer = node.ownerDocument.createElement("div"); + } + _destroyContainer.appendChild(node.parentNode ? node.parentNode.removeChild(node) : node); + // NOTE: see http://trac.dojotoolkit.org/ticket/2931. This may be a bug and not a feature + _destroyContainer.innerHTML = ""; + }catch(e){ + /* squelch */ + } + }; + + dojo.isDescendant = function(/*DomNode|String*/node, /*DomNode|String*/ancestor){ + // summary: + // Returns true if node is a descendant of ancestor + // node: string id or node reference to test + // ancestor: string id or node reference of potential parent to test against + try{ + node = d.byId(node); + ancestor = d.byId(ancestor); + while(node){ + if(node === ancestor){ + return true; // Boolean + } + node = node.parentNode; + } + }catch(e){ /* squelch, return false */ } + return false; // Boolean + }; + + dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){ + // summary: enable or disable selection on a node + // node: + // id or reference to node + // selectable: + // state to put the node in. false indicates unselectable, true + // allows selection. + node = d.byId(node); + if(d.isMozilla){ + node.style.MozUserSelect = selectable ? "" : "none"; + }else if(d.isKhtml || d.isWebKit){ + node.style.KhtmlUserSelect = selectable ? "auto" : "none"; + }else if(d.isIE){ + var v = (node.unselectable = selectable ? "" : "on"); + d.query("*", node).forEach("item.unselectable = '"+v+"'"); + } + //FIXME: else? Opera? + }; + + var _insertBefore = function(/*DomNode*/node, /*DomNode*/ref){ + var parent = ref.parentNode; + if(parent){ + parent.insertBefore(node, ref); + } + } + + var _insertAfter = function(/*DomNode*/node, /*DomNode*/ref){ + // summary: + // Try to insert node after ref + var parent = ref.parentNode; + if(parent){ + if(parent.lastChild == ref){ + parent.appendChild(node); + }else{ + parent.insertBefore(node, ref.nextSibling); + } + } + } + + dojo.place = function(node, refNode, position){ + // summary: + // Attempt to insert node into the DOM, choosing from various positioning options. + // Returns true if successful, false otherwise. + // + // node: String|DomNode + // id or node reference, or HTML fragment starting with "<" to place relative to refNode + // + // refNode: String|DomNode + // id or node reference to use as basis for placement + // + // position: String|Number? + // string noting the position of node relative to refNode or a + // number indicating the location in the childNodes collection of refNode. + // Accepted string values are: + // | * before + // | * after + // | * replace + // | * only + // | * first + // | * last + // "first" and "last" indicate positions as children of refNode, "replace" replaces refNode, + // "only" replaces all children. position defaults to "last" if not specified + // + // returns: DomNode + // Returned values is the first argument resolved to a DOM node. + // + // .place() is also a method of `dojo.NodeList`, allowing `dojo.query` node lookups. + // + // example: + // Place a node by string id as the last child of another node by string id: + // | dojo.place("someNode", "anotherNode"); + // + // example: + // Place a node by string id before another node by string id + // | dojo.place("someNode", "anotherNode", "before"); + // + // example: + // Create a Node, and place it in the body element (last child): + // | dojo.place(dojo.create('div'), dojo.body()); + // + // example: + // Put a new LI as the first child of a list by id: + // | dojo.place(dojo.create('li'), "someUl", "first"); + + refNode = d.byId(refNode); + if(d.isString(node)){ + node = node.charAt(0) == "<" ? d._toDom(node, refNode.ownerDocument) : d.byId(node); + } + if(typeof position == "number"){ + var cn = refNode.childNodes; + if(!cn.length || cn.length <= position){ + refNode.appendChild(node); + }else{ + _insertBefore(node, cn[position < 0 ? 0 : position]); + } + }else{ + switch(position){ + case "before": + _insertBefore(node, refNode); + break; + case "after": + _insertAfter(node, refNode); + break; + case "replace": + refNode.parentNode.replaceChild(node, refNode); + break; + case "only": + d.empty(refNode); + refNode.appendChild(node); + break; + case "first": + if(refNode.firstChild){ + _insertBefore(node, refNode.firstChild); + break; + } + // else fallthrough... + default: // aka: last + refNode.appendChild(node); + } + } + return node; // DomNode + } + + // Box functions will assume this model. + // On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode. + // Can be set to change behavior of box setters. + + // can be either: + // "border-box" + // "content-box" (default) + dojo.boxModel = "content-box"; + + // We punt per-node box mode testing completely. + // If anybody cares, we can provide an additional (optional) unit + // that overrides existing code to include per-node box sensitivity. + + // Opera documentation claims that Opera 9 uses border-box in BackCompat mode. + // but experiments (Opera 9.10.8679 on Windows Vista) indicate that it actually continues to use content-box. + // IIRC, earlier versions of Opera did in fact use border-box. + // Opera guys, this is really confusing. Opera being broken in quirks mode is not our fault. + + if(d.isIE /*|| dojo.isOpera*/){ + var _dcm = document.compatMode; + // client code may have to adjust if compatMode varies across iframes + d.boxModel = _dcm == "BackCompat" || _dcm == "QuirksMode" || d.isIE < 6 ? "border-box" : "content-box"; // FIXME: remove IE < 6 support? + } + + // ============================= + // Style Functions + // ============================= + + // getComputedStyle drives most of the style code. + // Wherever possible, reuse the returned object. + // + // API functions below that need to access computed styles accept an + // optional computedStyle parameter. + // If this parameter is omitted, the functions will call getComputedStyle themselves. + // This way, calling code can access computedStyle once, and then pass the reference to + // multiple API functions. + +/*===== + dojo.getComputedStyle = function(node){ + // summary: + // Returns a "computed style" object. + // + // description: + // Gets a "computed style" object which can be used to gather + // information about the current state of the rendered node. + // + // Note that this may behave differently on different browsers. + // Values may have different formats and value encodings across + // browsers. + // + // Note also that this method is expensive. Wherever possible, + // reuse the returned object. + // + // Use the dojo.style() method for more consistent (pixelized) + // return values. + // + // node: DOMNode + // A reference to a DOM node. Does NOT support taking an + // ID string for speed reasons. + // example: + // | dojo.getComputedStyle(dojo.byId('foo')).borderWidth; + // + // example: + // Reusing the returned object, avoiding multiple lookups: + // | var cs = dojo.getComputedStyle(dojo.byId("someNode")); + // | var w = cs.width, h = cs.height; + return; // CSS2Properties + } +=====*/ + + // Although we normally eschew argument validation at this + // level, here we test argument 'node' for (duck)type, + // by testing nodeType, ecause 'document' is the 'parentNode' of 'body' + // it is frequently sent to this function even + // though it is not Element. + var gcs; + if(d.isWebKit){ + gcs = function(/*DomNode*/node){ + var s; + if(node.nodeType == 1){ + var dv = node.ownerDocument.defaultView; + s = dv.getComputedStyle(node, null); + if(!s && node.style){ + node.style.display = ""; + s = dv.getComputedStyle(node, null); + } + } + return s || {}; + }; + }else if(d.isIE){ + gcs = function(node){ + // IE (as of 7) doesn't expose Element like sane browsers + return node.nodeType == 1 /* ELEMENT_NODE*/ ? node.currentStyle : {}; + }; + }else{ + gcs = function(node){ + return node.nodeType == 1 ? + node.ownerDocument.defaultView.getComputedStyle(node, null) : {}; + }; + } + dojo.getComputedStyle = gcs; + + if(!d.isIE){ + d._toPixelValue = function(element, value){ + // style values can be floats, client code may want + // to round for integer pixels. + return parseFloat(value) || 0; + }; + }else{ + d._toPixelValue = function(element, avalue){ + if(!avalue){ return 0; } + // on IE7, medium is usually 4 pixels + if(avalue == "medium"){ return 4; } + // style values can be floats, client code may + // want to round this value for integer pixels. + if(avalue.slice && avalue.slice(-2) == 'px'){ return parseFloat(avalue); } + with(element){ + var sLeft = style.left; + var rsLeft = runtimeStyle.left; + runtimeStyle.left = currentStyle.left; + try{ + // 'avalue' may be incompatible with style.left, which can cause IE to throw + // this has been observed for border widths using "thin", "medium", "thick" constants + // those particular constants could be trapped by a lookup + // but perhaps there are more + style.left = avalue; + avalue = style.pixelLeft; + }catch(e){ + avalue = 0; + } + style.left = sLeft; + runtimeStyle.left = rsLeft; + } + return avalue; + } + } + var px = d._toPixelValue; + + // FIXME: there opacity quirks on FF that we haven't ported over. Hrm. + /*===== + dojo._getOpacity = function(node){ + // summary: + // Returns the current opacity of the passed node as a + // floating-point value between 0 and 1. + // node: DomNode + // a reference to a DOM node. Does NOT support taking an + // ID string for speed reasons. + // returns: Number between 0 and 1 + return; // Number + } + =====*/ + + var astr = "DXImageTransform.Microsoft.Alpha"; + var af = function(n, f){ + try{ + return n.filters.item(astr); + }catch(e){ + return f ? {} : null; + } + } + + dojo._getOpacity = + d.isIE ? function(node){ + try{ + return af(node).Opacity / 100; // Number + }catch(e){ + return 1; // Number + } + } : + function(node){ + return gcs(node).opacity; + }; + + /*===== + dojo._setOpacity = function(node, opacity){ + // summary: + // set the opacity of the passed node portably. Returns the + // new opacity of the node. + // node: DOMNode + // a reference to a DOM node. Does NOT support taking an + // ID string for performance reasons. + // opacity: Number + // A Number between 0 and 1. 0 specifies transparent. + // returns: Number between 0 and 1 + return; // Number + } + =====*/ + + dojo._setOpacity = + d.isIE ? function(/*DomNode*/node, /*Number*/opacity){ + var ov = opacity * 100; + node.style.zoom = 1.0; + + // on IE7 Alpha(Filter opacity=100) makes text look fuzzy so disable it altogether (bug #2661), + //but still update the opacity value so we can get a correct reading if it is read later. + af(node, 1).Enabled = !(opacity == 1); + + if(!af(node)){ + node.style.filter += " progid:" + astr + "(Opacity=" + ov + ")"; + }else{ + af(node, 1).Opacity = ov; + } + + if(node.nodeName.toLowerCase() == "tr"){ + d.query("> td", node).forEach(function(i){ + d._setOpacity(i, opacity); + }); + } + return opacity; + } : + function(node, opacity){ + return node.style.opacity = opacity; + }; + + var _pixelNamesCache = { + left: true, top: true + }; + var _pixelRegExp = /margin|padding|width|height|max|min|offset/; // |border + var _toStyleValue = function(node, type, value){ + type = type.toLowerCase(); // FIXME: should we really be doing string case conversion here? Should we cache it? Need to profile! + if(d.isIE){ + if(value == "auto"){ + if(type == "height"){ return node.offsetHeight; } + if(type == "width"){ return node.offsetWidth; } + } + if(type == "fontweight"){ + switch(value){ + case 700: return "bold"; + case 400: + default: return "normal"; + } + } + } + if(!(type in _pixelNamesCache)){ + _pixelNamesCache[type] = _pixelRegExp.test(type); + } + return _pixelNamesCache[type] ? px(node, value) : value; + } + + var _floatStyle = d.isIE ? "styleFloat" : "cssFloat", + _floatAliases = { "cssFloat": _floatStyle, "styleFloat": _floatStyle, "float": _floatStyle } + ; + + // public API + + dojo.style = function( /*DomNode|String*/ node, + /*String?|Object?*/ style, + /*String?*/ value){ + // summary: + // Accesses styles on a node. If 2 arguments are + // passed, acts as a getter. If 3 arguments are passed, acts + // as a setter. + // description: + // Getting the style value uses the computed style for the node, so the value + // will be a calculated value, not just the immediate node.style value. + // Also when getting values, use specific style names, + // like "borderBottomWidth" instead of "border" since compound values like + // "border" are not necessarily reflected as expected. + // If you want to get node dimensions, use dojo.marginBox() or + // dojo.contentBox(). + // node: + // id or reference to node to get/set style for + // style: + // the style property to set in DOM-accessor format + // ("borderWidth", not "border-width") or an object with key/value + // pairs suitable for setting each property. + // value: + // If passed, sets value on the node for style, handling + // cross-browser concerns. When setting a pixel value, + // be sure to include "px" in the value. For instance, top: "200px". + // Otherwise, in some cases, some browsers will not apply the style. + // example: + // Passing only an ID or node returns the computed style object of + // the node: + // | dojo.style("thinger"); + // example: + // Passing a node and a style property returns the current + // normalized, computed value for that property: + // | dojo.style("thinger", "opacity"); // 1 by default + // + // example: + // Passing a node, a style property, and a value changes the + // current display of the node and returns the new computed value + // | dojo.style("thinger", "opacity", 0.5); // == 0.5 + // + // example: + // Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node: + // | dojo.style("thinger", { + // | "opacity": 0.5, + // | "border": "3px solid black", + // | "height": "300px" + // | }); + // + // example: + // When the CSS style property is hyphenated, the JavaScript property is camelCased. + // font-size becomes fontSize, and so on. + // | dojo.style("thinger",{ + // | fontSize:"14pt", + // | letterSpacing:"1.2em" + // | }); + // + // example: + // dojo.NodeList implements .style() using the same syntax, omitting the "node" parameter, calling + // dojo.style() on every element of the list. See: dojo.query and dojo.NodeList + // | dojo.query(".someClassName").style("visibility","hidden"); + // | // or + // | dojo.query("#baz > div").style({ + // | opacity:0.75, + // | fontSize:"13pt" + // | }); + + var n = d.byId(node), args = arguments.length, op = (style == "opacity"); + style = _floatAliases[style] || style; + if(args == 3){ + return op ? d._setOpacity(n, value) : n.style[style] = value; /*Number*/ + } + if(args == 2 && op){ + return d._getOpacity(n); + } + var s = gcs(n); + if(args == 2 && !d.isString(style)){ + for(var x in style){ + d.style(node, x, style[x]); + } + return s; + } + return (args == 1) ? s : _toStyleValue(n, style, s[style] || n.style[style]); /* CSS2Properties||String||Number */ + } + + // ============================= + // Box Functions + // ============================= + + dojo._getPadExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // Returns object with special values specifically useful for node + // fitting. + // + // * l/t = left/top padding (respectively) + // * w = the total of the left and right padding + // * h = the total of the top and bottom padding + // + // If 'node' has position, l/t forms the origin for child nodes. + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + l = px(n, s.paddingLeft), + t = px(n, s.paddingTop); + return { + l: l, + t: t, + w: l+px(n, s.paddingRight), + h: t+px(n, s.paddingBottom) + }; + } + + dojo._getBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // returns an object with properties useful for noting the border + // dimensions. + // + // * l/t = the sum of left/top border (respectively) + // * w = the sum of the left and right border + // * h = the sum of the top and bottom border + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + ne = "none", + s = computedStyle||gcs(n), + bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0), + bt = (s.borderTopStyle != ne ? px(n, s.borderTopWidth) : 0); + return { + l: bl, + t: bt, + w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0), + h: bt + (s.borderBottomStyle!=ne ? px(n, s.borderBottomWidth) : 0) + }; + } + + dojo._getPadBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // Returns object with properties useful for box fitting with + // regards to padding. + // + // * l/t = the sum of left/top padding and left/top border (respectively) + // * w = the sum of the left and right padding and border + // * h = the sum of the top and bottom padding and border + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + p = d._getPadExtents(n, s), + b = d._getBorderExtents(n, s); + return { + l: p.l + b.l, + t: p.t + b.t, + w: p.w + b.w, + h: p.h + b.h + }; + } + + dojo._getMarginExtents = function(n, computedStyle){ + // summary: + // returns object with properties useful for box fitting with + // regards to box margins (i.e., the outer-box). + // + // * l/t = marginLeft, marginTop, respectively + // * w = total width, margin inclusive + // * h = total height, margin inclusive + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + l = px(n, s.marginLeft), + t = px(n, s.marginTop), + r = px(n, s.marginRight), + b = px(n, s.marginBottom); + if(d.isWebKit && (s.position != "absolute")){ + // FIXME: Safari's version of the computed right margin + // is the space between our right edge and the right edge + // of our offsetParent. + // What we are looking for is the actual margin value as + // determined by CSS. + // Hack solution is to assume left/right margins are the same. + r = l; + } + return { + l: l, + t: t, + w: l+r, + h: t+b + }; + } + + // Box getters work in any box context because offsetWidth/clientWidth + // are invariant wrt box context + // + // They do *not* work for display: inline objects that have padding styles + // because the user agent ignores padding (it's bogus styling in any case) + // + // Be careful with IMGs because they are inline or block depending on + // browser and browser mode. + + // Although it would be easier to read, there are not separate versions of + // _getMarginBox for each browser because: + // 1. the branching is not expensive + // 2. factoring the shared code wastes cycles (function call overhead) + // 3. duplicating the shared code wastes bytes + + dojo._getMarginBox = function(/*DomNode*/node, /*Object*/computedStyle){ + // summary: + // returns an object that encodes the width, height, left and top + // positions of the node's margin box. + var s = computedStyle || gcs(node), me = d._getMarginExtents(node, s); + var l = node.offsetLeft - me.l, t = node.offsetTop - me.t, p = node.parentNode; + if(d.isMoz){ + // Mozilla: + // If offsetParent has a computed overflow != visible, the offsetLeft is decreased + // by the parent's border. + // We don't want to compute the parent's style, so instead we examine node's + // computed left/top which is more stable. + var sl = parseFloat(s.left), st = parseFloat(s.top); + if(!isNaN(sl) && !isNaN(st)){ + l = sl, t = st; + }else{ + // If child's computed left/top are not parseable as a number (e.g. "auto"), we + // have no choice but to examine the parent's computed style. + if(p && p.style){ + var pcs = gcs(p); + if(pcs.overflow != "visible"){ + var be = d._getBorderExtents(p, pcs); + l += be.l, t += be.t; + } + } + } + }else if(d.isOpera || (d.isIE > 7 && !d.isQuirks)){ + // On Opera and IE 8, offsetLeft/Top includes the parent's border + if(p){ + be = d._getBorderExtents(p); + l -= be.l; + t -= be.t; + } + } + return { + l: l, + t: t, + w: node.offsetWidth + me.w, + h: node.offsetHeight + me.h + }; + } + + dojo._getContentBox = function(node, computedStyle){ + // summary: + // Returns an object that encodes the width, height, left and top + // positions of the node's content box, irrespective of the + // current box model. + + // clientWidth/Height are important since the automatically account for scrollbars + // fallback to offsetWidth/Height for special cases (see #3378) + var s = computedStyle || gcs(node), + pe = d._getPadExtents(node, s), + be = d._getBorderExtents(node, s), + w = node.clientWidth, + h + ; + if(!w){ + w = node.offsetWidth, h = node.offsetHeight; + }else{ + h = node.clientHeight, be.w = be.h = 0; + } + // On Opera, offsetLeft includes the parent's border + if(d.isOpera){ pe.l += be.l; pe.t += be.t; }; + return { + l: pe.l, + t: pe.t, + w: w - pe.w - be.w, + h: h - pe.h - be.h + }; + } + + dojo._getBorderBox = function(node, computedStyle){ + var s = computedStyle || gcs(node), + pe = d._getPadExtents(node, s), + cb = d._getContentBox(node, s) + ; + return { + l: cb.l - pe.l, + t: cb.t - pe.t, + w: cb.w + pe.w, + h: cb.h + pe.h + }; + } + + // Box setters depend on box context because interpretation of width/height styles + // vary wrt box context. + // + // The value of dojo.boxModel is used to determine box context. + // dojo.boxModel can be set directly to change behavior. + // + // Beware of display: inline objects that have padding styles + // because the user agent ignores padding (it's a bogus setup anyway) + // + // Be careful with IMGs because they are inline or block depending on + // browser and browser mode. + // + // Elements other than DIV may have special quirks, like built-in + // margins or padding, or values not detectable via computedStyle. + // In particular, margins on TABLE do not seems to appear + // at all in computedStyle on Mozilla. + + dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){ + // summary: + // sets width/height/left/top in the current (native) box-model + // dimentions. Uses the unit passed in u. + // node: DOM Node reference. Id string not supported for performance reasons. + // l: optional. left offset from parent. + // t: optional. top offset from parent. + // w: optional. width in current box model. + // h: optional. width in current box model. + // u: optional. unit measure to use for other measures. Defaults to "px". + u = u || "px"; + var s = node.style; + if(!isNaN(l)){ s.left = l + u; } + if(!isNaN(t)){ s.top = t + u; } + if(w >= 0){ s.width = w + u; } + if(h >= 0){ s.height = h + u; } + } + + dojo._isButtonTag = function(/*DomNode*/node) { + // summary: + // True if the node is BUTTON or INPUT.type="button". + return node.tagName == "BUTTON" + || node.tagName=="INPUT" && node.getAttribute("type").toUpperCase() == "BUTTON"; // boolean + } + + dojo._usesBorderBox = function(/*DomNode*/node){ + // summary: + // True if the node uses border-box layout. + + // We could test the computed style of node to see if a particular box + // has been specified, but there are details and we choose not to bother. + + // TABLE and BUTTON (and INPUT type=button) are always border-box by default. + // If you have assigned a different box to either one via CSS then + // box functions will break. + + var n = node.tagName; + return d.boxModel=="border-box" || n=="TABLE" || d._isButtonTag(node); // boolean + } + + dojo._setContentSize = function(/*DomNode*/node, /*Number*/widthPx, /*Number*/heightPx, /*Object*/computedStyle){ + // summary: + // Sets the size of the node's contents, irrespective of margins, + // padding, or borders. + if(d._usesBorderBox(node)){ + var pb = d._getPadBorderExtents(node, computedStyle); + if(widthPx >= 0){ widthPx += pb.w; } + if(heightPx >= 0){ heightPx += pb.h; } + } + d._setBox(node, NaN, NaN, widthPx, heightPx); + } + + dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, + /*Number?*/widthPx, /*Number?*/heightPx, + /*Object*/computedStyle){ + // summary: + // sets the size of the node's margin box and placement + // (left/top), irrespective of box model. Think of it as a + // passthrough to dojo._setBox that handles box-model vagaries for + // you. + + var s = computedStyle || gcs(node), + // Some elements have special padding, margin, and box-model settings. + // To use box functions you may need to set padding, margin explicitly. + // Controlling box-model is harder, in a pinch you might set dojo.boxModel. + bb = d._usesBorderBox(node), + pb = bb ? _nilExtents : d._getPadBorderExtents(node, s) + ; + if(d.isWebKit){ + // on Safari (3.1.2), button nodes with no explicit size have a default margin + // setting an explicit size eliminates the margin. + // We have to swizzle the width to get correct margin reading. + if(d._isButtonTag(node)){ + var ns = node.style; + if(widthPx >= 0 && !ns.width) { ns.width = "4px"; } + if(heightPx >= 0 && !ns.height) { ns.height = "4px"; } + } + } + var mb = d._getMarginExtents(node, s); + if(widthPx >= 0){ widthPx = Math.max(widthPx - pb.w - mb.w, 0); } + if(heightPx >= 0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); } + d._setBox(node, leftPx, topPx, widthPx, heightPx); + } + + var _nilExtents = { l:0, t:0, w:0, h:0 }; + + // public API + + dojo.marginBox = function(/*DomNode|String*/node, /*Object?*/box){ + // summary: + // Getter/setter for the margin-box of node. + // description: + // Returns an object in the expected format of box (regardless + // if box is passed). The object might look like: + // `{ l: 50, t: 200, w: 300: h: 150 }` + // for a node offset from its parent 50px to the left, 200px from + // the top with a margin width of 300px and a margin-height of + // 150px. + // node: + // id or reference to DOM Node to get/set box for + // box: + // If passed, denotes that dojo.marginBox() should + // update/set the margin box for node. Box is an object in the + // above format. All properties are optional if passed. + var n = d.byId(node), s = gcs(n), b = box; + return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object + } + + dojo.contentBox = function(/*DomNode|String*/node, /*Object?*/box){ + // summary: + // Getter/setter for the content-box of node. + // description: + // Returns an object in the expected format of box (regardless if box is passed). + // The object might look like: + // `{ l: 50, t: 200, w: 300: h: 150 }` + // for a node offset from its parent 50px to the left, 200px from + // the top with a content width of 300px and a content-height of + // 150px. Note that the content box may have a much larger border + // or margin box, depending on the box model currently in use and + // CSS values set/inherited for node. + // node: + // id or reference to DOM Node to get/set box for + // box: + // If passed, denotes that dojo.contentBox() should + // update/set the content box for node. Box is an object in the + // above format. All properties are optional if passed. + var n = d.byId(node), s = gcs(n), b = box; + return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object + } + + // ============================= + // Positioning + // ============================= + + var _sumAncestorProperties = function(node, prop){ + if(!(node = (node||0).parentNode)){return 0} + var val, retVal = 0, _b = d.body(); + while(node && node.style){ + if(gcs(node).position == "fixed"){ + return 0; + } + val = node[prop]; + if(val){ + retVal += val - 0; + // opera and khtml #body & #html has the same values, we only + // need one value + if(node == _b){ break; } + } + node = node.parentNode; + } + return retVal; // integer + } + + dojo._docScroll = function(){ + var + _b = d.body(), + _w = d.global, + de = d.doc.documentElement; + return { + y: (_w.pageYOffset || de.scrollTop || _b.scrollTop || 0), + x: (_w.pageXOffset || d._fixIeBiDiScrollLeft(de.scrollLeft) || _b.scrollLeft || 0) + }; + }; + + dojo._isBodyLtr = function(){ + //FIXME: could check html and body tags directly instead of computed style? need to ignore case, accept empty values + return ("_bodyLtr" in d) ? d._bodyLtr : + d._bodyLtr = gcs(d.body()).direction == "ltr"; // Boolean + } + + dojo._getIeDocumentElementOffset = function(){ + // summary + // The following values in IE contain an offset: + // event.clientX + // event.clientY + // node.getBoundingClientRect().left + // node.getBoundingClientRect().top + // But other position related values do not contain this offset, such as + // node.offsetLeft, node.offsetTop, node.style.left and node.style.top. + // The offset is always (2, 2) in LTR direction. When the body is in RTL + // direction, the offset counts the width of left scroll bar's width. + // This function computes the actual offset. + + //NOTE: assumes we're being called in an IE browser + + var de = d.doc.documentElement; + //FIXME: use this instead? var de = d.compatMode == "BackCompat" ? d.body : d.documentElement; + + if(d.isIE < 7){ + return { x: d._isBodyLtr() || window.parent == window ? + de.clientLeft : de.offsetWidth - de.clientWidth - de.clientLeft, + y: de.clientTop }; // Object + }else if(d.isIE < 8){ + return {x: de.getBoundingClientRect().left, y: de.getBoundingClientRect().top}; + }else{ + return { + x: 0, + y: 0 + }; + } + + }; + + dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ + // In RTL direction, scrollLeft should be a negative value, but IE < 8 + // returns a positive one. All codes using documentElement.scrollLeft + // must call this function to fix this error, otherwise the position + // will offset to right when there is a horizontal scrollbar. + + var dd = d.doc; + if(d.isIE < 8 && !d._isBodyLtr()){ + var de = dd.compatMode == "BackCompat" ? dd.body : dd.documentElement; + return scrollLeft + de.clientWidth - de.scrollWidth; // Integer + } + return scrollLeft; // Integer + } + + dojo._abs = function(/*DomNode*/node, /*Boolean?*/includeScroll){ + // summary: + // Gets the position of the passed element relative to + // the viewport (if includeScroll==false), or relative to the + // document root (if includeScroll==true). + // + // Returns an object of the form: + // { x: 100, y: 300 } + // if includeScroll is passed, the x and y values will include any + // document offsets that may affect the position relative to the + // viewport. + + // FIXME: need to decide in the brave-new-world if we're going to be + // margin-box or border-box. + + // targetBoxType == "border-box" + var db = d.body(), dh = d.body().parentNode, ret; + if(node["getBoundingClientRect"]){ + // IE6+, FF3+, super-modern WebKit, and Opera 9.6+ all take this branch + var client = node.getBoundingClientRect(); + ret = { x: client.left, y: client.top }; + if(d.isFF >= 3){ + // in FF3 you have to subtract the document element margins + var cs = gcs(dh); + ret.x -= px(dh, cs.marginLeft) + px(dh, cs.borderLeftWidth); + ret.y -= px(dh, cs.marginTop) + px(dh, cs.borderTopWidth); + } + if(d.isIE){ + // On IE there's a 2px offset that we need to adjust for, see _getIeDocumentElementOffset() + var offset = d._getIeDocumentElementOffset(); + + // fixes the position in IE, quirks mode + ret.x -= offset.x + (d.isQuirks ? db.clientLeft : 0); + ret.y -= offset.y + (d.isQuirks ? db.clientTop : 0); + } + }else{ + // FF2 and Safari + ret = { + x: 0, + y: 0 + }; + if(node["offsetParent"]){ + ret.x -= _sumAncestorProperties(node, "scrollLeft"); + ret.y -= _sumAncestorProperties(node, "scrollTop"); + + var curnode = node; + do{ + var n = curnode.offsetLeft, + t = curnode.offsetTop; + ret.x += isNaN(n) ? 0 : n; + ret.y += isNaN(t) ? 0 : t; + + cs = gcs(curnode); + if(curnode != node){ + if(d.isFF){ + // tried left+right with differently sized left/right borders + // it really is 2xleft border in FF, not left+right, even in RTL! + ret.x += 2 * px(curnode,cs.borderLeftWidth); + ret.y += 2 * px(curnode,cs.borderTopWidth); + }else{ + ret.x += px(curnode, cs.borderLeftWidth); + ret.y += px(curnode, cs.borderTopWidth); + } + } + // static children in a static div in FF2 are affected by the div's border as well + // but offsetParent will skip this div! + if(d.isFF && cs.position=="static"){ + var parent=curnode.parentNode; + while(parent!=curnode.offsetParent){ + var pcs=gcs(parent); + if(pcs.position=="static"){ + ret.x += px(curnode,pcs.borderLeftWidth); + ret.y += px(curnode,pcs.borderTopWidth); + } + parent=parent.parentNode; + } + } + curnode = curnode.offsetParent; + }while((curnode != dh) && curnode); + }else if(node.x && node.y){ + ret.x += isNaN(node.x) ? 0 : node.x; + ret.y += isNaN(node.y) ? 0 : node.y; + } + } + // account for document scrolling + // if offsetParent is used, ret value already includes scroll position + // so we may have to actually remove that value if !includeScroll + if(includeScroll){ + var scroll = d._docScroll(); + ret.x += scroll.x; + ret.y += scroll.y; + } + + return ret; // Object + } + + // FIXME: need a setter for coords or a moveTo!! + dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){ + // summary: + // Returns an object that measures margin box width/height and + // absolute positioning data from dojo._abs(). + // + // description: + // Returns an object that measures margin box width/height and + // absolute positioning data from dojo._abs(). + // Return value will be in the form: + // `{ l: 50, t: 200, w: 300: h: 150, x: 100, y: 300 }` + // Does not act as a setter. If includeScroll is passed, the x and + // y params are affected as one would expect in dojo._abs(). + var n = d.byId(node), s = gcs(n), mb = d._getMarginBox(n, s); + var abs = d._abs(n, includeScroll); + mb.x = abs.x; + mb.y = abs.y; + return mb; + } + + // ============================= + // Element attribute Functions + // ============================= + + var ieLT8 = d.isIE < 8; + + var _fixAttrName = function(/*String*/name){ + switch(name.toLowerCase()){ + // Internet Explorer will only set or remove tabindex/readonly + // if it is spelled "tabIndex"/"readOnly" + case "tabindex": + return ieLT8 ? "tabIndex" : "tabindex"; + case "readonly": + return "readOnly"; + case "class": + return "className"; + case "for": case "htmlfor": + // to pick up for attrib set in markup via getAttribute() IE<8 uses "htmlFor" and others use "for" + // get/setAttribute works in all as long use same value for both get/set + return ieLT8 ? "htmlFor" : "for"; + default: + return name; + } + } + + // non-deprecated HTML4 attributes with default values + // http://www.w3.org/TR/html401/index/attributes.html + // FF and Safari will return the default values if you + // access the attributes via a property but not + // via getAttribute() + var _attrProps = { + colspan: "colSpan", + enctype: "enctype", + frameborder: "frameborder", + method: "method", + rowspan: "rowSpan", + scrolling: "scrolling", + shape: "shape", + span: "span", + type: "type", + valuetype: "valueType", + // the following attributes don't have the default but should be treated like properties + classname: "className", + innerhtml: "innerHTML" + } + + dojo.hasAttr = function(/*DomNode|String*/node, /*String*/name){ + // summary: + // Returns true if the requested attribute is specified on the + // given element, and false otherwise. + // node: + // id or reference to the element to check + // name: + // the name of the attribute + // returns: + // true if the requested attribute is specified on the + // given element, and false otherwise + node = d.byId(node); + var fixName = _fixAttrName(name); + fixName = fixName == "htmlFor" ? "for" : fixName; //IE<8 uses htmlFor except in this case + var attr = node.getAttributeNode && node.getAttributeNode(fixName); + return attr ? attr.specified : false; // Boolean + } + + var _evtHdlrMap = {}, _ctr = 0, + _attrId = dojo._scopeName + "attrid", + // the next dictionary lists elements with read-only innerHTML on IE + _roInnerHtml = {col: 1, colgroup: 1, + // frameset: 1, head: 1, html: 1, style: 1, + table: 1, tbody: 1, tfoot: 1, thead: 1, tr: 1, title: 1}; + + dojo.attr = function(/*DomNode|String*/node, /*String|Object*/name, /*String?*/value){ + // summary: + // Gets or sets an attribute on an HTML element. + // description: + // Handles normalized getting and setting of attributes on DOM + // Nodes. If 2 arguments are passed, and a the second argumnt is a + // string, acts as a getter. + // + // If a third argument is passed, or if the second argumnt is a + // map of attributes, acts as a setter. + // + // When passing functions as values, note that they will not be + // directly assigned to slots on the node, but rather the default + // behavior will be removed and the new behavior will be added + // using `dojo.connect()`, meaning that event handler properties + // will be normalized and that some caveats with regards to + // non-standard behaviors for onsubmit apply. Namely that you + // should cancel form submission using `dojo.stopEvent()` on the + // passed event object instead of returning a boolean value from + // the handler itself. + // node: + // id or reference to the element to get or set the attribute on + // name: + // the name of the attribute to get or set. + // value: + // The value to set for the attribute + // returns: + // when used as a getter, the value of the requested attribute + // or null if that attribute does not have a specified or + // default value; + // + // when used as a setter, undefined + // + // example: + // | // get the current value of the "foo" attribute on a node + // | dojo.attr(dojo.byId("nodeId"), "foo"); + // | // or we can just pass the id: + // | dojo.attr("nodeId", "foo"); + // + // example: + // | // use attr() to set the tab index + // | dojo.attr("nodeId", "tabindex", 3); + // | + // + // example: + // Set multiple values at once, including event handlers: + // | dojo.attr("formId", { + // | "foo": "bar", + // | "tabindex": -1, + // | "method": "POST", + // | "onsubmit": function(e){ + // | // stop submitting the form. Note that the IE behavior + // | // of returning true or false will have no effect here + // | // since our handler is connect()ed to the built-in + // | // onsubmit behavior and so we need to use + // | // dojo.stopEvent() to ensure that the submission + // | // doesn't proceed. + // | dojo.stopEvent(e); + // | + // | // submit the form with Ajax + // | dojo.xhrPost({ form: "formId" }); + // | } + // | }); + // + // example: + // Style is s special case: Only set with an object hash of styles + // | dojo.attr("someNode",{ + // | id:"bar", + // | style:{ + // | width:"200px", height:"100px", color:"#000" + // | } + // | }); + // + // example: + // Again, only set style as an object hash of styles: + // | var obj = { color:"#fff", backgroundColor:"#000" }; + // | dojo.attr("someNode", "style", obj); + // | + // | // though shorter to use `dojo.style` in this case: + // | dojo.style("someNode", obj); + + node = d.byId(node); + var args = arguments.length; + if(args == 2 && !d.isString(name)){ + // the object form of setter: the 2nd argument is a dictionary + for(var x in name){ d.attr(node, x, name[x]); } + // FIXME: return the node in this case? could be useful. + return; + } + name = _fixAttrName(name); + if(args == 3){ // setter + if(d.isFunction(value)){ + // clobber if we can + var attrId = d.attr(node, _attrId); + if(!attrId){ + attrId = _ctr++; + d.attr(node, _attrId, attrId); + } + if(!_evtHdlrMap[attrId]){ + _evtHdlrMap[attrId] = {}; + } + var h = _evtHdlrMap[attrId][name]; + if(h){ + d.disconnect(h); + }else{ + try{ + delete node[name]; + }catch(e){} + } + + // ensure that event objects are normalized, etc. + _evtHdlrMap[attrId][name] = d.connect(node, name, value); + + }else if(typeof value == "boolean"){ // e.g. onsubmit, disabled + node[name] = value; + }else if(name === "style" && !d.isString(value)){ + // when the name is "style" and value is an object, pass along + d.style(node, value); + }else if(name == "className"){ + node.className = value; + }else if(name === "innerHTML"){ + if(d.isIE && node.tagName.toLowerCase() in _roInnerHtml){ + d.empty(node); + node.appendChild(d._toDom(value, node.ownerDocument)); + }else{ + node[name] = value; + } + }else{ + node.setAttribute(name, value); + } + }else{ + // getter + // should we access this attribute via a property or + // via getAttribute()? + var prop = _attrProps[name.toLowerCase()]; + if(prop){ + return node[prop]; + } + var attrValue = node[name]; + return (typeof attrValue == 'boolean' || typeof attrValue == 'function') ? attrValue + : (d.hasAttr(node, name) ? node.getAttribute(name) : null); + } + } + + dojo.removeAttr = function(/*DomNode|String*/node, /*String*/name){ + // summary: + // Removes an attribute from an HTML element. + // node: + // id or reference to the element to remove the attribute from + // name: + // the name of the attribute to remove + d.byId(node).removeAttribute(_fixAttrName(name)); + } + + dojo.create = function(tag, attrs, refNode, pos){ + // summary: Create an element, allowing for optional attribute decoration + // and placement. + // + // description: + // A DOM Element creation function. A shorthand method for creating a node or + // a fragment, and allowing for a convenient optional attribute setting step, + // as well as an optional DOM placement reference. + //| + // Attributes are set by passing the optional object through `dojo.attr`. + // See `dojo.attr` for noted caveats and nuances, and API if applicable. + //| + // Placement is done via `dojo.place`, assuming the new node to be the action + // node, passing along the optional reference node and position. + // + // tag: String|DomNode + // A string of the element to create (eg: "div", "a", "p", "li", "script", "br"), + // or an existing DOM node to process. + // + // attrs: Object + // An object-hash of attributes to set on the newly created node. + // Can be null, if you don't want to set any attributes/styles. + // See: `dojo.attr` for a description of available attributes. + // + // refNode: String?|DomNode? + // Optional reference node. Used by `dojo.place` to place the newly created + // node somewhere in the dom relative to refNode. Can be a DomNode reference + // or String ID of a node. + // + // pos: String? + // Optional positional reference. Defaults to "last" by way of `dojo.place`, + // though can be set to "first","after","before","last", "replace" or "only" + // to further control the placement of the new node relative to the refNode. + // 'refNode' is required if a 'pos' is specified. + // + // returns: DomNode + // + // example: + // Create a DIV: + // | var n = dojo.create("div"); + // + // example: + // Create a DIV with content: + // | var n = dojo.create("div", { innerHTML:"

hi

" }); + // + // example: + // Place a new DIV in the BODY, with no attributes set + // | var n = dojo.create("div", null, dojo.body()); + // + // example: + // Create an UL, and populate it with LI's. Place the list as the first-child of a + // node with id="someId": + // | var ul = dojo.create("ul", null, "someId", "first"); + // | var items = ["one", "two", "three", "four"]; + // | dojo.forEach(items, function(data){ + // | dojo.create("li", { innerHTML: data }, ul); + // | }); + // + // example: + // Create an anchor, with an href. Place in BODY: + // | dojo.create("a", { href:"foo.html", title:"Goto FOO!" }, dojo.body()); + // + // example: + // Create a `dojo.NodeList` from a new element (for syntatic sugar): + // | dojo.query(dojo.create('div')) + // | .addClass("newDiv") + // | .onclick(function(e){ }) + // | .place("#someNode"); // redundant, but cleaner. + + var doc = d.doc; + if(refNode){ + refNode = d.byId(refNode); + doc = refNode.ownerDocument; + } + if(d.isString(tag)){ + tag = doc.createElement(tag); + } + if(attrs){ d.attr(tag, attrs); } + if(refNode){ d.place(tag, refNode, pos); } + return tag; // DomNode + } + + /*===== + dojo.empty = function(node){ + // summary: + // safely removes all children of the node. + // node: DOMNode|String + // a reference to a DOM node or an id. + // example: + // Destroy node's children byId: + // | dojo.empty("someId"); + // + // example: + // Destroy all nodes' children in a list by reference: + // | dojo.query(".someNode").forEach(dojo.empty); + } + =====*/ + + d.empty = + d.isIE ? function(node){ + node = d.byId(node); + for(var c; c = node.lastChild;){ // intentional assignment + d.destroy(c); + } + } : + function(node){ + d.byId(node).innerHTML = ""; + }; + + /*===== + dojo._toDom = function(frag, doc){ + // summary: + // instantiates an HTML fragment returning the corresponding DOM. + // frag: String + // the HTML fragment + // doc: DocumentNode? + // optional document to use when creating DOM nodes, defaults to + // dojo.doc if not specified. + // returns: DocumentFragment + // + // example: + // Create a table row: + // | var tr = dojo._toDom("First!"); + } + =====*/ + + // support stuff for dojo._toDom + var tagWrap = { + option: ["select"], + tbody: ["table"], + thead: ["table"], + tfoot: ["table"], + tr: ["table", "tbody"], + td: ["table", "tbody", "tr"], + th: ["table", "thead", "tr"], + legend: ["fieldset"], + caption: ["table"], + colgroup: ["table"], + col: ["table", "colgroup"], + li: ["ul"] + }, + reTag = /<\s*([\w\:]+)/, + masterNode = {}, masterNum = 0, + masterName = "__" + d._scopeName + "ToDomId"; + + // generate start/end tag strings to use + // for the injection for each special tag wrap case. + for(var param in tagWrap){ + var tw = tagWrap[param]; + tw.pre = param == "option" ? ' + // | + // | + // | + // | + // + // yields this object structure as the result of a call to + // formToObject(): + // + // | { + // | blah: "blah", + // | multi: [ + // | "thud", + // | "thonk" + // | ] + // | }; + + var ret = {}; + var exclude = "file|submit|image|reset|button|"; + _d.forEach(dojo.byId(formNode).elements, function(item){ + var _in = item.name; + var type = (item.type||"").toLowerCase(); + if(_in && type && exclude.indexOf(type) == -1 && !item.disabled){ + if(type == "radio" || type == "checkbox"){ + if(item.checked){ setValue(ret, _in, item.value); } + }else if(item.multiple){ + ret[_in] = []; + _d.query("option", item).forEach(function(opt){ + if(opt.selected){ + setValue(ret, _in, opt.value); + } + }); + }else{ + setValue(ret, _in, item.value); + if(type == "image"){ + ret[_in+".x"] = ret[_in+".y"] = ret[_in].x = ret[_in].y = 0; + } + } + } + }); + return ret; // Object + } + + dojo.objectToQuery = function(/*Object*/ map){ + // summary: + // takes a name/value mapping object and returns a string representing + // a URL-encoded version of that object. + // example: + // this object: + // + // | { + // | blah: "blah", + // | multi: [ + // | "thud", + // | "thonk" + // | ] + // | }; + // + // yields the following query string: + // + // | "blah=blah&multi=thud&multi=thonk" + + // FIXME: need to implement encodeAscii!! + var enc = encodeURIComponent; + var pairs = []; + var backstop = {}; + for(var name in map){ + var value = map[name]; + if(value != backstop[name]){ + var assign = enc(name) + "="; + if(_d.isArray(value)){ + for(var i=0; i < value.length; i++){ + pairs.push(assign + enc(value[i])); + } + }else{ + pairs.push(assign + enc(value)); + } + } + } + return pairs.join("&"); // String + } + + dojo.formToQuery = function(/*DOMNode||String*/ formNode){ + // summary: + // Returns a URL-encoded string representing the form passed as either a + // node or string ID identifying the form to serialize + return _d.objectToQuery(_d.formToObject(formNode)); // String + } + + dojo.formToJson = function(/*DOMNode||String*/ formNode, /*Boolean?*/prettyPrint){ + // summary: + // return a serialized JSON string from a form node or string + // ID identifying the form to serialize + return _d.toJson(_d.formToObject(formNode), prettyPrint); // String + } + + dojo.queryToObject = function(/*String*/ str){ + // summary: + // returns an object representing a de-serialized query section of a + // URL. Query keys with multiple values are returned in an array. + // description: + // This string: + // + // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" + // + // results in this object structure: + // + // | { + // | foo: [ "bar", "baz" ], + // | thinger: " spaces =blah", + // | zonk: "blarg" + // | } + // + // Note that spaces and other urlencoded entities are correctly + // handled. + + // FIXME: should we grab the URL string if we're not passed one? + var ret = {}; + var qp = str.split("&"); + var dec = decodeURIComponent; + _d.forEach(qp, function(item){ + if(item.length){ + var parts = item.split("="); + var name = dec(parts.shift()); + var val = dec(parts.join("=")); + if(_d.isString(ret[name])){ + ret[name] = [ret[name]]; + } + if(_d.isArray(ret[name])){ + ret[name].push(val); + }else{ + ret[name] = val; + } + } + }); + return ret; // Object + } + + /* + from refactor.txt: + + all bind() replacement APIs take the following argument structure: + + { + url: "blah.html", + + // all below are optional, but must be supported in some form by + // every IO API + timeout: 1000, // milliseconds + handleAs: "text", // replaces the always-wrong "mimetype" + content: { + key: "value" + }, + + // browser-specific, MAY be unsupported + sync: true, // defaults to false + form: dojo.byId("someForm") + } + */ + + // need to block async callbacks from snatching this thread as the result + // of an async callback might call another sync XHR, this hangs khtml forever + // must checked by watchInFlight() + + dojo._blockAsync = false; + + dojo._contentHandlers = { + text: function(xhr){ return xhr.responseText; }, + json: function(xhr){ + return _d.fromJson(xhr.responseText || null); + }, + "json-comment-filtered": function(xhr){ + // NOTE: the json-comment-filtered option was implemented to prevent + // "JavaScript Hijacking", but it is less secure than standard JSON. Use + // standard JSON instead. JSON prefixing can be used to subvert hijacking. + if(!dojo.config.useCommentedJson){ + console.warn("Consider using the standard mimetype:application/json." + + " json-commenting can introduce security issues. To" + + " decrease the chances of hijacking, use the standard the 'json' handler and" + + " prefix your json with: {}&&\n" + + "Use djConfig.useCommentedJson=true to turn off this message."); + } + + var value = xhr.responseText; + var cStartIdx = value.indexOf("\/*"); + var cEndIdx = value.lastIndexOf("*\/"); + if(cStartIdx == -1 || cEndIdx == -1){ + throw new Error("JSON was not comment filtered"); + } + return _d.fromJson(value.substring(cStartIdx+2, cEndIdx)); + }, + javascript: function(xhr){ + // FIXME: try Moz and IE specific eval variants? + return _d.eval(xhr.responseText); + }, + xml: function(xhr){ + var result = xhr.responseXML; + if(_d.isIE && (!result || !result.documentElement)){ + var ms = function(n){ return "MSXML" + n + ".DOMDocument"; } + var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)]; + _d.some(dp, function(p){ + try{ + var dom = new ActiveXObject(p); + dom.async = false; + dom.loadXML(xhr.responseText); + result = dom; + }catch(e){ return false; } + return true; + }); + } + return result; // DOMDocument + } + }; + + dojo._contentHandlers["json-comment-optional"] = function(xhr){ + var handlers = _d._contentHandlers; + if(xhr.responseText && xhr.responseText.indexOf("\/*") != -1){ + return handlers["json-comment-filtered"](xhr); + }else{ + return handlers["json"](xhr); + } + }; + + /*===== + dojo.__IoArgs = function(){ + // url: String + // URL to server endpoint. + // content: Object? + // Contains properties with string values. These + // properties will be serialized as name1=value2 and + // passed in the request. + // timeout: Integer? + // Milliseconds to wait for the response. If this time + // passes, the then error callbacks are called. + // form: DOMNode? + // DOM node for a form. Used to extract the form values + // and send to the server. + // preventCache: Boolean? + // Default is false. If true, then a + // "dojo.preventCache" parameter is sent in the request + // with a value that changes with each request + // (timestamp). Useful only with GET-type requests. + // handleAs: String? + // Acceptable values depend on the type of IO + // transport (see specific IO calls for more information). + // load: Function? + // function(response, ioArgs){} response is of type Object, ioArgs + // is of type dojo.__IoCallbackArgs. This function will be + // called on a successful HTTP response code. + // error: Function? + // function(response, ioArgs){} response is of type Object, ioArgs + // is of type dojo.__IoCallbackArgs. This function will + // be called when the request fails due to a network or server error, the url + // is invalid, etc. It will also be called if the load or handle callback throws an + // exception, unless djConfig.debugAtAllCosts is true. This allows deployed applications + // to continue to run even when a logic error happens in the callback, while making + // it easier to troubleshoot while in debug mode. + // handle: Function? + // function(response, ioArgs){} response is of type Object, ioArgs + // is of type dojo.__IoCallbackArgs. This function will + // be called at the end of every request, whether or not an error occurs. + this.url = url; + this.content = content; + this.timeout = timeout; + this.form = form; + this.preventCache = preventCache; + this.handleAs = handleAs; + this.load = load; + this.error = error; + this.handle = handle; + } + =====*/ + + /*===== + dojo.__IoCallbackArgs = function(args, xhr, url, query, handleAs, id, canDelete, json){ + // args: Object + // the original object argument to the IO call. + // xhr: XMLHttpRequest + // For XMLHttpRequest calls only, the + // XMLHttpRequest object that was used for the + // request. + // url: String + // The final URL used for the call. Many times it + // will be different than the original args.url + // value. + // query: String + // For non-GET requests, the + // name1=value1&name2=value2 parameters sent up in + // the request. + // handleAs: String + // The final indicator on how the response will be + // handled. + // id: String + // For dojo.io.script calls only, the internal + // script ID used for the request. + // canDelete: Boolean + // For dojo.io.script calls only, indicates + // whether the script tag that represents the + // request can be deleted after callbacks have + // been called. Used internally to know when + // cleanup can happen on JSONP-type requests. + // json: Object + // For dojo.io.script calls only: holds the JSON + // response for JSONP-type requests. Used + // internally to hold on to the JSON responses. + // You should not need to access it directly -- + // the same object should be passed to the success + // callbacks directly. + this.args = args; + this.xhr = xhr; + this.url = url; + this.query = query; + this.handleAs = handleAs; + this.id = id; + this.canDelete = canDelete; + this.json = json; + } + =====*/ + + dojo._ioSetArgs = function(/*dojo.__IoArgs*/args, + /*Function*/canceller, + /*Function*/okHandler, + /*Function*/errHandler){ + // summary: + // sets up the Deferred and ioArgs property on the Deferred so it + // can be used in an io call. + // args: + // The args object passed into the public io call. Recognized properties on + // the args object are: + // canceller: + // The canceller function used for the Deferred object. The function + // will receive one argument, the Deferred object that is related to the + // canceller. + // okHandler: + // The first OK callback to be registered with Deferred. It has the opportunity + // to transform the OK response. It will receive one argument -- the Deferred + // object returned from this function. + // errHandler: + // The first error callback to be registered with Deferred. It has the opportunity + // to do cleanup on an error. It will receive two arguments: error (the + // Error object) and dfd, the Deferred object returned from this function. + + var ioArgs = {args: args, url: args.url}; + + //Get values from form if requestd. + var formObject = null; + if(args.form){ + var form = _d.byId(args.form); + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //so use it for all. See #2844 + var actnNode = form.getAttributeNode("action"); + ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); + formObject = _d.formToObject(form); + } + + // set up the query params + var miArgs = [{}]; + + if(formObject){ + // potentially over-ride url-provided params w/ form values + miArgs.push(formObject); + } + if(args.content){ + // stuff in content over-rides what's set by form + miArgs.push(args.content); + } + if(args.preventCache){ + miArgs.push({"dojo.preventCache": new Date().valueOf()}); + } + ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs)); + + // .. and the real work of getting the deferred in order, etc. + ioArgs.handleAs = args.handleAs || "text"; + var d = new _d.Deferred(canceller); + d.addCallbacks(okHandler, function(error){ + return errHandler(error, d); + }); + + //Support specifying load, error and handle callback functions from the args. + //For those callbacks, the "this" object will be the args object. + //The callbacks will get the deferred result value as the + //first argument and the ioArgs object as the second argument. + var ld = args.load; + if(ld && _d.isFunction(ld)){ + d.addCallback(function(value){ + return ld.call(args, value, ioArgs); + }); + } + var err = args.error; + if(err && _d.isFunction(err)){ + d.addErrback(function(value){ + return err.call(args, value, ioArgs); + }); + } + var handle = args.handle; + if(handle && _d.isFunction(handle)){ + d.addBoth(function(value){ + return handle.call(args, value, ioArgs); + }); + } + + d.ioArgs = ioArgs; + + // FIXME: need to wire up the xhr object's abort method to something + // analagous in the Deferred + return d; + } + + var _deferredCancel = function(/*Deferred*/dfd){ + //summary: canceller function for dojo._ioSetArgs call. + + dfd.canceled = true; + var xhr = dfd.ioArgs.xhr; + var _at = typeof xhr.abort; + if(_at == "function" || _at == "object" || _at == "unknown"){ + xhr.abort(); + } + var err = dfd.ioArgs.error; + if(!err){ + err = new Error("xhr cancelled"); + err.dojoType="cancel"; + } + return err; + } + var _deferredOk = function(/*Deferred*/dfd){ + //summary: okHandler function for dojo._ioSetArgs call. + + var ret = _d._contentHandlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr); + return ret === undefined ? null : ret; + } + var _deferError = function(/*Error*/error, /*Deferred*/dfd){ + //summary: errHandler function for dojo._ioSetArgs call. + + console.error(error); + return error; + } + + // avoid setting a timer per request. It degrades performance on IE + // something fierece if we don't use unified loops. + var _inFlightIntvl = null; + var _inFlight = []; + var _watchInFlight = function(){ + //summary: + // internal method that checks each inflight XMLHttpRequest to see + // if it has completed or if the timeout situation applies. + + var now = (new Date()).getTime(); + // make sure sync calls stay thread safe, if this callback is called + // during a sync call and this results in another sync call before the + // first sync call ends the browser hangs + if(!_d._blockAsync){ + // we need manual loop because we often modify _inFlight (and therefore 'i') while iterating + // note: the second clause is an assigment on purpose, lint may complain + for(var i = 0, tif; i < _inFlight.length && (tif = _inFlight[i]); i++){ + var dfd = tif.dfd; + var func = function(){ + if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ + _inFlight.splice(i--, 1); + }else if(tif.ioCheck(dfd)){ + _inFlight.splice(i--, 1); + tif.resHandle(dfd); + }else if(dfd.startTime){ + //did we timeout? + if(dfd.startTime + (dfd.ioArgs.args.timeout || 0) < now){ + _inFlight.splice(i--, 1); + var err = new Error("timeout exceeded"); + err.dojoType = "timeout"; + dfd.errback(err); + //Cancel the request so the io module can do appropriate cleanup. + dfd.cancel(); + } + } + }; + if(dojo.config.debugAtAllCosts){ + func.call(this); + }else{ + try{ + func.call(this); + }catch(e){ + dfd.errback(e); + } + } + } + } + + if(!_inFlight.length){ + clearInterval(_inFlightIntvl); + _inFlightIntvl = null; + return; + } + + } + + dojo._ioCancelAll = function(){ + //summary: Cancels all pending IO requests, regardless of IO type + //(xhr, script, iframe). + try{ + _d.forEach(_inFlight, function(i){ + try{ + i.dfd.cancel(); + }catch(e){/*squelch*/} + }); + }catch(e){/*squelch*/} + } + + //Automatically call cancel all io calls on unload + //in IE for trac issue #2357. + if(_d.isIE){ + _d.addOnWindowUnload(_d._ioCancelAll); + } + + _d._ioWatch = function(/*Deferred*/dfd, + /*Function*/validCheck, + /*Function*/ioCheck, + /*Function*/resHandle){ + //summary: watches the io request represented by dfd to see if it completes. + //dfd: + // The Deferred object to watch. + //validCheck: + // Function used to check if the IO request is still valid. Gets the dfd + // object as its only argument. + //ioCheck: + // Function used to check if basic IO call worked. Gets the dfd + // object as its only argument. + //resHandle: + // Function used to process response. Gets the dfd + // object as its only argument. + var args = dfd.ioArgs.args; + if(args.timeout){ + dfd.startTime = (new Date()).getTime(); + } + _inFlight.push({dfd: dfd, validCheck: validCheck, ioCheck: ioCheck, resHandle: resHandle}); + if(!_inFlightIntvl){ + _inFlightIntvl = setInterval(_watchInFlight, 50); + } + // handle sync requests + //A weakness: async calls in flight + //could have their handlers called as part of the + //_watchInFlight call, before the sync's callbacks + // are called. + if(args.sync){ + _watchInFlight(); + } + } + + var _defaultContentType = "application/x-www-form-urlencoded"; + + var _validCheck = function(/*Deferred*/dfd){ + return dfd.ioArgs.xhr.readyState; //boolean + } + var _ioCheck = function(/*Deferred*/dfd){ + return 4 == dfd.ioArgs.xhr.readyState; //boolean + } + var _resHandle = function(/*Deferred*/dfd){ + var xhr = dfd.ioArgs.xhr; + if(_d._isDocumentOk(xhr)){ + dfd.callback(dfd); + }else{ + var err = new Error("Unable to load " + dfd.ioArgs.url + " status:" + xhr.status); + err.status = xhr.status; + err.responseText = xhr.responseText; + dfd.errback(err); + } + } + + dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){ + //summary: Adds query params discovered by the io deferred construction to the URL. + //Only use this for operations which are fundamentally GET-type operations. + if(ioArgs.query.length){ + ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; + ioArgs.query = null; + } + } + + /*===== + dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, { + constructor: function(){ + // summary: + // In addition to the properties listed for the dojo._IoArgs type, + // the following properties are allowed for dojo.xhr* methods. + // handleAs: String? + // Acceptable values are: text (default), json, json-comment-optional, + // json-comment-filtered, javascript, xml + // sync: Boolean? + // false is default. Indicates whether the request should + // be a synchronous (blocking) request. + // headers: Object? + // Additional HTTP headers to send in the request. + this.handleAs = handleAs; + this.sync = sync; + this.headers = headers; + } + }); + =====*/ + + dojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){ + // summary: + // Sends an HTTP request with the given method. + // description: + // Sends an HTTP request with the given method. + // See also dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts + // for those HTTP methods. There are also methods for "raw" PUT and POST methods + // via dojo.rawXhrPut() and dojo.rawXhrPost() respectively. + // method: + // HTTP method to be used, such as GET, POST, PUT, DELETE. Should be uppercase. + // hasBody: + // If the request has an HTTP body, then pass true for hasBody. + + //Make the Deferred object for this xhr request. + var dfd = _d._ioSetArgs(args, _deferredCancel, _deferredOk, _deferError); + + //Pass the args to _xhrObj, to allow xhr iframe proxy interceptions. + dfd.ioArgs.xhr = _d._xhrObj(dfd.ioArgs.args); + + if(hasBody){ + if("postData" in args){ + dfd.ioArgs.query = args.postData; + }else if("putData" in args){ + dfd.ioArgs.query = args.putData; + } + }else{ + _d._ioAddQueryToUrl(dfd.ioArgs); + } + + // IE 6 is a steaming pile. It won't let you call apply() on the native function (xhr.open). + // workaround for IE6's apply() "issues" + var ioArgs = dfd.ioArgs; + var xhr = ioArgs.xhr; + xhr.open(method, ioArgs.url, args.sync !== true, args.user || undefined, args.password || undefined); + if(args.headers){ + for(var hdr in args.headers){ + if(hdr.toLowerCase() === "content-type" && !args.contentType){ + args.contentType = args.headers[hdr]; + }else{ + xhr.setRequestHeader(hdr, args.headers[hdr]); + } + } + } + // FIXME: is this appropriate for all content types? + xhr.setRequestHeader("Content-Type", args.contentType || _defaultContentType); + if(!args.headers || !args.headers["X-Requested-With"]){ + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + } + // FIXME: set other headers here! + if(dojo.config.debugAtAllCosts){ + xhr.send(ioArgs.query); + }else{ + try{ + xhr.send(ioArgs.query); + }catch(e){ + dfd.ioArgs.error = e; + dfd.cancel(); + } + } + _d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle); + xhr = null; + return dfd; // dojo.Deferred + } + + dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP GET request to the server. + return _d.xhr("GET", args); // dojo.Deferred + } + + dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP POST request to the server. In addtion to the properties + // listed for the dojo.__XhrArgs type, the following property is allowed: + // postData: + // String. Send raw data in the body of the POST request. + return _d.xhr("POST", args, true); // dojo.Deferred + } + + dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP PUT request to the server. In addtion to the properties + // listed for the dojo.__XhrArgs type, the following property is allowed: + // putData: + // String. Send raw data in the body of the PUT request. + return _d.xhr("PUT", args, true); // dojo.Deferred + } + + dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP DELETE request to the server. + return _d.xhr("DELETE", args); //dojo.Deferred + } + + /* + dojo.wrapForm = function(formNode){ + //summary: + // A replacement for FormBind, but not implemented yet. + + // FIXME: need to think harder about what extensions to this we might + // want. What should we allow folks to do w/ this? What events to + // set/send? + throw new Error("dojo.wrapForm not yet implemented"); + } + */ +})(); + +} + +if(!dojo._hasResource["dojo._base.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.fx"] = true; +dojo.provide("dojo._base.fx"); + +/* + Animation losely package based on Dan Pupius' work, contributed under CLA: + http://pupius.co.uk/js/Toolkit.Drawing.js +*/ +(function(){ + + var d = dojo; + var _mixin = d.mixin; + + dojo._Line = function(/*int*/ start, /*int*/ end){ + // summary: + // dojo._Line is the object used to generate values from a start value + // to an end value + // start: int + // Beginning value for range + // end: int + // Ending value for range + this.start = start; + this.end = end; + } + dojo._Line.prototype.getValue = function(/*float*/ n){ + // summary: Returns the point on the line + // n: a floating point number greater than 0 and less than 1 + return ((this.end - this.start) * n) + this.start; // Decimal + } + + d.declare("dojo._Animation", null, { + // summary + // A generic animation class that fires callbacks into its handlers + // object at various states. Nearly all dojo animation functions + // return an instance of this method, usually without calling the + // .play() method beforehand. Therefore, you will likely need to + // call .play() on instances of dojo._Animation when one is + // returned. + constructor: function(/*Object*/ args){ + _mixin(this, args); + if(d.isArray(this.curve)){ + /* curve: Array + pId: a */ + this.curve = new d._Line(this.curve[0], this.curve[1]); + } + }, + + // duration: Integer + // The time in milliseonds the animation will take to run + duration: 350, + + /*===== + // curve: dojo._Line||Array + // A two element array of start and end values, or a dojo._Line instance to be + // used in the Animation. + curve: null, + + // easing: Function + // A Function to adjust the acceleration (or deceleration) of the progress + // across a dojo._Line + easing: null, + =====*/ + + // repeat: Integer + // The number of times to loop the animation + repeat: 0, + + // rate: Integer + // the time in milliseconds to wait before advancing to next frame + // (used as a fps timer: rate/1000 = fps) + rate: 10 /* 100 fps */, + + /*===== + // delay: Integer + // The time in milliseconds to wait before starting animation after it has been .play()'ed + delay: null, + + // events + // + // beforeBegin: Event + // Synthetic event fired before a dojo._Animation begins playing (synchronous) + beforeBegin: null, + + // onBegin: Event + // Synthetic event fired as a dojo._Animation begins playing (useful?) + onBegin: null, + + // onAnimate: Event + // Synthetic event fired at each interval of a dojo._Animation + onAnimate: null, + + // onEnd: Event + // Synthetic event fired after the final frame of a dojo._Animation + onEnd: null, + + // onPlay: Event + // Synthetic event fired any time a dojo._Animation is play()'ed + onPlay: null, + + // onPause: Event + // Synthetic event fired when a dojo._Animation is paused + onPause: null, + + // onStop: Event + // Synthetic event fires when a dojo._Animation is stopped + onStop: null, + + =====*/ + + _percent: 0, + _startRepeatCount: 0, + + _fire: function(/*Event*/ evt, /*Array?*/ args){ + // summary: + // Convenience function. Fire event "evt" and pass it the + // arguments specified in "args". + // evt: + // The event to fire. + // args: + // The arguments to pass to the event. + if(this[evt]){ + if(dojo.config.debugAtAllCosts){ + this[evt].apply(this, args||[]); + }else{ + try{ + this[evt].apply(this, args||[]); + }catch(e){ + // squelch and log because we shouldn't allow exceptions in + // synthetic event handlers to cause the internal timer to run + // amuck, potentially pegging the CPU. I'm not a fan of this + // squelch, but hopefully logging will make it clear what's + // going on + console.error("exception in animation handler for:", evt); + console.error(e); + } + } + } + return this; // dojo._Animation + }, + + play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){ + // summary: + // Start the animation. + // delay: + // How many milliseconds to delay before starting. + // gotoStart: + // If true, starts the animation from the beginning; otherwise, + // starts it from its current position. + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + if(gotoStart){ + _t._stopTimer(); + _t._active = _t._paused = false; + _t._percent = 0; + }else if(_t._active && !_t._paused){ + return _t; // dojo._Animation + } + + _t._fire("beforeBegin"); + + var de = delay || _t.delay, + _p = dojo.hitch(_t, "_play", gotoStart); + + if(de > 0){ + _t._delayTimer = setTimeout(_p, de); + return _t; // dojo._Animation + } + _p(); + return _t; + }, + + _play: function(gotoStart){ + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + _t._startTime = new Date().valueOf(); + if(_t._paused){ + _t._startTime -= _t.duration * _t._percent; + } + _t._endTime = _t._startTime + _t.duration; + + _t._active = true; + _t._paused = false; + + var value = _t.curve.getValue(_t._percent); + if(!_t._percent){ + if(!_t._startRepeatCount){ + _t._startRepeatCount = _t.repeat; + } + _t._fire("onBegin", [value]); + } + + _t._fire("onPlay", [value]); + + _t._cycle(); + return _t; // dojo._Animation + }, + + pause: function(){ + // summary: Pauses a running animation. + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + _t._stopTimer(); + if(!_t._active){ return _t; /*dojo._Animation*/ } + _t._paused = true; + _t._fire("onPause", [_t.curve.getValue(_t._percent)]); + return _t; // dojo._Animation + }, + + gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){ + // summary: + // Sets the progress of the animation. + // percent: + // A percentage in decimal notation (between and including 0.0 and 1.0). + // andPlay: + // If true, play the animation after setting the progress. + var _t = this; + _t._stopTimer(); + _t._active = _t._paused = true; + _t._percent = percent; + if(andPlay){ _t.play(); } + return _t; // dojo._Animation + }, + + stop: function(/*boolean?*/ gotoEnd){ + // summary: Stops a running animation. + // gotoEnd: If true, the animation will end. + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + if(!_t._timer){ return _t; /* dojo._Animation */ } + _t._stopTimer(); + if(gotoEnd){ + _t._percent = 1; + } + _t._fire("onStop", [_t.curve.getValue(_t._percent)]); + _t._active = _t._paused = false; + return _t; // dojo._Animation + }, + + status: function(){ + // summary: Returns a string token representation of the status of + // the animation, one of: "paused", "playing", "stopped" + if(this._active){ + return this._paused ? "paused" : "playing"; // String + } + return "stopped"; // String + }, + + _cycle: function(){ + var _t = this; + if(_t._active){ + var curr = new Date().valueOf(); + var step = (curr - _t._startTime) / (_t._endTime - _t._startTime); + + if(step >= 1){ + step = 1; + } + _t._percent = step; + + // Perform easing + if(_t.easing){ + step = _t.easing(step); + } + + _t._fire("onAnimate", [_t.curve.getValue(step)]); + + if(_t._percent < 1){ + _t._startTimer(); + }else{ + _t._active = false; + + if(_t.repeat > 0){ + _t.repeat--; + _t.play(null, true); + }else if(_t.repeat == -1){ + _t.play(null, true); + }else{ + if(_t._startRepeatCount){ + _t.repeat = _t._startRepeatCount; + _t._startRepeatCount = 0; + } + } + _t._percent = 0; + _t._fire("onEnd"); + _t._stopTimer(); + } + } + return _t; // dojo._Animation + }, + + _clearTimer: function(){ + // summary: Clear the play delay timer + clearTimeout(this._delayTimer); + delete this._delayTimer; + } + + }); + + var ctr = 0, + _globalTimerList = [], + timer = null, + runner = { + run: function(){ } + }; + + dojo._Animation.prototype._startTimer = function(){ + // this._timer = setTimeout(dojo.hitch(this, "_cycle"), this.rate); + if(!this._timer){ + this._timer = d.connect(runner, "run", this, "_cycle"); + ctr++; + } + if(!timer){ + timer = setInterval(d.hitch(runner, "run"), this.rate); + } + }; + + dojo._Animation.prototype._stopTimer = function(){ + if(this._timer){ + d.disconnect(this._timer); + this._timer = null; + ctr--; + } + if(ctr <= 0){ + clearInterval(timer); + timer = null; + ctr = 0; + } + }; + + var _makeFadeable = + d.isIE ? function(node){ + // only set the zoom if the "tickle" value would be the same as the + // default + var ns = node.style; + // don't set the width to auto if it didn't already cascade that way. + // We don't want to f anyones designs + if(!ns.width.length && d.style(node, "width") == "auto"){ + ns.width = "auto"; + } + } : + function(){}; + + dojo._fade = function(/*Object*/ args){ + // summary: + // Returns an animation that will fade the node defined by + // args.node from the start to end values passed (args.start + // args.end) (end is mandatory, start is optional) + + args.node = d.byId(args.node); + var fArgs = _mixin({ properties: {} }, args), + props = (fArgs.properties.opacity = {}); + + props.start = !("start" in fArgs) ? + function(){ + return +d.style(fArgs.node, "opacity")||0; + } : fArgs.start; + props.end = fArgs.end; + + var anim = d.animateProperty(fArgs); + d.connect(anim, "beforeBegin", d.partial(_makeFadeable, fArgs.node)); + + return anim; // dojo._Animation + } + + /*===== + dojo.__FadeArgs = function(node, duration, easing){ + // node: DOMNode|String + // The node referenced in the animation + // duration: Integer? + // Duration of the animation in milliseconds. + // easing: Function? + // An easing function. + this.node = node; + this.duration = duration; + this.easing = easing; + } + =====*/ + + dojo.fadeIn = function(/*dojo.__FadeArgs*/ args){ + // summary: + // Returns an animation that will fade node defined in 'args' from + // its current opacity to fully opaque. + return d._fade(_mixin({ end: 1 }, args)); // dojo._Animation + } + + dojo.fadeOut = function(/*dojo.__FadeArgs*/ args){ + // summary: + // Returns an animation that will fade node defined in 'args' + // from its current opacity to fully transparent. + return d._fade(_mixin({ end: 0 }, args)); // dojo._Animation + } + + dojo._defaultEasing = function(/*Decimal?*/ n){ + // summary: The default easing function for dojo._Animation(s) + return 0.5 + ((Math.sin((n + 1.5) * Math.PI))/2); + } + + var PropLine = function(properties){ + // PropLine is an internal class which is used to model the values of + // an a group of CSS properties across an animation lifecycle. In + // particular, the "getValue" function handles getting interpolated + // values between start and end for a particular CSS value. + this._properties = properties; + for(var p in properties){ + var prop = properties[p]; + if(prop.start instanceof d.Color){ + // create a reusable temp color object to keep intermediate results + prop.tempColor = new d.Color(); + } + } + } + + PropLine.prototype.getValue = function(r){ + var ret = {}; + for(var p in this._properties){ + var prop = this._properties[p], + start = prop.start; + if(start instanceof d.Color){ + ret[p] = d.blendColors(start, prop.end, r, prop.tempColor).toCss(); + }else if(!d.isArray(start)){ + ret[p] = ((prop.end - start) * r) + start + (p != "opacity" ? prop.units || "px" : 0); + } + } + return ret; + } + + /*===== + dojo.declare("dojo.__AnimArgs", [dojo.__FadeArgs], { + // Properties: Object? + // A hash map of style properties to Objects describing the transition, + // such as the properties of dojo._Line with an additional 'unit' property + properties: {} + + //TODOC: add event callbacks + }); + =====*/ + + dojo.animateProperty = function(/*dojo.__AnimArgs*/ args){ + // summary: + // Returns an animation that will transition the properties of + // node defined in 'args' depending how they are defined in + // 'args.properties' + // + // description: + // dojo.animateProperty is the foundation of most dojo.fx + // animations. It takes an object of "properties" corresponding to + // style properties, and animates them in parallel over a set + // duration. + // + // example: + // A simple animation that changes the width of the specified node. + // | dojo.animateProperty({ + // | node: "nodeId", + // | properties: { width: 400 }, + // | }).play(); + // Dojo figures out the start value for the width and converts the + // integer specified for the width to the more expressive but + // verbose form `{ width: { end: '400', units: 'px' } }` which you + // can also specify directly + // + // example: + // Animate width, height, and padding over 2 seconds... the + // pedantic way: + // | dojo.animateProperty({ node: node, duration:2000, + // | properties: { + // | width: { start: '200', end: '400', unit:"px" }, + // | height: { start:'200', end: '400', unit:"px" }, + // | paddingTop: { start:'5', end:'50', unit:"px" } + // | } + // | }).play(); + // Note 'paddingTop' is used over 'padding-top'. Multi-name CSS properties + // are written using "mixed case", as the hyphen is illegal as an object key. + // + // example: + // Plug in a different easing function and register a callback for + // when the animation ends. Easing functions accept values between + // zero and one and return a value on that basis. In this case, an + // exponential-in curve. + // | dojo.animateProperty({ + // | node: "nodeId", + // | // dojo figures out the start value + // | properties: { width: { end: 400 } }, + // | easing: function(n){ + // | return (n==0) ? 0 : Math.pow(2, 10 * (n - 1)); + // | }, + // | onEnd: function(){ + // | // called when the animation finishes + // | } + // | }).play(500); // delay playing half a second + // + // example: + // Like all `dojo._Animation`s, animateProperty returns a handle to the + // Animation instance, which fires the events common to Dojo FX. Use `dojo.connect` + // to access these events outside of the Animation definiton: + // | var anim = dojo.animateProperty({ + // | node:"someId", + // | properties:{ + // | width:400, height:500 + // | } + // | }); + // | dojo.connect(anim,"onEnd", function(){ + // | + // | }); + // | // play the animation now: + // | anim.play(); + + args.node = d.byId(args.node); + if(!args.easing){ args.easing = d._defaultEasing; } + + var anim = new d._Animation(args); + d.connect(anim, "beforeBegin", anim, function(){ + var pm = {}; + for(var p in this.properties){ + // Make shallow copy of properties into pm because we overwrite + // some values below. In particular if start/end are functions + // we don't want to overwrite them or the functions won't be + // called if the animation is reused. + if(p == "width" || p == "height"){ + this.node.display = "block"; + } + var prop = this.properties[p]; + prop = pm[p] = _mixin({}, (d.isObject(prop) ? prop: { end: prop })); + + if(d.isFunction(prop.start)){ + prop.start = prop.start(); + } + if(d.isFunction(prop.end)){ + prop.end = prop.end(); + } + var isColor = (p.toLowerCase().indexOf("color") >= 0); + function getStyle(node, p){ + // dojo.style(node, "height") can return "auto" or "" on IE; this is more reliable: + var v = {height: node.offsetHeight, width: node.offsetWidth}[p]; + if(v !== undefined){ return v; } + v = d.style(node, p); + return (p == "opacity") ? +v : (isColor ? v : parseFloat(v)); + } + if(!("end" in prop)){ + prop.end = getStyle(this.node, p); + }else if(!("start" in prop)){ + prop.start = getStyle(this.node, p); + } + + if(isColor){ + prop.start = new d.Color(prop.start); + prop.end = new d.Color(prop.end); + }else{ + prop.start = (p == "opacity") ? +prop.start : parseFloat(prop.start); + } + } + this.curve = new PropLine(pm); + }); + d.connect(anim, "onAnimate", d.hitch(d, "style", anim.node)); + return anim; // dojo._Animation + } + + dojo.anim = function( /*DOMNode|String*/ node, + /*Object*/ properties, + /*Integer?*/ duration, + /*Function?*/ easing, + /*Function?*/ onEnd, + /*Integer?*/ delay){ + // summary: + // A simpler interface to `dojo.animateProperty()`, also returns + // an instance of `dojo._Animation` but begins the animation + // immediately, unlike nearly every other Dojo animation API. + // description: + // `dojo.anim` is a simpler (but somewhat less powerful) version + // of `dojo.animateProperty`. It uses defaults for many basic properties + // and allows for positional parameters to be used in place of the + // packed "property bag" which is used for other Dojo animation + // methods. + // + // The `dojo._Animation` object returned from `dojo.anim` will be + // already playing when it is returned from this function, so + // calling play() on it again is (usually) a no-op. + // node: + // a DOM node or the id of a node to animate CSS properties on + // duration: + // The number of milliseconds over which the animation + // should run. Defaults to the global animation default duration + // (350ms). + // easing: + // An easing function over which to calculate acceleration + // and deceleration of the animation through its duration. + // A default easing algorithm is provided, but you may + // plug in any you wish. A large selection of easing algorithms + // are available in `dojo.fx.easing`. + // onEnd: + // A function to be called when the animation finishes + // running. + // delay: + // The number of milliseconds to delay beginning the + // animation by. The default is 0. + // example: + // Fade out a node + // | dojo.anim("id", { opacity: 0 }); + // example: + // Fade out a node over a full second + // | dojo.anim("id", { opacity: 0 }, 1000); + return d.animateProperty({ + node: node, + duration: duration||d._Animation.prototype.duration, + properties: properties, + easing: easing, + onEnd: onEnd + }).play(delay||0); + } +})(); + +} + +if(!dojo._hasResource["dojo._base.browser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.browser"] = true; +dojo.provide("dojo._base.browser"); + +//Need this to be the last code segment in base, so do not place any +//dojo.requireIf calls in this file. Otherwise, due to how the build system +//puts all requireIf dependencies after the current file, the require calls +//could be called before all of base is defined. +dojo.forEach(dojo.config.require, function(i){ + dojo["require"](i); +}); + +} + + //INSERT dojo.i18n._preloadLocalizations HERE + + if(dojo.config.afterOnLoad && dojo.isBrowser){ + //Dojo is being added to the page after page load, so just trigger + //the init sequence after a timeout. Using a timeout so the rest of this + //script gets evaluated properly. This work needs to happen after the + //dojo.config.require work done in dojo._base. + window.setTimeout(dojo._loadInit, 1000); + } + +})(); + diff --git a/tests/javascript/frameworks/dojo/dojo-1.4.3.js b/tests/javascript/frameworks/dojo/dojo-1.4.3.js new file mode 100644 index 0000000000000000000000000000000000000000..e0665ae8ccb8ca3d5f4a9a3869c1af9a3a433ebd --- /dev/null +++ b/tests/javascript/frameworks/dojo/dojo-1.4.3.js @@ -0,0 +1,11182 @@ +/* + Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + +/* + This is a compiled version of Dojo, built for deployment and not for + development. To get an editable version, please visit: + + http://dojotoolkit.org + + for documentation and information on getting the source. +*/ + +;(function(){ + + /* + dojo, dijit, and dojox must always be the first three, and in that order. + djConfig.scopeMap = [ + ["dojo", "fojo"], + ["dijit", "fijit"], + ["dojox", "fojox"] + + ] + */ + + /**Build will replace this comment with a scoped djConfig **/ + + //The null below can be relaced by a build-time value used instead of djConfig.scopeMap. + var sMap = null; + + //See if new scopes need to be defined. + if((sMap || (typeof djConfig != "undefined" && djConfig.scopeMap)) && (typeof window != "undefined")){ + var scopeDef = "", scopePrefix = "", scopeSuffix = "", scopeMap = {}, scopeMapRev = {}; + sMap = sMap || djConfig.scopeMap; + for(var i = 0; i < sMap.length; i++){ + //Make local variables, then global variables that use the locals. + var newScope = sMap[i]; + scopeDef += "var " + newScope[0] + " = {}; " + newScope[1] + " = " + newScope[0] + ";" + newScope[1] + "._scopeName = '" + newScope[1] + "';"; + scopePrefix += (i == 0 ? "" : ",") + newScope[0]; + scopeSuffix += (i == 0 ? "" : ",") + newScope[1]; + scopeMap[newScope[0]] = newScope[1]; + scopeMapRev[newScope[1]] = newScope[0]; + } + + eval(scopeDef + "dojo._scopeArgs = [" + scopeSuffix + "];"); + + dojo._scopePrefixArgs = scopePrefix; + dojo._scopePrefix = "(function(" + scopePrefix + "){"; + dojo._scopeSuffix = "})(" + scopeSuffix + ")"; + dojo._scopeMap = scopeMap; + dojo._scopeMapRev = scopeMapRev; + } + +/*===== +// note: +// 'djConfig' does not exist under 'dojo.*' so that it can be set before the +// 'dojo' variable exists. +// note: +// Setting any of these variables *after* the library has loaded does +// nothing at all. + +djConfig = { + // summary: + // Application code can set the global 'djConfig' prior to loading + // the library to override certain global settings for how dojo works. + // + // isDebug: Boolean + // Defaults to `false`. If set to `true`, ensures that Dojo provides + // extended debugging feedback via Firebug. If Firebug is not available + // on your platform, setting `isDebug` to `true` will force Dojo to + // pull in (and display) the version of Firebug Lite which is + // integrated into the Dojo distribution, thereby always providing a + // debugging/logging console when `isDebug` is enabled. Note that + // Firebug's `console.*` methods are ALWAYS defined by Dojo. If + // `isDebug` is false and you are on a platform without Firebug, these + // methods will be defined as no-ops. + isDebug: false, + // debugAtAllCosts: Boolean + // Defaults to `false`. If set to `true`, this triggers an alternate + // mode of the package system in which dependencies are detected and + // only then are resources evaluated in dependency order via + // ` + // + // This type of syntax works with both xdomain and normal loaders, so it is good + // practice to always use this idiom for on-the-fly code loading and in HTML script + // blocks. If at some point you change loaders and where the code is loaded from, + // it will all still work. + // + // More on how dojo.require + // `dojo.require("A.B")` first checks to see if symbol A.B is + // defined. If it is, it is simply returned (nothing to do). + // + // If it is not defined, it will look for `A/B.js` in the script root + // directory. + // + // `dojo.require` throws an excpetion if it cannot find a file + // to load, or if the symbol `A.B` is not defined after loading. + // + // It returns the object `A.B`, but note the caveats above about on-the-fly loading and + // HTML script blocks when the xdomain loader is loading a module. + // + // `dojo.require()` does nothing about importing symbols into + // the current namespace. It is presumed that the caller will + // take care of that. For example, to import all symbols into a + // local block, you might write: + // + // | with (dojo.require("A.B")) { + // | ... + // | } + // + // And to import just the leaf symbol to a local variable: + // + // | var B = dojo.require("A.B"); + // | ... + // returns: the required namespace object + omitModuleCheck = d._global_omit_module_check || omitModuleCheck; + + //Check if it is already loaded. + var module = d._loadedModules[moduleName]; + if(module){ + return module; + } + + // convert periods to slashes + var relpath = d._getModuleSymbols(moduleName).join("/") + '.js'; + + var modArg = !omitModuleCheck ? moduleName : null; + var ok = d._loadPath(relpath, modArg); + + if(!ok && !omitModuleCheck){ + throw new Error("Could not load '" + moduleName + "'; last tried '" + relpath + "'"); + } + + // check that the symbol was defined + // Don't bother if we're doing xdomain (asynchronous) loading. + if(!omitModuleCheck && !d._isXDomain){ + // pass in false so we can give better error + module = d._loadedModules[moduleName]; + if(!module){ + throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); + } + } + + return module; + } + + dojo.provide = function(/*String*/ resourceName){ + // summary: + // Register a resource with the package system. Works in conjunction with `dojo.require` + // + // description: + // Each javascript source file is called a resource. When a + // resource is loaded by the browser, `dojo.provide()` registers + // that it has been loaded. + // + // Each javascript source file must have at least one + // `dojo.provide()` call at the top of the file, corresponding to + // the file name. For example, `js/dojo/foo.js` must have + // `dojo.provide("dojo.foo");` before any calls to + // `dojo.require()` are made. + // + // For backwards compatibility reasons, in addition to registering + // the resource, `dojo.provide()` also ensures that the javascript + // object for the module exists. For example, + // `dojo.provide("dojox.data.FlickrStore")`, in addition to + // registering that `FlickrStore.js` is a resource for the + // `dojox.data` module, will ensure that the `dojox.data` + // javascript object exists, so that calls like + // `dojo.data.foo = function(){ ... }` don't fail. + // + // In the case of a build where multiple javascript source files + // are combined into one bigger file (similar to a .lib or .jar + // file), that file may contain multiple dojo.provide() calls, to + // note that it includes multiple resources. + // + // resourceName: String + // A dot-sperated string identifying a resource. + // + // example: + // Safely create a `my` object, and make dojo.require("my.CustomModule") work + // | dojo.provide("my.CustomModule"); + + //Make sure we have a string. + resourceName = resourceName + ""; + return (d._loadedModules[resourceName] = d.getObject(resourceName, true)); // Object + } + + //Start of old bootstrap2: + + dojo.platformRequire = function(/*Object*/modMap){ + // summary: + // require one or more modules based on which host environment + // Dojo is currently operating in + // description: + // This method takes a "map" of arrays which one can use to + // optionally load dojo modules. The map is indexed by the + // possible dojo.name_ values, with two additional values: + // "default" and "common". The items in the "default" array will + // be loaded if none of the other items have been choosen based on + // dojo.name_, set by your host environment. The items in the + // "common" array will *always* be loaded, regardless of which + // list is chosen. + // example: + // | dojo.platformRequire({ + // | browser: [ + // | "foo.sample", // simple module + // | "foo.test", + // | ["foo.bar.baz", true] // skip object check in _loadModule (dojo.require) + // | ], + // | default: [ "foo.sample._base" ], + // | common: [ "important.module.common" ] + // | }); + + var common = modMap.common || []; + var result = common.concat(modMap[d._name] || modMap["default"] || []); + + for(var x=0; x + // | + d._modulePrefixes[module] = { name: module, value: prefix }; + } + + dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){ + // summary: + // Declares translated resources and loads them if necessary, in the + // same style as dojo.require. Contents of the resource bundle are + // typically strings, but may be any name/value pair, represented in + // JSON format. See also `dojo.i18n.getLocalization`. + // + // description: + // Load translated resource bundles provided underneath the "nls" + // directory within a package. Translated resources may be located in + // different packages throughout the source tree. + // + // Each directory is named for a locale as specified by RFC 3066, + // (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase. + // Note that the two bundles in the example do not define all the + // same variants. For a given locale, bundles will be loaded for + // that locale and all more general locales above it, including a + // fallback at the root directory. For example, a declaration for + // the "de-at" locale will first load `nls/de-at/bundleone.js`, + // then `nls/de/bundleone.js` and finally `nls/bundleone.js`. The + // data will be flattened into a single Object so that lookups + // will follow this cascading pattern. An optional build step can + // preload the bundles to avoid data redundancy and the multiple + // network hits normally required to load these resources. + // + // moduleName: + // name of the package containing the "nls" directory in which the + // bundle is found + // + // bundleName: + // bundle name, i.e. the filename without the '.js' suffix. Using "nls" as a + // a bundle name is not supported, since "nls" is the name of the folder + // that holds bundles. Using "nls" as the bundle name will cause problems + // with the custom build. + // + // locale: + // the locale to load (optional) By default, the browser's user + // locale as defined by dojo.locale + // + // availableFlatLocales: + // A comma-separated list of the available, flattened locales for this + // bundle. This argument should only be set by the build process. + // + // example: + // A particular widget may define one or more resource bundles, + // structured in a program as follows, where moduleName is + // mycode.mywidget and bundleNames available include bundleone and + // bundletwo: + // | ... + // | mycode/ + // | mywidget/ + // | nls/ + // | bundleone.js (the fallback translation, English in this example) + // | bundletwo.js (also a fallback translation) + // | de/ + // | bundleone.js + // | bundletwo.js + // | de-at/ + // | bundleone.js + // | en/ + // | (empty; use the fallback translation) + // | en-us/ + // | bundleone.js + // | en-gb/ + // | bundleone.js + // | es/ + // | bundleone.js + // | bundletwo.js + // | ...etc + // | ... + // + + d.require("dojo.i18n"); + d.i18n._requireLocalization.apply(d.hostenv, arguments); + }; + + var ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"), + ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"); + + dojo._Url = function(/*dojo._Url|String...*/){ + // summary: + // Constructor to create an object representing a URL. + // It is marked as private, since we might consider removing + // or simplifying it. + // description: + // Each argument is evaluated in order relative to the next until + // a canonical uri is produced. To get an absolute Uri relative to + // the current document use: + // new dojo._Url(document.baseURI, url) + + var n = null, + _a = arguments, + uri = [_a[0]]; + // resolve uri components relative to each other + for(var i = 1; i<_a.length; i++){ + if(!_a[i]){ continue; } + + // Safari doesn't support this.constructor so we have to be explicit + // FIXME: Tracked (and fixed) in Webkit bug 3537. + // http://bugs.webkit.org/show_bug.cgi?id=3537 + var relobj = new d._Url(_a[i]+""), + uriobj = new d._Url(uri[0]+""); + + if( + relobj.path == "" && + !relobj.scheme && + !relobj.authority && + !relobj.query + ){ + if(relobj.fragment != n){ + uriobj.fragment = relobj.fragment; + } + relobj = uriobj; + }else if(!relobj.scheme){ + relobj.scheme = uriobj.scheme; + + if(!relobj.authority){ + relobj.authority = uriobj.authority; + + if(relobj.path.charAt(0) != "/"){ + var path = uriobj.path.substring(0, + uriobj.path.lastIndexOf("/") + 1) + relobj.path; + + var segs = path.split("/"); + for(var j = 0; j < segs.length; j++){ + if(segs[j] == "."){ + // flatten "./" references + if(j == segs.length - 1){ + segs[j] = ""; + }else{ + segs.splice(j, 1); + j--; + } + }else if(j > 0 && !(j == 1 && segs[0] == "") && + segs[j] == ".." && segs[j-1] != ".."){ + // flatten "../" references + if(j == (segs.length - 1)){ + segs.splice(j, 1); + segs[j - 1] = ""; + }else{ + segs.splice(j - 1, 2); + j -= 2; + } + } + } + relobj.path = segs.join("/"); + } + } + } + + uri = []; + if(relobj.scheme){ + uri.push(relobj.scheme, ":"); + } + if(relobj.authority){ + uri.push("//", relobj.authority); + } + uri.push(relobj.path); + if(relobj.query){ + uri.push("?", relobj.query); + } + if(relobj.fragment){ + uri.push("#", relobj.fragment); + } + } + + this.uri = uri.join(""); + + // break the uri into its main components + var r = this.uri.match(ore); + + this.scheme = r[2] || (r[1] ? "" : n); + this.authority = r[4] || (r[3] ? "" : n); + this.path = r[5]; // can never be undefined + this.query = r[7] || (r[6] ? "" : n); + this.fragment = r[9] || (r[8] ? "" : n); + + if(this.authority != n){ + // server based naming authority + r = this.authority.match(ire); + + this.user = r[3] || n; + this.password = r[4] || n; + this.host = r[6] || r[7]; // ipv6 || ipv4 + this.port = r[9] || n; + } + } + + dojo._Url.prototype.toString = function(){ return this.uri; }; + + dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ + // summary: + // Returns a `dojo._Url` object relative to a module. + // example: + // | var pngPath = dojo.moduleUrl("acme","images/small.png"); + // | console.dir(pngPath); // list the object properties + // | // create an image and set it's source to pngPath's value: + // | var img = document.createElement("img"); + // | // NOTE: we assign the string representation of the url object + // | img.src = pngPath.toString(); + // | // add our image to the document + // | dojo.body().appendChild(img); + // example: + // you may de-reference as far as you like down the package + // hierarchy. This is sometimes handy to avoid lenghty relative + // urls or for building portable sub-packages. In this example, + // the `acme.widget` and `acme.util` directories may be located + // under different roots (see `dojo.registerModulePath`) but the + // the modules which reference them can be unaware of their + // relative locations on the filesystem: + // | // somewhere in a configuration block + // | dojo.registerModulePath("acme.widget", "../../acme/widget"); + // | dojo.registerModulePath("acme.util", "../../util"); + // | + // | // ... + // | + // | // code in a module using acme resources + // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); + // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); + + var loc = d._getModuleSymbols(module).join('/'); + if(!loc){ return null; } + if(loc.lastIndexOf("/") != loc.length-1){ + loc += "/"; + } + + //If the path is an absolute path (starts with a / or is on another + //domain/xdomain) then don't add the baseUrl. + var colonIndex = loc.indexOf(":"); + if(loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > loc.indexOf("/"))){ + loc = d.baseUrl + loc; + } + + return new d._Url(loc, url); // dojo._Url + } +})(); + +/*===== +dojo.isBrowser = { + // example: + // | if(dojo.isBrowser){ ... } +}; + +dojo.isFF = { + // example: + // | if(dojo.isFF > 1){ ... } +}; + +dojo.isIE = { + // example: + // | if(dojo.isIE > 6){ + // | // we are IE7 + // | } +}; + +dojo.isSafari = { + // example: + // | if(dojo.isSafari){ ... } + // example: + // Detect iPhone: + // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ + // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test. + // | } +}; + +dojo = { + // isBrowser: Boolean + // True if the client is a web-browser + isBrowser: true, + // isFF: Number | undefined + // Version as a Number if client is FireFox. undefined otherwise. Corresponds to + // major detected FireFox version (1.5, 2, 3, etc.) + isFF: 2, + // isIE: Number | undefined + // Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to + // major detected IE version (6, 7, 8, etc.) + isIE: 6, + // isKhtml: Number | undefined + // Version as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major + // detected version. + isKhtml: 0, + // isWebKit: Number | undefined + // Version as a Number if client is a WebKit-derived browser (Konqueror, + // Safari, Chrome, etc.). undefined otherwise. + isWebKit: 0, + // isMozilla: Number | undefined + // Version as a Number if client is a Mozilla-based browser (Firefox, + // SeaMonkey). undefined otherwise. Corresponds to major detected version. + isMozilla: 0, + // isOpera: Number | undefined + // Version as a Number if client is Opera. undefined otherwise. Corresponds to + // major detected version. + isOpera: 0, + // isSafari: Number | undefined + // Version as a Number if client is Safari or iPhone. undefined otherwise. + isSafari: 0, + // isChrome: Number | undefined + // Version as a Number if client is Chrome browser. undefined otherwise. + isChrome: 0 + // isMac: Boolean + // True if the client runs on Mac +} +=====*/ + +if(typeof window != 'undefined'){ + dojo.isBrowser = true; + dojo._name = "browser"; + + // attempt to figure out the path to dojo if it isn't set in the config + (function(){ + var d = dojo; + + // this is a scope protection closure. We set browser versions and grab + // the URL we were loaded from here. + + // grab the node we were loaded from + if(document && document.getElementsByTagName){ + var scripts = document.getElementsByTagName("script"); + var rePkg = /dojo(\.xd)?\.js(\W|$)/i; + for(var i = 0; i < scripts.length; i++){ + var src = scripts[i].getAttribute("src"); + if(!src){ continue; } + var m = src.match(rePkg); + if(m){ + // find out where we came from + if(!d.config.baseUrl){ + d.config.baseUrl = src.substring(0, m.index); + } + // and find out if we need to modify our behavior + var cfg = scripts[i].getAttribute("djConfig"); + if(cfg){ + var cfgo = eval("({ "+cfg+" })"); + for(var x in cfgo){ + dojo.config[x] = cfgo[x]; + } + } + break; // "first Dojo wins" + } + } + } + d.baseUrl = d.config.baseUrl; + + // fill in the rendering support information in dojo.render.* + var n = navigator; + var dua = n.userAgent, + dav = n.appVersion, + tv = parseFloat(dav); + + if(dua.indexOf("Opera") >= 0){ d.isOpera = tv; } + if(dua.indexOf("AdobeAIR") >= 0){ d.isAIR = 1; } + d.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : 0; + d.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined; + d.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined; + d.isMac = dav.indexOf("Macintosh") >= 0; + + // safari detection derived from: + // http://developer.apple.com/internet/safari/faq.html#anchor2 + // http://developer.apple.com/internet/safari/uamatrix.html + var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0); + if(index && !dojo.isChrome){ + // try to grab the explicit Safari version first. If we don't get + // one, look for less than 419.3 as the indication that we're on something + // "Safari 2-ish". + d.isSafari = parseFloat(dav.split("Version/")[1]); + if(!d.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){ + d.isSafari = 2; + } + } + + if(dua.indexOf("Gecko") >= 0 && !d.isKhtml && !d.isWebKit){ d.isMozilla = d.isMoz = tv; } + if(d.isMoz){ + //We really need to get away from this. Consider a sane isGecko approach for the future. + d.isFF = parseFloat(dua.split("Firefox/")[1] || dua.split("Minefield/")[1]) || undefined; + } + if(document.all && !d.isOpera){ + d.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined; + //In cases where the page has an HTTP header or META tag with + //X-UA-Compatible, then it is in emulation mode. + //Make sure isIE reflects the desired version. + //document.documentMode of 5 means quirks mode. + //Only switch the value if documentMode's major version + //is different from isIE's major version. + var mode = document.documentMode; + if(mode && mode != 5 && Math.floor(d.isIE) != mode){ + d.isIE = mode; + } + } + + //Workaround to get local file loads of dojo to work on IE 7 + //by forcing to not use native xhr. + if(dojo.isIE && window.location.protocol === "file:"){ + dojo.config.ieForceActiveXXhr=true; + } + + d.isQuirks = document.compatMode == "BackCompat"; + + // TODO: is the HTML LANG attribute relevant? + d.locale = dojo.config.locale || (d.isIE ? n.userLanguage : n.language).toLowerCase(); + + // These are in order of decreasing likelihood; this will change in time. + d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; + + d._xhrObj = function(){ + // summary: + // does the work of portably generating a new XMLHTTPRequest object. + var http, last_e; + if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){ + try{ http = new XMLHttpRequest(); }catch(e){} + } + if(!http){ + for(var i=0; i<3; ++i){ + var progid = d._XMLHTTP_PROGIDS[i]; + try{ + http = new ActiveXObject(progid); + }catch(e){ + last_e = e; + } + + if(http){ + d._XMLHTTP_PROGIDS = [progid]; // so faster next time + break; + } + } + } + + if(!http){ + throw new Error("XMLHTTP not available: "+last_e); + } + + return http; // XMLHTTPRequest instance + } + + d._isDocumentOk = function(http){ + var stat = http.status || 0, + lp = location.protocol; + return (stat >= 200 && stat < 300) || // Boolean + stat == 304 || // allow any 2XX response code + stat == 1223 || // get it out of the cache + (!stat && (lp == "file:" || lp == "chrome:" || lp == "app:") ); // Internet Explorer mangled the status code OR we're Titanium requesting a local file + } + + //See if base tag is in use. + //This is to fix http://trac.dojotoolkit.org/ticket/3973, + //but really, we need to find out how to get rid of the dojo._Url reference + //below and still have DOH work with the dojo.i18n test following some other + //test that uses the test frame to load a document (trac #2757). + //Opera still has problems, but perhaps a larger issue of base tag support + //with XHR requests (hasBase is true, but the request is still made to document + //path, not base path). + var owloc = window.location+""; + var base = document.getElementsByTagName("base"); + var hasBase = (base && base.length > 0); + + d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){ + // summary: Read the contents of the specified uri and return those contents. + // uri: + // A relative or absolute uri. If absolute, it still must be in + // the same "domain" as we are. + // fail_ok: + // Default false. If fail_ok and loading fails, return null + // instead of throwing. + // returns: The response text. null is returned when there is a + // failure and failure is okay (an exception otherwise) + + // NOTE: must be declared before scope switches ie. this._xhrObj() + var http = d._xhrObj(); + + if(!hasBase && dojo._Url){ + uri = (new dojo._Url(owloc, uri)).toString(); + } + + if(d.config.cacheBust){ + //Make sure we have a string before string methods are used on uri + uri += ""; + uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,""); + } + + http.open('GET', uri, false); + try{ + http.send(null); + if(!d._isDocumentOk(http)){ + var err = Error("Unable to load "+uri+" status:"+ http.status); + err.status = http.status; + err.responseText = http.responseText; + throw err; + } + }catch(e){ + if(fail_ok){ return null; } // null + // rethrow the exception + throw e; + } + return http.responseText; // String + } + + var _w = window; + var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){ + // summary: + // non-destructively adds the specified function to the node's + // evtName handler. + // evtName: should be in the form "onclick" for "onclick" handlers. + // Make sure you pass in the "on" part. + var _a = _w.attachEvent || _w.addEventListener; + evtName = _w.attachEvent ? evtName : evtName.substring(2); + _a(evtName, function(){ + fp.apply(_w, arguments); + }, false); + }; + + d._windowUnloaders = []; + + d.windowUnloaded = function(){ + // summary: + // signal fired by impending window destruction. You may use + // dojo.addOnWindowUnload() to register a listener for this + // event. NOTE: if you wish to dojo.connect() to this method + // to perform page/application cleanup, be aware that this + // event WILL NOT fire if no handler has been registered with + // dojo.addOnWindowUnload. This behavior started in Dojo 1.3. + // Previous versions always triggered dojo.windowUnloaded. See + // dojo.addOnWindowUnload for more info. + var mll = d._windowUnloaders; + while(mll.length){ + (mll.pop())(); + } + }; + + var _onWindowUnloadAttached = 0; + d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ + // summary: + // registers a function to be triggered when window.onunload + // fires. + // description: + // The first time that addOnWindowUnload is called Dojo + // will register a page listener to trigger your unload + // handler with. Note that registering these handlers may + // destory "fastback" page caching in browsers that support + // it. Be careful trying to modify the DOM or access + // JavaScript properties during this phase of page unloading: + // they may not always be available. Consider + // dojo.addOnUnload() if you need to modify the DOM or do + // heavy JavaScript work since it fires at the eqivalent of + // the page's "onbeforeunload" event. + // example: + // | dojo.addOnWindowUnload(functionPointer) + // | dojo.addOnWindowUnload(object, "functionName"); + // | dojo.addOnWindowUnload(object, function(){ /* ... */}); + + d._onto(d._windowUnloaders, obj, functionName); + if(!_onWindowUnloadAttached){ + _onWindowUnloadAttached = 1; + _handleNodeEvent("onunload", d.windowUnloaded); + } + }; + + var _onUnloadAttached = 0; + d.addOnUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ + // summary: + // registers a function to be triggered when the page unloads. + // description: + // The first time that addOnUnload is called Dojo will + // register a page listener to trigger your unload handler + // with. + // + // In a browser enviroment, the functions will be triggered + // during the window.onbeforeunload event. Be careful of doing + // too much work in an unload handler. onbeforeunload can be + // triggered if a link to download a file is clicked, or if + // the link is a javascript: link. In these cases, the + // onbeforeunload event fires, but the document is not + // actually destroyed. So be careful about doing destructive + // operations in a dojo.addOnUnload callback. + // + // Further note that calling dojo.addOnUnload will prevent + // browsers from using a "fast back" cache to make page + // loading via back button instantaneous. + // example: + // | dojo.addOnUnload(functionPointer) + // | dojo.addOnUnload(object, "functionName") + // | dojo.addOnUnload(object, function(){ /* ... */}); + + d._onto(d._unloaders, obj, functionName); + if(!_onUnloadAttached){ + _onUnloadAttached = 1; + _handleNodeEvent("onbeforeunload", dojo.unloaded); + } + }; + + })(); + + //START DOMContentLoaded + dojo._initFired = false; + dojo._loadInit = function(e){ + if(!dojo._initFired){ + dojo._initFired = true; + + //Help out IE to avoid memory leak. + if(!dojo.config.afterOnLoad && window.detachEvent){ + window.detachEvent("onload", dojo._loadInit); + } + + if(dojo._inFlightCount == 0){ + dojo._modulesLoaded(); + } + } + } + + if(!dojo.config.afterOnLoad){ + if(document.addEventListener){ + //Standards. Hooray! Assumption here that if standards based, + //it knows about DOMContentLoaded. It is OK if it does not, the fall through + //to window onload should be good enough. + document.addEventListener("DOMContentLoaded", dojo._loadInit, false); + window.addEventListener("load", dojo._loadInit, false); + }else if(window.attachEvent){ + window.attachEvent("onload", dojo._loadInit); + } + } + + if(dojo.isIE){ + // for Internet Explorer. readyState will not be achieved on init + // call, but dojo doesn't need it however, we'll include it + // because we don't know if there are other functions added that + // might. Note that this has changed because the build process + // strips all comments -- including conditional ones. + if(!dojo.config.afterOnLoad && !dojo.config.skipIeDomLoaded){ + document.write('' + + '' + ); + } + + try{ + document.namespaces.add("v","urn:schemas-microsoft-com:vml"); + var vmlElems = ["*", "group", "roundrect", "oval", "shape", "rect", "imagedata"], + i = 0, l = 1, s = document.createStyleSheet(); + if(dojo.isIE >= 8){ + i = 1; + l = vmlElems.length; + } + for(; i < l; ++i){ + s.addRule("v\\:" + vmlElems[i], "behavior:url(#default#VML); display:inline-block"); + } + }catch(e){} + } + //END DOMContentLoaded + + /* + OpenAjax.subscribe("OpenAjax", "onload", function(){ + if(dojo._inFlightCount == 0){ + dojo._modulesLoaded(); + } + }); + + OpenAjax.subscribe("OpenAjax", "onunload", function(){ + dojo.unloaded(); + }); + */ +} //if (typeof window != 'undefined') + +//Register any module paths set up in djConfig. Need to do this +//in the hostenvs since hostenv_browser can read djConfig from a +//script tag's attribute. +(function(){ + var mp = dojo.config["modulePaths"]; + if(mp){ + for(var param in mp){ + dojo.registerModulePath(param, mp[param]); + } + } +})(); + +//Load debug code if necessary. +if(dojo.config.isDebug){ + dojo.require("dojo._firebug.firebug"); +} + +if(dojo.config.debugAtAllCosts){ + dojo.config.useXDomain = true; + dojo.require("dojo._base._loader.loader_xd"); + dojo.require("dojo._base._loader.loader_debug"); + dojo.require("dojo.i18n"); +} + +if(!dojo._hasResource["dojo._base.lang"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.lang"] = true; +dojo.provide("dojo._base.lang"); + +(function(){ + var d = dojo, opts = Object.prototype.toString; + + // Crockford (ish) functions + + dojo.isString = function(/*anything*/ it){ + // summary: + // Return true if it is a String + return (typeof it == "string" || it instanceof String); // Boolean + } + + dojo.isArray = function(/*anything*/ it){ + // summary: + // Return true if it is an Array. + // Does not work on Arrays created in other windows. + return it && (it instanceof Array || typeof it == "array"); // Boolean + } + + dojo.isFunction = function(/*anything*/ it){ + // summary: + // Return true if it is a Function + return opts.call(it) === "[object Function]"; + }; + + dojo.isObject = function(/*anything*/ it){ + // summary: + // Returns true if it is a JavaScript object (or an Array, a Function + // or null) + return it !== undefined && + (it === null || typeof it == "object" || d.isArray(it) || d.isFunction(it)); // Boolean + } + + dojo.isArrayLike = function(/*anything*/ it){ + // summary: + // similar to dojo.isArray() but more permissive + // description: + // Doesn't strongly test for "arrayness". Instead, settles for "isn't + // a string or number and has a length property". Arguments objects + // and DOM collections will return true when passed to + // dojo.isArrayLike(), but will return false when passed to + // dojo.isArray(). + // returns: + // If it walks like a duck and quacks like a duck, return `true` + return it && it !== undefined && // Boolean + // keep out built-in constructors (Number, String, ...) which have length + // properties + !d.isString(it) && !d.isFunction(it) && + !(it.tagName && it.tagName.toLowerCase() == 'form') && + (d.isArray(it) || isFinite(it.length)); + } + + dojo.isAlien = function(/*anything*/ it){ + // summary: + // Returns true if it is a built-in function or some other kind of + // oddball that *should* report as a function but doesn't + return it && !d.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean + } + + dojo.extend = function(/*Object*/ constructor, /*Object...*/ props){ + // summary: + // Adds all properties and methods of props to constructor's + // prototype, making them available to all instances created with + // constructor. + for(var i=1, l=arguments.length; i 2){ + return d._hitchArgs.apply(d, arguments); // Function + } + if(!method){ + method = scope; + scope = null; + } + if(d.isString(method)){ + scope = scope || d.global; + if(!scope[method]){ throw(['dojo.hitch: scope["', method, '"] is null (scope="', scope, '")'].join('')); } + return function(){ return scope[method].apply(scope, arguments || []); }; // Function + } + return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function + } + + /*===== + dojo.delegate = function(obj, props){ + // summary: + // Returns a new object which "looks" to obj for properties which it + // does not have a value for. Optionally takes a bag of properties to + // seed the returned object with initially. + // description: + // This is a small implementaton of the Boodman/Crockford delegation + // pattern in JavaScript. An intermediate object constructor mediates + // the prototype chain for the returned object, using it to delegate + // down to obj for property lookup when object-local lookup fails. + // This can be thought of similarly to ES4's "wrap", save that it does + // not act on types but rather on pure objects. + // obj: + // The object to delegate to for properties not found directly on the + // return object or in props. + // props: + // an object containing properties to assign to the returned object + // returns: + // an Object of anonymous type + // example: + // | var foo = { bar: "baz" }; + // | var thinger = dojo.delegate(foo, { thud: "xyzzy"}); + // | thinger.bar == "baz"; // delegated to foo + // | foo.thud == undefined; // by definition + // | thinger.thud == "xyzzy"; // mixed in from props + // | foo.bar = "thonk"; + // | thinger.bar == "thonk"; // still delegated to foo's bar + } + =====*/ + + dojo.delegate = dojo._delegate = (function(){ + // boodman/crockford delegation w/ cornford optimization + function TMP(){} + return function(obj, props){ + TMP.prototype = obj; + var tmp = new TMP(); + TMP.prototype = null; + if(props){ + d._mixin(tmp, props); + } + return tmp; // Object + } + })(); + + /*===== + dojo._toArray = function(obj, offset, startWith){ + // summary: + // Converts an array-like object (i.e. arguments, DOMCollection) to an + // array. Returns a new Array with the elements of obj. + // obj: Object + // the object to "arrayify". We expect the object to have, at a + // minimum, a length property which corresponds to integer-indexed + // properties. + // offset: Number? + // the location in obj to start iterating from. Defaults to 0. + // Optional. + // startWith: Array? + // An array to pack with the properties of obj. If provided, + // properties in obj are appended at the end of startWith and + // startWith is the returned array. + } + =====*/ + + var efficient = function(obj, offset, startWith){ + return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0)); + }; + + var slow = function(obj, offset, startWith){ + var arr = startWith||[]; + for(var x = offset || 0; x < obj.length; x++){ + arr.push(obj[x]); + } + return arr; + }; + + dojo._toArray = + d.isIE ? function(obj){ + return ((obj.item) ? slow : efficient).apply(this, arguments); + } : + efficient; + + dojo.partial = function(/*Function|String*/method /*, ...*/){ + // summary: + // similar to hitch() except that the scope object is left to be + // whatever the execution context eventually becomes. + // description: + // Calling dojo.partial is the functional equivalent of calling: + // | dojo.hitch(null, funcName, ...); + var arr = [ null ]; + return d.hitch.apply(d, arr.concat(d._toArray(arguments))); // Function + } + + var extraNames = d._extraNames, extraLen = extraNames.length, empty = {}; + + dojo.clone = function(/*anything*/ o){ + // summary: + // Clones objects (including DOM nodes) and all children. + // Warning: do not clone cyclic structures. + if(!o || typeof o != "object" || d.isFunction(o)){ + // null, undefined, any non-object, or function + return o; // anything + } + if(o.nodeType && "cloneNode" in o){ + // DOM Node + return o.cloneNode(true); // Node + } + if(o instanceof Date){ + // Date + return new Date(o.getTime()); // Date + } + var r, i, l, s, name; + if(d.isArray(o)){ + // array + r = []; + for(i = 0, l = o.length; i < l; ++i){ + if(i in o){ + r.push(d.clone(o[i])); + } + } +// we don't clone functions for performance reasons +// }else if(d.isFunction(o)){ +// // function +// r = function(){ return o.apply(this, arguments); }; + }else{ + // generic objects + r = o.constructor ? new o.constructor() : {}; + } + for(name in o){ + // the "tobj" condition avoid copying properties in "source" + // inherited from Object.prototype. For example, if target has a custom + // toString() method, don't overwrite it with the toString() method + // that source inherited from Object.prototype + s = o[name]; + if(!(name in r) || (r[name] !== s && (!(name in empty) || empty[name] !== s))){ + r[name] = d.clone(s); + } + } + // IE doesn't recognize some custom functions in for..in + if(extraLen){ + for(i = 0; i < extraLen; ++i){ + name = extraNames[i]; + s = o[name]; + if(!(name in r) || (r[name] !== s && (!(name in empty) || empty[name] !== s))){ + r[name] = s; // functions only, we don't clone them + } + } + } + return r; // Object + } + + /*===== + dojo.trim = function(str){ + // summary: + // Trims whitespace from both sides of the string + // str: String + // String to be trimmed + // returns: String + // Returns the trimmed string + // description: + // This version of trim() was selected for inclusion into the base due + // to its compact size and relatively good performance + // (see [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript) + // Uses String.prototype.trim instead, if available. + // The fastest but longest version of this function is located at + // dojo.string.trim() + return ""; // String + } + =====*/ + + dojo.trim = String.prototype.trim ? + function(str){ return str.trim(); } : + function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }; + + /*===== + dojo.replace = function(tmpl, map, pattern){ + // summary: + // Performs parameterized substitutions on a string. Throws an + // exception if any parameter is unmatched. + // tmpl: String + // String to be used as a template. + // map: Object|Function + // If an object, it is used as a dictionary to look up substitutions. + // If a function, it is called for every substitution with following + // parameters: a whole match, a name, an offset, and the whole template + // string (see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace + // for more details). + // pattern: RegEx? + // Optional regular expression objects that overrides the default pattern. + // Must be global and match one item. The default is: /\{([^\}]+)\}/g, + // which matches patterns like that: "{xxx}", where "xxx" is any sequence + // of characters, which doesn't include "}". + // returns: String + // Returns the substituted string. + // example: + // | // uses a dictionary for substitutions: + // | dojo.replace("Hello, {name.first} {name.last} AKA {nick}!", + // | { + // | nick: "Bob", + // | name: { + // | first: "Robert", + // | middle: "X", + // | last: "Cringely" + // | } + // | }); + // | // returns: Hello, Robert Cringely AKA Bob! + // example: + // | // uses an array for substitutions: + // | dojo.replace("Hello, {0} {2}!", + // | ["Robert", "X", "Cringely"]); + // | // returns: Hello, Robert Cringely! + // example: + // | // uses a function for substitutions: + // | function sum(a){ + // | var t = 0; + // | dojo.forEach(a, function(x){ t += x; }); + // | return t; + // | } + // | dojo.replace( + // | "{count} payments averaging {avg} USD per payment.", + // | dojo.hitch( + // | { payments: [11, 16, 12] }, + // | function(_, key){ + // | switch(key){ + // | case "count": return this.payments.length; + // | case "min": return Math.min.apply(Math, this.payments); + // | case "max": return Math.max.apply(Math, this.payments); + // | case "sum": return sum(this.payments); + // | case "avg": return sum(this.payments) / this.payments.length; + // | } + // | } + // | ) + // | ); + // | // prints: 3 payments averaging 13 USD per payment. + // example: + // | // uses an alternative PHP-like pattern for substitutions: + // | dojo.replace("Hello, ${0} ${2}!", + // | ["Robert", "X", "Cringely"], /\$\{([^\}]+)\}/g); + // | // returns: Hello, Robert Cringely! + return ""; // String + } + =====*/ + + var _pattern = /\{([^\}]+)\}/g; + dojo.replace = function(tmpl, map, pattern){ + return tmpl.replace(pattern || _pattern, d.isFunction(map) ? + map : function(_, k){ return d.getObject(k, false, map); }); + }; +})(); + +} + +if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.array"] = true; + +dojo.provide("dojo._base.array"); + +(function(){ + var _getParts = function(arr, obj, cb){ + return [ + (typeof arr == "string") ? arr.split("") : arr, + obj || dojo.global, + // FIXME: cache the anonymous functions we create here? + (typeof cb == "string") ? new Function("item", "index", "array", cb) : cb + ]; + }; + + var everyOrSome = function(/*Boolean*/every, /*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + for(var i=0,l=arr.length; i end) || i < end){ + for(; i != end; i += step){ + if(array[i] == value){ return i; } + } + } + return -1; // Number + }, + + lastIndexOf: function(/*Array*/array, /*Object*/value, /*Integer?*/fromIndex){ + // summary: + // locates the last index of the provided value in the passed + // array. If the value is not found, -1 is returned. + // description: + // This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when + // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript + // 1.6's lastIndexOf skips the holes in the sparse array. + // For details on this method, see: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf + return dojo.indexOf(array, value, fromIndex, true); // Number + }, + + forEach: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + // summary: + // for every item in arr, callback is invoked. Return values are ignored. + // If you want to break out of the loop, consider using dojo.every() or dojo.some(). + // forEach does not allow breaking out of the loop over the items in arr. + // arr: + // the array to iterate over. If a string, operates on individual characters. + // callback: + // a function is invoked with three arguments: item, index, and array + // thisObject: + // may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when + // run over sparse arrays, this implemenation passes the "holes" in the sparse array to + // the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array. + // For more details, see: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach + // example: + // | // log out all members of the array: + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | function(item){ + // | console.log(item); + // | } + // | ); + // example: + // | // log out the members and their indexes + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | function(item, idx, arr){ + // | console.log(item, "at index:", idx); + // | } + // | ); + // example: + // | // use a scoped object member as the callback + // | + // | var obj = { + // | prefix: "logged via obj.callback:", + // | callback: function(item){ + // | console.log(this.prefix, item); + // | } + // | }; + // | + // | // specifying the scope function executes the callback in that scope + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | obj.callback, + // | obj + // | ); + // | + // | // alternately, we can accomplish the same thing with dojo.hitch() + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | dojo.hitch(obj, "callback") + // | ); + + // match the behavior of the built-in forEach WRT empty arrs + if(!arr || !arr.length){ return; } + + // FIXME: there are several ways of handilng thisObject. Is + // dojo.global always the default context? + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + for(var i=0,l=arr.length; i1; }); + // example: + // | // returns true + // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); + return everyOrSome(true, arr, callback, thisObject); // Boolean + }, + + some: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + // summary: + // Determines whether or not any item in arr satisfies the + // condition implemented by callback. + // arr: + // the array to iterate over. If a string, operates on individual characters. + // callback: + // a function is invoked with three arguments: item, index, + // and array and returns true if the condition is met. + // thisObject: + // may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when + // run over sparse arrays, this implemenation passes the "holes" in the sparse array to + // the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array. + // For more details, see: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/some + // example: + // | // is true + // | dojo.some([1, 2, 3, 4], function(item){ return item>1; }); + // example: + // | // is false + // | dojo.some([1, 2, 3, 4], function(item){ return item<1; }); + return everyOrSome(false, arr, callback, thisObject); // Boolean + }, + + map: function(/*Array|String*/arr, /*Function|String*/callback, /*Function?*/thisObject){ + // summary: + // applies callback to each element of arr and returns + // an Array with the results + // arr: + // the array to iterate on. If a string, operates on + // individual characters. + // callback: + // a function is invoked with three arguments, (item, index, + // array), and returns a value + // thisObject: + // may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when + // run over sparse arrays, this implemenation passes the "holes" in the sparse array to + // the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array. + // For more details, see: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map + // example: + // | // returns [2, 3, 4, 5] + // | dojo.map([1, 2, 3, 4], function(item){ return item+1 }); + + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + var outArr = (arguments[3] ? (new arguments[3]()) : []); + for(var i=0,l=arr.length; i1; }); + + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + var outArr = []; + for(var i=0,l=arr.length; i= 0; --j){ + proto = lin[j].prototype; + if(!proto.hasOwnProperty("declaredClass")){ + proto.declaredClass = "uniqName_" + (counter++); + } + name = proto.declaredClass; + if(!nameMap.hasOwnProperty(name)){ + nameMap[name] = {count: 0, refs: [], cls: lin[j]}; + ++clsCount; + } + rec = nameMap[name]; + if(top && top !== rec){ + rec.refs.push(top); + ++top.count; + } + top = rec; + } + ++top.count; + roots[0].refs.push(top); + } + + // remove classes without external references recursively + while(roots.length){ + top = roots.pop(); + result.push(top.cls); + --clsCount; + // optimization: follow a single-linked chain + while(refs = top.refs, refs.length == 1){ + top = refs[0]; + if(!top || --top.count){ + // branch or end of chain => do not end to roots + top = 0; + break; + } + result.push(top.cls); + --clsCount; + } + if(top){ + // branch + for(i = 0, l = refs.length; i < l; ++i){ + top = refs[i]; + if(!--top.count){ + roots.push(top); + } + } + } + } + if(clsCount){ + err("can't build consistent linearization"); + } + + // calculate the superclass offset + base = bases[0]; + result[0] = base ? + base._meta && base === result[result.length - base._meta.bases.length] ? + base._meta.bases.length : 1 : 0; + + return result; + } + + function inherited(args, a, f){ + var name, chains, bases, caller, meta, base, proto, opf, pos, + cache = this._inherited = this._inherited || {}; + + // crack arguments + if(typeof args == "string"){ + name = args; + args = a; + a = f; + } + f = 0; + + caller = args.callee; + name = name || caller.nom; + if(!name){ + err("can't deduce a name to call inherited()"); + } + + meta = this.constructor._meta; + bases = meta.bases; + + pos = cache.p; + if(name != cname){ + // method + if(cache.c !== caller){ + // cache bust + pos = 0; + base = bases[0]; + meta = base._meta; + if(meta.hidden[name] !== caller){ + // error detection + chains = meta.chains; + if(chains && typeof chains[name] == "string"){ + err("calling chained method with inherited: " + name); + } + // find caller + do{ + meta = base._meta; + proto = base.prototype; + if(meta && (proto[name] === caller && proto.hasOwnProperty(name) || meta.hidden[name] === caller)){ + break; + } + }while(base = bases[++pos]); // intentional assignment + pos = base ? pos : -1; + } + } + // find next + base = bases[++pos]; + if(base){ + proto = base.prototype; + if(base._meta && proto.hasOwnProperty(name)){ + f = proto[name]; + }else{ + opf = op[name]; + do{ + proto = base.prototype; + f = proto[name]; + if(f && (base._meta ? proto.hasOwnProperty(name) : f !== opf)){ + break; + } + }while(base = bases[++pos]); // intentional assignment + } + } + f = base && f || op[name]; + }else{ + // constructor + if(cache.c !== caller){ + // cache bust + pos = 0; + meta = bases[0]._meta; + if(meta && meta.ctor !== caller){ + // error detection + chains = meta.chains; + if(!chains || chains.constructor !== "manual"){ + err("calling chained constructor with inherited"); + } + // find caller + while(base = bases[++pos]){ // intentional assignment + meta = base._meta; + if(meta && meta.ctor === caller){ + break; + } + }; + pos = base ? pos : -1; + } + } + // find next + while(base = bases[++pos]){ // intentional assignment + meta = base._meta; + f = meta ? meta.ctor : base; + if(f){ + break; + } + } + f = base && f; + } + + // cache the found super method + cache.c = f; + cache.p = pos; + + // now we have the result + if(f){ + return a === true ? f : f.apply(this, a || args); + } + // intentionally if a super method was not found + } + + function getInherited(name, args){ + if(typeof name == "string"){ + return this.inherited(name, args, true); + } + return this.inherited(name, true); + } + + // emulation of "instanceof" + function isInstanceOf(cls){ + var bases = this.constructor._meta.bases; + for(var i = 0, l = bases.length; i < l; ++i){ + if(bases[i] === cls){ + return true; + } + } + return this instanceof cls; + } + + // imlementation of safe mixin function + function safeMixin(target, source){ + var name, t, i = 0, l = d._extraNames.length; + // add props adding metadata for incoming functions skipping a constructor + for(name in source){ + t = source[name]; + if((t !== op[name] || !(name in op)) && name != cname){ + if(opts.call(t) == "[object Function]"){ + // non-trivial function method => attach its name + t.nom = name; + } + target[name] = t; + } + } + // process unenumerable methods on IE + for(; i < l; ++i){ + name = d._extraNames[i]; + t = source[name]; + if((t !== op[name] || !(name in op)) && name != cname){ + if(opts.call(t) == "[object Function]"){ + // non-trivial function method => attach its name + t.nom = name; + } + target[name] = t; + } + } + return target; + } + + function extend(source){ + safeMixin(this.prototype, source); + return this; + } + + // chained constructor compatible with the legacy dojo.declare() + function chainedConstructor(bases, ctorSpecial){ + return function(){ + var a = arguments, args = a, a0 = a[0], f, i, m, + l = bases.length, preArgs; + //this._inherited = {}; + // perform the shaman's rituals of the original dojo.declare() + // 1) call two types of the preamble + if(ctorSpecial && (a0 && a0.preamble || this.preamble)){ + // full blown ritual + preArgs = new Array(bases.length); + // prepare parameters + preArgs[0] = a; + for(i = 0;;){ + // process the preamble of the 1st argument + a0 = a[0]; + if(a0){ + f = a0.preamble; + if(f){ + a = f.apply(this, a) || a; + } + } + // process the preamble of this class + f = bases[i].prototype; + f = f.hasOwnProperty("preamble") && f.preamble; + if(f){ + a = f.apply(this, a) || a; + } + // one pecularity of the preamble: + // it is called if it is not needed, + // e.g., there is no constructor to call + // let's watch for the last constructor + // (see ticket #9795) + if(++i == l){ + break; + } + preArgs[i] = a; + } + } + // 2) call all non-trivial constructors using prepared arguments + for(i = l - 1; i >= 0; --i){ + f = bases[i]; + m = f._meta; + f = m ? m.ctor : f; + if(f){ + f.apply(this, preArgs ? preArgs[i] : a); + } + } + // 3) continue the original ritual: call the postscript + f = this.postscript; + if(f){ + f.apply(this, args); + } + }; + } + + // chained constructor compatible with the legacy dojo.declare() + function singleConstructor(ctor, ctorSpecial){ + return function(){ + var a = arguments, t = a, a0 = a[0], f; + //this._inherited = {}; + // perform the shaman's rituals of the original dojo.declare() + // 1) call two types of the preamble + if(ctorSpecial){ + // full blown ritual + if(a0){ + // process the preamble of the 1st argument + f = a0.preamble; + if(f){ + t = f.apply(this, t) || t; + } + } + f = this.preamble; + if(f){ + // process the preamble of this class + f.apply(this, t); + // one pecularity of the preamble: + // it is called even if it is not needed, + // e.g., there is no constructor to call + // let's watch for the last constructor + // (see ticket #9795) + } + } + // 2) call a constructor + if(ctor){ + ctor.apply(this, a); + } + // 3) continue the original ritual: call the postscript + f = this.postscript; + if(f){ + f.apply(this, a); + } + }; + } + + // plain vanilla constructor (can use inherited() to call its base constructor) + function simpleConstructor(bases){ + return function(){ + var a = arguments, i = 0, f; + //this._inherited = {}; + // perform the shaman's rituals of the original dojo.declare() + // 1) do not call the preamble + // 2) call the top constructor (it can use this.inherited()) + for(; f = bases[i]; ++i){ // intentional assignment + m = f._meta; + f = m ? m.ctor : f; + if(f){ + f.apply(this, a); + break; + } + } + // 3) call the postscript + f = this.postscript; + if(f){ + f.apply(this, a); + } + }; + } + + function chain(name, bases, reversed){ + return function(){ + var b, m, f, i = 0, step = 1; + if(reversed){ + i = bases.length - 1; + step = -1; + } + for(; b = bases[i]; i += step){ // intentional assignment + m = b._meta; + f = (m ? m.hidden : b.prototype)[name]; + if(f){ + f.apply(this, arguments); + } + } + }; + } + + d.declare = function(className, superclass, props){ + var proto, i, t, ctor, name, bases, chains, mixins = 1, parents = superclass; + + // crack parameters + if(typeof className != "string"){ + props = superclass; + superclass = className; + className = ""; + } + props = props || {}; + + // build a prototype + if(opts.call(superclass) == "[object Array]"){ + // C3 MRO + bases = c3mro(superclass); + t = bases[0]; + mixins = bases.length - t; + superclass = bases[mixins]; + }else{ + bases = [0]; + if(superclass){ + t = superclass._meta; + bases = bases.concat(t ? t.bases : superclass); + } + } + if(superclass){ + for(i = mixins - 1;; --i){ + // delegation + xtor.prototype = superclass.prototype; + proto = new xtor; + if(!i){ + // stop if nothing to add (the last base) + break; + } + // mix in properties + t = bases[i]; + mix(proto, t._meta ? t._meta.hidden : t.prototype); + // chain in new constructor + ctor = new Function; + ctor.superclass = superclass; + ctor.prototype = proto; + superclass = proto.constructor = ctor; + } + }else{ + proto = {}; + } + // add all properties + safeMixin(proto, props); + // add constructor + t = props.constructor; + if(t !== op.constructor){ + t.nom = cname; + proto.constructor = t; + } + xtor.prototype = 0; // cleanup + + // collect chains and flags + for(i = mixins - 1; i; --i){ // intentional assignment + t = bases[i]._meta; + if(t && t.chains){ + chains = mix(chains || {}, t.chains); + } + } + if(proto["-chains-"]){ + chains = mix(chains || {}, proto["-chains-"]); + } + + // build ctor + t = !chains || !chains.hasOwnProperty(cname); + bases[0] = ctor = (chains && chains.constructor === "manual") ? simpleConstructor(bases) : + (bases.length == 1 ? singleConstructor(props.constructor, t) : chainedConstructor(bases, t)); + + // add meta information to the constructor + ctor._meta = {bases: bases, hidden: props, chains: chains, + parents: parents, ctor: props.constructor}; + ctor.superclass = superclass && superclass.prototype; + ctor.extend = extend; + ctor.prototype = proto; + proto.constructor = ctor; + + // add "standard" methods to the ptototype + proto.getInherited = getInherited; + proto.inherited = inherited; + proto.isInstanceOf = isInstanceOf; + + // add name if specified + if(className){ + proto.declaredClass = className; + d.setObject(className, ctor); + } + + // build chains and add them to the prototype + if(chains){ + for(name in chains){ + if(proto[name] && typeof chains[name] == "string" && name != cname){ + t = proto[name] = chain(name, bases, chains[name] === "after"); + t.nom = name; + } + } + } + // chained methods do not return values + // no need to chain "invisible" functions + + return ctor; // Function + }; + + d.safeMixin = safeMixin; + + /*===== + dojo.declare = function(className, superclass, props){ + // summary: + // Create a feature-rich constructor from compact notation. + // className: String?: + // The optional name of the constructor (loosely, a "class") + // stored in the "declaredClass" property in the created prototype. + // It will be used as a global name for a created constructor. + // superclass: Function|Function[]: + // May be null, a Function, or an Array of Functions. This argument + // specifies a list of bases (the left-most one is the most deepest + // base). + // props: Object: + // An object whose properties are copied to the created prototype. + // Add an instance-initialization function by making it a property + // named "constructor". + // returns: + // New constructor function. + // description: + // Create a constructor using a compact notation for inheritance and + // prototype extension. + // + // Mixin ancestors provide a type of multiple inheritance. + // Prototypes of mixin ancestors are copied to the new class: + // changes to mixin prototypes will not affect classes to which + // they have been mixed in. + // + // Ancestors can be compound classes created by this version of + // dojo.declare. In complex cases all base classes are going to be + // linearized according to C3 MRO algorithm + // (see http://www.python.org/download/releases/2.3/mro/ for more + // details). + // + // "className" is cached in "declaredClass" property of the new class, + // if it was supplied. The immediate super class will be cached in + // "superclass" property of the new class. + // + // Methods in "props" will be copied and modified: "nom" property + // (the declared name of the method) will be added to all copied + // functions to help identify them for the internal machinery. Be + // very careful, while reusing methods: if you use the same + // function under different names, it can produce errors in some + // cases. + // + // It is possible to use constructors created "manually" (without + // dojo.declare) as bases. They will be called as usual during the + // creation of an instance, their methods will be chained, and even + // called by "this.inherited()". + // + // Special property "-chains-" governs how to chain methods. It is + // a dictionary, which uses method names as keys, and hint strings + // as values. If a hint string is "after", this method will be + // called after methods of its base classes. If a hint string is + // "before", this method will be called before methods of its base + // classes. + // + // If "constructor" is not mentioned in "-chains-" property, it will + // be chained using the legacy mode: using "after" chaining, + // calling preamble() method before each constructor, if available, + // and calling postscript() after all constructors were executed. + // If the hint is "after", it is chained as a regular method, but + // postscript() will be called after the chain of constructors. + // "constructor" cannot be chained "before", but it allows + // a special hint string: "manual", which means that constructors + // are not going to be chained in any way, and programmer will call + // them manually using this.inherited(). In the latter case + // postscript() will be called after the construction. + // + // All chaining hints are "inherited" from base classes and + // potentially can be overridden. Be very careful when overriding + // hints! Make sure that all chained methods can work in a proposed + // manner of chaining. + // + // Once a method was chained, it is impossible to unchain it. The + // only exception is "constructor". You don't need to define a + // method in order to supply a chaining hint. + // + // If a method is chained, it cannot use this.inherited() because + // all other methods in the hierarchy will be called automatically. + // + // Usually constructors and initializers of any kind are chained + // using "after" and destructors of any kind are chained as + // "before". Note that chaining assumes that chained methods do not + // return any value: any returned value will be discarded. + // + // example: + // | dojo.declare("my.classes.bar", my.classes.foo, { + // | // properties to be added to the class prototype + // | someValue: 2, + // | // initialization function + // | constructor: function(){ + // | this.myComplicatedObject = new ReallyComplicatedObject(); + // | }, + // | // other functions + // | someMethod: function(){ + // | doStuff(); + // | } + // | }); + // + // example: + // | var MyBase = dojo.declare(null, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var MyClass1 = dojo.declare(MyBase, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var MyClass2 = dojo.declare(MyBase, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var MyDiamond = dojo.declare([MyClass1, MyClass2], { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // + // example: + // | var F = function(){ console.log("raw constructor"); }; + // | F.prototype.method = function(){ + // | console.log("raw method"); + // | }; + // | var A = dojo.declare(F, { + // | constructor: function(){ + // | console.log("A.constructor"); + // | }, + // | method: function(){ + // | console.log("before calling F.method..."); + // | this.inherited(arguments); + // | console.log("...back in A"); + // | } + // | }); + // | new A().method(); + // | // will print: + // | // raw constructor + // | // A.constructor + // | // before calling F.method... + // | // raw method + // | // ...back in A + // + // example: + // | var A = dojo.declare(null, { + // | "-chains-": { + // | destroy: "before" + // | } + // | }); + // | var B = dojo.declare(A, { + // | constructor: function(){ + // | console.log("B.constructor"); + // | }, + // | destroy: function(){ + // | console.log("B.destroy"); + // | } + // | }); + // | var C = dojo.declare(B, { + // | constructor: function(){ + // | console.log("C.constructor"); + // | }, + // | destroy: function(){ + // | console.log("C.destroy"); + // | } + // | }); + // | new C().destroy(); + // | // prints: + // | // B.constructor + // | // C.constructor + // | // C.destroy + // | // B.destroy + // + // example: + // | var A = dojo.declare(null, { + // | "-chains-": { + // | constructor: "manual" + // | } + // | }); + // | var B = dojo.declare(A, { + // | constructor: function(){ + // | // ... + // | // call the base constructor with new parameters + // | this.inherited(arguments, [1, 2, 3]); + // | // ... + // | } + // | }); + // + // example: + // | var A = dojo.declare(null, { + // | "-chains-": { + // | m1: "before" + // | }, + // | m1: function(){ + // | console.log("A.m1"); + // | }, + // | m2: function(){ + // | console.log("A.m2"); + // | } + // | }); + // | var B = dojo.declare(A, { + // | "-chains-": { + // | m2: "after" + // | }, + // | m1: function(){ + // | console.log("B.m1"); + // | }, + // | m2: function(){ + // | console.log("B.m2"); + // | } + // | }); + // | var x = new B(); + // | x.m1(); + // | // prints: + // | // B.m1 + // | // A.m1 + // | x.m2(); + // | // prints: + // | // A.m2 + // | // B.m2 + return new Function(); // Function + }; + =====*/ + + /*===== + dojo.safeMixin = function(target, source){ + // summary: + // Mix in properties skipping a constructor and decorating functions + // like it is done by dojo.declare. + // target: Object + // Target object to accept new properties. + // source: Object + // Source object for new properties. + // description: + // This function is used to mix in properties like dojo._mixin does, + // but it skips a constructor property and decorates functions like + // dojo.declare does. + // + // It is meant to be used with classes and objects produced with + // dojo.declare. Functions mixed in with dojo.safeMixin can use + // this.inherited() like normal methods. + // + // This function is used to implement extend() method of a constructor + // produced with dojo.declare(). + // + // example: + // | var A = dojo.declare(null, { + // | m1: function(){ + // | console.log("A.m1"); + // | }, + // | m2: function(){ + // | console.log("A.m2"); + // | } + // | }); + // | var B = dojo.declare(A, { + // | m1: function(){ + // | this.inherited(arguments); + // | console.log("B.m1"); + // | } + // | }); + // | B.extend({ + // | m2: function(){ + // | this.inherited(arguments); + // | console.log("B.m2"); + // | } + // | }); + // | var x = new B(); + // | dojo.safeMixin(x, { + // | m1: function(){ + // | this.inherited(arguments); + // | console.log("X.m1"); + // | }, + // | m2: function(){ + // | this.inherited(arguments); + // | console.log("X.m2"); + // | } + // | }); + // | x.m2(); + // | // prints: + // | // A.m1 + // | // B.m1 + // | // X.m1 + }; + =====*/ + + /*===== + Object.inherited = function(name, args, newArgs){ + // summary: + // Calls a super method. + // name: String? + // The optional method name. Should be the same as the caller's + // name. Usually "name" is specified in complex dynamic cases, when + // the calling method was dynamically added, undecorated by + // dojo.declare, and it cannot be determined. + // args: Arguments + // The caller supply this argument, which should be the original + // "arguments". + // newArgs: Object? + // If "true", the found function will be returned without + // executing it. + // If Array, it will be used to call a super method. Otherwise + // "args" will be used. + // returns: + // Whatever is returned by a super method, or a super method itself, + // if "true" was specified as newArgs. + // description: + // This method is used inside method of classes produced with + // dojo.declare to call a super method (next in the chain). It is + // used for manually controlled chaining. Consider using the regular + // chaining, because it is faster. Use "this.inherited()" only in + // complex cases. + // + // This method cannot me called from automatically chained + // constructors including the case of a special (legacy) + // constructor chaining. It cannot be called from chained methods. + // + // If "this.inherited()" cannot find the next-in-chain method, it + // does nothing and returns "undefined". The last method in chain + // can be a default method implemented in Object, which will be + // called last. + // + // If "name" is specified, it is assumed that the method that + // received "args" is the parent method for this call. It is looked + // up in the chain list and if it is found the next-in-chain method + // is called. If it is not found, the first-in-chain method is + // called. + // + // If "name" is not specified, it will be derived from the calling + // method (using a methoid property "nom"). + // + // example: + // | var B = dojo.declare(A, { + // | method1: function(a, b, c){ + // | this.inherited(arguments); + // | }, + // | method2: function(a, b){ + // | return this.inherited(arguments, [a + b]); + // | } + // | }); + // | // next method is not in the chain list because it is added + // | // manually after the class was created. + // | B.prototype.method3 = function(){ + // | console.log("This is a dynamically-added method."); + // | this.inherited("method3", arguments); + // | }; + // example: + // | var B = dojo.declare(A, { + // | method: function(a, b){ + // | var super = this.inherited(arguments, true); + // | // ... + // | if(!super){ + // | console.log("there is no super method"); + // | return 0; + // | } + // | return super.apply(this, arguments); + // | } + // | }); + return {}; // Object + } + =====*/ + + /*===== + Object.getInherited = function(name, args){ + // summary: + // Returns a super method. + // name: String? + // The optional method name. Should be the same as the caller's + // name. Usually "name" is specified in complex dynamic cases, when + // the calling method was dynamically added, undecorated by + // dojo.declare, and it cannot be determined. + // args: Arguments + // The caller supply this argument, which should be the original + // "arguments". + // returns: + // Returns a super method (Function) or "undefined". + // description: + // This method is a convenience method for "this.inherited()". + // It uses the same algorithm but instead of executing a super + // method, it returns it, or "undefined" if not found. + // + // example: + // | var B = dojo.declare(A, { + // | method: function(a, b){ + // | var super = this.getInherited(arguments); + // | // ... + // | if(!super){ + // | console.log("there is no super method"); + // | return 0; + // | } + // | return super.apply(this, arguments); + // | } + // | }); + return {}; // Object + } + =====*/ + + /*===== + Object.isInstanceOf = function(cls){ + // summary: + // Checks the inheritance cahin to see if it is inherited from this + // class. + // cls: Function + // Class constructor. + // returns: + // "true", if this object is inherited from this class, "false" + // otherwise. + // description: + // This method is used with instances of classes produced with + // dojo.declare to determine of they support a certain interface or + // not. It models "instanceof" operator. + // + // example: + // | var A = dojo.declare(null, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var B = dojo.declare(null, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var C = dojo.declare([A, B], { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var D = dojo.declare(A, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | + // | var a = new A(), b = new B(), c = new C(), d = new D(); + // | + // | console.log(a.isInstanceOf(A)); // true + // | console.log(b.isInstanceOf(A)); // false + // | console.log(c.isInstanceOf(A)); // true + // | console.log(d.isInstanceOf(A)); // true + // | + // | console.log(a.isInstanceOf(B)); // false + // | console.log(b.isInstanceOf(B)); // true + // | console.log(c.isInstanceOf(B)); // true + // | console.log(d.isInstanceOf(B)); // false + // | + // | console.log(a.isInstanceOf(C)); // false + // | console.log(b.isInstanceOf(C)); // false + // | console.log(c.isInstanceOf(C)); // true + // | console.log(d.isInstanceOf(C)); // false + // | + // | console.log(a.isInstanceOf(D)); // false + // | console.log(b.isInstanceOf(D)); // false + // | console.log(c.isInstanceOf(D)); // false + // | console.log(d.isInstanceOf(D)); // true + return {}; // Object + } + =====*/ + + /*===== + Object.extend = function(source){ + // summary: + // Adds all properties and methods of source to constructor's + // prototype, making them available to all instances created with + // constructor. This method is specific to constructors created with + // dojo.declare. + // source: Object + // Source object which properties are going to be copied to the + // constructor's prototype. + // description: + // Adds source properties to the constructor's prototype. It can + // override existing properties. + // + // This method is similar to dojo.extend function, but it is specific + // to constructors produced by dojo.declare. It is implemented + // using dojo.safeMixin, and it skips a constructor property, + // and properly decorates copied functions. + // + // example: + // | var A = dojo.declare(null, { + // | m1: function(){}, + // | s1: "Popokatepetl" + // | }); + // | A.extend({ + // | m1: function(){}, + // | m2: function(){}, + // | f1: true, + // | d1: 42 + // | }); + }; + =====*/ +})(); + +} + +if(!dojo._hasResource["dojo._base.connect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.connect"] = true; +dojo.provide("dojo._base.connect"); + +// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA + +// low-level delegation machinery +dojo._listener = { + // create a dispatcher function + getDispatcher: function(){ + // following comments pulled out-of-line to prevent cloning them + // in the returned function. + // - indices (i) that are really in the array of listeners (ls) will + // not be in Array.prototype. This is the 'sparse array' trick + // that keeps us safe from libs that take liberties with built-in + // objects + // - listener is invoked with current scope (this) + return function(){ + var ap=Array.prototype, c=arguments.callee, ls=c._listeners, t=c.target; + // return value comes from original target function + var r = t && t.apply(this, arguments); + // make local copy of listener array so it is immutable during processing + var lls; + lls = [].concat(ls); + + // invoke listeners after target function + for(var i in lls){ + if(!(i in ap)){ + lls[i].apply(this, arguments); + } + } + // return value comes from original target function + return r; + } + }, + // add a listener to an object + add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ + // Whenever 'method' is invoked, 'listener' will have the same scope. + // Trying to supporting a context object for the listener led to + // complexity. + // Non trivial to provide 'once' functionality here + // because listener could be the result of a dojo.hitch call, + // in which case two references to the same hitch target would not + // be equivalent. + source = source || dojo.global; + // The source method is either null, a dispatcher, or some other function + var f = source[method]; + // Ensure a dispatcher + if(!f||!f._listeners){ + var d = dojo._listener.getDispatcher(); + // original target function is special + d.target = f; + // dispatcher holds a list of listeners + d._listeners = []; + // redirect source to dispatcher + f = source[method] = d; + } + // The contract is that a handle is returned that can + // identify this listener for disconnect. + // + // The type of the handle is private. Here is it implemented as Integer. + // DOM event code has this same contract but handle is Function + // in non-IE browsers. + // + // We could have separate lists of before and after listeners. + return f._listeners.push(listener) ; /*Handle*/ + }, + // remove a listener from an object + remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){ + var f = (source||dojo.global)[method]; + // remember that handle is the index+1 (0 is not a valid handle) + if(f && f._listeners && handle--){ + delete f._listeners[handle]; + } + } +}; + +// Multiple delegation for arbitrary methods. + +// This unit knows nothing about DOM, but we include DOM aware documentation +// and dontFix argument here to help the autodocs. Actual DOM aware code is in +// event.js. + +dojo.connect = function(/*Object|null*/ obj, + /*String*/ event, + /*Object|null*/ context, + /*String|Function*/ method, + /*Boolean?*/ dontFix){ + // summary: + // `dojo.connect` is the core event handling and delegation method in + // Dojo. It allows one function to "listen in" on the execution of + // any other, triggering the second whenever the first is called. Many + // listeners may be attached to a function, and source functions may + // be either regular function calls or DOM events. + // + // description: + // Connects listeners to actions, so that after event fires, a + // listener is called with the same arguments passed to the orginal + // function. + // + // Since `dojo.connect` allows the source of events to be either a + // "regular" JavaScript function or a DOM event, it provides a uniform + // interface for listening to all the types of events that an + // application is likely to deal with though a single, unified + // interface. DOM programmers may want to think of it as + // "addEventListener for everything and anything". + // + // When setting up a connection, the `event` parameter must be a + // string that is the name of the method/event to be listened for. If + // `obj` is null, `dojo.global` is assumed, meaning that connections + // to global methods are supported but also that you may inadvertantly + // connect to a global by passing an incorrect object name or invalid + // reference. + // + // `dojo.connect` generally is forgiving. If you pass the name of a + // function or method that does not yet exist on `obj`, connect will + // not fail, but will instead set up a stub method. Similarly, null + // arguments may simply be omitted such that fewer than 4 arguments + // may be required to set up a connection See the examples for deails. + // + // The return value is a handle that is needed to + // remove this connection with `dojo.disconnect`. + // + // obj: + // The source object for the event function. + // Defaults to `dojo.global` if null. + // If obj is a DOM node, the connection is delegated + // to the DOM event manager (unless dontFix is true). + // + // event: + // String name of the event function in obj. + // I.e. identifies a property `obj[event]`. + // + // context: + // The object that method will receive as "this". + // + // If context is null and method is a function, then method + // inherits the context of event. + // + // If method is a string then context must be the source + // object object for method (context[method]). If context is null, + // dojo.global is used. + // + // method: + // A function reference, or name of a function in context. + // The function identified by method fires after event does. + // method receives the same arguments as the event. + // See context argument comments for information on method's scope. + // + // dontFix: + // If obj is a DOM node, set dontFix to true to prevent delegation + // of this connection to the DOM event manager. + // + // example: + // When obj.onchange(), do ui.update(): + // | dojo.connect(obj, "onchange", ui, "update"); + // | dojo.connect(obj, "onchange", ui, ui.update); // same + // + // example: + // Using return value for disconnect: + // | var link = dojo.connect(obj, "onchange", ui, "update"); + // | ... + // | dojo.disconnect(link); + // + // example: + // When onglobalevent executes, watcher.handler is invoked: + // | dojo.connect(null, "onglobalevent", watcher, "handler"); + // + // example: + // When ob.onCustomEvent executes, customEventHandler is invoked: + // | dojo.connect(ob, "onCustomEvent", null, "customEventHandler"); + // | dojo.connect(ob, "onCustomEvent", "customEventHandler"); // same + // + // example: + // When ob.onCustomEvent executes, customEventHandler is invoked + // with the same scope (this): + // | dojo.connect(ob, "onCustomEvent", null, customEventHandler); + // | dojo.connect(ob, "onCustomEvent", customEventHandler); // same + // + // example: + // When globalEvent executes, globalHandler is invoked + // with the same scope (this): + // | dojo.connect(null, "globalEvent", null, globalHandler); + // | dojo.connect("globalEvent", globalHandler); // same + + // normalize arguments + var a=arguments, args=[], i=0; + // if a[0] is a String, obj was ommited + args.push(dojo.isString(a[0]) ? null : a[i++], a[i++]); + // if the arg-after-next is a String or Function, context was NOT omitted + var a1 = a[i+1]; + args.push(dojo.isString(a1)||dojo.isFunction(a1) ? a[i++] : null, a[i++]); + // absorb any additional arguments + for(var l=a.length; i. + // description: + // JavaScript has no threads, and even if it did, threads are hard. + // Deferreds are a way of abstracting non-blocking events, such as the + // final response to an XMLHttpRequest. Deferreds create a promise to + // return a response a some point in the future and an easy way to + // register your interest in receiving that response. + // + // The most important methods for Deffered users are: + // + // * addCallback(handler) + // * addErrback(handler) + // * callback(result) + // * errback(result) + // + // In general, when a function returns a Deferred, users then "fill + // in" the second half of the contract by registering callbacks and + // error handlers. You may register as many callback and errback + // handlers as you like and they will be executed in the order + // registered when a result is provided. Usually this result is + // provided as the result of an asynchronous operation. The code + // "managing" the Deferred (the code that made the promise to provide + // an answer later) will use the callback() and errback() methods to + // communicate with registered listeners about the result of the + // operation. At this time, all registered result handlers are called + // *with the most recent result value*. + // + // Deferred callback handlers are treated as a chain, and each item in + // the chain is required to return a value that will be fed into + // successive handlers. The most minimal callback may be registered + // like this: + // + // | var d = new dojo.Deferred(); + // | d.addCallback(function(result){ return result; }); + // + // Perhaps the most common mistake when first using Deferreds is to + // forget to return a value (in most cases, the value you were + // passed). + // + // The sequence of callbacks is internally represented as a list of + // 2-tuples containing the callback/errback pair. For example, the + // following call sequence: + // + // | var d = new dojo.Deferred(); + // | d.addCallback(myCallback); + // | d.addErrback(myErrback); + // | d.addBoth(myBoth); + // | d.addCallbacks(myCallback, myErrback); + // + // is translated into a Deferred with the following internal + // representation: + // + // | [ + // | [myCallback, null], + // | [null, myErrback], + // | [myBoth, myBoth], + // | [myCallback, myErrback] + // | ] + // + // The Deferred also keeps track of its current status (fired). Its + // status may be one of three things: + // + // * -1: no value yet (initial condition) + // * 0: success + // * 1: error + // + // A Deferred will be in the error state if one of the following three + // conditions are met: + // + // 1. The result given to callback or errback is "instanceof" Error + // 2. The previous callback or errback raised an exception while + // executing + // 3. The previous callback or errback returned a value + // "instanceof" Error + // + // Otherwise, the Deferred will be in the success state. The state of + // the Deferred determines the next element in the callback sequence + // to run. + // + // When a callback or errback occurs with the example deferred chain, + // something equivalent to the following will happen (imagine + // that exceptions are caught and returned): + // + // | // d.callback(result) or d.errback(result) + // | if(!(result instanceof Error)){ + // | result = myCallback(result); + // | } + // | if(result instanceof Error){ + // | result = myErrback(result); + // | } + // | result = myBoth(result); + // | if(result instanceof Error){ + // | result = myErrback(result); + // | }else{ + // | result = myCallback(result); + // | } + // + // The result is then stored away in case another step is added to the + // callback sequence. Since the Deferred already has a value + // available, any new callbacks added will be called immediately. + // + // There are two other "advanced" details about this implementation + // that are useful: + // + // Callbacks are allowed to return Deferred instances themselves, so + // you can build complicated sequences of events with ease. + // + // The creator of the Deferred may specify a canceller. The canceller + // is a function that will be called if Deferred.cancel is called + // before the Deferred fires. You can use this to implement clean + // aborting of an XMLHttpRequest, etc. Note that cancel will fire the + // deferred with a CancelledError (unless your canceller returns + // another kind of error), so the errbacks should be prepared to + // handle that error for cancellable Deferreds. + // example: + // | var deferred = new dojo.Deferred(); + // | setTimeout(function(){ deferred.callback({success: true}); }, 1000); + // | return deferred; + // example: + // Deferred objects are often used when making code asynchronous. It + // may be easiest to write functions in a synchronous manner and then + // split code using a deferred to trigger a response to a long-lived + // operation. For example, instead of register a callback function to + // denote when a rendering operation completes, the function can + // simply return a deferred: + // + // | // callback style: + // | function renderLotsOfData(data, callback){ + // | var success = false + // | try{ + // | for(var x in data){ + // | renderDataitem(data[x]); + // | } + // | success = true; + // | }catch(e){ } + // | if(callback){ + // | callback(success); + // | } + // | } + // + // | // using callback style + // | renderLotsOfData(someDataObj, function(success){ + // | // handles success or failure + // | if(!success){ + // | promptUserToRecover(); + // | } + // | }); + // | // NOTE: no way to add another callback here!! + // example: + // Using a Deferred doesn't simplify the sending code any, but it + // provides a standard interface for callers and senders alike, + // providing both with a simple way to service multiple callbacks for + // an operation and freeing both sides from worrying about details + // such as "did this get called already?". With Deferreds, new + // callbacks can be added at any time. + // + // | // Deferred style: + // | function renderLotsOfData(data){ + // | var d = new dojo.Deferred(); + // | try{ + // | for(var x in data){ + // | renderDataitem(data[x]); + // | } + // | d.callback(true); + // | }catch(e){ + // | d.errback(new Error("rendering failed")); + // | } + // | return d; + // | } + // + // | // using Deferred style + // | renderLotsOfData(someDataObj).addErrback(function(){ + // | promptUserToRecover(); + // | }); + // | // NOTE: addErrback and addCallback both return the Deferred + // | // again, so we could chain adding callbacks or save the + // | // deferred for later should we need to be notified again. + // example: + // In this example, renderLotsOfData is syncrhonous and so both + // versions are pretty artificial. Putting the data display on a + // timeout helps show why Deferreds rock: + // + // | // Deferred style and async func + // | function renderLotsOfData(data){ + // | var d = new dojo.Deferred(); + // | setTimeout(function(){ + // | try{ + // | for(var x in data){ + // | renderDataitem(data[x]); + // | } + // | d.callback(true); + // | }catch(e){ + // | d.errback(new Error("rendering failed")); + // | } + // | }, 100); + // | return d; + // | } + // + // | // using Deferred style + // | renderLotsOfData(someDataObj).addErrback(function(){ + // | promptUserToRecover(); + // | }); + // + // Note that the caller doesn't have to change his code at all to + // handle the asynchronous case. + + this.chain = []; + this.id = this._nextId(); + this.fired = -1; + this.paused = 0; + this.results = [null, null]; + this.canceller = canceller; + this.silentlyCancelled = false; + this.isFiring = false; +}; + +dojo.extend(dojo.Deferred, { + /* + makeCalled: function(){ + // summary: + // returns a new, empty deferred, which is already in the called + // state. Calling callback() or errback() on this deferred will + // yeild an error and adding new handlers to it will result in + // them being called immediately. + var deferred = new dojo.Deferred(); + deferred.callback(); + return deferred; + }, + + toString: function(){ + var state; + if(this.fired == -1){ + state = 'unfired'; + }else{ + state = this.fired ? 'success' : 'error'; + } + return 'Deferred(' + this.id + ', ' + state + ')'; + }, + */ + + _nextId: (function(){ + var n = 1; + return function(){ return n++; }; + })(), + + cancel: function(){ + // summary: + // Cancels a Deferred that has not yet received a value, or is + // waiting on another Deferred as its value. + // description: + // If a canceller is defined, the canceller is called. If the + // canceller did not return an error, or there was no canceller, + // then the errback chain is started. + var err; + if(this.fired == -1){ + if(this.canceller){ + err = this.canceller(this); + }else{ + this.silentlyCancelled = true; + } + if(this.fired == -1){ + if(!(err instanceof Error)){ + var res = err; + var msg = "Deferred Cancelled"; + if(err && err.toString){ + msg += ": " + err.toString(); + } + err = new Error(msg); + err.dojoType = "cancel"; + err.cancelResult = res; + } + this.errback(err); + } + }else if( (this.fired == 0) && + (this.results[0] instanceof dojo.Deferred) + ){ + this.results[0].cancel(); + } + }, + + _resback: function(res){ + // summary: + // The private primitive that means either callback or errback + this.fired = ((res instanceof Error) ? 1 : 0); + this.results[this.fired] = res; + this._fire(); + }, + + _check: function(){ + if(this.fired != -1){ + if(!this.silentlyCancelled){ + throw new Error("already called!"); + } + this.silentlyCancelled = false; + return; + } + }, + + callback: function(res){ + // summary: + // Begin the callback sequence with a non-error value. + + /* + callback or errback should only be called once on a given + Deferred. + */ + this._check(); + this._resback(res); + }, + + errback: function(/*Error*/res){ + // summary: + // Begin the callback sequence with an error result. + this._check(); + if(!(res instanceof Error)){ + res = new Error(res); + } + this._resback(res); + }, + + addBoth: function(/*Function|Object*/cb, /*String?*/cbfn){ + // summary: + // Add the same function as both a callback and an errback as the + // next element on the callback sequence.This is useful for code + // that you want to guarantee to run, e.g. a finalizer. + var enclosed = dojo.hitch.apply(dojo, arguments); + return this.addCallbacks(enclosed, enclosed); // dojo.Deferred + }, + + addCallback: function(/*Function|Object*/cb, /*String?*/cbfn /*...*/){ + // summary: + // Add a single callback to the end of the callback sequence. + return this.addCallbacks(dojo.hitch.apply(dojo, arguments)); // dojo.Deferred + }, + + addErrback: function(cb, cbfn){ + // summary: + // Add a single callback to the end of the callback sequence. + return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments)); // dojo.Deferred + }, + + addCallbacks: function(cb, eb){ + // summary: + // Add separate callback and errback to the end of the callback + // sequence. + this.chain.push([cb, eb]) + if(this.fired >= 0 && !this.isFiring){ + this._fire(); + } + return this; // dojo.Deferred + }, + + _fire: function(){ + // summary: + // Used internally to exhaust the callback sequence when a result + // is available. + this.isFiring = true; + var chain = this.chain; + var fired = this.fired; + var res = this.results[fired]; + var self = this; + var cb = null; + while( + (chain.length > 0) && + (this.paused == 0) + ){ + // Array + var f = chain.shift()[fired]; + if(!f){ continue; } + var func = function(){ + var ret = f(res); + //If no response, then use previous response. + if(typeof ret != "undefined"){ + res = ret; + } + fired = ((res instanceof Error) ? 1 : 0); + if(res instanceof dojo.Deferred){ + cb = function(res){ + self._resback(res); + // inlined from _pause() + self.paused--; + if( + (self.paused == 0) && + (self.fired >= 0) + ){ + self._fire(); + } + } + // inlined from _unpause + this.paused++; + } + }; + if(dojo.config.debugAtAllCosts){ + func.call(this); + }else{ + try{ + func.call(this); + }catch(err){ + fired = 1; + res = err; + } + } + } + this.fired = fired; + this.results[fired] = res; + this.isFiring = false; + if((cb)&&(this.paused)){ + // this is for "tail recursion" in case the dependent + // deferred is already fired + res.addBoth(cb); + } + } +}); + +} + +if(!dojo._hasResource["dojo._base.json"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.json"] = true; +dojo.provide("dojo._base.json"); + +dojo.fromJson = function(/*String*/ json){ + // summary: + // Parses a [JSON](http://json.org) string to return a JavaScript object. + // description: + // Throws for invalid JSON strings, but it does not use a strict JSON parser. It + // delegates to eval(). + // json: + // a string literal of a JSON item, for instance: + // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` + + return eval("(" + json + ")"); // Object +} + +dojo._escapeString = function(/*String*/str){ + //summary: + // Adds escape sequences for non-visual characters, double quote and + // backslash and surrounds with double quotes to form a valid string + // literal. + return ('"' + str.replace(/(["\\])/g, '\\$1') + '"'). + replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n"). + replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r"); // string +} + +dojo.toJsonIndentStr = "\t"; +dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){ + // summary: + // Returns a [JSON](http://json.org) serialization of an object. + // description: + // Returns a [JSON](http://json.org) serialization of an object. + // Note that this doesn't check for infinite recursion, so don't do that! + // it: + // an object to be serialized. Objects may define their own + // serialization via a special "__json__" or "json" function + // property. If a specialized serializer has been defined, it will + // be used as a fallback. + // prettyPrint: + // if true, we indent objects and arrays to make the output prettier. + // The variable `dojo.toJsonIndentStr` is used as the indent string -- + // to use something other than the default (tab), change that variable + // before calling dojo.toJson(). + // _indentStr: + // private variable for recursive calls when pretty printing, do not use. + // example: + // simple serialization of a trivial object + // | var jsonStr = dojo.toJson({ howdy: "stranger!", isStrange: true }); + // | doh.is('{"howdy":"stranger!","isStrange":true}', jsonStr); + // example: + // a custom serializer for an objects of a particular class: + // | dojo.declare("Furby", null, { + // | furbies: "are strange", + // | furbyCount: 10, + // | __json__: function(){ + // | }, + // | }); + + if(it === undefined){ + return "undefined"; + } + var objtype = typeof it; + if(objtype == "number" || objtype == "boolean"){ + return it + ""; + } + if(it === null){ + return "null"; + } + if(dojo.isString(it)){ + return dojo._escapeString(it); + } + // recurse + var recurse = arguments.callee; + // short-circuit for objects that support "json" serialization + // if they return "self" then just pass-through... + var newObj; + _indentStr = _indentStr || ""; + var nextIndent = prettyPrint ? _indentStr + dojo.toJsonIndentStr : ""; + var tf = it.__json__||it.json; + if(dojo.isFunction(tf)){ + newObj = tf.call(it); + if(it !== newObj){ + return recurse(newObj, prettyPrint, nextIndent); + } + } + if(it.nodeType && it.cloneNode){ // isNode + // we can't seriailize DOM nodes as regular objects because they have cycles + // DOM nodes could be serialized with something like outerHTML, but + // that can be provided by users in the form of .json or .__json__ function. + throw new Error("Can't serialize DOM nodes"); + } + + var sep = prettyPrint ? " " : ""; + var newLine = prettyPrint ? "\n" : ""; + + // array + if(dojo.isArray(it)){ + var res = dojo.map(it, function(obj){ + var val = recurse(obj, prettyPrint, nextIndent); + if(typeof val != "string"){ + val = "undefined"; + } + return newLine + nextIndent + val; + }); + return "[" + res.join("," + sep) + newLine + _indentStr + "]"; + } + /* + // look in the registry + try { + window.o = it; + newObj = dojo.json.jsonRegistry.match(it); + return recurse(newObj, prettyPrint, nextIndent); + }catch(e){ + // console.log(e); + } + // it's a function with no adapter, skip it + */ + if(objtype == "function"){ + return null; // null + } + // generic object code path + var output = [], key; + for(key in it){ + var keyStr, val; + if(typeof key == "number"){ + keyStr = '"' + key + '"'; + }else if(typeof key == "string"){ + keyStr = dojo._escapeString(key); + }else{ + // skip non-string or number keys + continue; + } + val = recurse(it[key], prettyPrint, nextIndent); + if(typeof val != "string"){ + // skip non-serializable values + continue; + } + // FIXME: use += on Moz!! + // MOW NOTE: using += is a pain because you have to account for the dangling comma... + output.push(newLine + nextIndent + keyStr + ":" + sep + val); + } + return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String +} + +} + +if(!dojo._hasResource["dojo._base.Color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.Color"] = true; +dojo.provide("dojo._base.Color"); + +(function(){ + + var d = dojo; + + dojo.Color = function(/*Array|String|Object*/ color){ + // summary: + // Takes a named string, hex string, array of rgb or rgba values, + // an object with r, g, b, and a properties, or another `dojo.Color` object + // and creates a new Color instance to work from. + // + // example: + // Work with a Color instance: + // | var c = new dojo.Color(); + // | c.setColor([0,0,0]); // black + // | var hex = c.toHex(); // #000000 + // + // example: + // Work with a node's color: + // | var color = dojo.style("someNode", "backgroundColor"); + // | var n = new dojo.Color(color); + // | // adjust the color some + // | n.r *= .5; + // | console.log(n.toString()); // rgb(128, 255, 255); + if(color){ this.setColor(color); } + }; + + // FIXME: + // there's got to be a more space-efficient way to encode or discover + // these!! Use hex? + dojo.Color.named = { + black: [0,0,0], + silver: [192,192,192], + gray: [128,128,128], + white: [255,255,255], + maroon: [128,0,0], + red: [255,0,0], + purple: [128,0,128], + fuchsia: [255,0,255], + green: [0,128,0], + lime: [0,255,0], + olive: [128,128,0], + yellow: [255,255,0], + navy: [0,0,128], + blue: [0,0,255], + teal: [0,128,128], + aqua: [0,255,255], + transparent: d.config.transparentColor || [255,255,255] + }; + + dojo.extend(dojo.Color, { + r: 255, g: 255, b: 255, a: 1, + _set: function(r, g, b, a){ + var t = this; t.r = r; t.g = g; t.b = b; t.a = a; + }, + setColor: function(/*Array|String|Object*/ color){ + // summary: + // Takes a named string, hex string, array of rgb or rgba values, + // an object with r, g, b, and a properties, or another `dojo.Color` object + // and sets this color instance to that value. + // + // example: + // | var c = new dojo.Color(); // no color + // | c.setColor("#ededed"); // greyish + if(d.isString(color)){ + d.colorFromString(color, this); + }else if(d.isArray(color)){ + d.colorFromArray(color, this); + }else{ + this._set(color.r, color.g, color.b, color.a); + if(!(color instanceof d.Color)){ this.sanitize(); } + } + return this; // dojo.Color + }, + sanitize: function(){ + // summary: + // Ensures the object has correct attributes + // description: + // the default implementation does nothing, include dojo.colors to + // augment it with real checks + return this; // dojo.Color + }, + toRgb: function(){ + // summary: + // Returns 3 component array of rgb values + // example: + // | var c = new dojo.Color("#000000"); + // | console.log(c.toRgb()); // [0,0,0] + var t = this; + return [t.r, t.g, t.b]; // Array + }, + toRgba: function(){ + // summary: + // Returns a 4 component array of rgba values from the color + // represented by this object. + var t = this; + return [t.r, t.g, t.b, t.a]; // Array + }, + toHex: function(){ + // summary: + // Returns a CSS color string in hexadecimal representation + // example: + // | console.log(new dojo.Color([0,0,0]).toHex()); // #000000 + var arr = d.map(["r", "g", "b"], function(x){ + var s = this[x].toString(16); + return s.length < 2 ? "0" + s : s; + }, this); + return "#" + arr.join(""); // String + }, + toCss: function(/*Boolean?*/ includeAlpha){ + // summary: + // Returns a css color string in rgb(a) representation + // example: + // | var c = new dojo.Color("#FFF").toCss(); + // | console.log(c); // rgb('255','255','255') + var t = this, rgb = t.r + ", " + t.g + ", " + t.b; + return (includeAlpha ? "rgba(" + rgb + ", " + t.a : "rgb(" + rgb) + ")"; // String + }, + toString: function(){ + // summary: + // Returns a visual representation of the color + return this.toCss(true); // String + } + }); + + dojo.blendColors = function( + /*dojo.Color*/ start, + /*dojo.Color*/ end, + /*Number*/ weight, + /*dojo.Color?*/ obj + ){ + // summary: + // Blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend, + // can reuse a previously allocated dojo.Color object for the result + var t = obj || new d.Color(); + d.forEach(["r", "g", "b", "a"], function(x){ + t[x] = start[x] + (end[x] - start[x]) * weight; + if(x != "a"){ t[x] = Math.round(t[x]); } + }); + return t.sanitize(); // dojo.Color + }; + + dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){ + // summary: + // Returns a `dojo.Color` instance from a string of the form + // "rgb(...)" or "rgba(...)". Optionally accepts a `dojo.Color` + // object to update with the parsed value and return instead of + // creating a new object. + // returns: + // A dojo.Color object. If obj is passed, it will be the return value. + var m = color.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/); + return m && dojo.colorFromArray(m[1].split(/\s*,\s*/), obj); // dojo.Color + }; + + dojo.colorFromHex = function(/*String*/ color, /*dojo.Color?*/ obj){ + // summary: + // Converts a hex string with a '#' prefix to a color object. + // Supports 12-bit #rgb shorthand. Optionally accepts a + // `dojo.Color` object to update with the parsed value. + // + // returns: + // A dojo.Color object. If obj is passed, it will be the return value. + // + // example: + // | var thing = dojo.colorFromHex("#ededed"); // grey, longhand + // + // example: + // | var thing = dojo.colorFromHex("#000"); // black, shorthand + var t = obj || new d.Color(), + bits = (color.length == 4) ? 4 : 8, + mask = (1 << bits) - 1; + color = Number("0x" + color.substr(1)); + if(isNaN(color)){ + return null; // dojo.Color + } + d.forEach(["b", "g", "r"], function(x){ + var c = color & mask; + color >>= bits; + t[x] = bits == 4 ? 17 * c : c; + }); + t.a = 1; + return t; // dojo.Color + }; + + dojo.colorFromArray = function(/*Array*/ a, /*dojo.Color?*/ obj){ + // summary: + // Builds a `dojo.Color` from a 3 or 4 element array, mapping each + // element in sequence to the rgb(a) values of the color. + // example: + // | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha + // returns: + // A dojo.Color object. If obj is passed, it will be the return value. + var t = obj || new d.Color(); + t._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3])); + if(isNaN(t.a)){ t.a = 1; } + return t.sanitize(); // dojo.Color + }; + + dojo.colorFromString = function(/*String*/ str, /*dojo.Color?*/ obj){ + // summary: + // Parses `str` for a color value. Accepts hex, rgb, and rgba + // style color values. + // description: + // Acceptable input values for str may include arrays of any form + // accepted by dojo.colorFromArray, hex strings such as "#aaaaaa", or + // rgb or rgba strings such as "rgb(133, 200, 16)" or "rgba(10, 10, + // 10, 50)" + // returns: + // A dojo.Color object. If obj is passed, it will be the return value. + var a = d.Color.named[str]; + return a && d.colorFromArray(a, obj) || d.colorFromRgb(str, obj) || d.colorFromHex(str, obj); + }; +})(); + +} + +if(!dojo._hasResource["dojo._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base"] = true; +dojo.provide("dojo._base"); + +} + +if(!dojo._hasResource["dojo._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.window"] = true; +dojo.provide("dojo._base.window"); + +/*===== +dojo.doc = { + // summary: + // Alias for the current document. 'dojo.doc' can be modified + // for temporary context shifting. Also see dojo.withDoc(). + // description: + // Refer to dojo.doc rather + // than referring to 'window.document' to ensure your code runs + // correctly in managed contexts. + // example: + // | n.appendChild(dojo.doc.createElement('div')); +} +=====*/ +dojo.doc = window["document"] || null; + +dojo.body = function(){ + // summary: + // Return the body element of the document + // return the body object associated with dojo.doc + // example: + // | dojo.body().appendChild(dojo.doc.createElement('div')); + + // Note: document.body is not defined for a strict xhtml document + // Would like to memoize this, but dojo.doc can change vi dojo.withDoc(). + return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node +} + +dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){ + // summary: + // changes the behavior of many core Dojo functions that deal with + // namespace and DOM lookup, changing them to work in a new global + // context (e.g., an iframe). The varibles dojo.global and dojo.doc + // are modified as a result of calling this function and the result of + // `dojo.body()` likewise differs. + dojo.global = globalObject; + dojo.doc = globalDocument; +}; + +dojo.withGlobal = function( /*Object*/globalObject, + /*Function*/callback, + /*Object?*/thisObject, + /*Array?*/cbArguments){ + // summary: + // Invoke callback with globalObject as dojo.global and + // globalObject.document as dojo.doc. + // description: + // Invoke callback with globalObject as dojo.global and + // globalObject.document as dojo.doc. If provided, globalObject + // will be executed in the context of object thisObject + // When callback() returns or throws an error, the dojo.global + // and dojo.doc will be restored to its previous state. + + var oldGlob = dojo.global; + try{ + dojo.global = globalObject; + return dojo.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments); + }finally{ + dojo.global = oldGlob; + } +} + +dojo.withDoc = function( /*DocumentElement*/documentObject, + /*Function*/callback, + /*Object?*/thisObject, + /*Array?*/cbArguments){ + // summary: + // Invoke callback with documentObject as dojo.doc. + // description: + // Invoke callback with documentObject as dojo.doc. If provided, + // callback will be executed in the context of object thisObject + // When callback() returns or throws an error, the dojo.doc will + // be restored to its previous state. + + var oldDoc = dojo.doc, + oldLtr = dojo._bodyLtr, + oldQ = dojo.isQuirks; + + try{ + dojo.doc = documentObject; + delete dojo._bodyLtr; // uncache + dojo.isQuirks = dojo.doc.compatMode == "BackCompat"; // no need to check for QuirksMode which was Opera 7 only + + if(thisObject && typeof callback == "string"){ + callback = thisObject[callback]; + } + + return callback.apply(thisObject, cbArguments || []); + }finally{ + dojo.doc = oldDoc; + delete dojo._bodyLtr; // in case it was undefined originally, and set to true/false by the alternate document + if(oldLtr !== undefined){ dojo._bodyLtr = oldLtr; } + dojo.isQuirks = oldQ; + } +}; + +} + +if(!dojo._hasResource["dojo._base.event"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.event"] = true; +dojo.provide("dojo._base.event"); + +// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA + +(function(){ + // DOM event listener machinery + var del = (dojo._event_listener = { + add: function(/*DOMNode*/ node, /*String*/ name, /*Function*/ fp){ + if(!node){return;} + name = del._normalizeEventName(name); + fp = del._fixCallback(name, fp); + var oname = name; + if( + !dojo.isIE && + (name == "mouseenter" || name == "mouseleave") + ){ + var ofp = fp; + //oname = name; + name = (name == "mouseenter") ? "mouseover" : "mouseout"; + fp = function(e){ + if(!dojo.isDescendant(e.relatedTarget, node)){ + // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable. + return ofp.call(this, e); + } + } + } + node.addEventListener(name, fp, false); + return fp; /*Handle*/ + }, + remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ + // summary: + // clobbers the listener from the node + // node: + // DOM node to attach the event to + // event: + // the name of the handler to remove the function from + // handle: + // the handle returned from add + if(node){ + event = del._normalizeEventName(event); + if(!dojo.isIE && (event == "mouseenter" || event == "mouseleave")){ + event = (event == "mouseenter") ? "mouseover" : "mouseout"; + } + + node.removeEventListener(event, handle, false); + } + }, + _normalizeEventName: function(/*String*/ name){ + // Generally, name should be lower case, unless it is special + // somehow (e.g. a Mozilla DOM event). + // Remove 'on'. + return name.slice(0,2) =="on" ? name.slice(2) : name; + }, + _fixCallback: function(/*String*/ name, fp){ + // By default, we only invoke _fixEvent for 'keypress' + // If code is added to _fixEvent for other events, we have + // to revisit this optimization. + // This also applies to _fixEvent overrides for Safari and Opera + // below. + return name != "keypress" ? fp : function(e){ return fp.call(this, del._fixEvent(e, this)); }; + }, + _fixEvent: function(evt, sender){ + // _fixCallback only attaches us to keypress. + // Switch on evt.type anyway because we might + // be called directly from dojo.fixEvent. + switch(evt.type){ + case "keypress": + del._setKeyChar(evt); + break; + } + return evt; + }, + _setKeyChar: function(evt){ + evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : ''; + evt.charOrCode = evt.keyChar || evt.keyCode; + }, + // For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE + // we map those virtual key codes to ascii here + // not valid for all (non-US) keyboards, so maybe we shouldn't bother + _punctMap: { + 106:42, + 111:47, + 186:59, + 187:43, + 188:44, + 189:45, + 190:46, + 191:47, + 192:96, + 219:91, + 220:92, + 221:93, + 222:39 + } + }); + + // DOM events + + dojo.fixEvent = function(/*Event*/ evt, /*DOMNode*/ sender){ + // summary: + // normalizes properties on the event object including event + // bubbling methods, keystroke normalization, and x/y positions + // evt: Event + // native event object + // sender: DOMNode + // node to treat as "currentTarget" + return del._fixEvent(evt, sender); + } + + dojo.stopEvent = function(/*Event*/ evt){ + // summary: + // prevents propagation and clobbers the default action of the + // passed event + // evt: Event + // The event object. If omitted, window.event is used on IE. + evt.preventDefault(); + evt.stopPropagation(); + // NOTE: below, this method is overridden for IE + } + + // the default listener to use on dontFix nodes, overriden for IE + var node_listener = dojo._listener; + + // Unify connect and event listeners + dojo._connect = function(obj, event, context, method, dontFix){ + // FIXME: need a more strict test + var isNode = obj && (obj.nodeType||obj.attachEvent||obj.addEventListener); + // choose one of three listener options: raw (connect.js), DOM event on a Node, custom event on a Node + // we need the third option to provide leak prevention on broken browsers (IE) + var lid = isNode ? (dontFix ? 2 : 1) : 0, l = [dojo._listener, del, node_listener][lid]; + // create a listener + var h = l.add(obj, event, dojo.hitch(context, method)); + // formerly, the disconnect package contained "l" directly, but if client code + // leaks the disconnect package (by connecting it to a node), referencing "l" + // compounds the problem. + // instead we return a listener id, which requires custom _disconnect below. + // return disconnect package + return [ obj, event, h, lid ]; + } + + dojo._disconnect = function(obj, event, handle, listener){ + ([dojo._listener, del, node_listener][listener]).remove(obj, event, handle); + } + + // Constants + + // Public: client code should test + // keyCode against these named constants, as the + // actual codes can vary by browser. + dojo.keys = { + // summary: + // Definitions for common key values + BACKSPACE: 8, + TAB: 9, + CLEAR: 12, + ENTER: 13, + SHIFT: 16, + CTRL: 17, + ALT: 18, + META: dojo.isSafari ? 91 : 224, // the apple key on macs + PAUSE: 19, + CAPS_LOCK: 20, + ESCAPE: 27, + SPACE: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + LEFT_ARROW: 37, + UP_ARROW: 38, + RIGHT_ARROW: 39, + DOWN_ARROW: 40, + INSERT: 45, + DELETE: 46, + HELP: 47, + LEFT_WINDOW: 91, + RIGHT_WINDOW: 92, + SELECT: 93, + NUMPAD_0: 96, + NUMPAD_1: 97, + NUMPAD_2: 98, + NUMPAD_3: 99, + NUMPAD_4: 100, + NUMPAD_5: 101, + NUMPAD_6: 102, + NUMPAD_7: 103, + NUMPAD_8: 104, + NUMPAD_9: 105, + NUMPAD_MULTIPLY: 106, + NUMPAD_PLUS: 107, + NUMPAD_ENTER: 108, + NUMPAD_MINUS: 109, + NUMPAD_PERIOD: 110, + NUMPAD_DIVIDE: 111, + F1: 112, + F2: 113, + F3: 114, + F4: 115, + F5: 116, + F6: 117, + F7: 118, + F8: 119, + F9: 120, + F10: 121, + F11: 122, + F12: 123, + F13: 124, + F14: 125, + F15: 126, + NUM_LOCK: 144, + SCROLL_LOCK: 145, + // virtual key mapping + copyKey: dojo.isMac && !dojo.isAIR ? (dojo.isSafari ? 91 : 224 ) : 17 + }; + + var evtCopyKey = dojo.isMac ? "metaKey" : "ctrlKey"; + + dojo.isCopyKey = function(e){ + // summary: + // Checks an event for the copy key (meta on Mac, and ctrl anywhere else) + // e: Event + // Event object to examine + return e[evtCopyKey]; // Boolean + }; + + // Public: decoding mouse buttons from events + +/*===== + dojo.mouseButtons = { + // LEFT: Number + // Numeric value of the left mouse button for the platform. + LEFT: 0, + // MIDDLE: Number + // Numeric value of the middle mouse button for the platform. + MIDDLE: 1, + // RIGHT: Number + // Numeric value of the right mouse button for the platform. + RIGHT: 2, + + isButton: function(e, button){ + // summary: + // Checks an event object for a pressed button + // e: Event + // Event object to examine + // button: Number + // The button value (example: dojo.mouseButton.LEFT) + return e.button == button; // Boolean + }, + isLeft: function(e){ + // summary: + // Checks an event object for the pressed left button + // e: Event + // Event object to examine + return e.button == 0; // Boolean + }, + isMiddle: function(e){ + // summary: + // Checks an event object for the pressed middle button + // e: Event + // Event object to examine + return e.button == 1; // Boolean + }, + isRight: function(e){ + // summary: + // Checks an event object for the pressed right button + // e: Event + // Event object to examine + return e.button == 2; // Boolean + } + }; +=====*/ + + if(dojo.isIE){ + dojo.mouseButtons = { + LEFT: 1, + MIDDLE: 4, + RIGHT: 2, + // helper functions + isButton: function(e, button){ return e.button & button; }, + isLeft: function(e){ return e.button & 1; }, + isMiddle: function(e){ return e.button & 4; }, + isRight: function(e){ return e.button & 2; } + }; + }else{ + dojo.mouseButtons = { + LEFT: 0, + MIDDLE: 1, + RIGHT: 2, + // helper functions + isButton: function(e, button){ return e.button == button; }, + isLeft: function(e){ return e.button == 0; }, + isMiddle: function(e){ return e.button == 1; }, + isRight: function(e){ return e.button == 2; } + }; + } + + // IE event normalization + if(dojo.isIE){ + var _trySetKeyCode = function(e, code){ + try{ + // squelch errors when keyCode is read-only + // (e.g. if keyCode is ctrl or shift) + return (e.keyCode = code); + }catch(e){ + return 0; + } + } + + // by default, use the standard listener + var iel = dojo._listener; + var listenersName = (dojo._ieListenersName = "_" + dojo._scopeName + "_listeners"); + // dispatcher tracking property + if(!dojo.config._allow_leaks){ + // custom listener that handles leak protection for DOM events + node_listener = iel = dojo._ie_listener = { + // support handler indirection: event handler functions are + // referenced here. Event dispatchers hold only indices. + handlers: [], + // add a listener to an object + add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ + source = source || dojo.global; + var f = source[method]; + if(!f||!f[listenersName]){ + var d = dojo._getIeDispatcher(); + // original target function is special + d.target = f && (ieh.push(f) - 1); + // dispatcher holds a list of indices into handlers table + d[listenersName] = []; + // redirect source to dispatcher + f = source[method] = d; + } + return f[listenersName].push(ieh.push(listener) - 1) ; /*Handle*/ + }, + // remove a listener from an object + remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){ + var f = (source||dojo.global)[method], l = f && f[listenersName]; + if(f && l && handle--){ + delete ieh[l[handle]]; + delete l[handle]; + } + } + }; + // alias used above + var ieh = iel.handlers; + } + + dojo.mixin(del, { + add: function(/*DOMNode*/ node, /*String*/ event, /*Function*/ fp){ + if(!node){return;} // undefined + event = del._normalizeEventName(event); + if(event=="onkeypress"){ + // we need to listen to onkeydown to synthesize + // keypress events that otherwise won't fire + // on IE + var kd = node.onkeydown; + if(!kd || !kd[listenersName] || !kd._stealthKeydownHandle){ + var h = del.add(node, "onkeydown", del._stealthKeyDown); + kd = node.onkeydown; + kd._stealthKeydownHandle = h; + kd._stealthKeydownRefs = 1; + }else{ + kd._stealthKeydownRefs++; + } + } + return iel.add(node, event, del._fixCallback(fp)); + }, + remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ + event = del._normalizeEventName(event); + iel.remove(node, event, handle); + if(event=="onkeypress"){ + var kd = node.onkeydown; + if(--kd._stealthKeydownRefs <= 0){ + iel.remove(node, "onkeydown", kd._stealthKeydownHandle); + delete kd._stealthKeydownHandle; + } + } + }, + _normalizeEventName: function(/*String*/ eventName){ + // Generally, eventName should be lower case, unless it is + // special somehow (e.g. a Mozilla event) + // ensure 'on' + return eventName.slice(0,2) != "on" ? "on" + eventName : eventName; + }, + _nop: function(){}, + _fixEvent: function(/*Event*/ evt, /*DOMNode*/ sender){ + // summary: + // normalizes properties on the event object including event + // bubbling methods, keystroke normalization, and x/y positions + // evt: + // native event object + // sender: + // node to treat as "currentTarget" + if(!evt){ + var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; + evt = w.event; + } + if(!evt){return(evt);} + evt.target = evt.srcElement; + evt.currentTarget = (sender || evt.srcElement); + evt.layerX = evt.offsetX; + evt.layerY = evt.offsetY; + // FIXME: scroll position query is duped from dojo.html to + // avoid dependency on that entire module. Now that HTML is in + // Base, we should convert back to something similar there. + var se = evt.srcElement, doc = (se && se.ownerDocument) || document; + // DO NOT replace the following to use dojo.body(), in IE, document.documentElement should be used + // here rather than document.body + var docBody = ((dojo.isIE < 6) || (doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement; + var offset = dojo._getIeDocumentElementOffset(); + evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; + evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y; + if(evt.type == "mouseover"){ + evt.relatedTarget = evt.fromElement; + } + if(evt.type == "mouseout"){ + evt.relatedTarget = evt.toElement; + } + evt.stopPropagation = del._stopPropagation; + evt.preventDefault = del._preventDefault; + return del._fixKeys(evt); + }, + _fixKeys: function(evt){ + switch(evt.type){ + case "keypress": + var c = ("charCode" in evt ? evt.charCode : evt.keyCode); + if (c==10){ + // CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla + c=0; + evt.keyCode = 13; + }else if(c==13||c==27){ + c=0; // Mozilla considers ENTER and ESC non-printable + }else if(c==3){ + c=99; // Mozilla maps CTRL-BREAK to CTRL-c + } + // Mozilla sets keyCode to 0 when there is a charCode + // but that stops the event on IE. + evt.charCode = c; + del._setKeyChar(evt); + break; + } + return evt; + }, + _stealthKeyDown: function(evt){ + // IE doesn't fire keypress for most non-printable characters. + // other browsers do, we simulate it here. + var kp = evt.currentTarget.onkeypress; + // only works if kp exists and is a dispatcher + if(!kp || !kp[listenersName]){ return; } + // munge key/charCode + var k=evt.keyCode; + // These are Windows Virtual Key Codes + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp + var unprintable = k!=13 && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222); + // synthesize keypress for most unprintables and CTRL-keys + if(unprintable||evt.ctrlKey){ + var c = unprintable ? 0 : k; + if(evt.ctrlKey){ + if(k==3 || k==13){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ + c -= 48; // map CTRL-[numpad 0-9] to ASCII + }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ + c += 32; // map CTRL-[A-Z] to lowercase + }else{ + c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII + } + } + // simulate a keypress event + var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); + kp.call(evt.currentTarget, faux); + evt.cancelBubble = faux.cancelBubble; + evt.returnValue = faux.returnValue; + _trySetKeyCode(evt, faux.keyCode); + } + }, + // Called in Event scope + _stopPropagation: function(){ + this.cancelBubble = true; + }, + _preventDefault: function(){ + // Setting keyCode to 0 is the only way to prevent certain keypresses (namely + // ctrl-combinations that correspond to menu accelerator keys). + // Otoh, it prevents upstream listeners from getting this information + // Try to split the difference here by clobbering keyCode only for ctrl + // combinations. If you still need to access the key upstream, bubbledKeyCode is + // provided as a workaround. + this.bubbledKeyCode = this.keyCode; + if(this.ctrlKey){_trySetKeyCode(this, 0);} + this.returnValue = false; + } + }); + + // override stopEvent for IE + dojo.stopEvent = function(evt){ + evt = evt || window.event; + del._stopPropagation.call(evt); + del._preventDefault.call(evt); + } + } + + del._synthesizeEvent = function(evt, props){ + var faux = dojo.mixin({}, evt, props); + del._setKeyChar(faux); + // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); + // but it throws an error when preventDefault is invoked on Safari + // does Event.preventDefault not support "apply" on Safari? + faux.preventDefault = function(){ evt.preventDefault(); }; + faux.stopPropagation = function(){ evt.stopPropagation(); }; + return faux; + } + + // Opera event normalization + if(dojo.isOpera){ + dojo.mixin(del, { + _fixEvent: function(evt, sender){ + switch(evt.type){ + case "keypress": + var c = evt.which; + if(c==3){ + c=99; // Mozilla maps CTRL-BREAK to CTRL-c + } + // can't trap some keys at all, like INSERT and DELETE + // there is no differentiating info between DELETE and ".", or INSERT and "-" + c = c<41 && !evt.shiftKey ? 0 : c; + if(evt.ctrlKey && !evt.shiftKey && c>=65 && c<=90){ + // lowercase CTRL-[A-Z] keys + c += 32; + } + return del._synthesizeEvent(evt, { charCode: c }); + } + return evt; + } + }); + } + + // Webkit event normalization + if(dojo.isWebKit){ + del._add = del.add; + del._remove = del.remove; + + dojo.mixin(del, { + add: function(/*DOMNode*/ node, /*String*/ event, /*Function*/ fp){ + if(!node){return;} // undefined + var handle = del._add(node, event, fp); + if(del._normalizeEventName(event) == "keypress"){ + // we need to listen to onkeydown to synthesize + // keypress events that otherwise won't fire + // in Safari 3.1+: https://lists.webkit.org/pipermail/webkit-dev/2007-December/002992.html + handle._stealthKeyDownHandle = del._add(node, "keydown", function(evt){ + //A variation on the IE _stealthKeydown function + //Synthesize an onkeypress event, but only for unprintable characters. + var k=evt.keyCode; + // These are Windows Virtual Key Codes + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp + var unprintable = k!=13 && k!=32 && (k<48 || k>90) && (k<96 || k>111) && (k<186 || k>192) && (k<219 || k>222); + // synthesize keypress for most unprintables and CTRL-keys + if(unprintable || evt.ctrlKey){ + var c = unprintable ? 0 : k; + if(evt.ctrlKey){ + if(k==3 || k==13){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ + c -= 48; // map CTRL-[numpad 0-9] to ASCII + }else if(!evt.shiftKey && c>=65 && c<=90){ + c += 32; // map CTRL-[A-Z] to lowercase + }else{ + c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII + } + } + // simulate a keypress event + var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); + fp.call(evt.currentTarget, faux); + } + }); + } + return handle; /*Handle*/ + }, + + remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ + if(node){ + if(handle._stealthKeyDownHandle){ + del._remove(node, "keydown", handle._stealthKeyDownHandle); + } + del._remove(node, event, handle); + } + }, + _fixEvent: function(evt, sender){ + switch(evt.type){ + case "keypress": + if(evt.faux){ return evt; } + var c = evt.charCode; + c = c>=32 ? c : 0; + return del._synthesizeEvent(evt, {charCode: c, faux: true}); + } + return evt; + } + }); + } + })(); + +if(dojo.isIE){ + // keep this out of the closure + // closing over 'iel' or 'ieh' b0rks leak prevention + // ls[i] is an index into the master handler array + dojo._ieDispatcher = function(args, sender){ + var ap = Array.prototype, + h = dojo._ie_listener.handlers, + c = args.callee, + ls = c[dojo._ieListenersName], + t = h[c.target]; + // return value comes from original target function + var r = t && t.apply(sender, args); + // make local copy of listener array so it's immutable during processing + var lls = [].concat(ls); + // invoke listeners after target function + for(var i in lls){ + var f = h[lls[i]]; + if(!(i in ap) && f){ + f.apply(sender, args); + } + } + return r; + } + dojo._getIeDispatcher = function(){ + // ensure the returned function closes over nothing ("new Function" apparently doesn't close) + return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)"); // function + } + // keep this out of the closure to reduce RAM allocation + dojo._event_listener._fixCallback = function(fp){ + var f = dojo._event_listener._fixEvent; + return function(e){ return fp.call(this, f(e, this)); }; + } +} + +} + +if(!dojo._hasResource["dojo._base.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.html"] = true; + +dojo.provide("dojo._base.html"); + +// FIXME: need to add unit tests for all the semi-public methods + +try{ + document.execCommand("BackgroundImageCache", false, true); +}catch(e){ + // sane browsers don't have cache "issues" +} + +// ============================= +// DOM Functions +// ============================= + +/*===== +dojo.byId = function(id, doc){ + // summary: + // Returns DOM node with matching `id` attribute or `null` + // if not found. If `id` is a DomNode, this function is a no-op. + // + // id: String|DOMNode + // A string to match an HTML id attribute or a reference to a DOM Node + // + // doc: Document? + // Document to work in. Defaults to the current value of + // dojo.doc. Can be used to retrieve + // node references from other documents. + // + // example: + // Look up a node by ID: + // | var n = dojo.byId("foo"); + // + // example: + // Check if a node exists, and use it. + // | var n = dojo.byId("bar"); + // | if(n){ doStuff() ... } + // + // example: + // Allow string or DomNode references to be passed to a custom function: + // | var foo = function(nodeOrId){ + // | nodeOrId = dojo.byId(nodeOrId); + // | // ... more stuff + // | } +=====*/ + +if(dojo.isIE || dojo.isOpera){ + dojo.byId = function(id, doc){ + if(typeof id != "string"){ + return id; + } + var _d = doc || dojo.doc, te = _d.getElementById(id); + // attributes.id.value is better than just id in case the + // user has a name=id inside a form + if(te && (te.attributes.id.value == id || te.id == id)){ + return te; + }else{ + var eles = _d.all[id]; + if(!eles || eles.nodeName){ + eles = [eles]; + } + // if more than 1, choose first with the correct id + var i=0; + while((te=eles[i++])){ + if((te.attributes && te.attributes.id && te.attributes.id.value == id) + || te.id == id){ + return te; + } + } + } + }; +}else{ + dojo.byId = function(id, doc){ + // inline'd type check + return (typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id; // DomNode + }; +} +/*===== +}; +=====*/ + +(function(){ + var d = dojo; + var byId = d.byId; + + var _destroyContainer = null, + _destroyDoc; + d.addOnWindowUnload(function(){ + _destroyContainer = null; //prevent IE leak + }); + +/*===== + dojo._destroyElement = function(node){ + // summary: + // Existing alias for `dojo.destroy`. Deprecated, will be removed + // in 2.0 + } +=====*/ + dojo._destroyElement = dojo.destroy = function(/*String|DomNode*/node){ + // summary: + // Removes a node from its parent, clobbering it and all of its + // children. + // + // description: + // Removes a node from its parent, clobbering it and all of its + // children. Function only works with DomNodes, and returns nothing. + // + // node: + // A String ID or DomNode reference of the element to be destroyed + // + // example: + // Destroy a node byId: + // | dojo.destroy("someId"); + // + // example: + // Destroy all nodes in a list by reference: + // | dojo.query(".someNode").forEach(dojo.destroy); + + node = byId(node); + try{ + var doc = node.ownerDocument; + // cannot use _destroyContainer.ownerDocument since this can throw an exception on IE + if(!_destroyContainer || _destroyDoc != doc){ + _destroyContainer = doc.createElement("div"); + _destroyDoc = doc; + } + _destroyContainer.appendChild(node.parentNode ? node.parentNode.removeChild(node) : node); + // NOTE: see http://trac.dojotoolkit.org/ticket/2931. This may be a bug and not a feature + _destroyContainer.innerHTML = ""; + }catch(e){ + /* squelch */ + } + }; + + dojo.isDescendant = function(/*DomNode|String*/node, /*DomNode|String*/ancestor){ + // summary: + // Returns true if node is a descendant of ancestor + // node: string id or node reference to test + // ancestor: string id or node reference of potential parent to test against + // + // example: + // Test is node id="bar" is a descendant of node id="foo" + // | if(dojo.isDescendant("bar", "foo")){ ... } + try{ + node = byId(node); + ancestor = byId(ancestor); + while(node){ + if(node == ancestor){ + return true; // Boolean + } + node = node.parentNode; + } + }catch(e){ /* squelch, return false */ } + return false; // Boolean + }; + + dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){ + // summary: + // Enable or disable selection on a node + // node: + // id or reference to node + // selectable: + // state to put the node in. false indicates unselectable, true + // allows selection. + // example: + // Make the node id="bar" unselectable + // | dojo.setSelectable("bar"); + // example: + // Make the node id="bar" selectable + // | dojo.setSelectable("bar", true); + node = byId(node); + if(d.isMozilla){ + node.style.MozUserSelect = selectable ? "" : "none"; + }else if(d.isKhtml || d.isWebKit){ + node.style.KhtmlUserSelect = selectable ? "auto" : "none"; + }else if(d.isIE){ + var v = (node.unselectable = selectable ? "" : "on"); + d.query("*", node).forEach("item.unselectable = '"+v+"'"); + } + //FIXME: else? Opera? + }; + + var _insertBefore = function(/*DomNode*/node, /*DomNode*/ref){ + var parent = ref.parentNode; + if(parent){ + parent.insertBefore(node, ref); + } + }; + + var _insertAfter = function(/*DomNode*/node, /*DomNode*/ref){ + // summary: + // Try to insert node after ref + var parent = ref.parentNode; + if(parent){ + if(parent.lastChild == ref){ + parent.appendChild(node); + }else{ + parent.insertBefore(node, ref.nextSibling); + } + } + }; + + dojo.place = function(node, refNode, position){ + // summary: + // Attempt to insert node into the DOM, choosing from various positioning options. + // Returns the first argument resolved to a DOM node. + // + // node: String|DomNode + // id or node reference, or HTML fragment starting with "<" to place relative to refNode + // + // refNode: String|DomNode + // id or node reference to use as basis for placement + // + // position: String|Number? + // string noting the position of node relative to refNode or a + // number indicating the location in the childNodes collection of refNode. + // Accepted string values are: + // | * before + // | * after + // | * replace + // | * only + // | * first + // | * last + // "first" and "last" indicate positions as children of refNode, "replace" replaces refNode, + // "only" replaces all children. position defaults to "last" if not specified + // + // returns: DomNode + // Returned values is the first argument resolved to a DOM node. + // + // .place() is also a method of `dojo.NodeList`, allowing `dojo.query` node lookups. + // + // example: + // Place a node by string id as the last child of another node by string id: + // | dojo.place("someNode", "anotherNode"); + // + // example: + // Place a node by string id before another node by string id + // | dojo.place("someNode", "anotherNode", "before"); + // + // example: + // Create a Node, and place it in the body element (last child): + // | dojo.place("
", dojo.body()); + // + // example: + // Put a new LI as the first child of a list by id: + // | dojo.place("
  • ", "someUl", "first"); + + refNode = byId(refNode); + if(typeof node == "string"){ // inline'd type check + node = node.charAt(0) == "<" ? d._toDom(node, refNode.ownerDocument) : byId(node); + } + if(typeof position == "number"){ // inline'd type check + var cn = refNode.childNodes; + if(!cn.length || cn.length <= position){ + refNode.appendChild(node); + }else{ + _insertBefore(node, cn[position < 0 ? 0 : position]); + } + }else{ + switch(position){ + case "before": + _insertBefore(node, refNode); + break; + case "after": + _insertAfter(node, refNode); + break; + case "replace": + refNode.parentNode.replaceChild(node, refNode); + break; + case "only": + d.empty(refNode); + refNode.appendChild(node); + break; + case "first": + if(refNode.firstChild){ + _insertBefore(node, refNode.firstChild); + break; + } + // else fallthrough... + default: // aka: last + refNode.appendChild(node); + } + } + return node; // DomNode + } + + // Box functions will assume this model. + // On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode. + // Can be set to change behavior of box setters. + + // can be either: + // "border-box" + // "content-box" (default) + dojo.boxModel = "content-box"; + + // We punt per-node box mode testing completely. + // If anybody cares, we can provide an additional (optional) unit + // that overrides existing code to include per-node box sensitivity. + + // Opera documentation claims that Opera 9 uses border-box in BackCompat mode. + // but experiments (Opera 9.10.8679 on Windows Vista) indicate that it actually continues to use content-box. + // IIRC, earlier versions of Opera did in fact use border-box. + // Opera guys, this is really confusing. Opera being broken in quirks mode is not our fault. + + if(d.isIE /*|| dojo.isOpera*/){ + // client code may have to adjust if compatMode varies across iframes + d.boxModel = document.compatMode == "BackCompat" ? "border-box" : "content-box"; + } + + // ============================= + // Style Functions + // ============================= + + // getComputedStyle drives most of the style code. + // Wherever possible, reuse the returned object. + // + // API functions below that need to access computed styles accept an + // optional computedStyle parameter. + // If this parameter is omitted, the functions will call getComputedStyle themselves. + // This way, calling code can access computedStyle once, and then pass the reference to + // multiple API functions. + +/*===== + dojo.getComputedStyle = function(node){ + // summary: + // Returns a "computed style" object. + // + // description: + // Gets a "computed style" object which can be used to gather + // information about the current state of the rendered node. + // + // Note that this may behave differently on different browsers. + // Values may have different formats and value encodings across + // browsers. + // + // Note also that this method is expensive. Wherever possible, + // reuse the returned object. + // + // Use the dojo.style() method for more consistent (pixelized) + // return values. + // + // node: DOMNode + // A reference to a DOM node. Does NOT support taking an + // ID string for speed reasons. + // example: + // | dojo.getComputedStyle(dojo.byId('foo')).borderWidth; + // + // example: + // Reusing the returned object, avoiding multiple lookups: + // | var cs = dojo.getComputedStyle(dojo.byId("someNode")); + // | var w = cs.width, h = cs.height; + return; // CSS2Properties + } +=====*/ + + // Although we normally eschew argument validation at this + // level, here we test argument 'node' for (duck)type, + // by testing nodeType, ecause 'document' is the 'parentNode' of 'body' + // it is frequently sent to this function even + // though it is not Element. + var gcs; + if(d.isWebKit){ + gcs = function(/*DomNode*/node){ + var s; + if(node.nodeType == 1){ + var dv = node.ownerDocument.defaultView; + s = dv.getComputedStyle(node, null); + if(!s && node.style){ + node.style.display = ""; + s = dv.getComputedStyle(node, null); + } + } + return s || {}; + }; + }else if(d.isIE){ + gcs = function(node){ + // IE (as of 7) doesn't expose Element like sane browsers + return node.nodeType == 1 /* ELEMENT_NODE*/ ? node.currentStyle : {}; + }; + }else{ + gcs = function(node){ + return node.nodeType == 1 ? + node.ownerDocument.defaultView.getComputedStyle(node, null) : {}; + }; + } + dojo.getComputedStyle = gcs; + + if(!d.isIE){ + d._toPixelValue = function(element, value){ + // style values can be floats, client code may want + // to round for integer pixels. + return parseFloat(value) || 0; + }; + }else{ + d._toPixelValue = function(element, avalue){ + if(!avalue){ return 0; } + // on IE7, medium is usually 4 pixels + if(avalue == "medium"){ return 4; } + // style values can be floats, client code may + // want to round this value for integer pixels. + if(avalue.slice && avalue.slice(-2) == 'px'){ return parseFloat(avalue); } + with(element){ + var sLeft = style.left; + var rsLeft = runtimeStyle.left; + runtimeStyle.left = currentStyle.left; + try{ + // 'avalue' may be incompatible with style.left, which can cause IE to throw + // this has been observed for border widths using "thin", "medium", "thick" constants + // those particular constants could be trapped by a lookup + // but perhaps there are more + style.left = avalue; + avalue = style.pixelLeft; + }catch(e){ + avalue = 0; + } + style.left = sLeft; + runtimeStyle.left = rsLeft; + } + return avalue; + } + } + var px = d._toPixelValue; + + // FIXME: there opacity quirks on FF that we haven't ported over. Hrm. + /*===== + dojo._getOpacity = function(node){ + // summary: + // Returns the current opacity of the passed node as a + // floating-point value between 0 and 1. + // node: DomNode + // a reference to a DOM node. Does NOT support taking an + // ID string for speed reasons. + // returns: Number between 0 and 1 + return; // Number + } + =====*/ + + var astr = "DXImageTransform.Microsoft.Alpha"; + var af = function(n, f){ + try{ + return n.filters.item(astr); + }catch(e){ + return f ? {} : null; + } + }; + + dojo._getOpacity = + d.isIE ? function(node){ + try{ + return af(node).Opacity / 100; // Number + }catch(e){ + return 1; // Number + } + } : + function(node){ + return gcs(node).opacity; + }; + + /*===== + dojo._setOpacity = function(node, opacity){ + // summary: + // set the opacity of the passed node portably. Returns the + // new opacity of the node. + // node: DOMNode + // a reference to a DOM node. Does NOT support taking an + // ID string for performance reasons. + // opacity: Number + // A Number between 0 and 1. 0 specifies transparent. + // returns: Number between 0 and 1 + return; // Number + } + =====*/ + + dojo._setOpacity = + d.isIE ? function(/*DomNode*/node, /*Number*/opacity){ + var ov = opacity * 100; + node.style.zoom = 1.0; + + // on IE7 Alpha(Filter opacity=100) makes text look fuzzy so disable it altogether (bug #2661), + //but still update the opacity value so we can get a correct reading if it is read later. + af(node, 1).Enabled = !(opacity == 1); + + if(!af(node)){ + node.style.filter += " progid:" + astr + "(Opacity=" + ov + ")"; + }else{ + af(node, 1).Opacity = ov; + } + + if(node.nodeName.toLowerCase() == "tr"){ + d.query("> td", node).forEach(function(i){ + d._setOpacity(i, opacity); + }); + } + return opacity; + } : + function(node, opacity){ + return node.style.opacity = opacity; + }; + + var _pixelNamesCache = { + left: true, top: true + }; + var _pixelRegExp = /margin|padding|width|height|max|min|offset/; // |border + var _toStyleValue = function(node, type, value){ + type = type.toLowerCase(); // FIXME: should we really be doing string case conversion here? Should we cache it? Need to profile! + if(d.isIE){ + if(value == "auto"){ + if(type == "height"){ return node.offsetHeight; } + if(type == "width"){ return node.offsetWidth; } + } + if(type == "fontweight"){ + switch(value){ + case 700: return "bold"; + case 400: + default: return "normal"; + } + } + } + if(!(type in _pixelNamesCache)){ + _pixelNamesCache[type] = _pixelRegExp.test(type); + } + return _pixelNamesCache[type] ? px(node, value) : value; + }; + + var _floatStyle = d.isIE ? "styleFloat" : "cssFloat", + _floatAliases = { "cssFloat": _floatStyle, "styleFloat": _floatStyle, "float": _floatStyle } + ; + + // public API + + dojo.style = function( /*DomNode|String*/ node, + /*String?|Object?*/ style, + /*String?*/ value){ + // summary: + // Accesses styles on a node. If 2 arguments are + // passed, acts as a getter. If 3 arguments are passed, acts + // as a setter. + // description: + // Getting the style value uses the computed style for the node, so the value + // will be a calculated value, not just the immediate node.style value. + // Also when getting values, use specific style names, + // like "borderBottomWidth" instead of "border" since compound values like + // "border" are not necessarily reflected as expected. + // If you want to get node dimensions, use `dojo.marginBox()`, + // `dojo.contentBox()` or `dojo.position()`. + // node: + // id or reference to node to get/set style for + // style: + // the style property to set in DOM-accessor format + // ("borderWidth", not "border-width") or an object with key/value + // pairs suitable for setting each property. + // value: + // If passed, sets value on the node for style, handling + // cross-browser concerns. When setting a pixel value, + // be sure to include "px" in the value. For instance, top: "200px". + // Otherwise, in some cases, some browsers will not apply the style. + // example: + // Passing only an ID or node returns the computed style object of + // the node: + // | dojo.style("thinger"); + // example: + // Passing a node and a style property returns the current + // normalized, computed value for that property: + // | dojo.style("thinger", "opacity"); // 1 by default + // + // example: + // Passing a node, a style property, and a value changes the + // current display of the node and returns the new computed value + // | dojo.style("thinger", "opacity", 0.5); // == 0.5 + // + // example: + // Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node: + // | dojo.style("thinger", { + // | "opacity": 0.5, + // | "border": "3px solid black", + // | "height": "300px" + // | }); + // + // example: + // When the CSS style property is hyphenated, the JavaScript property is camelCased. + // font-size becomes fontSize, and so on. + // | dojo.style("thinger",{ + // | fontSize:"14pt", + // | letterSpacing:"1.2em" + // | }); + // + // example: + // dojo.NodeList implements .style() using the same syntax, omitting the "node" parameter, calling + // dojo.style() on every element of the list. See: `dojo.query()` and `dojo.NodeList()` + // | dojo.query(".someClassName").style("visibility","hidden"); + // | // or + // | dojo.query("#baz > div").style({ + // | opacity:0.75, + // | fontSize:"13pt" + // | }); + + var n = byId(node), args = arguments.length, op = (style == "opacity"); + style = _floatAliases[style] || style; + if(args == 3){ + return op ? d._setOpacity(n, value) : n.style[style] = value; /*Number*/ + } + if(args == 2 && op){ + return d._getOpacity(n); + } + var s = gcs(n); + if(args == 2 && typeof style != "string"){ // inline'd type check + for(var x in style){ + d.style(node, x, style[x]); + } + return s; + } + return (args == 1) ? s : _toStyleValue(n, style, s[style] || n.style[style]); /* CSS2Properties||String||Number */ + } + + // ============================= + // Box Functions + // ============================= + + dojo._getPadExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // Returns object with special values specifically useful for node + // fitting. + // description: + // Returns an object with `w`, `h`, `l`, `t` properties: + // | l/t = left/top padding (respectively) + // | w = the total of the left and right padding + // | h = the total of the top and bottom padding + // If 'node' has position, l/t forms the origin for child nodes. + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + l = px(n, s.paddingLeft), + t = px(n, s.paddingTop); + return { + l: l, + t: t, + w: l+px(n, s.paddingRight), + h: t+px(n, s.paddingBottom) + }; + } + + dojo._getBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // returns an object with properties useful for noting the border + // dimensions. + // description: + // * l/t = the sum of left/top border (respectively) + // * w = the sum of the left and right border + // * h = the sum of the top and bottom border + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + ne = "none", + s = computedStyle||gcs(n), + bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0), + bt = (s.borderTopStyle != ne ? px(n, s.borderTopWidth) : 0); + return { + l: bl, + t: bt, + w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0), + h: bt + (s.borderBottomStyle!=ne ? px(n, s.borderBottomWidth) : 0) + }; + } + + dojo._getPadBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // Returns object with properties useful for box fitting with + // regards to padding. + // description: + // * l/t = the sum of left/top padding and left/top border (respectively) + // * w = the sum of the left and right padding and border + // * h = the sum of the top and bottom padding and border + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + p = d._getPadExtents(n, s), + b = d._getBorderExtents(n, s); + return { + l: p.l + b.l, + t: p.t + b.t, + w: p.w + b.w, + h: p.h + b.h + }; + } + + dojo._getMarginExtents = function(n, computedStyle){ + // summary: + // returns object with properties useful for box fitting with + // regards to box margins (i.e., the outer-box). + // + // * l/t = marginLeft, marginTop, respectively + // * w = total width, margin inclusive + // * h = total height, margin inclusive + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + l = px(n, s.marginLeft), + t = px(n, s.marginTop), + r = px(n, s.marginRight), + b = px(n, s.marginBottom); + if(d.isWebKit && (s.position != "absolute")){ + // FIXME: Safari's version of the computed right margin + // is the space between our right edge and the right edge + // of our offsetParent. + // What we are looking for is the actual margin value as + // determined by CSS. + // Hack solution is to assume left/right margins are the same. + r = l; + } + return { + l: l, + t: t, + w: l+r, + h: t+b + }; + } + + // Box getters work in any box context because offsetWidth/clientWidth + // are invariant wrt box context + // + // They do *not* work for display: inline objects that have padding styles + // because the user agent ignores padding (it's bogus styling in any case) + // + // Be careful with IMGs because they are inline or block depending on + // browser and browser mode. + + // Although it would be easier to read, there are not separate versions of + // _getMarginBox for each browser because: + // 1. the branching is not expensive + // 2. factoring the shared code wastes cycles (function call overhead) + // 3. duplicating the shared code wastes bytes + + dojo._getMarginBox = function(/*DomNode*/node, /*Object*/computedStyle){ + // summary: + // returns an object that encodes the width, height, left and top + // positions of the node's margin box. + var s = computedStyle || gcs(node), me = d._getMarginExtents(node, s); + var l = node.offsetLeft - me.l, t = node.offsetTop - me.t, p = node.parentNode; + if(d.isMoz){ + // Mozilla: + // If offsetParent has a computed overflow != visible, the offsetLeft is decreased + // by the parent's border. + // We don't want to compute the parent's style, so instead we examine node's + // computed left/top which is more stable. + var sl = parseFloat(s.left), st = parseFloat(s.top); + if(!isNaN(sl) && !isNaN(st)){ + l = sl, t = st; + }else{ + // If child's computed left/top are not parseable as a number (e.g. "auto"), we + // have no choice but to examine the parent's computed style. + if(p && p.style){ + var pcs = gcs(p); + if(pcs.overflow != "visible"){ + var be = d._getBorderExtents(p, pcs); + l += be.l, t += be.t; + } + } + } + }else if(d.isOpera || (d.isIE > 7 && !d.isQuirks)){ + // On Opera and IE 8, offsetLeft/Top includes the parent's border + if(p){ + be = d._getBorderExtents(p); + l -= be.l; + t -= be.t; + } + } + return { + l: l, + t: t, + w: node.offsetWidth + me.w, + h: node.offsetHeight + me.h + }; + } + + dojo._getContentBox = function(node, computedStyle){ + // summary: + // Returns an object that encodes the width, height, left and top + // positions of the node's content box, irrespective of the + // current box model. + + // clientWidth/Height are important since the automatically account for scrollbars + // fallback to offsetWidth/Height for special cases (see #3378) + var s = computedStyle || gcs(node), + pe = d._getPadExtents(node, s), + be = d._getBorderExtents(node, s), + w = node.clientWidth, + h + ; + if(!w){ + w = node.offsetWidth, h = node.offsetHeight; + }else{ + h = node.clientHeight, be.w = be.h = 0; + } + // On Opera, offsetLeft includes the parent's border + if(d.isOpera){ pe.l += be.l; pe.t += be.t; }; + return { + l: pe.l, + t: pe.t, + w: w - pe.w - be.w, + h: h - pe.h - be.h + }; + } + + dojo._getBorderBox = function(node, computedStyle){ + var s = computedStyle || gcs(node), + pe = d._getPadExtents(node, s), + cb = d._getContentBox(node, s) + ; + return { + l: cb.l - pe.l, + t: cb.t - pe.t, + w: cb.w + pe.w, + h: cb.h + pe.h + }; + } + + // Box setters depend on box context because interpretation of width/height styles + // vary wrt box context. + // + // The value of dojo.boxModel is used to determine box context. + // dojo.boxModel can be set directly to change behavior. + // + // Beware of display: inline objects that have padding styles + // because the user agent ignores padding (it's a bogus setup anyway) + // + // Be careful with IMGs because they are inline or block depending on + // browser and browser mode. + // + // Elements other than DIV may have special quirks, like built-in + // margins or padding, or values not detectable via computedStyle. + // In particular, margins on TABLE do not seems to appear + // at all in computedStyle on Mozilla. + + dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){ + // summary: + // sets width/height/left/top in the current (native) box-model + // dimentions. Uses the unit passed in u. + // node: + // DOM Node reference. Id string not supported for performance + // reasons. + // l: + // left offset from parent. + // t: + // top offset from parent. + // w: + // width in current box model. + // h: + // width in current box model. + // u: + // unit measure to use for other measures. Defaults to "px". + u = u || "px"; + var s = node.style; + if(!isNaN(l)){ s.left = l + u; } + if(!isNaN(t)){ s.top = t + u; } + if(w >= 0){ s.width = w + u; } + if(h >= 0){ s.height = h + u; } + } + + dojo._isButtonTag = function(/*DomNode*/node) { + // summary: + // True if the node is BUTTON or INPUT.type="button". + return node.tagName == "BUTTON" + || node.tagName=="INPUT" && (node.getAttribute("type")||'').toUpperCase() == "BUTTON"; // boolean + } + + dojo._usesBorderBox = function(/*DomNode*/node){ + // summary: + // True if the node uses border-box layout. + + // We could test the computed style of node to see if a particular box + // has been specified, but there are details and we choose not to bother. + + // TABLE and BUTTON (and INPUT type=button) are always border-box by default. + // If you have assigned a different box to either one via CSS then + // box functions will break. + + var n = node.tagName; + return d.boxModel=="border-box" || n=="TABLE" || d._isButtonTag(node); // boolean + } + + dojo._setContentSize = function(/*DomNode*/node, /*Number*/widthPx, /*Number*/heightPx, /*Object*/computedStyle){ + // summary: + // Sets the size of the node's contents, irrespective of margins, + // padding, or borders. + if(d._usesBorderBox(node)){ + var pb = d._getPadBorderExtents(node, computedStyle); + if(widthPx >= 0){ widthPx += pb.w; } + if(heightPx >= 0){ heightPx += pb.h; } + } + d._setBox(node, NaN, NaN, widthPx, heightPx); + } + + dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, + /*Number?*/widthPx, /*Number?*/heightPx, + /*Object*/computedStyle){ + // summary: + // sets the size of the node's margin box and placement + // (left/top), irrespective of box model. Think of it as a + // passthrough to dojo._setBox that handles box-model vagaries for + // you. + + var s = computedStyle || gcs(node), + // Some elements have special padding, margin, and box-model settings. + // To use box functions you may need to set padding, margin explicitly. + // Controlling box-model is harder, in a pinch you might set dojo.boxModel. + bb = d._usesBorderBox(node), + pb = bb ? _nilExtents : d._getPadBorderExtents(node, s) + ; + if(d.isWebKit){ + // on Safari (3.1.2), button nodes with no explicit size have a default margin + // setting an explicit size eliminates the margin. + // We have to swizzle the width to get correct margin reading. + if(d._isButtonTag(node)){ + var ns = node.style; + if(widthPx >= 0 && !ns.width) { ns.width = "4px"; } + if(heightPx >= 0 && !ns.height) { ns.height = "4px"; } + } + } + var mb = d._getMarginExtents(node, s); + if(widthPx >= 0){ widthPx = Math.max(widthPx - pb.w - mb.w, 0); } + if(heightPx >= 0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); } + d._setBox(node, leftPx, topPx, widthPx, heightPx); + } + + var _nilExtents = { l:0, t:0, w:0, h:0 }; + + // public API + + dojo.marginBox = function(/*DomNode|String*/node, /*Object?*/box){ + // summary: + // Getter/setter for the margin-box of node. + // description: + // Getter/setter for the margin-box of node. + // Returns an object in the expected format of box (regardless + // if box is passed). The object might look like: + // `{ l: 50, t: 200, w: 300: h: 150 }` + // for a node offset from its parent 50px to the left, 200px from + // the top with a margin width of 300px and a margin-height of + // 150px. + // node: + // id or reference to DOM Node to get/set box for + // box: + // If passed, denotes that dojo.marginBox() should + // update/set the margin box for node. Box is an object in the + // above format. All properties are optional if passed. + // example: + // Retrieve the marginbox of a passed node + // | var box = dojo.marginBox("someNodeId"); + // | console.dir(box); + // + // example: + // Set a node's marginbox to the size of another node + // | var box = dojo.marginBox("someNodeId"); + // | dojo.marginBox("someOtherNode", box); + + var n = byId(node), s = gcs(n), b = box; + return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object + } + + dojo.contentBox = function(/*DomNode|String*/node, /*Object?*/box){ + // summary: + // Getter/setter for the content-box of node. + // description: + // Returns an object in the expected format of box (regardless if box is passed). + // The object might look like: + // `{ l: 50, t: 200, w: 300: h: 150 }` + // for a node offset from its parent 50px to the left, 200px from + // the top with a content width of 300px and a content-height of + // 150px. Note that the content box may have a much larger border + // or margin box, depending on the box model currently in use and + // CSS values set/inherited for node. + // node: + // id or reference to DOM Node to get/set box for + // box: + // If passed, denotes that dojo.contentBox() should + // update/set the content box for node. Box is an object in the + // above format. All properties are optional if passed. + var n = byId(node), s = gcs(n), b = box; + return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object + } + + // ============================= + // Positioning + // ============================= + + var _sumAncestorProperties = function(node, prop){ + if(!(node = (node||0).parentNode)){return 0} + var val, retVal = 0, _b = d.body(); + while(node && node.style){ + if(gcs(node).position == "fixed"){ + return 0; + } + val = node[prop]; + if(val){ + retVal += val - 0; + // opera and khtml #body & #html has the same values, we only + // need one value + if(node == _b){ break; } + } + node = node.parentNode; + } + return retVal; // integer + } + + dojo._docScroll = function(){ + var n = d.global; + return "pageXOffset" in n? { x:n.pageXOffset, y:n.pageYOffset } : + (n=d.doc.documentElement, n.clientHeight? { x:d._fixIeBiDiScrollLeft(n.scrollLeft), y:n.scrollTop } : + (n=d.body(), { x:n.scrollLeft||0, y:n.scrollTop||0 })); + }; + + dojo._isBodyLtr = function(){ + return "_bodyLtr" in d? d._bodyLtr : + d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean + } + + dojo._getIeDocumentElementOffset = function(){ + // summary: + // returns the offset in x and y from the document body to the + // visual edge of the page + // description: + // The following values in IE contain an offset: + // | event.clientX + // | event.clientY + // | node.getBoundingClientRect().left + // | node.getBoundingClientRect().top + // But other position related values do not contain this offset, + // such as node.offsetLeft, node.offsetTop, node.style.left and + // node.style.top. The offset is always (2, 2) in LTR direction. + // When the body is in RTL direction, the offset counts the width + // of left scroll bar's width. This function computes the actual + // offset. + + //NOTE: assumes we're being called in an IE browser + + var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks + + if(d.isIE < 8){ + var r = de.getBoundingClientRect(); // works well for IE6+ + //console.debug('rect left,top = ' + r.left+','+r.top + ', html client left/top = ' + de.clientLeft+','+de.clientTop + ', rtl = ' + (!d._isBodyLtr()) + ', quirks = ' + d.isQuirks); + var l = r.left, + t = r.top; + if(d.isIE < 7){ + l += de.clientLeft; // scrollbar size in strict/RTL, or, + t += de.clientTop; // HTML border size in strict + } + return { + x: l < 0? 0 : l, // FRAME element border size can lead to inaccurate negative values + y: t < 0? 0 : t + }; + }else{ + return { + x: 0, + y: 0 + }; + } + + }; + + dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ + // In RTL direction, scrollLeft should be a negative value, but IE < 8 + // returns a positive one. All codes using documentElement.scrollLeft + // must call this function to fix this error, otherwise the position + // will offset to right when there is a horizontal scrollbar. + + var dd = d.doc; + if(d.isIE < 8 && !d._isBodyLtr()){ + var de = d.isQuirks ? dd.body : dd.documentElement; + return scrollLeft + de.clientWidth - de.scrollWidth; // Integer + } + return scrollLeft; // Integer + } + + // FIXME: need a setter for coords or a moveTo!! + dojo._abs = dojo.position = function(/*DomNode*/node, /*Boolean?*/includeScroll){ + // summary: + // Gets the position and size of the passed element relative to + // the viewport (if includeScroll==false), or relative to the + // document root (if includeScroll==true). + // + // description: + // Returns an object of the form: + // { x: 100, y: 300, w: 20, h: 15 } + // If includeScroll==true, the x and y values will include any + // document offsets that may affect the position relative to the + // viewport. + // Uses the border-box model (inclusive of border and padding but + // not margin). Does not act as a setter. + + var db = d.body(), dh = db.parentNode, ret; + node = byId(node); + if(node["getBoundingClientRect"]){ + // IE6+, FF3+, super-modern WebKit, and Opera 9.6+ all take this branch + ret = node.getBoundingClientRect(); + ret = { x: ret.left, y: ret.top, w: ret.right - ret.left, h: ret.bottom - ret.top }; + if(d.isIE){ + // On IE there's a 2px offset that we need to adjust for, see _getIeDocumentElementOffset() + var offset = d._getIeDocumentElementOffset(); + + // fixes the position in IE, quirks mode + ret.x -= offset.x + (d.isQuirks ? db.clientLeft+db.offsetLeft : 0); + ret.y -= offset.y + (d.isQuirks ? db.clientTop+db.offsetTop : 0); + }else if(d.isFF == 3){ + // In FF3 you have to subtract the document element margins. + // Fixed in FF3.5 though. + var cs = gcs(dh); + ret.x -= px(dh, cs.marginLeft) + px(dh, cs.borderLeftWidth); + ret.y -= px(dh, cs.marginTop) + px(dh, cs.borderTopWidth); + } + }else{ + // FF2 and older WebKit + ret = { + x: 0, + y: 0, + w: node.offsetWidth, + h: node.offsetHeight + }; + if(node["offsetParent"]){ + ret.x -= _sumAncestorProperties(node, "scrollLeft"); + ret.y -= _sumAncestorProperties(node, "scrollTop"); + + var curnode = node; + do{ + var n = curnode.offsetLeft, + t = curnode.offsetTop; + ret.x += isNaN(n) ? 0 : n; + ret.y += isNaN(t) ? 0 : t; + + cs = gcs(curnode); + if(curnode != node){ + if(d.isMoz){ + // tried left+right with differently sized left/right borders + // it really is 2xleft border in FF, not left+right, even in RTL! + ret.x += 2 * px(curnode,cs.borderLeftWidth); + ret.y += 2 * px(curnode,cs.borderTopWidth); + }else{ + ret.x += px(curnode, cs.borderLeftWidth); + ret.y += px(curnode, cs.borderTopWidth); + } + } + // static children in a static div in FF2 are affected by the div's border as well + // but offsetParent will skip this div! + if(d.isMoz && cs.position=="static"){ + var parent=curnode.parentNode; + while(parent!=curnode.offsetParent){ + var pcs=gcs(parent); + if(pcs.position=="static"){ + ret.x += px(curnode,pcs.borderLeftWidth); + ret.y += px(curnode,pcs.borderTopWidth); + } + parent=parent.parentNode; + } + } + curnode = curnode.offsetParent; + }while((curnode != dh) && curnode); + }else if(node.x && node.y){ + ret.x += isNaN(node.x) ? 0 : node.x; + ret.y += isNaN(node.y) ? 0 : node.y; + } + } + // account for document scrolling + // if offsetParent is used, ret value already includes scroll position + // so we may have to actually remove that value if !includeScroll + if(includeScroll){ + var scroll = d._docScroll(); + ret.x += scroll.x; + ret.y += scroll.y; + } + + return ret; // Object + } + + dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){ + // summary: + // Deprecated: Use position() for border-box x/y/w/h + // or marginBox() for margin-box w/h/l/t. + // Returns an object representing a node's size and position. + // + // description: + // Returns an object that measures margin-box (w)idth/(h)eight + // and absolute position x/y of the border-box. Also returned + // is computed (l)eft and (t)op values in pixels from the + // node's offsetParent as returned from marginBox(). + // Return value will be in the form: + //| { l: 50, t: 200, w: 300: h: 150, x: 100, y: 300 } + // Does not act as a setter. If includeScroll is passed, the x and + // y params are affected as one would expect in dojo.position(). + var n = byId(node), s = gcs(n), mb = d._getMarginBox(n, s); + var abs = d.position(n, includeScroll); + mb.x = abs.x; + mb.y = abs.y; + return mb; + } + + // ============================= + // Element attribute Functions + // ============================= + + // dojo.attr() should conform to http://www.w3.org/TR/DOM-Level-2-Core/ + + var _propNames = { + // properties renamed to avoid clashes with reserved words + "class": "className", + "for": "htmlFor", + // properties written as camelCase + tabindex: "tabIndex", + readonly: "readOnly", + colspan: "colSpan", + frameborder: "frameBorder", + rowspan: "rowSpan", + valuetype: "valueType" + }, + _attrNames = { + // original attribute names + classname: "class", + htmlfor: "for", + // for IE + tabindex: "tabIndex", + readonly: "readOnly" + }, + _forcePropNames = { + innerHTML: 1, + className: 1, + htmlFor: d.isIE, + value: 1 + }; + + var _fixAttrName = function(/*String*/ name){ + return _attrNames[name.toLowerCase()] || name; + }; + + var _hasAttr = function(node, name){ + var attr = node.getAttributeNode && node.getAttributeNode(name); + return attr && attr.specified; // Boolean + }; + + // There is a difference in the presence of certain properties and their default values + // between browsers. For example, on IE "disabled" is present on all elements, + // but it is value is "false"; "tabIndex" of
    returns 0 by default on IE, yet other browsers + // can return -1. + + dojo.hasAttr = function(/*DomNode|String*/node, /*String*/name){ + // summary: + // Returns true if the requested attribute is specified on the + // given element, and false otherwise. + // node: + // id or reference to the element to check + // name: + // the name of the attribute + // returns: + // true if the requested attribute is specified on the + // given element, and false otherwise + var lc = name.toLowerCase(); + return _forcePropNames[_propNames[lc] || name] || _hasAttr(byId(node), _attrNames[lc] || name); // Boolean + } + + var _evtHdlrMap = {}, _ctr = 0, + _attrId = dojo._scopeName + "attrid", + // the next dictionary lists elements with read-only innerHTML on IE + _roInnerHtml = {col: 1, colgroup: 1, + // frameset: 1, head: 1, html: 1, style: 1, + table: 1, tbody: 1, tfoot: 1, thead: 1, tr: 1, title: 1}; + + dojo.attr = function(/*DomNode|String*/node, /*String|Object*/name, /*String?*/value){ + // summary: + // Gets or sets an attribute on an HTML element. + // description: + // Handles normalized getting and setting of attributes on DOM + // Nodes. If 2 arguments are passed, and a the second argumnt is a + // string, acts as a getter. + // + // If a third argument is passed, or if the second argument is a + // map of attributes, acts as a setter. + // + // When passing functions as values, note that they will not be + // directly assigned to slots on the node, but rather the default + // behavior will be removed and the new behavior will be added + // using `dojo.connect()`, meaning that event handler properties + // will be normalized and that some caveats with regards to + // non-standard behaviors for onsubmit apply. Namely that you + // should cancel form submission using `dojo.stopEvent()` on the + // passed event object instead of returning a boolean value from + // the handler itself. + // node: + // id or reference to the element to get or set the attribute on + // name: + // the name of the attribute to get or set. + // value: + // The value to set for the attribute + // returns: + // when used as a getter, the value of the requested attribute + // or null if that attribute does not have a specified or + // default value; + // + // when used as a setter, the DOM node + // + // example: + // | // get the current value of the "foo" attribute on a node + // | dojo.attr(dojo.byId("nodeId"), "foo"); + // | // or we can just pass the id: + // | dojo.attr("nodeId", "foo"); + // + // example: + // | // use attr() to set the tab index + // | dojo.attr("nodeId", "tabIndex", 3); + // | + // + // example: + // Set multiple values at once, including event handlers: + // | dojo.attr("formId", { + // | "foo": "bar", + // | "tabIndex": -1, + // | "method": "POST", + // | "onsubmit": function(e){ + // | // stop submitting the form. Note that the IE behavior + // | // of returning true or false will have no effect here + // | // since our handler is connect()ed to the built-in + // | // onsubmit behavior and so we need to use + // | // dojo.stopEvent() to ensure that the submission + // | // doesn't proceed. + // | dojo.stopEvent(e); + // | + // | // submit the form with Ajax + // | dojo.xhrPost({ form: "formId" }); + // | } + // | }); + // + // example: + // Style is s special case: Only set with an object hash of styles + // | dojo.attr("someNode",{ + // | id:"bar", + // | style:{ + // | width:"200px", height:"100px", color:"#000" + // | } + // | }); + // + // example: + // Again, only set style as an object hash of styles: + // | var obj = { color:"#fff", backgroundColor:"#000" }; + // | dojo.attr("someNode", "style", obj); + // | + // | // though shorter to use `dojo.style()` in this case: + // | dojo.style("someNode", obj); + + node = byId(node); + var args = arguments.length, prop; + if(args == 2 && typeof name != "string"){ // inline'd type check + // the object form of setter: the 2nd argument is a dictionary + for(var x in name){ + d.attr(node, x, name[x]); + } + return node; // DomNode + } + var lc = name.toLowerCase(), + propName = _propNames[lc] || name, + forceProp = _forcePropNames[propName], + attrName = _attrNames[lc] || name; + if(args == 3){ + // setter + do{ + if(propName == "style" && typeof value != "string"){ // inline'd type check + // special case: setting a style + d.style(node, value); + break; + } + if(propName == "innerHTML"){ + // special case: assigning HTML + if(d.isIE && node.tagName.toLowerCase() in _roInnerHtml){ + d.empty(node); + node.appendChild(d._toDom(value, node.ownerDocument)); + }else{ + node[propName] = value; + } + break; + } + if(d.isFunction(value)){ + // special case: assigning an event handler + // clobber if we can + var attrId = d.attr(node, _attrId); + if(!attrId){ + attrId = _ctr++; + d.attr(node, _attrId, attrId); + } + if(!_evtHdlrMap[attrId]){ + _evtHdlrMap[attrId] = {}; + } + var h = _evtHdlrMap[attrId][propName]; + if(h){ + d.disconnect(h); + }else{ + try{ + delete node[propName]; + }catch(e){} + } + // ensure that event objects are normalized, etc. + _evtHdlrMap[attrId][propName] = d.connect(node, propName, value); + break; + } + if(forceProp || typeof value == "boolean"){ + // special case: forcing assignment to the property + // special case: setting boolean to a property instead of attribute + node[propName] = value; + break; + } + // node's attribute + node.setAttribute(attrName, value); + }while(false); + return node; // DomNode + } + // getter + // should we access this attribute via a property or + // via getAttribute()? + value = node[propName]; + if(forceProp && typeof value != "undefined"){ + // node's property + return value; // Anything + } + if(propName != "href" && (typeof value == "boolean" || d.isFunction(value))){ + // node's property + return value; // Anything + } + // node's attribute + // we need _hasAttr() here to guard against IE returning a default value + return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything + } + + dojo.removeAttr = function(/*DomNode|String*/ node, /*String*/ name){ + // summary: + // Removes an attribute from an HTML element. + // node: + // id or reference to the element to remove the attribute from + // name: + // the name of the attribute to remove + byId(node).removeAttribute(_fixAttrName(name)); + } + + dojo.getNodeProp = function(/*DomNode|String*/ node, /*String*/ name){ + // summary: + // Returns an effective value of a property or an attribute. + // node: + // id or reference to the element to remove the attribute from + // name: + // the name of the attribute + node = byId(node); + var lc = name.toLowerCase(), + propName = _propNames[lc] || name; + if((propName in node) && propName != "href"){ + // node's property + return node[propName]; // Anything + } + // node's attribute + var attrName = _attrNames[lc] || name; + return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything + } + + dojo.create = function(tag, attrs, refNode, pos){ + // summary: + // Create an element, allowing for optional attribute decoration + // and placement. + // + // description: + // A DOM Element creation function. A shorthand method for creating a node or + // a fragment, and allowing for a convenient optional attribute setting step, + // as well as an optional DOM placement reference. + //| + // Attributes are set by passing the optional object through `dojo.attr`. + // See `dojo.attr` for noted caveats and nuances, and API if applicable. + //| + // Placement is done via `dojo.place`, assuming the new node to be the action + // node, passing along the optional reference node and position. + // + // tag: String|DomNode + // A string of the element to create (eg: "div", "a", "p", "li", "script", "br"), + // or an existing DOM node to process. + // + // attrs: Object + // An object-hash of attributes to set on the newly created node. + // Can be null, if you don't want to set any attributes/styles. + // See: `dojo.attr` for a description of available attributes. + // + // refNode: String?|DomNode? + // Optional reference node. Used by `dojo.place` to place the newly created + // node somewhere in the dom relative to refNode. Can be a DomNode reference + // or String ID of a node. + // + // pos: String? + // Optional positional reference. Defaults to "last" by way of `dojo.place`, + // though can be set to "first","after","before","last", "replace" or "only" + // to further control the placement of the new node relative to the refNode. + // 'refNode' is required if a 'pos' is specified. + // + // returns: DomNode + // + // example: + // Create a DIV: + // | var n = dojo.create("div"); + // + // example: + // Create a DIV with content: + // | var n = dojo.create("div", { innerHTML:"

    hi

    " }); + // + // example: + // Place a new DIV in the BODY, with no attributes set + // | var n = dojo.create("div", null, dojo.body()); + // + // example: + // Create an UL, and populate it with LI's. Place the list as the first-child of a + // node with id="someId": + // | var ul = dojo.create("ul", null, "someId", "first"); + // | var items = ["one", "two", "three", "four"]; + // | dojo.forEach(items, function(data){ + // | dojo.create("li", { innerHTML: data }, ul); + // | }); + // + // example: + // Create an anchor, with an href. Place in BODY: + // | dojo.create("a", { href:"foo.html", title:"Goto FOO!" }, dojo.body()); + // + // example: + // Create a `dojo.NodeList()` from a new element (for syntatic sugar): + // | dojo.query(dojo.create('div')) + // | .addClass("newDiv") + // | .onclick(function(e){ console.log('clicked', e.target) }) + // | .place("#someNode"); // redundant, but cleaner. + + var doc = d.doc; + if(refNode){ + refNode = byId(refNode); + doc = refNode.ownerDocument; + } + if(typeof tag == "string"){ // inline'd type check + tag = doc.createElement(tag); + } + if(attrs){ d.attr(tag, attrs); } + if(refNode){ d.place(tag, refNode, pos); } + return tag; // DomNode + } + + /*===== + dojo.empty = function(node){ + // summary: + // safely removes all children of the node. + // node: DOMNode|String + // a reference to a DOM node or an id. + // example: + // Destroy node's children byId: + // | dojo.empty("someId"); + // + // example: + // Destroy all nodes' children in a list by reference: + // | dojo.query(".someNode").forEach(dojo.empty); + } + =====*/ + + d.empty = + d.isIE ? function(node){ + node = byId(node); + for(var c; c = node.lastChild;){ // intentional assignment + d.destroy(c); + } + } : + function(node){ + byId(node).innerHTML = ""; + }; + + /*===== + dojo._toDom = function(frag, doc){ + // summary: + // instantiates an HTML fragment returning the corresponding DOM. + // frag: String + // the HTML fragment + // doc: DocumentNode? + // optional document to use when creating DOM nodes, defaults to + // dojo.doc if not specified. + // returns: DocumentFragment + // + // example: + // Create a table row: + // | var tr = dojo._toDom("First!"); + } + =====*/ + + // support stuff for dojo._toDom + var tagWrap = { + option: ["select"], + tbody: ["table"], + thead: ["table"], + tfoot: ["table"], + tr: ["table", "tbody"], + td: ["table", "tbody", "tr"], + th: ["table", "thead", "tr"], + legend: ["fieldset"], + caption: ["table"], + colgroup: ["table"], + col: ["table", "colgroup"], + li: ["ul"] + }, + reTag = /<\s*([\w\:]+)/, + masterNode = {}, masterNum = 0, + masterName = "__" + d._scopeName + "ToDomId"; + + // generate start/end tag strings to use + // for the injection for each special tag wrap case. + for(var param in tagWrap){ + var tw = tagWrap[param]; + tw.pre = param == "option" ? ' + // | + // | + // | + // | + // + // yields this object structure as the result of a call to + // formToObject(): + // + // | { + // | blah: "blah", + // | multi: [ + // | "thud", + // | "thonk" + // | ] + // | }; + + var ret = {}; + var exclude = "file|submit|image|reset|button|"; + _d.forEach(dojo.byId(formNode).elements, function(item){ + var _in = item.name; + var type = (item.type||"").toLowerCase(); + if(_in && type && exclude.indexOf(type) == -1 && !item.disabled){ + setValue(ret, _in, _d.fieldToObject(item)); + if(type == "image"){ + ret[_in+".x"] = ret[_in+".y"] = ret[_in].x = ret[_in].y = 0; + } + } + }); + return ret; // Object + } + + dojo.objectToQuery = function(/*Object*/ map){ + // summary: + // takes a name/value mapping object and returns a string representing + // a URL-encoded version of that object. + // example: + // this object: + // + // | { + // | blah: "blah", + // | multi: [ + // | "thud", + // | "thonk" + // | ] + // | }; + // + // yields the following query string: + // + // | "blah=blah&multi=thud&multi=thonk" + + // FIXME: need to implement encodeAscii!! + var enc = encodeURIComponent; + var pairs = []; + var backstop = {}; + for(var name in map){ + var value = map[name]; + if(value != backstop[name]){ + var assign = enc(name) + "="; + if(_d.isArray(value)){ + for(var i=0; i < value.length; i++){ + pairs.push(assign + enc(value[i])); + } + }else{ + pairs.push(assign + enc(value)); + } + } + } + return pairs.join("&"); // String + } + + dojo.formToQuery = function(/*DOMNode||String*/ formNode){ + // summary: + // Returns a URL-encoded string representing the form passed as either a + // node or string ID identifying the form to serialize + return _d.objectToQuery(_d.formToObject(formNode)); // String + } + + dojo.formToJson = function(/*DOMNode||String*/ formNode, /*Boolean?*/prettyPrint){ + // summary: + // Create a serialized JSON string from a form node or string + // ID identifying the form to serialize + return _d.toJson(_d.formToObject(formNode), prettyPrint); // String + } + + dojo.queryToObject = function(/*String*/ str){ + // summary: + // Create an object representing a de-serialized query section of a + // URL. Query keys with multiple values are returned in an array. + // + // example: + // This string: + // + // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" + // + // results in this object structure: + // + // | { + // | foo: [ "bar", "baz" ], + // | thinger: " spaces =blah", + // | zonk: "blarg" + // | } + // + // Note that spaces and other urlencoded entities are correctly + // handled. + + // FIXME: should we grab the URL string if we're not passed one? + var ret = {}; + var qp = str.split("&"); + var dec = decodeURIComponent; + _d.forEach(qp, function(item){ + if(item.length){ + var parts = item.split("="); + var name = dec(parts.shift()); + var val = dec(parts.join("=")); + if(typeof ret[name] == "string"){ // inline'd type check + ret[name] = [ret[name]]; + } + + if(_d.isArray(ret[name])){ + ret[name].push(val); + }else{ + ret[name] = val; + } + } + }); + return ret; // Object + } + + // need to block async callbacks from snatching this thread as the result + // of an async callback might call another sync XHR, this hangs khtml forever + // must checked by watchInFlight() + + dojo._blockAsync = false; + + // MOW: remove dojo._contentHandlers alias in 2.0 + var handlers = _d._contentHandlers = dojo.contentHandlers = { + // summary: + // A map of availble XHR transport handle types. Name matches the + // `handleAs` attribute passed to XHR calls. + // + // description: + // A map of availble XHR transport handle types. Name matches the + // `handleAs` attribute passed to XHR calls. Each contentHandler is + // called, passing the xhr object for manipulation. The return value + // from the contentHandler will be passed to the `load` or `handle` + // functions defined in the original xhr call. + // + // example: + // Creating a custom content-handler: + // | dojo.contentHandlers.makeCaps = function(xhr){ + // | return xhr.responseText.toUpperCase(); + // | } + // | // and later: + // | dojo.xhrGet({ + // | url:"foo.txt", + // | handleAs:"makeCaps", + // | load: function(data){ /* data is a toUpper version of foo.txt */ } + // | }); + + text: function(xhr){ + // summary: A contentHandler which simply returns the plaintext response data + return xhr.responseText; + }, + json: function(xhr){ + // summary: A contentHandler which returns a JavaScript object created from the response data + return _d.fromJson(xhr.responseText || null); + }, + "json-comment-filtered": function(xhr){ + // summary: A contentHandler which expects comment-filtered JSON. + // description: + // A contentHandler which expects comment-filtered JSON. + // the json-comment-filtered option was implemented to prevent + // "JavaScript Hijacking", but it is less secure than standard JSON. Use + // standard JSON instead. JSON prefixing can be used to subvert hijacking. + // + // Will throw a notice suggesting to use application/json mimetype, as + // json-commenting can introduce security issues. To decrease the chances of hijacking, + // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& + // + // use djConfig.useCommentedJson = true to turn off the notice + if(!dojo.config.useCommentedJson){ + console.warn("Consider using the standard mimetype:application/json." + + " json-commenting can introduce security issues. To" + + " decrease the chances of hijacking, use the standard the 'json' handler and" + + " prefix your json with: {}&&\n" + + "Use djConfig.useCommentedJson=true to turn off this message."); + } + + var value = xhr.responseText; + var cStartIdx = value.indexOf("\/*"); + var cEndIdx = value.lastIndexOf("*\/"); + if(cStartIdx == -1 || cEndIdx == -1){ + throw new Error("JSON was not comment filtered"); + } + return _d.fromJson(value.substring(cStartIdx+2, cEndIdx)); + }, + javascript: function(xhr){ + // summary: A contentHandler which evaluates the response data, expecting it to be valid JavaScript + + // FIXME: try Moz and IE specific eval variants? + return _d.eval(xhr.responseText); + }, + xml: function(xhr){ + // summary: A contentHandler returning an XML Document parsed from the response data + var result = xhr.responseXML; + if(_d.isIE && (!result || !result.documentElement)){ + //WARNING: this branch used by the xml handling in dojo.io.iframe, + //so be sure to test dojo.io.iframe if making changes below. + var ms = function(n){ return "MSXML" + n + ".DOMDocument"; } + var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)]; + _d.some(dp, function(p){ + try{ + var dom = new ActiveXObject(p); + dom.async = false; + dom.loadXML(xhr.responseText); + result = dom; + }catch(e){ return false; } + return true; + }); + } + return result; // DOMDocument + }, + "json-comment-optional": function(xhr){ + // summary: A contentHandler which checks the presence of comment-filtered JSON and + // alternates between the `json` and `json-comment-filtered` contentHandlers. + if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){ + return handlers["json-comment-filtered"](xhr); + }else{ + return handlers["json"](xhr); + } + } + }; + + /*===== + dojo.__IoArgs = function(){ + // url: String + // URL to server endpoint. + // content: Object? + // Contains properties with string values. These + // properties will be serialized as name1=value2 and + // passed in the request. + // timeout: Integer? + // Milliseconds to wait for the response. If this time + // passes, the then error callbacks are called. + // form: DOMNode? + // DOM node for a form. Used to extract the form values + // and send to the server. + // preventCache: Boolean? + // Default is false. If true, then a + // "dojo.preventCache" parameter is sent in the request + // with a value that changes with each request + // (timestamp). Useful only with GET-type requests. + // handleAs: String? + // Acceptable values depend on the type of IO + // transport (see specific IO calls for more information). + // rawBody: String? + // Sets the raw body for an HTTP request. If this is used, then the content + // property is ignored. This is mostly useful for HTTP methods that have + // a body to their requests, like PUT or POST. This property can be used instead + // of postData and putData for dojo.rawXhrPost and dojo.rawXhrPut respectively. + // ioPublish: Boolean? + // Set this explicitly to false to prevent publishing of topics related to + // IO operations. Otherwise, if djConfig.ioPublish is set to true, topics + // will be published via dojo.publish for different phases of an IO operation. + // See dojo.__IoPublish for a list of topics that are published. + // load: Function? + // This function will be + // called on a successful HTTP response code. + // error: Function? + // This function will + // be called when the request fails due to a network or server error, the url + // is invalid, etc. It will also be called if the load or handle callback throws an + // exception, unless djConfig.debugAtAllCosts is true. This allows deployed applications + // to continue to run even when a logic error happens in the callback, while making + // it easier to troubleshoot while in debug mode. + // handle: Function? + // This function will + // be called at the end of every request, whether or not an error occurs. + this.url = url; + this.content = content; + this.timeout = timeout; + this.form = form; + this.preventCache = preventCache; + this.handleAs = handleAs; + this.ioPublish = ioPublish; + this.load = function(response, ioArgs){ + // ioArgs: dojo.__IoCallbackArgs + // Provides additional information about the request. + // response: Object + // The response in the format as defined with handleAs. + } + this.error = function(response, ioArgs){ + // ioArgs: dojo.__IoCallbackArgs + // Provides additional information about the request. + // response: Object + // The response in the format as defined with handleAs. + } + this.handle = function(loadOrError, response, ioArgs){ + // loadOrError: String + // Provides a string that tells you whether this function + // was called because of success (load) or failure (error). + // response: Object + // The response in the format as defined with handleAs. + // ioArgs: dojo.__IoCallbackArgs + // Provides additional information about the request. + } + } + =====*/ + + /*===== + dojo.__IoCallbackArgs = function(args, xhr, url, query, handleAs, id, canDelete, json){ + // args: Object + // the original object argument to the IO call. + // xhr: XMLHttpRequest + // For XMLHttpRequest calls only, the + // XMLHttpRequest object that was used for the + // request. + // url: String + // The final URL used for the call. Many times it + // will be different than the original args.url + // value. + // query: String + // For non-GET requests, the + // name1=value1&name2=value2 parameters sent up in + // the request. + // handleAs: String + // The final indicator on how the response will be + // handled. + // id: String + // For dojo.io.script calls only, the internal + // script ID used for the request. + // canDelete: Boolean + // For dojo.io.script calls only, indicates + // whether the script tag that represents the + // request can be deleted after callbacks have + // been called. Used internally to know when + // cleanup can happen on JSONP-type requests. + // json: Object + // For dojo.io.script calls only: holds the JSON + // response for JSONP-type requests. Used + // internally to hold on to the JSON responses. + // You should not need to access it directly -- + // the same object should be passed to the success + // callbacks directly. + this.args = args; + this.xhr = xhr; + this.url = url; + this.query = query; + this.handleAs = handleAs; + this.id = id; + this.canDelete = canDelete; + this.json = json; + } + =====*/ + + /*===== + dojo.__IoPublish = function(){ + // summary: + // This is a list of IO topics that can be published + // if djConfig.ioPublish is set to true. IO topics can be + // published for any Input/Output, network operation. So, + // dojo.xhr, dojo.io.script and dojo.io.iframe can all + // trigger these topics to be published. + // start: String + // "/dojo/io/start" is sent when there are no outstanding IO + // requests, and a new IO request is started. No arguments + // are passed with this topic. + // send: String + // "/dojo/io/send" is sent whenever a new IO request is started. + // It passes the dojo.Deferred for the request with the topic. + // load: String + // "/dojo/io/load" is sent whenever an IO request has loaded + // successfully. It passes the response and the dojo.Deferred + // for the request with the topic. + // error: String + // "/dojo/io/error" is sent whenever an IO request has errored. + // It passes the error and the dojo.Deferred + // for the request with the topic. + // done: String + // "/dojo/io/done" is sent whenever an IO request has completed, + // either by loading or by erroring. It passes the error and + // the dojo.Deferred for the request with the topic. + // stop: String + // "/dojo/io/stop" is sent when all outstanding IO requests have + // finished. No arguments are passed with this topic. + this.start = "/dojo/io/start"; + this.send = "/dojo/io/send"; + this.load = "/dojo/io/load"; + this.error = "/dojo/io/error"; + this.done = "/dojo/io/done"; + this.stop = "/dojo/io/stop"; + } + =====*/ + + dojo._ioSetArgs = function(/*dojo.__IoArgs*/args, + /*Function*/canceller, + /*Function*/okHandler, + /*Function*/errHandler){ + // summary: + // sets up the Deferred and ioArgs property on the Deferred so it + // can be used in an io call. + // args: + // The args object passed into the public io call. Recognized properties on + // the args object are: + // canceller: + // The canceller function used for the Deferred object. The function + // will receive one argument, the Deferred object that is related to the + // canceller. + // okHandler: + // The first OK callback to be registered with Deferred. It has the opportunity + // to transform the OK response. It will receive one argument -- the Deferred + // object returned from this function. + // errHandler: + // The first error callback to be registered with Deferred. It has the opportunity + // to do cleanup on an error. It will receive two arguments: error (the + // Error object) and dfd, the Deferred object returned from this function. + + var ioArgs = {args: args, url: args.url}; + + //Get values from form if requestd. + var formObject = null; + if(args.form){ + var form = _d.byId(args.form); + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //so use it for all. See #2844 + var actnNode = form.getAttributeNode("action"); + ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); + formObject = _d.formToObject(form); + } + + // set up the query params + var miArgs = [{}]; + + if(formObject){ + // potentially over-ride url-provided params w/ form values + miArgs.push(formObject); + } + if(args.content){ + // stuff in content over-rides what's set by form + miArgs.push(args.content); + } + if(args.preventCache){ + miArgs.push({"dojo.preventCache": new Date().valueOf()}); + } + ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs)); + + // .. and the real work of getting the deferred in order, etc. + ioArgs.handleAs = args.handleAs || "text"; + var d = new _d.Deferred(canceller); + d.addCallbacks(okHandler, function(error){ + return errHandler(error, d); + }); + + //Support specifying load, error and handle callback functions from the args. + //For those callbacks, the "this" object will be the args object. + //The callbacks will get the deferred result value as the + //first argument and the ioArgs object as the second argument. + var ld = args.load; + if(ld && _d.isFunction(ld)){ + d.addCallback(function(value){ + return ld.call(args, value, ioArgs); + }); + } + var err = args.error; + if(err && _d.isFunction(err)){ + d.addErrback(function(value){ + return err.call(args, value, ioArgs); + }); + } + var handle = args.handle; + if(handle && _d.isFunction(handle)){ + d.addBoth(function(value){ + return handle.call(args, value, ioArgs); + }); + } + + //Plug in topic publishing, if dojo.publish is loaded. + if(cfg.ioPublish && _d.publish && ioArgs.args.ioPublish !== false){ + d.addCallbacks( + function(res){ + _d.publish("/dojo/io/load", [d, res]); + return res; + }, + function(res){ + _d.publish("/dojo/io/error", [d, res]); + return res; + } + ); + d.addBoth(function(res){ + _d.publish("/dojo/io/done", [d, res]); + return res; + }); + } + + d.ioArgs = ioArgs; + + // FIXME: need to wire up the xhr object's abort method to something + // analagous in the Deferred + return d; + } + + var _deferredCancel = function(/*Deferred*/dfd){ + // summary: canceller function for dojo._ioSetArgs call. + + dfd.canceled = true; + var xhr = dfd.ioArgs.xhr; + var _at = typeof xhr.abort; + if(_at == "function" || _at == "object" || _at == "unknown"){ + xhr.abort(); + } + var err = dfd.ioArgs.error; + if(!err){ + err = new Error("xhr cancelled"); + err.dojoType="cancel"; + } + return err; + } + var _deferredOk = function(/*Deferred*/dfd){ + // summary: okHandler function for dojo._ioSetArgs call. + + var ret = handlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr); + return ret === undefined ? null : ret; + } + var _deferError = function(/*Error*/error, /*Deferred*/dfd){ + // summary: errHandler function for dojo._ioSetArgs call. + + if(!dfd.ioArgs.args.failOk){ + console.error(error); + } + return error; + } + + // avoid setting a timer per request. It degrades performance on IE + // something fierece if we don't use unified loops. + var _inFlightIntvl = null; + var _inFlight = []; + + //Use a separate count for knowing if we are starting/stopping io calls. + //Cannot use _inFlight.length since it can change at a different time than + //when we want to do this kind of test. We only want to decrement the count + //after a callback/errback has finished, since the callback/errback should be + //considered as part of finishing a request. + var _pubCount = 0; + var _checkPubCount = function(dfd){ + if(_pubCount <= 0){ + _pubCount = 0; + if(cfg.ioPublish && _d.publish && (!dfd || dfd && dfd.ioArgs.args.ioPublish !== false)){ + _d.publish("/dojo/io/stop"); + } + } + }; + + var _watchInFlight = function(){ + //summary: + // internal method that checks each inflight XMLHttpRequest to see + // if it has completed or if the timeout situation applies. + + var now = (new Date()).getTime(); + // make sure sync calls stay thread safe, if this callback is called + // during a sync call and this results in another sync call before the + // first sync call ends the browser hangs + if(!_d._blockAsync){ + // we need manual loop because we often modify _inFlight (and therefore 'i') while iterating + // note: the second clause is an assigment on purpose, lint may complain + for(var i = 0, tif; i < _inFlight.length && (tif = _inFlight[i]); i++){ + var dfd = tif.dfd; + var func = function(){ + if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ + _inFlight.splice(i--, 1); + _pubCount -= 1; + }else if(tif.ioCheck(dfd)){ + _inFlight.splice(i--, 1); + tif.resHandle(dfd); + _pubCount -= 1; + }else if(dfd.startTime){ + //did we timeout? + if(dfd.startTime + (dfd.ioArgs.args.timeout || 0) < now){ + _inFlight.splice(i--, 1); + var err = new Error("timeout exceeded"); + err.dojoType = "timeout"; + dfd.errback(err); + //Cancel the request so the io module can do appropriate cleanup. + dfd.cancel(); + _pubCount -= 1; + } + } + }; + if(dojo.config.debugAtAllCosts){ + func.call(this); + }else{ + try{ + func.call(this); + }catch(e){ + dfd.errback(e); + } + } + } + } + + _checkPubCount(dfd); + + if(!_inFlight.length){ + clearInterval(_inFlightIntvl); + _inFlightIntvl = null; + return; + } + } + + dojo._ioCancelAll = function(){ + //summary: Cancels all pending IO requests, regardless of IO type + //(xhr, script, iframe). + try{ + _d.forEach(_inFlight, function(i){ + try{ + i.dfd.cancel(); + }catch(e){/*squelch*/} + }); + }catch(e){/*squelch*/} + } + + //Automatically call cancel all io calls on unload + //in IE for trac issue #2357. + if(_d.isIE){ + _d.addOnWindowUnload(_d._ioCancelAll); + } + + _d._ioNotifyStart = function(/*Deferred*/dfd){ + // summary: + // If dojo.publish is available, publish topics + // about the start of a request queue and/or the + // the beginning of request. + // description: + // Used by IO transports. An IO transport should + // call this method before making the network connection. + if(cfg.ioPublish && _d.publish && dfd.ioArgs.args.ioPublish !== false){ + if(!_pubCount){ + _d.publish("/dojo/io/start"); + } + _pubCount += 1; + _d.publish("/dojo/io/send", [dfd]); + } + } + + _d._ioWatch = function(dfd, validCheck, ioCheck, resHandle){ + // summary: + // Watches the io request represented by dfd to see if it completes. + // dfd: Deferred + // The Deferred object to watch. + // validCheck: Function + // Function used to check if the IO request is still valid. Gets the dfd + // object as its only argument. + // ioCheck: Function + // Function used to check if basic IO call worked. Gets the dfd + // object as its only argument. + // resHandle: Function + // Function used to process response. Gets the dfd + // object as its only argument. + var args = dfd.ioArgs.args; + if(args.timeout){ + dfd.startTime = (new Date()).getTime(); + } + + _inFlight.push({dfd: dfd, validCheck: validCheck, ioCheck: ioCheck, resHandle: resHandle}); + if(!_inFlightIntvl){ + _inFlightIntvl = setInterval(_watchInFlight, 50); + } + // handle sync requests + //A weakness: async calls in flight + //could have their handlers called as part of the + //_watchInFlight call, before the sync's callbacks + // are called. + if(args.sync){ + _watchInFlight(); + } + } + + var _defaultContentType = "application/x-www-form-urlencoded"; + + var _validCheck = function(/*Deferred*/dfd){ + return dfd.ioArgs.xhr.readyState; //boolean + } + var _ioCheck = function(/*Deferred*/dfd){ + return 4 == dfd.ioArgs.xhr.readyState; //boolean + } + var _resHandle = function(/*Deferred*/dfd){ + var xhr = dfd.ioArgs.xhr; + if(_d._isDocumentOk(xhr)){ + dfd.callback(dfd); + }else{ + var err = new Error("Unable to load " + dfd.ioArgs.url + " status:" + xhr.status); + err.status = xhr.status; + err.responseText = xhr.responseText; + dfd.errback(err); + } + } + + dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){ + //summary: Adds query params discovered by the io deferred construction to the URL. + //Only use this for operations which are fundamentally GET-type operations. + if(ioArgs.query.length){ + ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; + ioArgs.query = null; + } + } + + /*===== + dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, { + constructor: function(){ + // summary: + // In addition to the properties listed for the dojo._IoArgs type, + // the following properties are allowed for dojo.xhr* methods. + // handleAs: String? + // Acceptable values are: text (default), json, json-comment-optional, + // json-comment-filtered, javascript, xml. See `dojo.contentHandlers` + // sync: Boolean? + // false is default. Indicates whether the request should + // be a synchronous (blocking) request. + // headers: Object? + // Additional HTTP headers to send in the request. + // failOk: Boolean? + // false is default. Indicates whether a request should be + // allowed to fail (and therefore no console error message in + // the event of a failure) + this.handleAs = handleAs; + this.sync = sync; + this.headers = headers; + this.failOk = failOk; + } + }); + =====*/ + + dojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){ + // summary: + // Sends an HTTP request with the given method. + // description: + // Sends an HTTP request with the given method. + // See also dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts + // for those HTTP methods. There are also methods for "raw" PUT and POST methods + // via dojo.rawXhrPut() and dojo.rawXhrPost() respectively. + // method: + // HTTP method to be used, such as GET, POST, PUT, DELETE. Should be uppercase. + // hasBody: + // If the request has an HTTP body, then pass true for hasBody. + + //Make the Deferred object for this xhr request. + var dfd = _d._ioSetArgs(args, _deferredCancel, _deferredOk, _deferError); + var ioArgs = dfd.ioArgs; + + //Pass the args to _xhrObj, to allow alternate XHR calls based specific calls, like + //the one used for iframe proxies. + var xhr = ioArgs.xhr = _d._xhrObj(ioArgs.args); + //If XHR factory fails, cancel the deferred. + if(!xhr){ + dfd.cancel(); + return dfd; + } + + //Allow for specifying the HTTP body completely. + if("postData" in args){ + ioArgs.query = args.postData; + }else if("putData" in args){ + ioArgs.query = args.putData; + }else if("rawBody" in args){ + ioArgs.query = args.rawBody; + }else if((arguments.length > 2 && !hasBody) || "POST|PUT".indexOf(method.toUpperCase()) == -1){ + //Check for hasBody being passed. If no hasBody, + //then only append query string if not a POST or PUT request. + _d._ioAddQueryToUrl(ioArgs); + } + + // IE 6 is a steaming pile. It won't let you call apply() on the native function (xhr.open). + // workaround for IE6's apply() "issues" + xhr.open(method, ioArgs.url, args.sync !== true, args.user || undefined, args.password || undefined); + if(args.headers){ + for(var hdr in args.headers){ + if(hdr.toLowerCase() === "content-type" && !args.contentType){ + args.contentType = args.headers[hdr]; + }else if(args.headers[hdr]){ + //Only add header if it has a value. This allows for instnace, skipping + //insertion of X-Requested-With by specifying empty value. + xhr.setRequestHeader(hdr, args.headers[hdr]); + } + } + } + // FIXME: is this appropriate for all content types? + xhr.setRequestHeader("Content-Type", args.contentType || _defaultContentType); + if(!args.headers || !("X-Requested-With" in args.headers)){ + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + } + // FIXME: set other headers here! + _d._ioNotifyStart(dfd); + if(dojo.config.debugAtAllCosts){ + xhr.send(ioArgs.query); + }else{ + try{ + xhr.send(ioArgs.query); + }catch(e){ + ioArgs.error = e; + dfd.cancel(); + } + } + _d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle); + xhr = null; + return dfd; // dojo.Deferred + } + + dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP GET request to the server. + return _d.xhr("GET", args); // dojo.Deferred + } + + dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP POST request to the server. In addtion to the properties + // listed for the dojo.__XhrArgs type, the following property is allowed: + // postData: + // String. Send raw data in the body of the POST request. + return _d.xhr("POST", args, true); // dojo.Deferred + } + + dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP PUT request to the server. In addtion to the properties + // listed for the dojo.__XhrArgs type, the following property is allowed: + // putData: + // String. Send raw data in the body of the PUT request. + return _d.xhr("PUT", args, true); // dojo.Deferred + } + + dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP DELETE request to the server. + return _d.xhr("DELETE", args); //dojo.Deferred + } + + /* + dojo.wrapForm = function(formNode){ + //summary: + // A replacement for FormBind, but not implemented yet. + + // FIXME: need to think harder about what extensions to this we might + // want. What should we allow folks to do w/ this? What events to + // set/send? + throw new Error("dojo.wrapForm not yet implemented"); + } + */ +})(); + +} + +if(!dojo._hasResource["dojo._base.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.fx"] = true; +dojo.provide("dojo._base.fx"); + +/* + Animation loosely package based on Dan Pupius' work, contributed under CLA: + http://pupius.co.uk/js/Toolkit.Drawing.js +*/ +(function(){ + var d = dojo; + var _mixin = d._mixin; + + dojo._Line = function(/*int*/ start, /*int*/ end){ + // summary: + // dojo._Line is the object used to generate values from a start value + // to an end value + // start: int + // Beginning value for range + // end: int + // Ending value for range + this.start = start; + this.end = end; + }; + + dojo._Line.prototype.getValue = function(/*float*/ n){ + // summary: Returns the point on the line + // n: a floating point number greater than 0 and less than 1 + return ((this.end - this.start) * n) + this.start; // Decimal + }; + + dojo.Animation = function(args){ + // summary: + // A generic animation class that fires callbacks into its handlers + // object at various states. + // description: + // A generic animation class that fires callbacks into its handlers + // object at various states. Nearly all dojo animation functions + // return an instance of this method, usually without calling the + // .play() method beforehand. Therefore, you will likely need to + // call .play() on instances of `dojo.Animation` when one is + // returned. + // args: Object + // The 'magic argument', mixing all the properties into this + // animation instance. + + _mixin(this, args); + if(d.isArray(this.curve)){ + this.curve = new d._Line(this.curve[0], this.curve[1]); + } + + }; + + // Alias to drop come 2.0: + d._Animation = d.Animation; + + d.extend(dojo.Animation, { + // duration: Integer + // The time in milliseonds the animation will take to run + duration: 350, + + /*===== + // curve: dojo._Line|Array + // A two element array of start and end values, or a `dojo._Line` instance to be + // used in the Animation. + curve: null, + + // easing: Function? + // A Function to adjust the acceleration (or deceleration) of the progress + // across a dojo._Line + easing: null, + =====*/ + + // repeat: Integer? + // The number of times to loop the animation + repeat: 0, + + // rate: Integer? + // the time in milliseconds to wait before advancing to next frame + // (used as a fps timer: 1000/rate = fps) + rate: 20 /* 50 fps */, + + /*===== + // delay: Integer? + // The time in milliseconds to wait before starting animation after it + // has been .play()'ed + delay: null, + + // beforeBegin: Event? + // Synthetic event fired before a dojo.Animation begins playing (synchronous) + beforeBegin: null, + + // onBegin: Event? + // Synthetic event fired as a dojo.Animation begins playing (useful?) + onBegin: null, + + // onAnimate: Event? + // Synthetic event fired at each interval of a `dojo.Animation` + onAnimate: null, + + // onEnd: Event? + // Synthetic event fired after the final frame of a `dojo.Animation` + onEnd: null, + + // onPlay: Event? + // Synthetic event fired any time a `dojo.Animation` is play()'ed + onPlay: null, + + // onPause: Event? + // Synthetic event fired when a `dojo.Animation` is paused + onPause: null, + + // onStop: Event + // Synthetic event fires when a `dojo.Animation` is stopped + onStop: null, + + =====*/ + + _percent: 0, + _startRepeatCount: 0, + + _getStep: function(){ + var _p = this._percent, + _e = this.easing + ; + return _e ? _e(_p) : _p; + }, + _fire: function(/*Event*/ evt, /*Array?*/ args){ + // summary: + // Convenience function. Fire event "evt" and pass it the + // arguments specified in "args". + // description: + // Convenience function. Fire event "evt" and pass it the + // arguments specified in "args". + // Fires the callback in the scope of the `dojo.Animation` + // instance. + // evt: + // The event to fire. + // args: + // The arguments to pass to the event. + var a = args||[]; + if(this[evt]){ + if(d.config.debugAtAllCosts){ + this[evt].apply(this, a); + }else{ + try{ + this[evt].apply(this, a); + }catch(e){ + // squelch and log because we shouldn't allow exceptions in + // synthetic event handlers to cause the internal timer to run + // amuck, potentially pegging the CPU. I'm not a fan of this + // squelch, but hopefully logging will make it clear what's + // going on + console.error("exception in animation handler for:", evt); + console.error(e); + } + } + } + return this; // dojo.Animation + }, + + play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){ + // summary: + // Start the animation. + // delay: + // How many milliseconds to delay before starting. + // gotoStart: + // If true, starts the animation from the beginning; otherwise, + // starts it from its current position. + // returns: dojo.Animation + // The instance to allow chaining. + + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + if(gotoStart){ + _t._stopTimer(); + _t._active = _t._paused = false; + _t._percent = 0; + }else if(_t._active && !_t._paused){ + return _t; + } + + _t._fire("beforeBegin", [_t.node]); + + var de = delay || _t.delay, + _p = dojo.hitch(_t, "_play", gotoStart); + + if(de > 0){ + _t._delayTimer = setTimeout(_p, de); + return _t; + } + _p(); + return _t; + }, + + _play: function(gotoStart){ + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + _t._startTime = new Date().valueOf(); + if(_t._paused){ + _t._startTime -= _t.duration * _t._percent; + } + _t._endTime = _t._startTime + _t.duration; + + _t._active = true; + _t._paused = false; + var value = _t.curve.getValue(_t._getStep()); + if(!_t._percent){ + if(!_t._startRepeatCount){ + _t._startRepeatCount = _t.repeat; + } + _t._fire("onBegin", [value]); + } + + _t._fire("onPlay", [value]); + + _t._cycle(); + return _t; // dojo.Animation + }, + + pause: function(){ + // summary: Pauses a running animation. + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + _t._stopTimer(); + if(!_t._active){ return _t; /*dojo.Animation*/ } + _t._paused = true; + _t._fire("onPause", [_t.curve.getValue(_t._getStep())]); + return _t; // dojo.Animation + }, + + gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){ + // summary: + // Sets the progress of the animation. + // percent: + // A percentage in decimal notation (between and including 0.0 and 1.0). + // andPlay: + // If true, play the animation after setting the progress. + var _t = this; + _t._stopTimer(); + _t._active = _t._paused = true; + _t._percent = percent; + if(andPlay){ _t.play(); } + return _t; // dojo.Animation + }, + + stop: function(/*boolean?*/ gotoEnd){ + // summary: Stops a running animation. + // gotoEnd: If true, the animation will end. + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + if(!_t._timer){ return _t; /* dojo.Animation */ } + _t._stopTimer(); + if(gotoEnd){ + _t._percent = 1; + } + _t._fire("onStop", [_t.curve.getValue(_t._getStep())]); + _t._active = _t._paused = false; + return _t; // dojo.Animation + }, + + status: function(){ + // summary: + // Returns a string token representation of the status of + // the animation, one of: "paused", "playing", "stopped" + if(this._active){ + return this._paused ? "paused" : "playing"; // String + } + return "stopped"; // String + }, + + _cycle: function(){ + var _t = this; + if(_t._active){ + var curr = new Date().valueOf(); + var step = (curr - _t._startTime) / (_t._endTime - _t._startTime); + + if(step >= 1){ + step = 1; + } + _t._percent = step; + + // Perform easing + if(_t.easing){ + step = _t.easing(step); + } + + _t._fire("onAnimate", [_t.curve.getValue(step)]); + + if(_t._percent < 1){ + _t._startTimer(); + }else{ + _t._active = false; + + if(_t.repeat > 0){ + _t.repeat--; + _t.play(null, true); + }else if(_t.repeat == -1){ + _t.play(null, true); + }else{ + if(_t._startRepeatCount){ + _t.repeat = _t._startRepeatCount; + _t._startRepeatCount = 0; + } + } + _t._percent = 0; + _t._fire("onEnd", [_t.node]); + !_t.repeat && _t._stopTimer(); + } + } + return _t; // dojo.Animation + }, + + _clearTimer: function(){ + // summary: Clear the play delay timer + clearTimeout(this._delayTimer); + delete this._delayTimer; + } + + }); + + // the local timer, stubbed into all Animation instances + var ctr = 0, + _globalTimerList = [], + timer = null, + runner = { + run: function(){} + }; + + d.extend(d.Animation, { + + _startTimer: function(){ + if(!this._timer){ + this._timer = d.connect(runner, "run", this, "_cycle"); + ctr++; + } + if(!timer){ + timer = setInterval(d.hitch(runner, "run"), this.rate); + } + }, + + _stopTimer: function(){ + if(this._timer){ + d.disconnect(this._timer); + this._timer = null; + ctr--; + } + if(ctr <= 0){ + clearInterval(timer); + timer = null; + ctr = 0; + } + } + + }); + + var _makeFadeable = + d.isIE ? function(node){ + // only set the zoom if the "tickle" value would be the same as the + // default + var ns = node.style; + // don't set the width to auto if it didn't already cascade that way. + // We don't want to f anyones designs + if(!ns.width.length && d.style(node, "width") == "auto"){ + ns.width = "auto"; + } + } : + function(){}; + + dojo._fade = function(/*Object*/ args){ + // summary: + // Returns an animation that will fade the node defined by + // args.node from the start to end values passed (args.start + // args.end) (end is mandatory, start is optional) + + args.node = d.byId(args.node); + var fArgs = _mixin({ properties: {} }, args), + props = (fArgs.properties.opacity = {}); + + props.start = !("start" in fArgs) ? + function(){ + return +d.style(fArgs.node, "opacity")||0; + } : fArgs.start; + props.end = fArgs.end; + + var anim = d.animateProperty(fArgs); + d.connect(anim, "beforeBegin", d.partial(_makeFadeable, fArgs.node)); + + return anim; // dojo.Animation + }; + + /*===== + dojo.__FadeArgs = function(node, duration, easing){ + // node: DOMNode|String + // The node referenced in the animation + // duration: Integer? + // Duration of the animation in milliseconds. + // easing: Function? + // An easing function. + this.node = node; + this.duration = duration; + this.easing = easing; + } + =====*/ + + dojo.fadeIn = function(/*dojo.__FadeArgs*/ args){ + // summary: + // Returns an animation that will fade node defined in 'args' from + // its current opacity to fully opaque. + return d._fade(_mixin({ end: 1 }, args)); // dojo.Animation + }; + + dojo.fadeOut = function(/*dojo.__FadeArgs*/ args){ + // summary: + // Returns an animation that will fade node defined in 'args' + // from its current opacity to fully transparent. + return d._fade(_mixin({ end: 0 }, args)); // dojo.Animation + }; + + dojo._defaultEasing = function(/*Decimal?*/ n){ + // summary: The default easing function for dojo.Animation(s) + return 0.5 + ((Math.sin((n + 1.5) * Math.PI)) / 2); + }; + + var PropLine = function(properties){ + // PropLine is an internal class which is used to model the values of + // an a group of CSS properties across an animation lifecycle. In + // particular, the "getValue" function handles getting interpolated + // values between start and end for a particular CSS value. + this._properties = properties; + for(var p in properties){ + var prop = properties[p]; + if(prop.start instanceof d.Color){ + // create a reusable temp color object to keep intermediate results + prop.tempColor = new d.Color(); + } + } + }; + + PropLine.prototype.getValue = function(r){ + var ret = {}; + for(var p in this._properties){ + var prop = this._properties[p], + start = prop.start; + if(start instanceof d.Color){ + ret[p] = d.blendColors(start, prop.end, r, prop.tempColor).toCss(); + }else if(!d.isArray(start)){ + ret[p] = ((prop.end - start) * r) + start + (p != "opacity" ? prop.units || "px" : 0); + } + } + return ret; + }; + + /*===== + dojo.declare("dojo.__AnimArgs", [dojo.__FadeArgs], { + // Properties: Object? + // A hash map of style properties to Objects describing the transition, + // such as the properties of dojo._Line with an additional 'units' property + properties: {} + + //TODOC: add event callbacks + }); + =====*/ + + dojo.animateProperty = function(/*dojo.__AnimArgs*/ args){ + // summary: + // Returns an animation that will transition the properties of + // node defined in `args` depending how they are defined in + // `args.properties` + // + // description: + // `dojo.animateProperty` is the foundation of most `dojo.fx` + // animations. It takes an object of "properties" corresponding to + // style properties, and animates them in parallel over a set + // duration. + // + // example: + // A simple animation that changes the width of the specified node. + // | dojo.animateProperty({ + // | node: "nodeId", + // | properties: { width: 400 }, + // | }).play(); + // Dojo figures out the start value for the width and converts the + // integer specified for the width to the more expressive but + // verbose form `{ width: { end: '400', units: 'px' } }` which you + // can also specify directly. Defaults to 'px' if ommitted. + // + // example: + // Animate width, height, and padding over 2 seconds... the + // pedantic way: + // | dojo.animateProperty({ node: node, duration:2000, + // | properties: { + // | width: { start: '200', end: '400', units:"px" }, + // | height: { start:'200', end: '400', units:"px" }, + // | paddingTop: { start:'5', end:'50', units:"px" } + // | } + // | }).play(); + // Note 'paddingTop' is used over 'padding-top'. Multi-name CSS properties + // are written using "mixed case", as the hyphen is illegal as an object key. + // + // example: + // Plug in a different easing function and register a callback for + // when the animation ends. Easing functions accept values between + // zero and one and return a value on that basis. In this case, an + // exponential-in curve. + // | dojo.animateProperty({ + // | node: "nodeId", + // | // dojo figures out the start value + // | properties: { width: { end: 400 } }, + // | easing: function(n){ + // | return (n==0) ? 0 : Math.pow(2, 10 * (n - 1)); + // | }, + // | onEnd: function(node){ + // | // called when the animation finishes. The animation + // | // target is passed to this function + // | } + // | }).play(500); // delay playing half a second + // + // example: + // Like all `dojo.Animation`s, animateProperty returns a handle to the + // Animation instance, which fires the events common to Dojo FX. Use `dojo.connect` + // to access these events outside of the Animation definiton: + // | var anim = dojo.animateProperty({ + // | node:"someId", + // | properties:{ + // | width:400, height:500 + // | } + // | }); + // | dojo.connect(anim,"onEnd", function(){ + // | console.log("animation ended"); + // | }); + // | // play the animation now: + // | anim.play(); + // + // example: + // Each property can be a function whose return value is substituted along. + // Additionally, each measurement (eg: start, end) can be a function. The node + // reference is passed direcly to callbacks. + // | dojo.animateProperty({ + // | node:"mine", + // | properties:{ + // | height:function(node){ + // | // shrink this node by 50% + // | return dojo.position(node).h / 2 + // | }, + // | width:{ + // | start:function(node){ return 100; }, + // | end:function(node){ return 200; } + // | } + // | } + // | }).play(); + // + + var n = args.node = d.byId(args.node); + if(!args.easing){ args.easing = d._defaultEasing; } + + var anim = new d.Animation(args); + d.connect(anim, "beforeBegin", anim, function(){ + var pm = {}; + for(var p in this.properties){ + // Make shallow copy of properties into pm because we overwrite + // some values below. In particular if start/end are functions + // we don't want to overwrite them or the functions won't be + // called if the animation is reused. + if(p == "width" || p == "height"){ + this.node.display = "block"; + } + var prop = this.properties[p]; + if(d.isFunction(prop)){ + prop = prop(n); + } + prop = pm[p] = _mixin({}, (d.isObject(prop) ? prop: { end: prop })); + + if(d.isFunction(prop.start)){ + prop.start = prop.start(n); + } + if(d.isFunction(prop.end)){ + prop.end = prop.end(n); + } + var isColor = (p.toLowerCase().indexOf("color") >= 0); + function getStyle(node, p){ + // dojo.style(node, "height") can return "auto" or "" on IE; this is more reliable: + var v = { height: node.offsetHeight, width: node.offsetWidth }[p]; + if(v !== undefined){ return v; } + v = d.style(node, p); + return (p == "opacity") ? +v : (isColor ? v : parseFloat(v)); + } + if(!("end" in prop)){ + prop.end = getStyle(n, p); + }else if(!("start" in prop)){ + prop.start = getStyle(n, p); + } + + if(isColor){ + prop.start = new d.Color(prop.start); + prop.end = new d.Color(prop.end); + }else{ + prop.start = (p == "opacity") ? +prop.start : parseFloat(prop.start); + } + } + this.curve = new PropLine(pm); + }); + d.connect(anim, "onAnimate", d.hitch(d, "style", anim.node)); + return anim; // dojo.Animation + }; + + dojo.anim = function( /*DOMNode|String*/ node, + /*Object*/ properties, + /*Integer?*/ duration, + /*Function?*/ easing, + /*Function?*/ onEnd, + /*Integer?*/ delay){ + // summary: + // A simpler interface to `dojo.animateProperty()`, also returns + // an instance of `dojo.Animation` but begins the animation + // immediately, unlike nearly every other Dojo animation API. + // description: + // `dojo.anim` is a simpler (but somewhat less powerful) version + // of `dojo.animateProperty`. It uses defaults for many basic properties + // and allows for positional parameters to be used in place of the + // packed "property bag" which is used for other Dojo animation + // methods. + // + // The `dojo.Animation` object returned from `dojo.anim` will be + // already playing when it is returned from this function, so + // calling play() on it again is (usually) a no-op. + // node: + // a DOM node or the id of a node to animate CSS properties on + // duration: + // The number of milliseconds over which the animation + // should run. Defaults to the global animation default duration + // (350ms). + // easing: + // An easing function over which to calculate acceleration + // and deceleration of the animation through its duration. + // A default easing algorithm is provided, but you may + // plug in any you wish. A large selection of easing algorithms + // are available in `dojo.fx.easing`. + // onEnd: + // A function to be called when the animation finishes + // running. + // delay: + // The number of milliseconds to delay beginning the + // animation by. The default is 0. + // example: + // Fade out a node + // | dojo.anim("id", { opacity: 0 }); + // example: + // Fade out a node over a full second + // | dojo.anim("id", { opacity: 0 }, 1000); + return d.animateProperty({ // dojo.Animation + node: node, + duration: duration || d.Animation.prototype.duration, + properties: properties, + easing: easing, + onEnd: onEnd + }).play(delay || 0); + }; +})(); + +} + +if(!dojo._hasResource["dojo._base.browser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.browser"] = true; +dojo.provide("dojo._base.browser"); + +//Need this to be the last code segment in base, so do not place any +//dojo.requireIf calls in this file. Otherwise, due to how the build system +//puts all requireIf dependencies after the current file, the require calls +//could be called before all of base is defined. +dojo.forEach(dojo.config.require, function(i){ + dojo["require"](i); +}); + +} + + //INSERT dojo.i18n._preloadLocalizations HERE + + if(dojo.config.afterOnLoad && dojo.isBrowser){ + //Dojo is being added to the page after page load, so just trigger + //the init sequence after a timeout. Using a timeout so the rest of this + //script gets evaluated properly. This work needs to happen after the + //dojo.config.require work done in dojo._base. + window.setTimeout(dojo._loadInit, 1000); + } + +})(); + diff --git a/tests/javascript/frameworks/dojo/dojo-1.5.0.js b/tests/javascript/frameworks/dojo/dojo-1.5.0.js new file mode 100644 index 0000000000000000000000000000000000000000..01f02b482857b018f77843b1176d56d885a3e215 --- /dev/null +++ b/tests/javascript/frameworks/dojo/dojo-1.5.0.js @@ -0,0 +1,11196 @@ +/* + Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + +/* + This is an optimized version of Dojo, built for deployment and not for + development. To get sources and documentation, please visit: + + http://dojotoolkit.org +*/ + +;(function(){ + + /* + dojo, dijit, and dojox must always be the first three, and in that order. + djConfig.scopeMap = [ + ["dojo", "fojo"], + ["dijit", "fijit"], + ["dojox", "fojox"] + + ] + */ + + /**Build will replace this comment with a scoped djConfig **/ + + //The null below can be relaced by a build-time value used instead of djConfig.scopeMap. + var sMap = null; + + //See if new scopes need to be defined. + if((sMap || (typeof djConfig != "undefined" && djConfig.scopeMap)) && (typeof window != "undefined")){ + var scopeDef = "", scopePrefix = "", scopeSuffix = "", scopeMap = {}, scopeMapRev = {}; + sMap = sMap || djConfig.scopeMap; + for(var i = 0; i < sMap.length; i++){ + //Make local variables, then global variables that use the locals. + var newScope = sMap[i]; + scopeDef += "var " + newScope[0] + " = {}; " + newScope[1] + " = " + newScope[0] + ";" + newScope[1] + "._scopeName = '" + newScope[1] + "';"; + scopePrefix += (i == 0 ? "" : ",") + newScope[0]; + scopeSuffix += (i == 0 ? "" : ",") + newScope[1]; + scopeMap[newScope[0]] = newScope[1]; + scopeMapRev[newScope[1]] = newScope[0]; + } + + eval(scopeDef + "dojo._scopeArgs = [" + scopeSuffix + "];"); + + dojo._scopePrefixArgs = scopePrefix; + dojo._scopePrefix = "(function(" + scopePrefix + "){"; + dojo._scopeSuffix = "})(" + scopeSuffix + ")"; + dojo._scopeMap = scopeMap; + dojo._scopeMapRev = scopeMapRev; + } + +/*===== +// note: +// 'djConfig' does not exist under 'dojo.*' so that it can be set before the +// 'dojo' variable exists. +// note: +// Setting any of these variables *after* the library has loaded does +// nothing at all. + +djConfig = { + // summary: + // Application code can set the global 'djConfig' prior to loading + // the library to override certain global settings for how dojo works. + // + // isDebug: Boolean + // Defaults to `false`. If set to `true`, ensures that Dojo provides + // extended debugging feedback via Firebug. If Firebug is not available + // on your platform, setting `isDebug` to `true` will force Dojo to + // pull in (and display) the version of Firebug Lite which is + // integrated into the Dojo distribution, thereby always providing a + // debugging/logging console when `isDebug` is enabled. Note that + // Firebug's `console.*` methods are ALWAYS defined by Dojo. If + // `isDebug` is false and you are on a platform without Firebug, these + // methods will be defined as no-ops. + isDebug: false, + // debugAtAllCosts: Boolean + // Defaults to `false`. If set to `true`, this triggers an alternate + // mode of the package system in which dependencies are detected and + // only then are resources evaluated in dependency order via + // ` + // + // This type of syntax works with both xdomain and normal loaders, so it is good + // practice to always use this idiom for on-the-fly code loading and in HTML script + // blocks. If at some point you change loaders and where the code is loaded from, + // it will all still work. + // + // More on how dojo.require + // `dojo.require("A.B")` first checks to see if symbol A.B is + // defined. If it is, it is simply returned (nothing to do). + // + // If it is not defined, it will look for `A/B.js` in the script root + // directory. + // + // `dojo.require` throws an excpetion if it cannot find a file + // to load, or if the symbol `A.B` is not defined after loading. + // + // It returns the object `A.B`, but note the caveats above about on-the-fly loading and + // HTML script blocks when the xdomain loader is loading a module. + // + // `dojo.require()` does nothing about importing symbols into + // the current namespace. It is presumed that the caller will + // take care of that. For example, to import all symbols into a + // local block, you might write: + // + // | with (dojo.require("A.B")) { + // | ... + // | } + // + // And to import just the leaf symbol to a local variable: + // + // | var B = dojo.require("A.B"); + // | ... + // returns: the required namespace object + omitModuleCheck = d._global_omit_module_check || omitModuleCheck; + + //Check if it is already loaded. + var module = d._loadedModules[moduleName]; + if(module){ + return module; + } + + // convert periods to slashes + var relpath = d._getModuleSymbols(moduleName).join("/") + '.js'; + + var modArg = !omitModuleCheck ? moduleName : null; + var ok = d._loadPath(relpath, modArg); + + if(!ok && !omitModuleCheck){ + throw new Error("Could not load '" + moduleName + "'; last tried '" + relpath + "'"); + } + + // check that the symbol was defined + // Don't bother if we're doing xdomain (asynchronous) loading. + if(!omitModuleCheck && !d._isXDomain){ + // pass in false so we can give better error + module = d._loadedModules[moduleName]; + if(!module){ + throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); + } + } + + return module; + } + + dojo.provide = function(/*String*/ resourceName){ + // summary: + // Register a resource with the package system. Works in conjunction with `dojo.require` + // + // description: + // Each javascript source file is called a resource. When a + // resource is loaded by the browser, `dojo.provide()` registers + // that it has been loaded. + // + // Each javascript source file must have at least one + // `dojo.provide()` call at the top of the file, corresponding to + // the file name. For example, `js/dojo/foo.js` must have + // `dojo.provide("dojo.foo");` before any calls to + // `dojo.require()` are made. + // + // For backwards compatibility reasons, in addition to registering + // the resource, `dojo.provide()` also ensures that the javascript + // object for the module exists. For example, + // `dojo.provide("dojox.data.FlickrStore")`, in addition to + // registering that `FlickrStore.js` is a resource for the + // `dojox.data` module, will ensure that the `dojox.data` + // javascript object exists, so that calls like + // `dojo.data.foo = function(){ ... }` don't fail. + // + // In the case of a build where multiple javascript source files + // are combined into one bigger file (similar to a .lib or .jar + // file), that file may contain multiple dojo.provide() calls, to + // note that it includes multiple resources. + // + // resourceName: String + // A dot-sperated string identifying a resource. + // + // example: + // Safely create a `my` object, and make dojo.require("my.CustomModule") work + // | dojo.provide("my.CustomModule"); + + //Make sure we have a string. + resourceName = resourceName + ""; + return (d._loadedModules[resourceName] = d.getObject(resourceName, true)); // Object + } + + //Start of old bootstrap2: + + dojo.platformRequire = function(/*Object*/modMap){ + // summary: + // require one or more modules based on which host environment + // Dojo is currently operating in + // description: + // This method takes a "map" of arrays which one can use to + // optionally load dojo modules. The map is indexed by the + // possible dojo.name_ values, with two additional values: + // "default" and "common". The items in the "default" array will + // be loaded if none of the other items have been choosen based on + // dojo.name_, set by your host environment. The items in the + // "common" array will *always* be loaded, regardless of which + // list is chosen. + // example: + // | dojo.platformRequire({ + // | browser: [ + // | "foo.sample", // simple module + // | "foo.test", + // | ["foo.bar.baz", true] // skip object check in _loadModule (dojo.require) + // | ], + // | default: [ "foo.sample._base" ], + // | common: [ "important.module.common" ] + // | }); + + var common = modMap.common || []; + var result = common.concat(modMap[d._name] || modMap["default"] || []); + + for(var x=0; x + // | + d._modulePrefixes[module] = { name: module, value: prefix }; + } + + dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){ + // summary: + // Declares translated resources and loads them if necessary, in the + // same style as dojo.require. Contents of the resource bundle are + // typically strings, but may be any name/value pair, represented in + // JSON format. See also `dojo.i18n.getLocalization`. + // + // description: + // Load translated resource bundles provided underneath the "nls" + // directory within a package. Translated resources may be located in + // different packages throughout the source tree. + // + // Each directory is named for a locale as specified by RFC 3066, + // (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase. + // Note that the two bundles in the example do not define all the + // same variants. For a given locale, bundles will be loaded for + // that locale and all more general locales above it, including a + // fallback at the root directory. For example, a declaration for + // the "de-at" locale will first load `nls/de-at/bundleone.js`, + // then `nls/de/bundleone.js` and finally `nls/bundleone.js`. The + // data will be flattened into a single Object so that lookups + // will follow this cascading pattern. An optional build step can + // preload the bundles to avoid data redundancy and the multiple + // network hits normally required to load these resources. + // + // moduleName: + // name of the package containing the "nls" directory in which the + // bundle is found + // + // bundleName: + // bundle name, i.e. the filename without the '.js' suffix. Using "nls" as a + // a bundle name is not supported, since "nls" is the name of the folder + // that holds bundles. Using "nls" as the bundle name will cause problems + // with the custom build. + // + // locale: + // the locale to load (optional) By default, the browser's user + // locale as defined by dojo.locale + // + // availableFlatLocales: + // A comma-separated list of the available, flattened locales for this + // bundle. This argument should only be set by the build process. + // + // example: + // A particular widget may define one or more resource bundles, + // structured in a program as follows, where moduleName is + // mycode.mywidget and bundleNames available include bundleone and + // bundletwo: + // | ... + // | mycode/ + // | mywidget/ + // | nls/ + // | bundleone.js (the fallback translation, English in this example) + // | bundletwo.js (also a fallback translation) + // | de/ + // | bundleone.js + // | bundletwo.js + // | de-at/ + // | bundleone.js + // | en/ + // | (empty; use the fallback translation) + // | en-us/ + // | bundleone.js + // | en-gb/ + // | bundleone.js + // | es/ + // | bundleone.js + // | bundletwo.js + // | ...etc + // | ... + // + + d.require("dojo.i18n"); + d.i18n._requireLocalization.apply(d.hostenv, arguments); + }; + + var ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"), + ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"); + + dojo._Url = function(/*dojo._Url|String...*/){ + // summary: + // Constructor to create an object representing a URL. + // It is marked as private, since we might consider removing + // or simplifying it. + // description: + // Each argument is evaluated in order relative to the next until + // a canonical uri is produced. To get an absolute Uri relative to + // the current document use: + // new dojo._Url(document.baseURI, url) + + var n = null, + _a = arguments, + uri = [_a[0]]; + // resolve uri components relative to each other + for(var i = 1; i<_a.length; i++){ + if(!_a[i]){ continue; } + + // Safari doesn't support this.constructor so we have to be explicit + // FIXME: Tracked (and fixed) in Webkit bug 3537. + // http://bugs.webkit.org/show_bug.cgi?id=3537 + var relobj = new d._Url(_a[i]+""), + uriobj = new d._Url(uri[0]+""); + + if( + relobj.path == "" && + !relobj.scheme && + !relobj.authority && + !relobj.query + ){ + if(relobj.fragment != n){ + uriobj.fragment = relobj.fragment; + } + relobj = uriobj; + }else if(!relobj.scheme){ + relobj.scheme = uriobj.scheme; + + if(!relobj.authority){ + relobj.authority = uriobj.authority; + + if(relobj.path.charAt(0) != "/"){ + var path = uriobj.path.substring(0, + uriobj.path.lastIndexOf("/") + 1) + relobj.path; + + var segs = path.split("/"); + for(var j = 0; j < segs.length; j++){ + if(segs[j] == "."){ + // flatten "./" references + if(j == segs.length - 1){ + segs[j] = ""; + }else{ + segs.splice(j, 1); + j--; + } + }else if(j > 0 && !(j == 1 && segs[0] == "") && + segs[j] == ".." && segs[j-1] != ".."){ + // flatten "../" references + if(j == (segs.length - 1)){ + segs.splice(j, 1); + segs[j - 1] = ""; + }else{ + segs.splice(j - 1, 2); + j -= 2; + } + } + } + relobj.path = segs.join("/"); + } + } + } + + uri = []; + if(relobj.scheme){ + uri.push(relobj.scheme, ":"); + } + if(relobj.authority){ + uri.push("//", relobj.authority); + } + uri.push(relobj.path); + if(relobj.query){ + uri.push("?", relobj.query); + } + if(relobj.fragment){ + uri.push("#", relobj.fragment); + } + } + + this.uri = uri.join(""); + + // break the uri into its main components + var r = this.uri.match(ore); + + this.scheme = r[2] || (r[1] ? "" : n); + this.authority = r[4] || (r[3] ? "" : n); + this.path = r[5]; // can never be undefined + this.query = r[7] || (r[6] ? "" : n); + this.fragment = r[9] || (r[8] ? "" : n); + + if(this.authority != n){ + // server based naming authority + r = this.authority.match(ire); + + this.user = r[3] || n; + this.password = r[4] || n; + this.host = r[6] || r[7]; // ipv6 || ipv4 + this.port = r[9] || n; + } + } + + dojo._Url.prototype.toString = function(){ return this.uri; }; + + dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ + // summary: + // Returns a `dojo._Url` object relative to a module. + // example: + // | var pngPath = dojo.moduleUrl("acme","images/small.png"); + // | console.dir(pngPath); // list the object properties + // | // create an image and set it's source to pngPath's value: + // | var img = document.createElement("img"); + // | // NOTE: we assign the string representation of the url object + // | img.src = pngPath.toString(); + // | // add our image to the document + // | dojo.body().appendChild(img); + // example: + // you may de-reference as far as you like down the package + // hierarchy. This is sometimes handy to avoid lenghty relative + // urls or for building portable sub-packages. In this example, + // the `acme.widget` and `acme.util` directories may be located + // under different roots (see `dojo.registerModulePath`) but the + // the modules which reference them can be unaware of their + // relative locations on the filesystem: + // | // somewhere in a configuration block + // | dojo.registerModulePath("acme.widget", "../../acme/widget"); + // | dojo.registerModulePath("acme.util", "../../util"); + // | + // | // ... + // | + // | // code in a module using acme resources + // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); + // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); + + var loc = d._getModuleSymbols(module).join('/'); + if(!loc){ return null; } + if(loc.lastIndexOf("/") != loc.length-1){ + loc += "/"; + } + + //If the path is an absolute path (starts with a / or is on another + //domain/xdomain) then don't add the baseUrl. + var colonIndex = loc.indexOf(":"); + if(loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > loc.indexOf("/"))){ + loc = d.baseUrl + loc; + } + + return new d._Url(loc, url); // dojo._Url + } +})(); + +/*===== +dojo.isBrowser = { + // example: + // | if(dojo.isBrowser){ ... } +}; + +dojo.isFF = { + // example: + // | if(dojo.isFF > 1){ ... } +}; + +dojo.isIE = { + // example: + // | if(dojo.isIE > 6){ + // | // we are IE7 + // | } +}; + +dojo.isSafari = { + // example: + // | if(dojo.isSafari){ ... } + // example: + // Detect iPhone: + // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ + // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test. + // | } +}; + +dojo = { + // isBrowser: Boolean + // True if the client is a web-browser + isBrowser: true, + // isFF: Number | undefined + // Version as a Number if client is FireFox. undefined otherwise. Corresponds to + // major detected FireFox version (1.5, 2, 3, etc.) + isFF: 2, + // isIE: Number | undefined + // Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to + // major detected IE version (6, 7, 8, etc.) + isIE: 6, + // isKhtml: Number | undefined + // Version as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major + // detected version. + isKhtml: 0, + // isWebKit: Number | undefined + // Version as a Number if client is a WebKit-derived browser (Konqueror, + // Safari, Chrome, etc.). undefined otherwise. + isWebKit: 0, + // isMozilla: Number | undefined + // Version as a Number if client is a Mozilla-based browser (Firefox, + // SeaMonkey). undefined otherwise. Corresponds to major detected version. + isMozilla: 0, + // isOpera: Number | undefined + // Version as a Number if client is Opera. undefined otherwise. Corresponds to + // major detected version. + isOpera: 0, + // isSafari: Number | undefined + // Version as a Number if client is Safari or iPhone. undefined otherwise. + isSafari: 0, + // isChrome: Number | undefined + // Version as a Number if client is Chrome browser. undefined otherwise. + isChrome: 0 + // isMac: Boolean + // True if the client runs on Mac +} +=====*/ + +if(typeof window != 'undefined'){ + dojo.isBrowser = true; + dojo._name = "browser"; + + // attempt to figure out the path to dojo if it isn't set in the config + (function(){ + var d = dojo; + + // this is a scope protection closure. We set browser versions and grab + // the URL we were loaded from here. + + // grab the node we were loaded from + if(document && document.getElementsByTagName){ + var scripts = document.getElementsByTagName("script"); + var rePkg = /dojo(\.xd)?\.js(\W|$)/i; + for(var i = 0; i < scripts.length; i++){ + var src = scripts[i].getAttribute("src"); + if(!src){ continue; } + var m = src.match(rePkg); + if(m){ + // find out where we came from + if(!d.config.baseUrl){ + d.config.baseUrl = src.substring(0, m.index); + } + // and find out if we need to modify our behavior + var cfg = scripts[i].getAttribute("djConfig"); + if(cfg){ + var cfgo = eval("({ "+cfg+" })"); + for(var x in cfgo){ + dojo.config[x] = cfgo[x]; + } + } + break; // "first Dojo wins" + } + } + } + d.baseUrl = d.config.baseUrl; + + // fill in the rendering support information in dojo.render.* + var n = navigator; + var dua = n.userAgent, + dav = n.appVersion, + tv = parseFloat(dav); + + if(dua.indexOf("Opera") >= 0){ d.isOpera = tv; } + if(dua.indexOf("AdobeAIR") >= 0){ d.isAIR = 1; } + d.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : 0; + d.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined; + d.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined; + d.isMac = dav.indexOf("Macintosh") >= 0; + + // safari detection derived from: + // http://developer.apple.com/internet/safari/faq.html#anchor2 + // http://developer.apple.com/internet/safari/uamatrix.html + var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0); + if(index && !dojo.isChrome){ + // try to grab the explicit Safari version first. If we don't get + // one, look for less than 419.3 as the indication that we're on something + // "Safari 2-ish". + d.isSafari = parseFloat(dav.split("Version/")[1]); + if(!d.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){ + d.isSafari = 2; + } + } + + if(dua.indexOf("Gecko") >= 0 && !d.isKhtml && !d.isWebKit){ d.isMozilla = d.isMoz = tv; } + if(d.isMoz){ + //We really need to get away from this. Consider a sane isGecko approach for the future. + d.isFF = parseFloat(dua.split("Firefox/")[1] || dua.split("Minefield/")[1]) || undefined; + } + if(document.all && !d.isOpera){ + d.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined; + //In cases where the page has an HTTP header or META tag with + //X-UA-Compatible, then it is in emulation mode. + //Make sure isIE reflects the desired version. + //document.documentMode of 5 means quirks mode. + //Only switch the value if documentMode's major version + //is different from isIE's major version. + var mode = document.documentMode; + if(mode && mode != 5 && Math.floor(d.isIE) != mode){ + d.isIE = mode; + } + } + + //Workaround to get local file loads of dojo to work on IE 7 + //by forcing to not use native xhr. + if(dojo.isIE && window.location.protocol === "file:"){ + dojo.config.ieForceActiveXXhr=true; + } + + d.isQuirks = document.compatMode == "BackCompat"; + + // TODO: is the HTML LANG attribute relevant? + d.locale = dojo.config.locale || (d.isIE ? n.userLanguage : n.language).toLowerCase(); + + // These are in order of decreasing likelihood; this will change in time. + d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; + + d._xhrObj = function(){ + // summary: + // does the work of portably generating a new XMLHTTPRequest object. + var http, last_e; + if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){ + try{ http = new XMLHttpRequest(); }catch(e){} + } + if(!http){ + for(var i=0; i<3; ++i){ + var progid = d._XMLHTTP_PROGIDS[i]; + try{ + http = new ActiveXObject(progid); + }catch(e){ + last_e = e; + } + + if(http){ + d._XMLHTTP_PROGIDS = [progid]; // so faster next time + break; + } + } + } + + if(!http){ + throw new Error("XMLHTTP not available: "+last_e); + } + + return http; // XMLHTTPRequest instance + } + + d._isDocumentOk = function(http){ + var stat = http.status || 0, + lp = location.protocol; + return (stat >= 200 && stat < 300) || // Boolean + stat == 304 || // allow any 2XX response code + stat == 1223 || // get it out of the cache + // Internet Explorer mangled the status code OR we're Titanium/browser chrome/chrome extension requesting a local file + (!stat && (lp == "file:" || lp == "chrome:" || lp == "chrome-extension:" || lp == "app:") ); + } + + //See if base tag is in use. + //This is to fix http://trac.dojotoolkit.org/ticket/3973, + //but really, we need to find out how to get rid of the dojo._Url reference + //below and still have DOH work with the dojo.i18n test following some other + //test that uses the test frame to load a document (trac #2757). + //Opera still has problems, but perhaps a larger issue of base tag support + //with XHR requests (hasBase is true, but the request is still made to document + //path, not base path). + var owloc = window.location+""; + var base = document.getElementsByTagName("base"); + var hasBase = (base && base.length > 0); + + d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){ + // summary: Read the contents of the specified uri and return those contents. + // uri: + // A relative or absolute uri. If absolute, it still must be in + // the same "domain" as we are. + // fail_ok: + // Default false. If fail_ok and loading fails, return null + // instead of throwing. + // returns: The response text. null is returned when there is a + // failure and failure is okay (an exception otherwise) + + // NOTE: must be declared before scope switches ie. this._xhrObj() + var http = d._xhrObj(); + + if(!hasBase && dojo._Url){ + uri = (new dojo._Url(owloc, uri)).toString(); + } + + if(d.config.cacheBust){ + //Make sure we have a string before string methods are used on uri + uri += ""; + uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,""); + } + + http.open('GET', uri, false); + try{ + http.send(null); + if(!d._isDocumentOk(http)){ + var err = Error("Unable to load "+uri+" status:"+ http.status); + err.status = http.status; + err.responseText = http.responseText; + throw err; + } + }catch(e){ + if(fail_ok){ return null; } // null + // rethrow the exception + throw e; + } + return http.responseText; // String + } + + var _w = window; + var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){ + // summary: + // non-destructively adds the specified function to the node's + // evtName handler. + // evtName: should be in the form "onclick" for "onclick" handlers. + // Make sure you pass in the "on" part. + var _a = _w.attachEvent || _w.addEventListener; + evtName = _w.attachEvent ? evtName : evtName.substring(2); + _a(evtName, function(){ + fp.apply(_w, arguments); + }, false); + }; + + d._windowUnloaders = []; + + d.windowUnloaded = function(){ + // summary: + // signal fired by impending window destruction. You may use + // dojo.addOnWindowUnload() to register a listener for this + // event. NOTE: if you wish to dojo.connect() to this method + // to perform page/application cleanup, be aware that this + // event WILL NOT fire if no handler has been registered with + // dojo.addOnWindowUnload. This behavior started in Dojo 1.3. + // Previous versions always triggered dojo.windowUnloaded. See + // dojo.addOnWindowUnload for more info. + var mll = d._windowUnloaders; + while(mll.length){ + (mll.pop())(); + } + d = null; + }; + + var _onWindowUnloadAttached = 0; + d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ + // summary: + // registers a function to be triggered when window.onunload + // fires. + // description: + // The first time that addOnWindowUnload is called Dojo + // will register a page listener to trigger your unload + // handler with. Note that registering these handlers may + // destory "fastback" page caching in browsers that support + // it. Be careful trying to modify the DOM or access + // JavaScript properties during this phase of page unloading: + // they may not always be available. Consider + // dojo.addOnUnload() if you need to modify the DOM or do + // heavy JavaScript work since it fires at the eqivalent of + // the page's "onbeforeunload" event. + // example: + // | dojo.addOnWindowUnload(functionPointer) + // | dojo.addOnWindowUnload(object, "functionName"); + // | dojo.addOnWindowUnload(object, function(){ /* ... */}); + + d._onto(d._windowUnloaders, obj, functionName); + if(!_onWindowUnloadAttached){ + _onWindowUnloadAttached = 1; + _handleNodeEvent("onunload", d.windowUnloaded); + } + }; + + var _onUnloadAttached = 0; + d.addOnUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ + // summary: + // registers a function to be triggered when the page unloads. + // description: + // The first time that addOnUnload is called Dojo will + // register a page listener to trigger your unload handler + // with. + // + // In a browser enviroment, the functions will be triggered + // during the window.onbeforeunload event. Be careful of doing + // too much work in an unload handler. onbeforeunload can be + // triggered if a link to download a file is clicked, or if + // the link is a javascript: link. In these cases, the + // onbeforeunload event fires, but the document is not + // actually destroyed. So be careful about doing destructive + // operations in a dojo.addOnUnload callback. + // + // Further note that calling dojo.addOnUnload will prevent + // browsers from using a "fast back" cache to make page + // loading via back button instantaneous. + // example: + // | dojo.addOnUnload(functionPointer) + // | dojo.addOnUnload(object, "functionName") + // | dojo.addOnUnload(object, function(){ /* ... */}); + + d._onto(d._unloaders, obj, functionName); + if(!_onUnloadAttached){ + _onUnloadAttached = 1; + _handleNodeEvent("onbeforeunload", dojo.unloaded); + } + }; + + })(); + + //START DOMContentLoaded + dojo._initFired = false; + dojo._loadInit = function(e){ + if(dojo._scrollIntervalId){ + clearInterval(dojo._scrollIntervalId); + dojo._scrollIntervalId = 0; + } + + if(!dojo._initFired){ + dojo._initFired = true; + + //Help out IE to avoid memory leak. + if(!dojo.config.afterOnLoad && window.detachEvent){ + window.detachEvent("onload", dojo._loadInit); + } + + if(dojo._inFlightCount == 0){ + dojo._modulesLoaded(); + } + } + } + + if(!dojo.config.afterOnLoad){ + if(document.addEventListener){ + //Standards. Hooray! Assumption here that if standards based, + //it knows about DOMContentLoaded. It is OK if it does not, the fall through + //to window onload should be good enough. + document.addEventListener("DOMContentLoaded", dojo._loadInit, false); + window.addEventListener("load", dojo._loadInit, false); + }else if(window.attachEvent){ + window.attachEvent("onload", dojo._loadInit); + + //DOMContentLoaded approximation. Diego Perini found this MSDN article + //that indicates doScroll is available after DOM ready, so do a setTimeout + //to check when it is available. + //http://msdn.microsoft.com/en-us/library/ms531426.aspx + if(!dojo.config.skipIeDomLoaded && self === self.top){ + dojo._scrollIntervalId = setInterval(function (){ + try{ + //When dojo is loaded into an iframe in an IE HTML Application + //(HTA), such as in a selenium test, javascript in the iframe + //can't see anything outside of it, so self===self.top is true, + //but the iframe is not the top window and doScroll will be + //available before document.body is set. Test document.body + //before trying the doScroll trick + if(document.body){ + document.documentElement.doScroll("left"); + dojo._loadInit(); + } + }catch (e){} + }, 30); + } + } + } + + if(dojo.isIE){ + try{ + (function(){ + document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); + var vmlElems = ["*", "group", "roundrect", "oval", "shape", "rect", "imagedata", "path", "textpath", "text"], + i = 0, l = 1, s = document.createStyleSheet(); + if(dojo.isIE >= 8){ + i = 1; + l = vmlElems.length; + } + for(; i < l; ++i){ + s.addRule("v\\:" + vmlElems[i], "behavior:url(#default#VML); display:inline-block"); + } + })(); + }catch(e){} + } + //END DOMContentLoaded + + /* + OpenAjax.subscribe("OpenAjax", "onload", function(){ + if(dojo._inFlightCount == 0){ + dojo._modulesLoaded(); + } + }); + + OpenAjax.subscribe("OpenAjax", "onunload", function(){ + dojo.unloaded(); + }); + */ +} //if (typeof window != 'undefined') + +//Register any module paths set up in djConfig. Need to do this +//in the hostenvs since hostenv_browser can read djConfig from a +//script tag's attribute. +(function(){ + var mp = dojo.config["modulePaths"]; + if(mp){ + for(var param in mp){ + dojo.registerModulePath(param, mp[param]); + } + } +})(); + +//Load debug code if necessary. +if(dojo.config.isDebug){ + dojo.require("dojo._firebug.firebug"); +} + +if(dojo.config.debugAtAllCosts){ + dojo.config.useXDomain = true; + dojo.require("dojo._base._loader.loader_xd"); + dojo.require("dojo._base._loader.loader_debug"); + dojo.require("dojo.i18n"); +} + +if(!dojo._hasResource["dojo._base.lang"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.lang"] = true; +dojo.provide("dojo._base.lang"); + +(function(){ + var d = dojo, opts = Object.prototype.toString; + + // Crockford (ish) functions + + dojo.isString = function(/*anything*/ it){ + // summary: + // Return true if it is a String + return (typeof it == "string" || it instanceof String); // Boolean + } + + dojo.isArray = function(/*anything*/ it){ + // summary: + // Return true if it is an Array. + // Does not work on Arrays created in other windows. + return it && (it instanceof Array || typeof it == "array"); // Boolean + } + + dojo.isFunction = function(/*anything*/ it){ + // summary: + // Return true if it is a Function + return opts.call(it) === "[object Function]"; + }; + + dojo.isObject = function(/*anything*/ it){ + // summary: + // Returns true if it is a JavaScript object (or an Array, a Function + // or null) + return it !== undefined && + (it === null || typeof it == "object" || d.isArray(it) || d.isFunction(it)); // Boolean + } + + dojo.isArrayLike = function(/*anything*/ it){ + // summary: + // similar to dojo.isArray() but more permissive + // description: + // Doesn't strongly test for "arrayness". Instead, settles for "isn't + // a string or number and has a length property". Arguments objects + // and DOM collections will return true when passed to + // dojo.isArrayLike(), but will return false when passed to + // dojo.isArray(). + // returns: + // If it walks like a duck and quacks like a duck, return `true` + return it && it !== undefined && // Boolean + // keep out built-in constructors (Number, String, ...) which have length + // properties + !d.isString(it) && !d.isFunction(it) && + !(it.tagName && it.tagName.toLowerCase() == 'form') && + (d.isArray(it) || isFinite(it.length)); + } + + dojo.isAlien = function(/*anything*/ it){ + // summary: + // Returns true if it is a built-in function or some other kind of + // oddball that *should* report as a function but doesn't + return it && !d.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean + } + + dojo.extend = function(/*Object*/ constructor, /*Object...*/ props){ + // summary: + // Adds all properties and methods of props to constructor's + // prototype, making them available to all instances created with + // constructor. + for(var i=1, l=arguments.length; i 2){ + return d._hitchArgs.apply(d, arguments); // Function + } + if(!method){ + method = scope; + scope = null; + } + if(d.isString(method)){ + scope = scope || d.global; + if(!scope[method]){ throw(['dojo.hitch: scope["', method, '"] is null (scope="', scope, '")'].join('')); } + return function(){ return scope[method].apply(scope, arguments || []); }; // Function + } + return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function + } + + /*===== + dojo.delegate = function(obj, props){ + // summary: + // Returns a new object which "looks" to obj for properties which it + // does not have a value for. Optionally takes a bag of properties to + // seed the returned object with initially. + // description: + // This is a small implementaton of the Boodman/Crockford delegation + // pattern in JavaScript. An intermediate object constructor mediates + // the prototype chain for the returned object, using it to delegate + // down to obj for property lookup when object-local lookup fails. + // This can be thought of similarly to ES4's "wrap", save that it does + // not act on types but rather on pure objects. + // obj: + // The object to delegate to for properties not found directly on the + // return object or in props. + // props: + // an object containing properties to assign to the returned object + // returns: + // an Object of anonymous type + // example: + // | var foo = { bar: "baz" }; + // | var thinger = dojo.delegate(foo, { thud: "xyzzy"}); + // | thinger.bar == "baz"; // delegated to foo + // | foo.thud == undefined; // by definition + // | thinger.thud == "xyzzy"; // mixed in from props + // | foo.bar = "thonk"; + // | thinger.bar == "thonk"; // still delegated to foo's bar + } + =====*/ + + dojo.delegate = dojo._delegate = (function(){ + // boodman/crockford delegation w/ cornford optimization + function TMP(){} + return function(obj, props){ + TMP.prototype = obj; + var tmp = new TMP(); + TMP.prototype = null; + if(props){ + d._mixin(tmp, props); + } + return tmp; // Object + } + })(); + + /*===== + dojo._toArray = function(obj, offset, startWith){ + // summary: + // Converts an array-like object (i.e. arguments, DOMCollection) to an + // array. Returns a new Array with the elements of obj. + // obj: Object + // the object to "arrayify". We expect the object to have, at a + // minimum, a length property which corresponds to integer-indexed + // properties. + // offset: Number? + // the location in obj to start iterating from. Defaults to 0. + // Optional. + // startWith: Array? + // An array to pack with the properties of obj. If provided, + // properties in obj are appended at the end of startWith and + // startWith is the returned array. + } + =====*/ + + var efficient = function(obj, offset, startWith){ + return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0)); + }; + + var slow = function(obj, offset, startWith){ + var arr = startWith||[]; + for(var x = offset || 0; x < obj.length; x++){ + arr.push(obj[x]); + } + return arr; + }; + + dojo._toArray = + d.isIE ? function(obj){ + return ((obj.item) ? slow : efficient).apply(this, arguments); + } : + efficient; + + dojo.partial = function(/*Function|String*/method /*, ...*/){ + // summary: + // similar to hitch() except that the scope object is left to be + // whatever the execution context eventually becomes. + // description: + // Calling dojo.partial is the functional equivalent of calling: + // | dojo.hitch(null, funcName, ...); + var arr = [ null ]; + return d.hitch.apply(d, arr.concat(d._toArray(arguments))); // Function + } + + var extraNames = d._extraNames, extraLen = extraNames.length, empty = {}; + + dojo.clone = function(/*anything*/ o){ + // summary: + // Clones objects (including DOM nodes) and all children. + // Warning: do not clone cyclic structures. + if(!o || typeof o != "object" || d.isFunction(o)){ + // null, undefined, any non-object, or function + return o; // anything + } + if(o.nodeType && "cloneNode" in o){ + // DOM Node + return o.cloneNode(true); // Node + } + if(o instanceof Date){ + // Date + return new Date(o.getTime()); // Date + } + var r, i, l, s, name; + if(d.isArray(o)){ + // array + r = []; + for(i = 0, l = o.length; i < l; ++i){ + if(i in o){ + r.push(d.clone(o[i])); + } + } +// we don't clone functions for performance reasons +// }else if(d.isFunction(o)){ +// // function +// r = function(){ return o.apply(this, arguments); }; + }else{ + // generic objects + r = o.constructor ? new o.constructor() : {}; + } + for(name in o){ + // the "tobj" condition avoid copying properties in "source" + // inherited from Object.prototype. For example, if target has a custom + // toString() method, don't overwrite it with the toString() method + // that source inherited from Object.prototype + s = o[name]; + if(!(name in r) || (r[name] !== s && (!(name in empty) || empty[name] !== s))){ + r[name] = d.clone(s); + } + } + // IE doesn't recognize some custom functions in for..in + if(extraLen){ + for(i = 0; i < extraLen; ++i){ + name = extraNames[i]; + s = o[name]; + if(!(name in r) || (r[name] !== s && (!(name in empty) || empty[name] !== s))){ + r[name] = s; // functions only, we don't clone them + } + } + } + return r; // Object + } + + /*===== + dojo.trim = function(str){ + // summary: + // Trims whitespace from both sides of the string + // str: String + // String to be trimmed + // returns: String + // Returns the trimmed string + // description: + // This version of trim() was selected for inclusion into the base due + // to its compact size and relatively good performance + // (see [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript) + // Uses String.prototype.trim instead, if available. + // The fastest but longest version of this function is located at + // dojo.string.trim() + return ""; // String + } + =====*/ + + dojo.trim = String.prototype.trim ? + function(str){ return str.trim(); } : + function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }; + + /*===== + dojo.replace = function(tmpl, map, pattern){ + // summary: + // Performs parameterized substitutions on a string. Throws an + // exception if any parameter is unmatched. + // tmpl: String + // String to be used as a template. + // map: Object|Function + // If an object, it is used as a dictionary to look up substitutions. + // If a function, it is called for every substitution with following + // parameters: a whole match, a name, an offset, and the whole template + // string (see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace + // for more details). + // pattern: RegEx? + // Optional regular expression objects that overrides the default pattern. + // Must be global and match one item. The default is: /\{([^\}]+)\}/g, + // which matches patterns like that: "{xxx}", where "xxx" is any sequence + // of characters, which doesn't include "}". + // returns: String + // Returns the substituted string. + // example: + // | // uses a dictionary for substitutions: + // | dojo.replace("Hello, {name.first} {name.last} AKA {nick}!", + // | { + // | nick: "Bob", + // | name: { + // | first: "Robert", + // | middle: "X", + // | last: "Cringely" + // | } + // | }); + // | // returns: Hello, Robert Cringely AKA Bob! + // example: + // | // uses an array for substitutions: + // | dojo.replace("Hello, {0} {2}!", + // | ["Robert", "X", "Cringely"]); + // | // returns: Hello, Robert Cringely! + // example: + // | // uses a function for substitutions: + // | function sum(a){ + // | var t = 0; + // | dojo.forEach(a, function(x){ t += x; }); + // | return t; + // | } + // | dojo.replace( + // | "{count} payments averaging {avg} USD per payment.", + // | dojo.hitch( + // | { payments: [11, 16, 12] }, + // | function(_, key){ + // | switch(key){ + // | case "count": return this.payments.length; + // | case "min": return Math.min.apply(Math, this.payments); + // | case "max": return Math.max.apply(Math, this.payments); + // | case "sum": return sum(this.payments); + // | case "avg": return sum(this.payments) / this.payments.length; + // | } + // | } + // | ) + // | ); + // | // prints: 3 payments averaging 13 USD per payment. + // example: + // | // uses an alternative PHP-like pattern for substitutions: + // | dojo.replace("Hello, ${0} ${2}!", + // | ["Robert", "X", "Cringely"], /\$\{([^\}]+)\}/g); + // | // returns: Hello, Robert Cringely! + return ""; // String + } + =====*/ + + var _pattern = /\{([^\}]+)\}/g; + dojo.replace = function(tmpl, map, pattern){ + return tmpl.replace(pattern || _pattern, d.isFunction(map) ? + map : function(_, k){ return d.getObject(k, false, map); }); + }; +})(); + +} + +if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.array"] = true; + +dojo.provide("dojo._base.array"); + +(function(){ + var _getParts = function(arr, obj, cb){ + return [ + (typeof arr == "string") ? arr.split("") : arr, + obj || dojo.global, + // FIXME: cache the anonymous functions we create here? + (typeof cb == "string") ? new Function("item", "index", "array", cb) : cb + ]; + }; + + var everyOrSome = function(/*Boolean*/every, /*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + for(var i=0,l=arr.length; i end) || i < end){ + for(; i != end; i += step){ + if(array[i] == value){ return i; } + } + } + return -1; // Number + }, + + lastIndexOf: function(/*Array*/array, /*Object*/value, /*Integer?*/fromIndex){ + // summary: + // locates the last index of the provided value in the passed + // array. If the value is not found, -1 is returned. + // description: + // This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when + // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript + // 1.6's lastIndexOf skips the holes in the sparse array. + // For details on this method, see: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf + return dojo.indexOf(array, value, fromIndex, true); // Number + }, + + forEach: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + // summary: + // for every item in arr, callback is invoked. Return values are ignored. + // If you want to break out of the loop, consider using dojo.every() or dojo.some(). + // forEach does not allow breaking out of the loop over the items in arr. + // arr: + // the array to iterate over. If a string, operates on individual characters. + // callback: + // a function is invoked with three arguments: item, index, and array + // thisObject: + // may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when + // run over sparse arrays, this implemenation passes the "holes" in the sparse array to + // the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array. + // For more details, see: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach + // example: + // | // log out all members of the array: + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | function(item){ + // | console.log(item); + // | } + // | ); + // example: + // | // log out the members and their indexes + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | function(item, idx, arr){ + // | console.log(item, "at index:", idx); + // | } + // | ); + // example: + // | // use a scoped object member as the callback + // | + // | var obj = { + // | prefix: "logged via obj.callback:", + // | callback: function(item){ + // | console.log(this.prefix, item); + // | } + // | }; + // | + // | // specifying the scope function executes the callback in that scope + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | obj.callback, + // | obj + // | ); + // | + // | // alternately, we can accomplish the same thing with dojo.hitch() + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | dojo.hitch(obj, "callback") + // | ); + + // match the behavior of the built-in forEach WRT empty arrs + if(!arr || !arr.length){ return; } + + // FIXME: there are several ways of handilng thisObject. Is + // dojo.global always the default context? + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + for(var i=0,l=arr.length; i1; }); + // example: + // | // returns true + // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); + return everyOrSome(true, arr, callback, thisObject); // Boolean + }, + + some: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + // summary: + // Determines whether or not any item in arr satisfies the + // condition implemented by callback. + // arr: + // the array to iterate over. If a string, operates on individual characters. + // callback: + // a function is invoked with three arguments: item, index, + // and array and returns true if the condition is met. + // thisObject: + // may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when + // run over sparse arrays, this implemenation passes the "holes" in the sparse array to + // the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array. + // For more details, see: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/some + // example: + // | // is true + // | dojo.some([1, 2, 3, 4], function(item){ return item>1; }); + // example: + // | // is false + // | dojo.some([1, 2, 3, 4], function(item){ return item<1; }); + return everyOrSome(false, arr, callback, thisObject); // Boolean + }, + + map: function(/*Array|String*/arr, /*Function|String*/callback, /*Function?*/thisObject){ + // summary: + // applies callback to each element of arr and returns + // an Array with the results + // arr: + // the array to iterate on. If a string, operates on + // individual characters. + // callback: + // a function is invoked with three arguments, (item, index, + // array), and returns a value + // thisObject: + // may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when + // run over sparse arrays, this implemenation passes the "holes" in the sparse array to + // the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array. + // For more details, see: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map + // example: + // | // returns [2, 3, 4, 5] + // | dojo.map([1, 2, 3, 4], function(item){ return item+1 }); + + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + var outArr = (arguments[3] ? (new arguments[3]()) : []); + for(var i=0,l=arr.length; i1; }); + + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + var outArr = []; + for(var i=0,l=arr.length; i= 0; --j){ + proto = lin[j].prototype; + if(!proto.hasOwnProperty("declaredClass")){ + proto.declaredClass = "uniqName_" + (counter++); + } + name = proto.declaredClass; + if(!nameMap.hasOwnProperty(name)){ + nameMap[name] = {count: 0, refs: [], cls: lin[j]}; + ++clsCount; + } + rec = nameMap[name]; + if(top && top !== rec){ + rec.refs.push(top); + ++top.count; + } + top = rec; + } + ++top.count; + roots[0].refs.push(top); + } + + // remove classes without external references recursively + while(roots.length){ + top = roots.pop(); + result.push(top.cls); + --clsCount; + // optimization: follow a single-linked chain + while(refs = top.refs, refs.length == 1){ + top = refs[0]; + if(!top || --top.count){ + // branch or end of chain => do not end to roots + top = 0; + break; + } + result.push(top.cls); + --clsCount; + } + if(top){ + // branch + for(i = 0, l = refs.length; i < l; ++i){ + top = refs[i]; + if(!--top.count){ + roots.push(top); + } + } + } + } + if(clsCount){ + err("can't build consistent linearization"); + } + + // calculate the superclass offset + base = bases[0]; + result[0] = base ? + base._meta && base === result[result.length - base._meta.bases.length] ? + base._meta.bases.length : 1 : 0; + + return result; + } + + function inherited(args, a, f){ + var name, chains, bases, caller, meta, base, proto, opf, pos, + cache = this._inherited = this._inherited || {}; + + // crack arguments + if(typeof args == "string"){ + name = args; + args = a; + a = f; + } + f = 0; + + caller = args.callee; + name = name || caller.nom; + if(!name){ + err("can't deduce a name to call inherited()"); + } + + meta = this.constructor._meta; + bases = meta.bases; + + pos = cache.p; + if(name != cname){ + // method + if(cache.c !== caller){ + // cache bust + pos = 0; + base = bases[0]; + meta = base._meta; + if(meta.hidden[name] !== caller){ + // error detection + chains = meta.chains; + if(chains && typeof chains[name] == "string"){ + err("calling chained method with inherited: " + name); + } + // find caller + do{ + meta = base._meta; + proto = base.prototype; + if(meta && (proto[name] === caller && proto.hasOwnProperty(name) || meta.hidden[name] === caller)){ + break; + } + }while(base = bases[++pos]); // intentional assignment + pos = base ? pos : -1; + } + } + // find next + base = bases[++pos]; + if(base){ + proto = base.prototype; + if(base._meta && proto.hasOwnProperty(name)){ + f = proto[name]; + }else{ + opf = op[name]; + do{ + proto = base.prototype; + f = proto[name]; + if(f && (base._meta ? proto.hasOwnProperty(name) : f !== opf)){ + break; + } + }while(base = bases[++pos]); // intentional assignment + } + } + f = base && f || op[name]; + }else{ + // constructor + if(cache.c !== caller){ + // cache bust + pos = 0; + meta = bases[0]._meta; + if(meta && meta.ctor !== caller){ + // error detection + chains = meta.chains; + if(!chains || chains.constructor !== "manual"){ + err("calling chained constructor with inherited"); + } + // find caller + while(base = bases[++pos]){ // intentional assignment + meta = base._meta; + if(meta && meta.ctor === caller){ + break; + } + } + pos = base ? pos : -1; + } + } + // find next + while(base = bases[++pos]){ // intentional assignment + meta = base._meta; + f = meta ? meta.ctor : base; + if(f){ + break; + } + } + f = base && f; + } + + // cache the found super method + cache.c = f; + cache.p = pos; + + // now we have the result + if(f){ + return a === true ? f : f.apply(this, a || args); + } + // intentionally if a super method was not found + } + + function getInherited(name, args){ + if(typeof name == "string"){ + return this.inherited(name, args, true); + } + return this.inherited(name, true); + } + + // emulation of "instanceof" + function isInstanceOf(cls){ + var bases = this.constructor._meta.bases; + for(var i = 0, l = bases.length; i < l; ++i){ + if(bases[i] === cls){ + return true; + } + } + return this instanceof cls; + } + + function mixOwn(target, source){ + var name, i = 0, l = d._extraNames.length; + // add props adding metadata for incoming functions skipping a constructor + for(name in source){ + if(name != cname && source.hasOwnProperty(name)){ + target[name] = source[name]; + } + } + // process unenumerable methods on IE + for(; i < l; ++i){ + name = d._extraNames[i]; + if(name != cname && source.hasOwnProperty(name)){ + target[name] = source[name]; + } + } + } + + // implementation of safe mixin function + function safeMixin(target, source){ + var name, t, i = 0, l = d._extraNames.length; + // add props adding metadata for incoming functions skipping a constructor + for(name in source){ + t = source[name]; + if((t !== op[name] || !(name in op)) && name != cname){ + if(opts.call(t) == "[object Function]"){ + // non-trivial function method => attach its name + t.nom = name; + } + target[name] = t; + } + } + // process unenumerable methods on IE + for(; i < l; ++i){ + name = d._extraNames[i]; + t = source[name]; + if((t !== op[name] || !(name in op)) && name != cname){ + if(opts.call(t) == "[object Function]"){ + // non-trivial function method => attach its name + t.nom = name; + } + target[name] = t; + } + } + return target; + } + + function extend(source){ + safeMixin(this.prototype, source); + return this; + } + + // chained constructor compatible with the legacy dojo.declare() + function chainedConstructor(bases, ctorSpecial){ + return function(){ + var a = arguments, args = a, a0 = a[0], f, i, m, + l = bases.length, preArgs; + + if(!(this instanceof a.callee)){ + // not called via new, so force it + return applyNew(a); + } + + //this._inherited = {}; + // perform the shaman's rituals of the original dojo.declare() + // 1) call two types of the preamble + if(ctorSpecial && (a0 && a0.preamble || this.preamble)){ + // full blown ritual + preArgs = new Array(bases.length); + // prepare parameters + preArgs[0] = a; + for(i = 0;;){ + // process the preamble of the 1st argument + a0 = a[0]; + if(a0){ + f = a0.preamble; + if(f){ + a = f.apply(this, a) || a; + } + } + // process the preamble of this class + f = bases[i].prototype; + f = f.hasOwnProperty("preamble") && f.preamble; + if(f){ + a = f.apply(this, a) || a; + } + // one peculiarity of the preamble: + // it is called if it is not needed, + // e.g., there is no constructor to call + // let's watch for the last constructor + // (see ticket #9795) + if(++i == l){ + break; + } + preArgs[i] = a; + } + } + // 2) call all non-trivial constructors using prepared arguments + for(i = l - 1; i >= 0; --i){ + f = bases[i]; + m = f._meta; + f = m ? m.ctor : f; + if(f){ + f.apply(this, preArgs ? preArgs[i] : a); + } + } + // 3) continue the original ritual: call the postscript + f = this.postscript; + if(f){ + f.apply(this, args); + } + }; + } + + // chained constructor compatible with the legacy dojo.declare() + function singleConstructor(ctor, ctorSpecial){ + return function(){ + var a = arguments, t = a, a0 = a[0], f; + + if(!(this instanceof a.callee)){ + // not called via new, so force it + return applyNew(a); + } + + //this._inherited = {}; + // perform the shaman's rituals of the original dojo.declare() + // 1) call two types of the preamble + if(ctorSpecial){ + // full blown ritual + if(a0){ + // process the preamble of the 1st argument + f = a0.preamble; + if(f){ + t = f.apply(this, t) || t; + } + } + f = this.preamble; + if(f){ + // process the preamble of this class + f.apply(this, t); + // one peculiarity of the preamble: + // it is called even if it is not needed, + // e.g., there is no constructor to call + // let's watch for the last constructor + // (see ticket #9795) + } + } + // 2) call a constructor + if(ctor){ + ctor.apply(this, a); + } + // 3) continue the original ritual: call the postscript + f = this.postscript; + if(f){ + f.apply(this, a); + } + }; + } + + // plain vanilla constructor (can use inherited() to call its base constructor) + function simpleConstructor(bases){ + return function(){ + var a = arguments, i = 0, f, m; + + if(!(this instanceof a.callee)){ + // not called via new, so force it + return applyNew(a); + } + + //this._inherited = {}; + // perform the shaman's rituals of the original dojo.declare() + // 1) do not call the preamble + // 2) call the top constructor (it can use this.inherited()) + for(; f = bases[i]; ++i){ // intentional assignment + m = f._meta; + f = m ? m.ctor : f; + if(f){ + f.apply(this, a); + break; + } + } + // 3) call the postscript + f = this.postscript; + if(f){ + f.apply(this, a); + } + }; + } + + function chain(name, bases, reversed){ + return function(){ + var b, m, f, i = 0, step = 1; + if(reversed){ + i = bases.length - 1; + step = -1; + } + for(; b = bases[i]; i += step){ // intentional assignment + m = b._meta; + f = (m ? m.hidden : b.prototype)[name]; + if(f){ + f.apply(this, arguments); + } + } + }; + } + + // forceNew(ctor) + // return a new object that inherits from ctor.prototype but + // without actually running ctor on the object. + function forceNew(ctor){ + // create object with correct prototype using a do-nothing + // constructor + xtor.prototype = ctor.prototype; + var t = new xtor; + xtor.prototype = null; // clean up + return t; + } + + // applyNew(args) + // just like 'new ctor()' except that the constructor and its arguments come + // from args, which must be an array or an arguments object + function applyNew(args){ + // create an object with ctor's prototype but without + // calling ctor on it. + var ctor = args.callee, t = forceNew(ctor); + // execute the real constructor on the new object + ctor.apply(t, args); + return t; + } + + d.declare = function(className, superclass, props){ + // crack parameters + if(typeof className != "string"){ + props = superclass; + superclass = className; + className = ""; + } + props = props || {}; + + var proto, i, t, ctor, name, bases, chains, mixins = 1, parents = superclass; + + // build a prototype + if(opts.call(superclass) == "[object Array]"){ + // C3 MRO + bases = c3mro(superclass); + t = bases[0]; + mixins = bases.length - t; + superclass = bases[mixins]; + }else{ + bases = [0]; + if(superclass){ + if(opts.call(superclass) == "[object Function]"){ + t = superclass._meta; + bases = bases.concat(t ? t.bases : superclass); + }else{ + err("base class is not a callable constructor."); + } + }else if(superclass !== null){ + err("unknown base class. Did you use dojo.require to pull it in?") + } + } + if(superclass){ + for(i = mixins - 1;; --i){ + proto = forceNew(superclass); + if(!i){ + // stop if nothing to add (the last base) + break; + } + // mix in properties + t = bases[i]; + (t._meta ? mixOwn : mix)(proto, t.prototype); + // chain in new constructor + ctor = new Function; + ctor.superclass = superclass; + ctor.prototype = proto; + superclass = proto.constructor = ctor; + } + }else{ + proto = {}; + } + // add all properties + safeMixin(proto, props); + // add constructor + t = props.constructor; + if(t !== op.constructor){ + t.nom = cname; + proto.constructor = t; + } + + // collect chains and flags + for(i = mixins - 1; i; --i){ // intentional assignment + t = bases[i]._meta; + if(t && t.chains){ + chains = mix(chains || {}, t.chains); + } + } + if(proto["-chains-"]){ + chains = mix(chains || {}, proto["-chains-"]); + } + + // build ctor + t = !chains || !chains.hasOwnProperty(cname); + bases[0] = ctor = (chains && chains.constructor === "manual") ? simpleConstructor(bases) : + (bases.length == 1 ? singleConstructor(props.constructor, t) : chainedConstructor(bases, t)); + + // add meta information to the constructor + ctor._meta = {bases: bases, hidden: props, chains: chains, + parents: parents, ctor: props.constructor}; + ctor.superclass = superclass && superclass.prototype; + ctor.extend = extend; + ctor.prototype = proto; + proto.constructor = ctor; + + // add "standard" methods to the prototype + proto.getInherited = getInherited; + proto.inherited = inherited; + proto.isInstanceOf = isInstanceOf; + + // add name if specified + if(className){ + proto.declaredClass = className; + d.setObject(className, ctor); + } + + // build chains and add them to the prototype + if(chains){ + for(name in chains){ + if(proto[name] && typeof chains[name] == "string" && name != cname){ + t = proto[name] = chain(name, bases, chains[name] === "after"); + t.nom = name; + } + } + } + // chained methods do not return values + // no need to chain "invisible" functions + + return ctor; // Function + }; + + d.safeMixin = safeMixin; + + /*===== + dojo.declare = function(className, superclass, props){ + // summary: + // Create a feature-rich constructor from compact notation. + // className: String?: + // The optional name of the constructor (loosely, a "class") + // stored in the "declaredClass" property in the created prototype. + // It will be used as a global name for a created constructor. + // superclass: Function|Function[]: + // May be null, a Function, or an Array of Functions. This argument + // specifies a list of bases (the left-most one is the most deepest + // base). + // props: Object: + // An object whose properties are copied to the created prototype. + // Add an instance-initialization function by making it a property + // named "constructor". + // returns: + // New constructor function. + // description: + // Create a constructor using a compact notation for inheritance and + // prototype extension. + // + // Mixin ancestors provide a type of multiple inheritance. + // Prototypes of mixin ancestors are copied to the new class: + // changes to mixin prototypes will not affect classes to which + // they have been mixed in. + // + // Ancestors can be compound classes created by this version of + // dojo.declare. In complex cases all base classes are going to be + // linearized according to C3 MRO algorithm + // (see http://www.python.org/download/releases/2.3/mro/ for more + // details). + // + // "className" is cached in "declaredClass" property of the new class, + // if it was supplied. The immediate super class will be cached in + // "superclass" property of the new class. + // + // Methods in "props" will be copied and modified: "nom" property + // (the declared name of the method) will be added to all copied + // functions to help identify them for the internal machinery. Be + // very careful, while reusing methods: if you use the same + // function under different names, it can produce errors in some + // cases. + // + // It is possible to use constructors created "manually" (without + // dojo.declare) as bases. They will be called as usual during the + // creation of an instance, their methods will be chained, and even + // called by "this.inherited()". + // + // Special property "-chains-" governs how to chain methods. It is + // a dictionary, which uses method names as keys, and hint strings + // as values. If a hint string is "after", this method will be + // called after methods of its base classes. If a hint string is + // "before", this method will be called before methods of its base + // classes. + // + // If "constructor" is not mentioned in "-chains-" property, it will + // be chained using the legacy mode: using "after" chaining, + // calling preamble() method before each constructor, if available, + // and calling postscript() after all constructors were executed. + // If the hint is "after", it is chained as a regular method, but + // postscript() will be called after the chain of constructors. + // "constructor" cannot be chained "before", but it allows + // a special hint string: "manual", which means that constructors + // are not going to be chained in any way, and programmer will call + // them manually using this.inherited(). In the latter case + // postscript() will be called after the construction. + // + // All chaining hints are "inherited" from base classes and + // potentially can be overridden. Be very careful when overriding + // hints! Make sure that all chained methods can work in a proposed + // manner of chaining. + // + // Once a method was chained, it is impossible to unchain it. The + // only exception is "constructor". You don't need to define a + // method in order to supply a chaining hint. + // + // If a method is chained, it cannot use this.inherited() because + // all other methods in the hierarchy will be called automatically. + // + // Usually constructors and initializers of any kind are chained + // using "after" and destructors of any kind are chained as + // "before". Note that chaining assumes that chained methods do not + // return any value: any returned value will be discarded. + // + // example: + // | dojo.declare("my.classes.bar", my.classes.foo, { + // | // properties to be added to the class prototype + // | someValue: 2, + // | // initialization function + // | constructor: function(){ + // | this.myComplicatedObject = new ReallyComplicatedObject(); + // | }, + // | // other functions + // | someMethod: function(){ + // | doStuff(); + // | } + // | }); + // + // example: + // | var MyBase = dojo.declare(null, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var MyClass1 = dojo.declare(MyBase, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var MyClass2 = dojo.declare(MyBase, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var MyDiamond = dojo.declare([MyClass1, MyClass2], { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // + // example: + // | var F = function(){ console.log("raw constructor"); }; + // | F.prototype.method = function(){ + // | console.log("raw method"); + // | }; + // | var A = dojo.declare(F, { + // | constructor: function(){ + // | console.log("A.constructor"); + // | }, + // | method: function(){ + // | console.log("before calling F.method..."); + // | this.inherited(arguments); + // | console.log("...back in A"); + // | } + // | }); + // | new A().method(); + // | // will print: + // | // raw constructor + // | // A.constructor + // | // before calling F.method... + // | // raw method + // | // ...back in A + // + // example: + // | var A = dojo.declare(null, { + // | "-chains-": { + // | destroy: "before" + // | } + // | }); + // | var B = dojo.declare(A, { + // | constructor: function(){ + // | console.log("B.constructor"); + // | }, + // | destroy: function(){ + // | console.log("B.destroy"); + // | } + // | }); + // | var C = dojo.declare(B, { + // | constructor: function(){ + // | console.log("C.constructor"); + // | }, + // | destroy: function(){ + // | console.log("C.destroy"); + // | } + // | }); + // | new C().destroy(); + // | // prints: + // | // B.constructor + // | // C.constructor + // | // C.destroy + // | // B.destroy + // + // example: + // | var A = dojo.declare(null, { + // | "-chains-": { + // | constructor: "manual" + // | } + // | }); + // | var B = dojo.declare(A, { + // | constructor: function(){ + // | // ... + // | // call the base constructor with new parameters + // | this.inherited(arguments, [1, 2, 3]); + // | // ... + // | } + // | }); + // + // example: + // | var A = dojo.declare(null, { + // | "-chains-": { + // | m1: "before" + // | }, + // | m1: function(){ + // | console.log("A.m1"); + // | }, + // | m2: function(){ + // | console.log("A.m2"); + // | } + // | }); + // | var B = dojo.declare(A, { + // | "-chains-": { + // | m2: "after" + // | }, + // | m1: function(){ + // | console.log("B.m1"); + // | }, + // | m2: function(){ + // | console.log("B.m2"); + // | } + // | }); + // | var x = new B(); + // | x.m1(); + // | // prints: + // | // B.m1 + // | // A.m1 + // | x.m2(); + // | // prints: + // | // A.m2 + // | // B.m2 + return new Function(); // Function + }; + =====*/ + + /*===== + dojo.safeMixin = function(target, source){ + // summary: + // Mix in properties skipping a constructor and decorating functions + // like it is done by dojo.declare. + // target: Object + // Target object to accept new properties. + // source: Object + // Source object for new properties. + // description: + // This function is used to mix in properties like dojo._mixin does, + // but it skips a constructor property and decorates functions like + // dojo.declare does. + // + // It is meant to be used with classes and objects produced with + // dojo.declare. Functions mixed in with dojo.safeMixin can use + // this.inherited() like normal methods. + // + // This function is used to implement extend() method of a constructor + // produced with dojo.declare(). + // + // example: + // | var A = dojo.declare(null, { + // | m1: function(){ + // | console.log("A.m1"); + // | }, + // | m2: function(){ + // | console.log("A.m2"); + // | } + // | }); + // | var B = dojo.declare(A, { + // | m1: function(){ + // | this.inherited(arguments); + // | console.log("B.m1"); + // | } + // | }); + // | B.extend({ + // | m2: function(){ + // | this.inherited(arguments); + // | console.log("B.m2"); + // | } + // | }); + // | var x = new B(); + // | dojo.safeMixin(x, { + // | m1: function(){ + // | this.inherited(arguments); + // | console.log("X.m1"); + // | }, + // | m2: function(){ + // | this.inherited(arguments); + // | console.log("X.m2"); + // | } + // | }); + // | x.m2(); + // | // prints: + // | // A.m1 + // | // B.m1 + // | // X.m1 + }; + =====*/ + + /*===== + Object.inherited = function(name, args, newArgs){ + // summary: + // Calls a super method. + // name: String? + // The optional method name. Should be the same as the caller's + // name. Usually "name" is specified in complex dynamic cases, when + // the calling method was dynamically added, undecorated by + // dojo.declare, and it cannot be determined. + // args: Arguments + // The caller supply this argument, which should be the original + // "arguments". + // newArgs: Object? + // If "true", the found function will be returned without + // executing it. + // If Array, it will be used to call a super method. Otherwise + // "args" will be used. + // returns: + // Whatever is returned by a super method, or a super method itself, + // if "true" was specified as newArgs. + // description: + // This method is used inside method of classes produced with + // dojo.declare to call a super method (next in the chain). It is + // used for manually controlled chaining. Consider using the regular + // chaining, because it is faster. Use "this.inherited()" only in + // complex cases. + // + // This method cannot me called from automatically chained + // constructors including the case of a special (legacy) + // constructor chaining. It cannot be called from chained methods. + // + // If "this.inherited()" cannot find the next-in-chain method, it + // does nothing and returns "undefined". The last method in chain + // can be a default method implemented in Object, which will be + // called last. + // + // If "name" is specified, it is assumed that the method that + // received "args" is the parent method for this call. It is looked + // up in the chain list and if it is found the next-in-chain method + // is called. If it is not found, the first-in-chain method is + // called. + // + // If "name" is not specified, it will be derived from the calling + // method (using a methoid property "nom"). + // + // example: + // | var B = dojo.declare(A, { + // | method1: function(a, b, c){ + // | this.inherited(arguments); + // | }, + // | method2: function(a, b){ + // | return this.inherited(arguments, [a + b]); + // | } + // | }); + // | // next method is not in the chain list because it is added + // | // manually after the class was created. + // | B.prototype.method3 = function(){ + // | console.log("This is a dynamically-added method."); + // | this.inherited("method3", arguments); + // | }; + // example: + // | var B = dojo.declare(A, { + // | method: function(a, b){ + // | var super = this.inherited(arguments, true); + // | // ... + // | if(!super){ + // | console.log("there is no super method"); + // | return 0; + // | } + // | return super.apply(this, arguments); + // | } + // | }); + return {}; // Object + } + =====*/ + + /*===== + Object.getInherited = function(name, args){ + // summary: + // Returns a super method. + // name: String? + // The optional method name. Should be the same as the caller's + // name. Usually "name" is specified in complex dynamic cases, when + // the calling method was dynamically added, undecorated by + // dojo.declare, and it cannot be determined. + // args: Arguments + // The caller supply this argument, which should be the original + // "arguments". + // returns: + // Returns a super method (Function) or "undefined". + // description: + // This method is a convenience method for "this.inherited()". + // It uses the same algorithm but instead of executing a super + // method, it returns it, or "undefined" if not found. + // + // example: + // | var B = dojo.declare(A, { + // | method: function(a, b){ + // | var super = this.getInherited(arguments); + // | // ... + // | if(!super){ + // | console.log("there is no super method"); + // | return 0; + // | } + // | return super.apply(this, arguments); + // | } + // | }); + return {}; // Object + } + =====*/ + + /*===== + Object.isInstanceOf = function(cls){ + // summary: + // Checks the inheritance chain to see if it is inherited from this + // class. + // cls: Function + // Class constructor. + // returns: + // "true", if this object is inherited from this class, "false" + // otherwise. + // description: + // This method is used with instances of classes produced with + // dojo.declare to determine of they support a certain interface or + // not. It models "instanceof" operator. + // + // example: + // | var A = dojo.declare(null, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var B = dojo.declare(null, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var C = dojo.declare([A, B], { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var D = dojo.declare(A, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | + // | var a = new A(), b = new B(), c = new C(), d = new D(); + // | + // | console.log(a.isInstanceOf(A)); // true + // | console.log(b.isInstanceOf(A)); // false + // | console.log(c.isInstanceOf(A)); // true + // | console.log(d.isInstanceOf(A)); // true + // | + // | console.log(a.isInstanceOf(B)); // false + // | console.log(b.isInstanceOf(B)); // true + // | console.log(c.isInstanceOf(B)); // true + // | console.log(d.isInstanceOf(B)); // false + // | + // | console.log(a.isInstanceOf(C)); // false + // | console.log(b.isInstanceOf(C)); // false + // | console.log(c.isInstanceOf(C)); // true + // | console.log(d.isInstanceOf(C)); // false + // | + // | console.log(a.isInstanceOf(D)); // false + // | console.log(b.isInstanceOf(D)); // false + // | console.log(c.isInstanceOf(D)); // false + // | console.log(d.isInstanceOf(D)); // true + return {}; // Object + } + =====*/ + + /*===== + Object.extend = function(source){ + // summary: + // Adds all properties and methods of source to constructor's + // prototype, making them available to all instances created with + // constructor. This method is specific to constructors created with + // dojo.declare. + // source: Object + // Source object which properties are going to be copied to the + // constructor's prototype. + // description: + // Adds source properties to the constructor's prototype. It can + // override existing properties. + // + // This method is similar to dojo.extend function, but it is specific + // to constructors produced by dojo.declare. It is implemented + // using dojo.safeMixin, and it skips a constructor property, + // and properly decorates copied functions. + // + // example: + // | var A = dojo.declare(null, { + // | m1: function(){}, + // | s1: "Popokatepetl" + // | }); + // | A.extend({ + // | m1: function(){}, + // | m2: function(){}, + // | f1: true, + // | d1: 42 + // | }); + }; + =====*/ +})(); + +} + +if(!dojo._hasResource["dojo._base.connect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.connect"] = true; +dojo.provide("dojo._base.connect"); + +// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA + +// low-level delegation machinery +dojo._listener = { + // create a dispatcher function + getDispatcher: function(){ + // following comments pulled out-of-line to prevent cloning them + // in the returned function. + // - indices (i) that are really in the array of listeners (ls) will + // not be in Array.prototype. This is the 'sparse array' trick + // that keeps us safe from libs that take liberties with built-in + // objects + // - listener is invoked with current scope (this) + return function(){ + var ap=Array.prototype, c=arguments.callee, ls=c._listeners, t=c.target; + // return value comes from original target function + var r = t && t.apply(this, arguments); + // make local copy of listener array so it is immutable during processing + var i, lls; + lls = [].concat(ls); + + // invoke listeners after target function + for(i in lls){ + if(!(i in ap)){ + lls[i].apply(this, arguments); + } + } + // return value comes from original target function + return r; + }; + }, + // add a listener to an object + add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ + // Whenever 'method' is invoked, 'listener' will have the same scope. + // Trying to supporting a context object for the listener led to + // complexity. + // Non trivial to provide 'once' functionality here + // because listener could be the result of a dojo.hitch call, + // in which case two references to the same hitch target would not + // be equivalent. + source = source || dojo.global; + // The source method is either null, a dispatcher, or some other function + var f = source[method]; + // Ensure a dispatcher + if(!f || !f._listeners){ + var d = dojo._listener.getDispatcher(); + // original target function is special + d.target = f; + // dispatcher holds a list of listeners + d._listeners = []; + // redirect source to dispatcher + f = source[method] = d; + } + // The contract is that a handle is returned that can + // identify this listener for disconnect. + // + // The type of the handle is private. Here is it implemented as Integer. + // DOM event code has this same contract but handle is Function + // in non-IE browsers. + // + // We could have separate lists of before and after listeners. + return f._listeners.push(listener); /*Handle*/ + }, + // remove a listener from an object + remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){ + var f = (source || dojo.global)[method]; + // remember that handle is the index+1 (0 is not a valid handle) + if(f && f._listeners && handle--){ + delete f._listeners[handle]; + } + } +}; + +// Multiple delegation for arbitrary methods. + +// This unit knows nothing about DOM, but we include DOM aware documentation +// and dontFix argument here to help the autodocs. Actual DOM aware code is in +// event.js. + +dojo.connect = function(/*Object|null*/ obj, + /*String*/ event, + /*Object|null*/ context, + /*String|Function*/ method, + /*Boolean?*/ dontFix){ + // summary: + // `dojo.connect` is the core event handling and delegation method in + // Dojo. It allows one function to "listen in" on the execution of + // any other, triggering the second whenever the first is called. Many + // listeners may be attached to a function, and source functions may + // be either regular function calls or DOM events. + // + // description: + // Connects listeners to actions, so that after event fires, a + // listener is called with the same arguments passed to the original + // function. + // + // Since `dojo.connect` allows the source of events to be either a + // "regular" JavaScript function or a DOM event, it provides a uniform + // interface for listening to all the types of events that an + // application is likely to deal with though a single, unified + // interface. DOM programmers may want to think of it as + // "addEventListener for everything and anything". + // + // When setting up a connection, the `event` parameter must be a + // string that is the name of the method/event to be listened for. If + // `obj` is null, `dojo.global` is assumed, meaning that connections + // to global methods are supported but also that you may inadvertently + // connect to a global by passing an incorrect object name or invalid + // reference. + // + // `dojo.connect` generally is forgiving. If you pass the name of a + // function or method that does not yet exist on `obj`, connect will + // not fail, but will instead set up a stub method. Similarly, null + // arguments may simply be omitted such that fewer than 4 arguments + // may be required to set up a connection See the examples for details. + // + // The return value is a handle that is needed to + // remove this connection with `dojo.disconnect`. + // + // obj: + // The source object for the event function. + // Defaults to `dojo.global` if null. + // If obj is a DOM node, the connection is delegated + // to the DOM event manager (unless dontFix is true). + // + // event: + // String name of the event function in obj. + // I.e. identifies a property `obj[event]`. + // + // context: + // The object that method will receive as "this". + // + // If context is null and method is a function, then method + // inherits the context of event. + // + // If method is a string then context must be the source + // object object for method (context[method]). If context is null, + // dojo.global is used. + // + // method: + // A function reference, or name of a function in context. + // The function identified by method fires after event does. + // method receives the same arguments as the event. + // See context argument comments for information on method's scope. + // + // dontFix: + // If obj is a DOM node, set dontFix to true to prevent delegation + // of this connection to the DOM event manager. + // + // example: + // When obj.onchange(), do ui.update(): + // | dojo.connect(obj, "onchange", ui, "update"); + // | dojo.connect(obj, "onchange", ui, ui.update); // same + // + // example: + // Using return value for disconnect: + // | var link = dojo.connect(obj, "onchange", ui, "update"); + // | ... + // | dojo.disconnect(link); + // + // example: + // When onglobalevent executes, watcher.handler is invoked: + // | dojo.connect(null, "onglobalevent", watcher, "handler"); + // + // example: + // When ob.onCustomEvent executes, customEventHandler is invoked: + // | dojo.connect(ob, "onCustomEvent", null, "customEventHandler"); + // | dojo.connect(ob, "onCustomEvent", "customEventHandler"); // same + // + // example: + // When ob.onCustomEvent executes, customEventHandler is invoked + // with the same scope (this): + // | dojo.connect(ob, "onCustomEvent", null, customEventHandler); + // | dojo.connect(ob, "onCustomEvent", customEventHandler); // same + // + // example: + // When globalEvent executes, globalHandler is invoked + // with the same scope (this): + // | dojo.connect(null, "globalEvent", null, globalHandler); + // | dojo.connect("globalEvent", globalHandler); // same + + // normalize arguments + var a=arguments, args=[], i=0; + // if a[0] is a String, obj was omitted + args.push(dojo.isString(a[0]) ? null : a[i++], a[i++]); + // if the arg-after-next is a String or Function, context was NOT omitted + var a1 = a[i+1]; + args.push(dojo.isString(a1)||dojo.isFunction(a1) ? a[i++] : null, a[i++]); + // absorb any additional arguments + for(var l=a.length; i44 + // + var returnDeferred = progressCallback == mutator ? this : new dojo.Deferred(promise.cancel); + var listener = { + resolved: resolvedCallback, + error: errorCallback, + progress: progressCallback, + deferred: returnDeferred + }; + if(nextListener){ + head = head.next = listener; + } + else{ + nextListener = head = listener; + } + if(finished){ + notify(); + } + return returnDeferred.promise; + }; + var deferred = this; + this.cancel = promise.cancel = function () { + // summary: + // Cancels the asynchronous operation + if(!finished){ + var error = canceller && canceller(deferred); + if(!finished){ + if (!(error instanceof Error)) { + error = new Error(error); + } + error.log = false; + deferred.reject(error); + } + } + } + freeze(promise); + }; + dojo.extend(dojo.Deferred, { + addCallback: function (/*Function*/callback) { + return this.addCallbacks(dojo.hitch.apply(dojo, arguments)); + }, + + addErrback: function (/*Function*/errback) { + return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments)); + }, + + addBoth: function (/*Function*/callback) { + var enclosed = dojo.hitch.apply(dojo, arguments); + return this.addCallbacks(enclosed, enclosed); + }, + fired: -1 + }); +})(); +dojo.when = function(promiseOrValue, /*Function?*/callback, /*Function?*/errback, /*Function?*/progressHandler){ + // summary: + // This provides normalization between normal synchronous values and + // asynchronous promises, so you can interact with them in a common way + // example: + // | function printFirstAndList(items){ + // | dojo.when(findFirst(items), console.log); + // | dojo.when(findLast(items), console.log); + // | } + // | function findFirst(items){ + // | return dojo.when(items, function(items){ + // | return items[0]; + // | }); + // | } + // | function findLast(items){ + // | return dojo.when(items, function(items){ + // | return items[items.length]; + // | }); + // | } + // And now all three of his functions can be used sync or async. + // | printFirstAndLast([1,2,3,4]) will work just as well as + // | printFirstAndLast(dojo.xhrGet(...)); + + if(promiseOrValue && typeof promiseOrValue.then === "function"){ + return promiseOrValue.then(callback, errback, progressHandler); + } + return callback(promiseOrValue); +}; + +} + +if(!dojo._hasResource["dojo._base.json"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.json"] = true; +dojo.provide("dojo._base.json"); + +dojo.fromJson = function(/*String*/ json){ + // summary: + // Parses a [JSON](http://json.org) string to return a JavaScript object. + // description: + // Throws for invalid JSON strings, but it does not use a strict JSON parser. It + // delegates to eval(). The content passed to this method must therefore come + // from a trusted source. + // json: + // a string literal of a JSON item, for instance: + // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` + + return eval("(" + json + ")"); // Object +} + +dojo._escapeString = function(/*String*/str){ + //summary: + // Adds escape sequences for non-visual characters, double quote and + // backslash and surrounds with double quotes to form a valid string + // literal. + return ('"' + str.replace(/(["\\])/g, '\\$1') + '"'). + replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n"). + replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r"); // string +} + +dojo.toJsonIndentStr = "\t"; +dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){ + // summary: + // Returns a [JSON](http://json.org) serialization of an object. + // description: + // Returns a [JSON](http://json.org) serialization of an object. + // Note that this doesn't check for infinite recursion, so don't do that! + // it: + // an object to be serialized. Objects may define their own + // serialization via a special "__json__" or "json" function + // property. If a specialized serializer has been defined, it will + // be used as a fallback. + // prettyPrint: + // if true, we indent objects and arrays to make the output prettier. + // The variable `dojo.toJsonIndentStr` is used as the indent string -- + // to use something other than the default (tab), change that variable + // before calling dojo.toJson(). + // _indentStr: + // private variable for recursive calls when pretty printing, do not use. + // example: + // simple serialization of a trivial object + // | var jsonStr = dojo.toJson({ howdy: "stranger!", isStrange: true }); + // | doh.is('{"howdy":"stranger!","isStrange":true}', jsonStr); + // example: + // a custom serializer for an objects of a particular class: + // | dojo.declare("Furby", null, { + // | furbies: "are strange", + // | furbyCount: 10, + // | __json__: function(){ + // | }, + // | }); + + if(it === undefined){ + return "undefined"; + } + var objtype = typeof it; + if(objtype == "number" || objtype == "boolean"){ + return it + ""; + } + if(it === null){ + return "null"; + } + if(dojo.isString(it)){ + return dojo._escapeString(it); + } + // recurse + var recurse = arguments.callee; + // short-circuit for objects that support "json" serialization + // if they return "self" then just pass-through... + var newObj; + _indentStr = _indentStr || ""; + var nextIndent = prettyPrint ? _indentStr + dojo.toJsonIndentStr : ""; + var tf = it.__json__||it.json; + if(dojo.isFunction(tf)){ + newObj = tf.call(it); + if(it !== newObj){ + return recurse(newObj, prettyPrint, nextIndent); + } + } + if(it.nodeType && it.cloneNode){ // isNode + // we can't seriailize DOM nodes as regular objects because they have cycles + // DOM nodes could be serialized with something like outerHTML, but + // that can be provided by users in the form of .json or .__json__ function. + throw new Error("Can't serialize DOM nodes"); + } + + var sep = prettyPrint ? " " : ""; + var newLine = prettyPrint ? "\n" : ""; + + // array + if(dojo.isArray(it)){ + var res = dojo.map(it, function(obj){ + var val = recurse(obj, prettyPrint, nextIndent); + if(typeof val != "string"){ + val = "undefined"; + } + return newLine + nextIndent + val; + }); + return "[" + res.join("," + sep) + newLine + _indentStr + "]"; + } + /* + // look in the registry + try { + window.o = it; + newObj = dojo.json.jsonRegistry.match(it); + return recurse(newObj, prettyPrint, nextIndent); + }catch(e){ + // console.log(e); + } + // it's a function with no adapter, skip it + */ + if(objtype == "function"){ + return null; // null + } + // generic object code path + var output = [], key; + for(key in it){ + var keyStr, val; + if(typeof key == "number"){ + keyStr = '"' + key + '"'; + }else if(typeof key == "string"){ + keyStr = dojo._escapeString(key); + }else{ + // skip non-string or number keys + continue; + } + val = recurse(it[key], prettyPrint, nextIndent); + if(typeof val != "string"){ + // skip non-serializable values + continue; + } + // FIXME: use += on Moz!! + // MOW NOTE: using += is a pain because you have to account for the dangling comma... + output.push(newLine + nextIndent + keyStr + ":" + sep + val); + } + return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String +} + +} + +if(!dojo._hasResource["dojo._base.Color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.Color"] = true; +dojo.provide("dojo._base.Color"); + +(function(){ + + var d = dojo; + + dojo.Color = function(/*Array|String|Object*/ color){ + // summary: + // Takes a named string, hex string, array of rgb or rgba values, + // an object with r, g, b, and a properties, or another `dojo.Color` object + // and creates a new Color instance to work from. + // + // example: + // Work with a Color instance: + // | var c = new dojo.Color(); + // | c.setColor([0,0,0]); // black + // | var hex = c.toHex(); // #000000 + // + // example: + // Work with a node's color: + // | var color = dojo.style("someNode", "backgroundColor"); + // | var n = new dojo.Color(color); + // | // adjust the color some + // | n.r *= .5; + // | console.log(n.toString()); // rgb(128, 255, 255); + if(color){ this.setColor(color); } + }; + + // FIXME: + // there's got to be a more space-efficient way to encode or discover + // these!! Use hex? + dojo.Color.named = { + black: [0,0,0], + silver: [192,192,192], + gray: [128,128,128], + white: [255,255,255], + maroon: [128,0,0], + red: [255,0,0], + purple: [128,0,128], + fuchsia: [255,0,255], + green: [0,128,0], + lime: [0,255,0], + olive: [128,128,0], + yellow: [255,255,0], + navy: [0,0,128], + blue: [0,0,255], + teal: [0,128,128], + aqua: [0,255,255], + transparent: d.config.transparentColor || [255,255,255] + }; + + dojo.extend(dojo.Color, { + r: 255, g: 255, b: 255, a: 1, + _set: function(r, g, b, a){ + var t = this; t.r = r; t.g = g; t.b = b; t.a = a; + }, + setColor: function(/*Array|String|Object*/ color){ + // summary: + // Takes a named string, hex string, array of rgb or rgba values, + // an object with r, g, b, and a properties, or another `dojo.Color` object + // and sets this color instance to that value. + // + // example: + // | var c = new dojo.Color(); // no color + // | c.setColor("#ededed"); // greyish + if(d.isString(color)){ + d.colorFromString(color, this); + }else if(d.isArray(color)){ + d.colorFromArray(color, this); + }else{ + this._set(color.r, color.g, color.b, color.a); + if(!(color instanceof d.Color)){ this.sanitize(); } + } + return this; // dojo.Color + }, + sanitize: function(){ + // summary: + // Ensures the object has correct attributes + // description: + // the default implementation does nothing, include dojo.colors to + // augment it with real checks + return this; // dojo.Color + }, + toRgb: function(){ + // summary: + // Returns 3 component array of rgb values + // example: + // | var c = new dojo.Color("#000000"); + // | console.log(c.toRgb()); // [0,0,0] + var t = this; + return [t.r, t.g, t.b]; // Array + }, + toRgba: function(){ + // summary: + // Returns a 4 component array of rgba values from the color + // represented by this object. + var t = this; + return [t.r, t.g, t.b, t.a]; // Array + }, + toHex: function(){ + // summary: + // Returns a CSS color string in hexadecimal representation + // example: + // | console.log(new dojo.Color([0,0,0]).toHex()); // #000000 + var arr = d.map(["r", "g", "b"], function(x){ + var s = this[x].toString(16); + return s.length < 2 ? "0" + s : s; + }, this); + return "#" + arr.join(""); // String + }, + toCss: function(/*Boolean?*/ includeAlpha){ + // summary: + // Returns a css color string in rgb(a) representation + // example: + // | var c = new dojo.Color("#FFF").toCss(); + // | console.log(c); // rgb('255','255','255') + var t = this, rgb = t.r + ", " + t.g + ", " + t.b; + return (includeAlpha ? "rgba(" + rgb + ", " + t.a : "rgb(" + rgb) + ")"; // String + }, + toString: function(){ + // summary: + // Returns a visual representation of the color + return this.toCss(true); // String + } + }); + + dojo.blendColors = function( + /*dojo.Color*/ start, + /*dojo.Color*/ end, + /*Number*/ weight, + /*dojo.Color?*/ obj + ){ + // summary: + // Blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend, + // can reuse a previously allocated dojo.Color object for the result + var t = obj || new d.Color(); + d.forEach(["r", "g", "b", "a"], function(x){ + t[x] = start[x] + (end[x] - start[x]) * weight; + if(x != "a"){ t[x] = Math.round(t[x]); } + }); + return t.sanitize(); // dojo.Color + }; + + dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){ + // summary: + // Returns a `dojo.Color` instance from a string of the form + // "rgb(...)" or "rgba(...)". Optionally accepts a `dojo.Color` + // object to update with the parsed value and return instead of + // creating a new object. + // returns: + // A dojo.Color object. If obj is passed, it will be the return value. + var m = color.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/); + return m && dojo.colorFromArray(m[1].split(/\s*,\s*/), obj); // dojo.Color + }; + + dojo.colorFromHex = function(/*String*/ color, /*dojo.Color?*/ obj){ + // summary: + // Converts a hex string with a '#' prefix to a color object. + // Supports 12-bit #rgb shorthand. Optionally accepts a + // `dojo.Color` object to update with the parsed value. + // + // returns: + // A dojo.Color object. If obj is passed, it will be the return value. + // + // example: + // | var thing = dojo.colorFromHex("#ededed"); // grey, longhand + // + // example: + // | var thing = dojo.colorFromHex("#000"); // black, shorthand + var t = obj || new d.Color(), + bits = (color.length == 4) ? 4 : 8, + mask = (1 << bits) - 1; + color = Number("0x" + color.substr(1)); + if(isNaN(color)){ + return null; // dojo.Color + } + d.forEach(["b", "g", "r"], function(x){ + var c = color & mask; + color >>= bits; + t[x] = bits == 4 ? 17 * c : c; + }); + t.a = 1; + return t; // dojo.Color + }; + + dojo.colorFromArray = function(/*Array*/ a, /*dojo.Color?*/ obj){ + // summary: + // Builds a `dojo.Color` from a 3 or 4 element array, mapping each + // element in sequence to the rgb(a) values of the color. + // example: + // | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha + // returns: + // A dojo.Color object. If obj is passed, it will be the return value. + var t = obj || new d.Color(); + t._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3])); + if(isNaN(t.a)){ t.a = 1; } + return t.sanitize(); // dojo.Color + }; + + dojo.colorFromString = function(/*String*/ str, /*dojo.Color?*/ obj){ + // summary: + // Parses `str` for a color value. Accepts hex, rgb, and rgba + // style color values. + // description: + // Acceptable input values for str may include arrays of any form + // accepted by dojo.colorFromArray, hex strings such as "#aaaaaa", or + // rgb or rgba strings such as "rgb(133, 200, 16)" or "rgba(10, 10, + // 10, 50)" + // returns: + // A dojo.Color object. If obj is passed, it will be the return value. + var a = d.Color.named[str]; + return a && d.colorFromArray(a, obj) || d.colorFromRgb(str, obj) || d.colorFromHex(str, obj); + }; +})(); + +} + +if(!dojo._hasResource["dojo._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base"] = true; +dojo.provide("dojo._base"); + +} + +if(!dojo._hasResource["dojo._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.window"] = true; +dojo.provide("dojo._base.window"); + +/*===== +dojo.doc = { + // summary: + // Alias for the current document. 'dojo.doc' can be modified + // for temporary context shifting. Also see dojo.withDoc(). + // description: + // Refer to dojo.doc rather + // than referring to 'window.document' to ensure your code runs + // correctly in managed contexts. + // example: + // | n.appendChild(dojo.doc.createElement('div')); +} +=====*/ +dojo.doc = window["document"] || null; + +dojo.body = function(){ + // summary: + // Return the body element of the document + // return the body object associated with dojo.doc + // example: + // | dojo.body().appendChild(dojo.doc.createElement('div')); + + // Note: document.body is not defined for a strict xhtml document + // Would like to memoize this, but dojo.doc can change vi dojo.withDoc(). + return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node +} + +dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){ + // summary: + // changes the behavior of many core Dojo functions that deal with + // namespace and DOM lookup, changing them to work in a new global + // context (e.g., an iframe). The varibles dojo.global and dojo.doc + // are modified as a result of calling this function and the result of + // `dojo.body()` likewise differs. + dojo.global = globalObject; + dojo.doc = globalDocument; +}; + +dojo.withGlobal = function( /*Object*/globalObject, + /*Function*/callback, + /*Object?*/thisObject, + /*Array?*/cbArguments){ + // summary: + // Invoke callback with globalObject as dojo.global and + // globalObject.document as dojo.doc. + // description: + // Invoke callback with globalObject as dojo.global and + // globalObject.document as dojo.doc. If provided, globalObject + // will be executed in the context of object thisObject + // When callback() returns or throws an error, the dojo.global + // and dojo.doc will be restored to its previous state. + + var oldGlob = dojo.global; + try{ + dojo.global = globalObject; + return dojo.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments); + }finally{ + dojo.global = oldGlob; + } +} + +dojo.withDoc = function( /*DocumentElement*/documentObject, + /*Function*/callback, + /*Object?*/thisObject, + /*Array?*/cbArguments){ + // summary: + // Invoke callback with documentObject as dojo.doc. + // description: + // Invoke callback with documentObject as dojo.doc. If provided, + // callback will be executed in the context of object thisObject + // When callback() returns or throws an error, the dojo.doc will + // be restored to its previous state. + + var oldDoc = dojo.doc, + oldLtr = dojo._bodyLtr, + oldQ = dojo.isQuirks; + + try{ + dojo.doc = documentObject; + delete dojo._bodyLtr; // uncache + dojo.isQuirks = dojo.doc.compatMode == "BackCompat"; // no need to check for QuirksMode which was Opera 7 only + + if(thisObject && typeof callback == "string"){ + callback = thisObject[callback]; + } + + return callback.apply(thisObject, cbArguments || []); + }finally{ + dojo.doc = oldDoc; + delete dojo._bodyLtr; // in case it was undefined originally, and set to true/false by the alternate document + if(oldLtr !== undefined){ dojo._bodyLtr = oldLtr; } + dojo.isQuirks = oldQ; + } +}; + +} + +if(!dojo._hasResource["dojo._base.event"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.event"] = true; +dojo.provide("dojo._base.event"); + +// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA + +(function(){ + // DOM event listener machinery + var del = (dojo._event_listener = { + add: function(/*DOMNode*/ node, /*String*/ name, /*Function*/ fp){ + if(!node){return;} + name = del._normalizeEventName(name); + fp = del._fixCallback(name, fp); + var oname = name; + if( + !dojo.isIE && + (name == "mouseenter" || name == "mouseleave") + ){ + var ofp = fp; + //oname = name; + name = (name == "mouseenter") ? "mouseover" : "mouseout"; + fp = function(e){ + if(!dojo.isDescendant(e.relatedTarget, node)){ + // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable. + return ofp.call(this, e); + } + } + } + node.addEventListener(name, fp, false); + return fp; /*Handle*/ + }, + remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ + // summary: + // clobbers the listener from the node + // node: + // DOM node to attach the event to + // event: + // the name of the handler to remove the function from + // handle: + // the handle returned from add + if(node){ + event = del._normalizeEventName(event); + if(!dojo.isIE && (event == "mouseenter" || event == "mouseleave")){ + event = (event == "mouseenter") ? "mouseover" : "mouseout"; + } + + node.removeEventListener(event, handle, false); + } + }, + _normalizeEventName: function(/*String*/ name){ + // Generally, name should be lower case, unless it is special + // somehow (e.g. a Mozilla DOM event). + // Remove 'on'. + return name.slice(0,2) =="on" ? name.slice(2) : name; + }, + _fixCallback: function(/*String*/ name, fp){ + // By default, we only invoke _fixEvent for 'keypress' + // If code is added to _fixEvent for other events, we have + // to revisit this optimization. + // This also applies to _fixEvent overrides for Safari and Opera + // below. + return name != "keypress" ? fp : function(e){ return fp.call(this, del._fixEvent(e, this)); }; + }, + _fixEvent: function(evt, sender){ + // _fixCallback only attaches us to keypress. + // Switch on evt.type anyway because we might + // be called directly from dojo.fixEvent. + switch(evt.type){ + case "keypress": + del._setKeyChar(evt); + break; + } + return evt; + }, + _setKeyChar: function(evt){ + evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : ''; + evt.charOrCode = evt.keyChar || evt.keyCode; + }, + // For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE + // we map those virtual key codes to ascii here + // not valid for all (non-US) keyboards, so maybe we shouldn't bother + _punctMap: { + 106:42, + 111:47, + 186:59, + 187:43, + 188:44, + 189:45, + 190:46, + 191:47, + 192:96, + 219:91, + 220:92, + 221:93, + 222:39 + } + }); + + // DOM events + + dojo.fixEvent = function(/*Event*/ evt, /*DOMNode*/ sender){ + // summary: + // normalizes properties on the event object including event + // bubbling methods, keystroke normalization, and x/y positions + // evt: Event + // native event object + // sender: DOMNode + // node to treat as "currentTarget" + return del._fixEvent(evt, sender); + } + + dojo.stopEvent = function(/*Event*/ evt){ + // summary: + // prevents propagation and clobbers the default action of the + // passed event + // evt: Event + // The event object. If omitted, window.event is used on IE. + evt.preventDefault(); + evt.stopPropagation(); + // NOTE: below, this method is overridden for IE + } + + // the default listener to use on dontFix nodes, overriden for IE + var node_listener = dojo._listener; + + // Unify connect and event listeners + dojo._connect = function(obj, event, context, method, dontFix){ + // FIXME: need a more strict test + var isNode = obj && (obj.nodeType||obj.attachEvent||obj.addEventListener); + // choose one of three listener options: raw (connect.js), DOM event on a Node, custom event on a Node + // we need the third option to provide leak prevention on broken browsers (IE) + var lid = isNode ? (dontFix ? 2 : 1) : 0, l = [dojo._listener, del, node_listener][lid]; + // create a listener + var h = l.add(obj, event, dojo.hitch(context, method)); + // formerly, the disconnect package contained "l" directly, but if client code + // leaks the disconnect package (by connecting it to a node), referencing "l" + // compounds the problem. + // instead we return a listener id, which requires custom _disconnect below. + // return disconnect package + return [ obj, event, h, lid ]; + } + + dojo._disconnect = function(obj, event, handle, listener){ + ([dojo._listener, del, node_listener][listener]).remove(obj, event, handle); + } + + // Constants + + // Public: client code should test + // keyCode against these named constants, as the + // actual codes can vary by browser. + dojo.keys = { + // summary: + // Definitions for common key values + BACKSPACE: 8, + TAB: 9, + CLEAR: 12, + ENTER: 13, + SHIFT: 16, + CTRL: 17, + ALT: 18, + META: dojo.isSafari ? 91 : 224, // the apple key on macs + PAUSE: 19, + CAPS_LOCK: 20, + ESCAPE: 27, + SPACE: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + LEFT_ARROW: 37, + UP_ARROW: 38, + RIGHT_ARROW: 39, + DOWN_ARROW: 40, + INSERT: 45, + DELETE: 46, + HELP: 47, + LEFT_WINDOW: 91, + RIGHT_WINDOW: 92, + SELECT: 93, + NUMPAD_0: 96, + NUMPAD_1: 97, + NUMPAD_2: 98, + NUMPAD_3: 99, + NUMPAD_4: 100, + NUMPAD_5: 101, + NUMPAD_6: 102, + NUMPAD_7: 103, + NUMPAD_8: 104, + NUMPAD_9: 105, + NUMPAD_MULTIPLY: 106, + NUMPAD_PLUS: 107, + NUMPAD_ENTER: 108, + NUMPAD_MINUS: 109, + NUMPAD_PERIOD: 110, + NUMPAD_DIVIDE: 111, + F1: 112, + F2: 113, + F3: 114, + F4: 115, + F5: 116, + F6: 117, + F7: 118, + F8: 119, + F9: 120, + F10: 121, + F11: 122, + F12: 123, + F13: 124, + F14: 125, + F15: 126, + NUM_LOCK: 144, + SCROLL_LOCK: 145, + // virtual key mapping + copyKey: dojo.isMac && !dojo.isAIR ? (dojo.isSafari ? 91 : 224 ) : 17 + }; + + var evtCopyKey = dojo.isMac ? "metaKey" : "ctrlKey"; + + dojo.isCopyKey = function(e){ + // summary: + // Checks an event for the copy key (meta on Mac, and ctrl anywhere else) + // e: Event + // Event object to examine + return e[evtCopyKey]; // Boolean + }; + + // Public: decoding mouse buttons from events + +/*===== + dojo.mouseButtons = { + // LEFT: Number + // Numeric value of the left mouse button for the platform. + LEFT: 0, + // MIDDLE: Number + // Numeric value of the middle mouse button for the platform. + MIDDLE: 1, + // RIGHT: Number + // Numeric value of the right mouse button for the platform. + RIGHT: 2, + + isButton: function(e, button){ + // summary: + // Checks an event object for a pressed button + // e: Event + // Event object to examine + // button: Number + // The button value (example: dojo.mouseButton.LEFT) + return e.button == button; // Boolean + }, + isLeft: function(e){ + // summary: + // Checks an event object for the pressed left button + // e: Event + // Event object to examine + return e.button == 0; // Boolean + }, + isMiddle: function(e){ + // summary: + // Checks an event object for the pressed middle button + // e: Event + // Event object to examine + return e.button == 1; // Boolean + }, + isRight: function(e){ + // summary: + // Checks an event object for the pressed right button + // e: Event + // Event object to examine + return e.button == 2; // Boolean + } + }; +=====*/ + + if(dojo.isIE){ + dojo.mouseButtons = { + LEFT: 1, + MIDDLE: 4, + RIGHT: 2, + // helper functions + isButton: function(e, button){ return e.button & button; }, + isLeft: function(e){ return e.button & 1; }, + isMiddle: function(e){ return e.button & 4; }, + isRight: function(e){ return e.button & 2; } + }; + }else{ + dojo.mouseButtons = { + LEFT: 0, + MIDDLE: 1, + RIGHT: 2, + // helper functions + isButton: function(e, button){ return e.button == button; }, + isLeft: function(e){ return e.button == 0; }, + isMiddle: function(e){ return e.button == 1; }, + isRight: function(e){ return e.button == 2; } + }; + } + + // IE event normalization + if(dojo.isIE){ + var _trySetKeyCode = function(e, code){ + try{ + // squelch errors when keyCode is read-only + // (e.g. if keyCode is ctrl or shift) + return (e.keyCode = code); + }catch(e){ + return 0; + } + } + + // by default, use the standard listener + var iel = dojo._listener; + var listenersName = (dojo._ieListenersName = "_" + dojo._scopeName + "_listeners"); + // dispatcher tracking property + if(!dojo.config._allow_leaks){ + // custom listener that handles leak protection for DOM events + node_listener = iel = dojo._ie_listener = { + // support handler indirection: event handler functions are + // referenced here. Event dispatchers hold only indices. + handlers: [], + // add a listener to an object + add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ + source = source || dojo.global; + var f = source[method]; + if(!f||!f[listenersName]){ + var d = dojo._getIeDispatcher(); + // original target function is special + d.target = f && (ieh.push(f) - 1); + // dispatcher holds a list of indices into handlers table + d[listenersName] = []; + // redirect source to dispatcher + f = source[method] = d; + } + return f[listenersName].push(ieh.push(listener) - 1) ; /*Handle*/ + }, + // remove a listener from an object + remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){ + var f = (source||dojo.global)[method], l = f && f[listenersName]; + if(f && l && handle--){ + delete ieh[l[handle]]; + delete l[handle]; + } + } + }; + // alias used above + var ieh = iel.handlers; + } + + dojo.mixin(del, { + add: function(/*DOMNode*/ node, /*String*/ event, /*Function*/ fp){ + if(!node){return;} // undefined + event = del._normalizeEventName(event); + if(event=="onkeypress"){ + // we need to listen to onkeydown to synthesize + // keypress events that otherwise won't fire + // on IE + var kd = node.onkeydown; + if(!kd || !kd[listenersName] || !kd._stealthKeydownHandle){ + var h = del.add(node, "onkeydown", del._stealthKeyDown); + kd = node.onkeydown; + kd._stealthKeydownHandle = h; + kd._stealthKeydownRefs = 1; + }else{ + kd._stealthKeydownRefs++; + } + } + return iel.add(node, event, del._fixCallback(fp)); + }, + remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ + event = del._normalizeEventName(event); + iel.remove(node, event, handle); + if(event=="onkeypress"){ + var kd = node.onkeydown; + if(--kd._stealthKeydownRefs <= 0){ + iel.remove(node, "onkeydown", kd._stealthKeydownHandle); + delete kd._stealthKeydownHandle; + } + } + }, + _normalizeEventName: function(/*String*/ eventName){ + // Generally, eventName should be lower case, unless it is + // special somehow (e.g. a Mozilla event) + // ensure 'on' + return eventName.slice(0,2) != "on" ? "on" + eventName : eventName; + }, + _nop: function(){}, + _fixEvent: function(/*Event*/ evt, /*DOMNode*/ sender){ + // summary: + // normalizes properties on the event object including event + // bubbling methods, keystroke normalization, and x/y positions + // evt: + // native event object + // sender: + // node to treat as "currentTarget" + if(!evt){ + var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; + evt = w.event; + } + if(!evt){return(evt);} + evt.target = evt.srcElement; + evt.currentTarget = (sender || evt.srcElement); + evt.layerX = evt.offsetX; + evt.layerY = evt.offsetY; + // FIXME: scroll position query is duped from dojo.html to + // avoid dependency on that entire module. Now that HTML is in + // Base, we should convert back to something similar there. + var se = evt.srcElement, doc = (se && se.ownerDocument) || document; + // DO NOT replace the following to use dojo.body(), in IE, document.documentElement should be used + // here rather than document.body + var docBody = ((dojo.isIE < 6) || (doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement; + var offset = dojo._getIeDocumentElementOffset(); + evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; + evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y; + if(evt.type == "mouseover"){ + evt.relatedTarget = evt.fromElement; + } + if(evt.type == "mouseout"){ + evt.relatedTarget = evt.toElement; + } + evt.stopPropagation = del._stopPropagation; + evt.preventDefault = del._preventDefault; + return del._fixKeys(evt); + }, + _fixKeys: function(evt){ + switch(evt.type){ + case "keypress": + var c = ("charCode" in evt ? evt.charCode : evt.keyCode); + if (c==10){ + // CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla + c=0; + evt.keyCode = 13; + }else if(c==13||c==27){ + c=0; // Mozilla considers ENTER and ESC non-printable + }else if(c==3){ + c=99; // Mozilla maps CTRL-BREAK to CTRL-c + } + // Mozilla sets keyCode to 0 when there is a charCode + // but that stops the event on IE. + evt.charCode = c; + del._setKeyChar(evt); + break; + } + return evt; + }, + _stealthKeyDown: function(evt){ + // IE doesn't fire keypress for most non-printable characters. + // other browsers do, we simulate it here. + var kp = evt.currentTarget.onkeypress; + // only works if kp exists and is a dispatcher + if(!kp || !kp[listenersName]){ return; } + // munge key/charCode + var k=evt.keyCode; + // These are Windows Virtual Key Codes + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp + var unprintable = k!=13 && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222); + // synthesize keypress for most unprintables and CTRL-keys + if(unprintable||evt.ctrlKey){ + var c = unprintable ? 0 : k; + if(evt.ctrlKey){ + if(k==3 || k==13){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ + c -= 48; // map CTRL-[numpad 0-9] to ASCII + }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ + c += 32; // map CTRL-[A-Z] to lowercase + }else{ + c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII + } + } + // simulate a keypress event + var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); + kp.call(evt.currentTarget, faux); + evt.cancelBubble = faux.cancelBubble; + evt.returnValue = faux.returnValue; + _trySetKeyCode(evt, faux.keyCode); + } + }, + // Called in Event scope + _stopPropagation: function(){ + this.cancelBubble = true; + }, + _preventDefault: function(){ + // Setting keyCode to 0 is the only way to prevent certain keypresses (namely + // ctrl-combinations that correspond to menu accelerator keys). + // Otoh, it prevents upstream listeners from getting this information + // Try to split the difference here by clobbering keyCode only for ctrl + // combinations. If you still need to access the key upstream, bubbledKeyCode is + // provided as a workaround. + this.bubbledKeyCode = this.keyCode; + if(this.ctrlKey){_trySetKeyCode(this, 0);} + this.returnValue = false; + } + }); + + // override stopEvent for IE + dojo.stopEvent = function(evt){ + evt = evt || window.event; + del._stopPropagation.call(evt); + del._preventDefault.call(evt); + } + } + + del._synthesizeEvent = function(evt, props){ + var faux = dojo.mixin({}, evt, props); + del._setKeyChar(faux); + // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); + // but it throws an error when preventDefault is invoked on Safari + // does Event.preventDefault not support "apply" on Safari? + faux.preventDefault = function(){ evt.preventDefault(); }; + faux.stopPropagation = function(){ evt.stopPropagation(); }; + return faux; + } + + // Opera event normalization + if(dojo.isOpera){ + dojo.mixin(del, { + _fixEvent: function(evt, sender){ + switch(evt.type){ + case "keypress": + var c = evt.which; + if(c==3){ + c=99; // Mozilla maps CTRL-BREAK to CTRL-c + } + // can't trap some keys at all, like INSERT and DELETE + // there is no differentiating info between DELETE and ".", or INSERT and "-" + c = c<41 && !evt.shiftKey ? 0 : c; + if(evt.ctrlKey && !evt.shiftKey && c>=65 && c<=90){ + // lowercase CTRL-[A-Z] keys + c += 32; + } + return del._synthesizeEvent(evt, { charCode: c }); + } + return evt; + } + }); + } + + // Webkit event normalization + if(dojo.isWebKit){ + del._add = del.add; + del._remove = del.remove; + + dojo.mixin(del, { + add: function(/*DOMNode*/ node, /*String*/ event, /*Function*/ fp){ + if(!node){return;} // undefined + var handle = del._add(node, event, fp); + if(del._normalizeEventName(event) == "keypress"){ + // we need to listen to onkeydown to synthesize + // keypress events that otherwise won't fire + // in Safari 3.1+: https://lists.webkit.org/pipermail/webkit-dev/2007-December/002992.html + handle._stealthKeyDownHandle = del._add(node, "keydown", function(evt){ + //A variation on the IE _stealthKeydown function + //Synthesize an onkeypress event, but only for unprintable characters. + var k=evt.keyCode; + // These are Windows Virtual Key Codes + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp + var unprintable = k!=13 && k!=32 && (k<48 || k>90) && (k<96 || k>111) && (k<186 || k>192) && (k<219 || k>222); + // synthesize keypress for most unprintables and CTRL-keys + if(unprintable || evt.ctrlKey){ + var c = unprintable ? 0 : k; + if(evt.ctrlKey){ + if(k==3 || k==13){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ + c -= 48; // map CTRL-[numpad 0-9] to ASCII + }else if(!evt.shiftKey && c>=65 && c<=90){ + c += 32; // map CTRL-[A-Z] to lowercase + }else{ + c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII + } + } + // simulate a keypress event + var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); + fp.call(evt.currentTarget, faux); + } + }); + } + return handle; /*Handle*/ + }, + + remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ + if(node){ + if(handle._stealthKeyDownHandle){ + del._remove(node, "keydown", handle._stealthKeyDownHandle); + } + del._remove(node, event, handle); + } + }, + _fixEvent: function(evt, sender){ + switch(evt.type){ + case "keypress": + if(evt.faux){ return evt; } + var c = evt.charCode; + c = c>=32 ? c : 0; + return del._synthesizeEvent(evt, {charCode: c, faux: true}); + } + return evt; + } + }); + } + })(); + +if(dojo.isIE){ + // keep this out of the closure + // closing over 'iel' or 'ieh' b0rks leak prevention + // ls[i] is an index into the master handler array + dojo._ieDispatcher = function(args, sender){ + var ap = Array.prototype, + h = dojo._ie_listener.handlers, + c = args.callee, + ls = c[dojo._ieListenersName], + t = h[c.target]; + // return value comes from original target function + var r = t && t.apply(sender, args); + // make local copy of listener array so it's immutable during processing + var lls = [].concat(ls); + // invoke listeners after target function + for(var i in lls){ + var f = h[lls[i]]; + if(!(i in ap) && f){ + f.apply(sender, args); + } + } + return r; + } + dojo._getIeDispatcher = function(){ + // ensure the returned function closes over nothing ("new Function" apparently doesn't close) + return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)"); // function + } + // keep this out of the closure to reduce RAM allocation + dojo._event_listener._fixCallback = function(fp){ + var f = dojo._event_listener._fixEvent; + return function(e){ return fp.call(this, f(e, this)); }; + } +} + +} + +if(!dojo._hasResource["dojo._base.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.html"] = true; + +dojo.provide("dojo._base.html"); + +// FIXME: need to add unit tests for all the semi-public methods + +try{ + document.execCommand("BackgroundImageCache", false, true); +}catch(e){ + // sane browsers don't have cache "issues" +} + +// ============================= +// DOM Functions +// ============================= + +/*===== +dojo.byId = function(id, doc){ + // summary: + // Returns DOM node with matching `id` attribute or `null` + // if not found. If `id` is a DomNode, this function is a no-op. + // + // id: String|DOMNode + // A string to match an HTML id attribute or a reference to a DOM Node + // + // doc: Document? + // Document to work in. Defaults to the current value of + // dojo.doc. Can be used to retrieve + // node references from other documents. + // + // example: + // Look up a node by ID: + // | var n = dojo.byId("foo"); + // + // example: + // Check if a node exists, and use it. + // | var n = dojo.byId("bar"); + // | if(n){ doStuff() ... } + // + // example: + // Allow string or DomNode references to be passed to a custom function: + // | var foo = function(nodeOrId){ + // | nodeOrId = dojo.byId(nodeOrId); + // | // ... more stuff + // | } +=====*/ + +if(dojo.isIE || dojo.isOpera){ + dojo.byId = function(id, doc){ + if(typeof id != "string"){ + return id; + } + var _d = doc || dojo.doc, te = _d.getElementById(id); + // attributes.id.value is better than just id in case the + // user has a name=id inside a form + if(te && (te.attributes.id.value == id || te.id == id)){ + return te; + }else{ + var eles = _d.all[id]; + if(!eles || eles.nodeName){ + eles = [eles]; + } + // if more than 1, choose first with the correct id + var i=0; + while((te=eles[i++])){ + if((te.attributes && te.attributes.id && te.attributes.id.value == id) + || te.id == id){ + return te; + } + } + } + }; +}else{ + dojo.byId = function(id, doc){ + // inline'd type check + return (typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id; // DomNode + }; +} +/*===== +}; +=====*/ + +(function(){ + var d = dojo; + var byId = d.byId; + + var _destroyContainer = null, + _destroyDoc; + d.addOnWindowUnload(function(){ + _destroyContainer = null; //prevent IE leak + }); + +/*===== + dojo._destroyElement = function(node){ + // summary: + // Existing alias for `dojo.destroy`. Deprecated, will be removed + // in 2.0 + } +=====*/ + dojo._destroyElement = dojo.destroy = function(/*String|DomNode*/node){ + // summary: + // Removes a node from its parent, clobbering it and all of its + // children. + // + // description: + // Removes a node from its parent, clobbering it and all of its + // children. Function only works with DomNodes, and returns nothing. + // + // node: + // A String ID or DomNode reference of the element to be destroyed + // + // example: + // Destroy a node byId: + // | dojo.destroy("someId"); + // + // example: + // Destroy all nodes in a list by reference: + // | dojo.query(".someNode").forEach(dojo.destroy); + + node = byId(node); + try{ + var doc = node.ownerDocument; + // cannot use _destroyContainer.ownerDocument since this can throw an exception on IE + if(!_destroyContainer || _destroyDoc != doc){ + _destroyContainer = doc.createElement("div"); + _destroyDoc = doc; + } + _destroyContainer.appendChild(node.parentNode ? node.parentNode.removeChild(node) : node); + // NOTE: see http://trac.dojotoolkit.org/ticket/2931. This may be a bug and not a feature + _destroyContainer.innerHTML = ""; + }catch(e){ + /* squelch */ + } + }; + + dojo.isDescendant = function(/*DomNode|String*/node, /*DomNode|String*/ancestor){ + // summary: + // Returns true if node is a descendant of ancestor + // node: string id or node reference to test + // ancestor: string id or node reference of potential parent to test against + // + // example: + // Test is node id="bar" is a descendant of node id="foo" + // | if(dojo.isDescendant("bar", "foo")){ ... } + try{ + node = byId(node); + ancestor = byId(ancestor); + while(node){ + if(node == ancestor){ + return true; // Boolean + } + node = node.parentNode; + } + }catch(e){ /* squelch, return false */ } + return false; // Boolean + }; + + dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){ + // summary: + // Enable or disable selection on a node + // node: + // id or reference to node + // selectable: + // state to put the node in. false indicates unselectable, true + // allows selection. + // example: + // Make the node id="bar" unselectable + // | dojo.setSelectable("bar"); + // example: + // Make the node id="bar" selectable + // | dojo.setSelectable("bar", true); + node = byId(node); + if(d.isMozilla){ + node.style.MozUserSelect = selectable ? "" : "none"; + }else if(d.isKhtml || d.isWebKit){ + node.style.KhtmlUserSelect = selectable ? "auto" : "none"; + }else if(d.isIE){ + var v = (node.unselectable = selectable ? "" : "on"); + d.query("*", node).forEach("item.unselectable = '"+v+"'"); + } + //FIXME: else? Opera? + }; + + var _insertBefore = function(/*DomNode*/node, /*DomNode*/ref){ + var parent = ref.parentNode; + if(parent){ + parent.insertBefore(node, ref); + } + }; + + var _insertAfter = function(/*DomNode*/node, /*DomNode*/ref){ + // summary: + // Try to insert node after ref + var parent = ref.parentNode; + if(parent){ + if(parent.lastChild == ref){ + parent.appendChild(node); + }else{ + parent.insertBefore(node, ref.nextSibling); + } + } + }; + + dojo.place = function(node, refNode, position){ + // summary: + // Attempt to insert node into the DOM, choosing from various positioning options. + // Returns the first argument resolved to a DOM node. + // + // node: String|DomNode + // id or node reference, or HTML fragment starting with "<" to place relative to refNode + // + // refNode: String|DomNode + // id or node reference to use as basis for placement + // + // position: String|Number? + // string noting the position of node relative to refNode or a + // number indicating the location in the childNodes collection of refNode. + // Accepted string values are: + // | * before + // | * after + // | * replace + // | * only + // | * first + // | * last + // "first" and "last" indicate positions as children of refNode, "replace" replaces refNode, + // "only" replaces all children. position defaults to "last" if not specified + // + // returns: DomNode + // Returned values is the first argument resolved to a DOM node. + // + // .place() is also a method of `dojo.NodeList`, allowing `dojo.query` node lookups. + // + // example: + // Place a node by string id as the last child of another node by string id: + // | dojo.place("someNode", "anotherNode"); + // + // example: + // Place a node by string id before another node by string id + // | dojo.place("someNode", "anotherNode", "before"); + // + // example: + // Create a Node, and place it in the body element (last child): + // | dojo.place("
    ", dojo.body()); + // + // example: + // Put a new LI as the first child of a list by id: + // | dojo.place("
  • ", "someUl", "first"); + + refNode = byId(refNode); + if(typeof node == "string"){ // inline'd type check + node = node.charAt(0) == "<" ? d._toDom(node, refNode.ownerDocument) : byId(node); + } + if(typeof position == "number"){ // inline'd type check + var cn = refNode.childNodes; + if(!cn.length || cn.length <= position){ + refNode.appendChild(node); + }else{ + _insertBefore(node, cn[position < 0 ? 0 : position]); + } + }else{ + switch(position){ + case "before": + _insertBefore(node, refNode); + break; + case "after": + _insertAfter(node, refNode); + break; + case "replace": + refNode.parentNode.replaceChild(node, refNode); + break; + case "only": + d.empty(refNode); + refNode.appendChild(node); + break; + case "first": + if(refNode.firstChild){ + _insertBefore(node, refNode.firstChild); + break; + } + // else fallthrough... + default: // aka: last + refNode.appendChild(node); + } + } + return node; // DomNode + } + + // Box functions will assume this model. + // On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode. + // Can be set to change behavior of box setters. + + // can be either: + // "border-box" + // "content-box" (default) + dojo.boxModel = "content-box"; + + // We punt per-node box mode testing completely. + // If anybody cares, we can provide an additional (optional) unit + // that overrides existing code to include per-node box sensitivity. + + // Opera documentation claims that Opera 9 uses border-box in BackCompat mode. + // but experiments (Opera 9.10.8679 on Windows Vista) indicate that it actually continues to use content-box. + // IIRC, earlier versions of Opera did in fact use border-box. + // Opera guys, this is really confusing. Opera being broken in quirks mode is not our fault. + + if(d.isIE /*|| dojo.isOpera*/){ + // client code may have to adjust if compatMode varies across iframes + d.boxModel = document.compatMode == "BackCompat" ? "border-box" : "content-box"; + } + + // ============================= + // Style Functions + // ============================= + + // getComputedStyle drives most of the style code. + // Wherever possible, reuse the returned object. + // + // API functions below that need to access computed styles accept an + // optional computedStyle parameter. + // If this parameter is omitted, the functions will call getComputedStyle themselves. + // This way, calling code can access computedStyle once, and then pass the reference to + // multiple API functions. + +/*===== + dojo.getComputedStyle = function(node){ + // summary: + // Returns a "computed style" object. + // + // description: + // Gets a "computed style" object which can be used to gather + // information about the current state of the rendered node. + // + // Note that this may behave differently on different browsers. + // Values may have different formats and value encodings across + // browsers. + // + // Note also that this method is expensive. Wherever possible, + // reuse the returned object. + // + // Use the dojo.style() method for more consistent (pixelized) + // return values. + // + // node: DOMNode + // A reference to a DOM node. Does NOT support taking an + // ID string for speed reasons. + // example: + // | dojo.getComputedStyle(dojo.byId('foo')).borderWidth; + // + // example: + // Reusing the returned object, avoiding multiple lookups: + // | var cs = dojo.getComputedStyle(dojo.byId("someNode")); + // | var w = cs.width, h = cs.height; + return; // CSS2Properties + } +=====*/ + + // Although we normally eschew argument validation at this + // level, here we test argument 'node' for (duck)type, + // by testing nodeType, ecause 'document' is the 'parentNode' of 'body' + // it is frequently sent to this function even + // though it is not Element. + var gcs; + if(d.isWebKit){ + gcs = function(/*DomNode*/node){ + var s; + if(node.nodeType == 1){ + var dv = node.ownerDocument.defaultView; + s = dv.getComputedStyle(node, null); + if(!s && node.style){ + node.style.display = ""; + s = dv.getComputedStyle(node, null); + } + } + return s || {}; + }; + }else if(d.isIE){ + gcs = function(node){ + // IE (as of 7) doesn't expose Element like sane browsers + return node.nodeType == 1 /* ELEMENT_NODE*/ ? node.currentStyle : {}; + }; + }else{ + gcs = function(node){ + return node.nodeType == 1 ? + node.ownerDocument.defaultView.getComputedStyle(node, null) : {}; + }; + } + dojo.getComputedStyle = gcs; + + if(!d.isIE){ + d._toPixelValue = function(element, value){ + // style values can be floats, client code may want + // to round for integer pixels. + return parseFloat(value) || 0; + }; + }else{ + d._toPixelValue = function(element, avalue){ + if(!avalue){ return 0; } + // on IE7, medium is usually 4 pixels + if(avalue == "medium"){ return 4; } + // style values can be floats, client code may + // want to round this value for integer pixels. + if(avalue.slice && avalue.slice(-2) == 'px'){ return parseFloat(avalue); } + with(element){ + var sLeft = style.left; + var rsLeft = runtimeStyle.left; + runtimeStyle.left = currentStyle.left; + try{ + // 'avalue' may be incompatible with style.left, which can cause IE to throw + // this has been observed for border widths using "thin", "medium", "thick" constants + // those particular constants could be trapped by a lookup + // but perhaps there are more + style.left = avalue; + avalue = style.pixelLeft; + }catch(e){ + avalue = 0; + } + style.left = sLeft; + runtimeStyle.left = rsLeft; + } + return avalue; + } + } + var px = d._toPixelValue; + + // FIXME: there opacity quirks on FF that we haven't ported over. Hrm. + /*===== + dojo._getOpacity = function(node){ + // summary: + // Returns the current opacity of the passed node as a + // floating-point value between 0 and 1. + // node: DomNode + // a reference to a DOM node. Does NOT support taking an + // ID string for speed reasons. + // returns: Number between 0 and 1 + return; // Number + } + =====*/ + + var astr = "DXImageTransform.Microsoft.Alpha"; + var af = function(n, f){ + try{ + return n.filters.item(astr); + }catch(e){ + return f ? {} : null; + } + }; + + dojo._getOpacity = + d.isIE ? function(node){ + try{ + return af(node).Opacity / 100; // Number + }catch(e){ + return 1; // Number + } + } : + function(node){ + return gcs(node).opacity; + }; + + /*===== + dojo._setOpacity = function(node, opacity){ + // summary: + // set the opacity of the passed node portably. Returns the + // new opacity of the node. + // node: DOMNode + // a reference to a DOM node. Does NOT support taking an + // ID string for performance reasons. + // opacity: Number + // A Number between 0 and 1. 0 specifies transparent. + // returns: Number between 0 and 1 + return; // Number + } + =====*/ + + dojo._setOpacity = + d.isIE ? function(/*DomNode*/node, /*Number*/opacity){ + var ov = opacity * 100, opaque = opacity == 1; + node.style.zoom = opaque ? "" : 1; + + if(!af(node)){ + if(opaque){ + return opacity; + } + node.style.filter += " progid:" + astr + "(Opacity=" + ov + ")"; + }else{ + af(node, 1).Opacity = ov; + } + + // on IE7 Alpha(Filter opacity=100) makes text look fuzzy so disable it altogether (bug #2661), + //but still update the opacity value so we can get a correct reading if it is read later. + af(node, 1).Enabled = !opaque; + + if(node.nodeName.toLowerCase() == "tr"){ + d.query("> td", node).forEach(function(i){ + d._setOpacity(i, opacity); + }); + } + return opacity; + } : + function(node, opacity){ + return node.style.opacity = opacity; + }; + + var _pixelNamesCache = { + left: true, top: true + }; + var _pixelRegExp = /margin|padding|width|height|max|min|offset/; // |border + var _toStyleValue = function(node, type, value){ + type = type.toLowerCase(); // FIXME: should we really be doing string case conversion here? Should we cache it? Need to profile! + if(d.isIE){ + if(value == "auto"){ + if(type == "height"){ return node.offsetHeight; } + if(type == "width"){ return node.offsetWidth; } + } + if(type == "fontweight"){ + switch(value){ + case 700: return "bold"; + case 400: + default: return "normal"; + } + } + } + if(!(type in _pixelNamesCache)){ + _pixelNamesCache[type] = _pixelRegExp.test(type); + } + return _pixelNamesCache[type] ? px(node, value) : value; + }; + + var _floatStyle = d.isIE ? "styleFloat" : "cssFloat", + _floatAliases = { "cssFloat": _floatStyle, "styleFloat": _floatStyle, "float": _floatStyle } + ; + + // public API + + dojo.style = function( /*DomNode|String*/ node, + /*String?|Object?*/ style, + /*String?*/ value){ + // summary: + // Accesses styles on a node. If 2 arguments are + // passed, acts as a getter. If 3 arguments are passed, acts + // as a setter. + // description: + // Getting the style value uses the computed style for the node, so the value + // will be a calculated value, not just the immediate node.style value. + // Also when getting values, use specific style names, + // like "borderBottomWidth" instead of "border" since compound values like + // "border" are not necessarily reflected as expected. + // If you want to get node dimensions, use `dojo.marginBox()`, + // `dojo.contentBox()` or `dojo.position()`. + // node: + // id or reference to node to get/set style for + // style: + // the style property to set in DOM-accessor format + // ("borderWidth", not "border-width") or an object with key/value + // pairs suitable for setting each property. + // value: + // If passed, sets value on the node for style, handling + // cross-browser concerns. When setting a pixel value, + // be sure to include "px" in the value. For instance, top: "200px". + // Otherwise, in some cases, some browsers will not apply the style. + // example: + // Passing only an ID or node returns the computed style object of + // the node: + // | dojo.style("thinger"); + // example: + // Passing a node and a style property returns the current + // normalized, computed value for that property: + // | dojo.style("thinger", "opacity"); // 1 by default + // + // example: + // Passing a node, a style property, and a value changes the + // current display of the node and returns the new computed value + // | dojo.style("thinger", "opacity", 0.5); // == 0.5 + // + // example: + // Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node: + // | dojo.style("thinger", { + // | "opacity": 0.5, + // | "border": "3px solid black", + // | "height": "300px" + // | }); + // + // example: + // When the CSS style property is hyphenated, the JavaScript property is camelCased. + // font-size becomes fontSize, and so on. + // | dojo.style("thinger",{ + // | fontSize:"14pt", + // | letterSpacing:"1.2em" + // | }); + // + // example: + // dojo.NodeList implements .style() using the same syntax, omitting the "node" parameter, calling + // dojo.style() on every element of the list. See: `dojo.query()` and `dojo.NodeList()` + // | dojo.query(".someClassName").style("visibility","hidden"); + // | // or + // | dojo.query("#baz > div").style({ + // | opacity:0.75, + // | fontSize:"13pt" + // | }); + + var n = byId(node), args = arguments.length, op = (style == "opacity"); + style = _floatAliases[style] || style; + if(args == 3){ + return op ? d._setOpacity(n, value) : n.style[style] = value; /*Number*/ + } + if(args == 2 && op){ + return d._getOpacity(n); + } + var s = gcs(n); + if(args == 2 && typeof style != "string"){ // inline'd type check + for(var x in style){ + d.style(node, x, style[x]); + } + return s; + } + return (args == 1) ? s : _toStyleValue(n, style, s[style] || n.style[style]); /* CSS2Properties||String||Number */ + } + + // ============================= + // Box Functions + // ============================= + + dojo._getPadExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // Returns object with special values specifically useful for node + // fitting. + // description: + // Returns an object with `w`, `h`, `l`, `t` properties: + // | l/t = left/top padding (respectively) + // | w = the total of the left and right padding + // | h = the total of the top and bottom padding + // If 'node' has position, l/t forms the origin for child nodes. + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + l = px(n, s.paddingLeft), + t = px(n, s.paddingTop); + return { + l: l, + t: t, + w: l+px(n, s.paddingRight), + h: t+px(n, s.paddingBottom) + }; + } + + dojo._getBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // returns an object with properties useful for noting the border + // dimensions. + // description: + // * l/t = the sum of left/top border (respectively) + // * w = the sum of the left and right border + // * h = the sum of the top and bottom border + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + ne = "none", + s = computedStyle||gcs(n), + bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0), + bt = (s.borderTopStyle != ne ? px(n, s.borderTopWidth) : 0); + return { + l: bl, + t: bt, + w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0), + h: bt + (s.borderBottomStyle!=ne ? px(n, s.borderBottomWidth) : 0) + }; + } + + dojo._getPadBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // Returns object with properties useful for box fitting with + // regards to padding. + // description: + // * l/t = the sum of left/top padding and left/top border (respectively) + // * w = the sum of the left and right padding and border + // * h = the sum of the top and bottom padding and border + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + p = d._getPadExtents(n, s), + b = d._getBorderExtents(n, s); + return { + l: p.l + b.l, + t: p.t + b.t, + w: p.w + b.w, + h: p.h + b.h + }; + } + + dojo._getMarginExtents = function(n, computedStyle){ + // summary: + // returns object with properties useful for box fitting with + // regards to box margins (i.e., the outer-box). + // + // * l/t = marginLeft, marginTop, respectively + // * w = total width, margin inclusive + // * h = total height, margin inclusive + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + l = px(n, s.marginLeft), + t = px(n, s.marginTop), + r = px(n, s.marginRight), + b = px(n, s.marginBottom); + if(d.isWebKit && (s.position != "absolute")){ + // FIXME: Safari's version of the computed right margin + // is the space between our right edge and the right edge + // of our offsetParent. + // What we are looking for is the actual margin value as + // determined by CSS. + // Hack solution is to assume left/right margins are the same. + r = l; + } + return { + l: l, + t: t, + w: l+r, + h: t+b + }; + } + + // Box getters work in any box context because offsetWidth/clientWidth + // are invariant wrt box context + // + // They do *not* work for display: inline objects that have padding styles + // because the user agent ignores padding (it's bogus styling in any case) + // + // Be careful with IMGs because they are inline or block depending on + // browser and browser mode. + + // Although it would be easier to read, there are not separate versions of + // _getMarginBox for each browser because: + // 1. the branching is not expensive + // 2. factoring the shared code wastes cycles (function call overhead) + // 3. duplicating the shared code wastes bytes + + dojo._getMarginBox = function(/*DomNode*/node, /*Object*/computedStyle){ + // summary: + // returns an object that encodes the width, height, left and top + // positions of the node's margin box. + var s = computedStyle || gcs(node), me = d._getMarginExtents(node, s); + var l = node.offsetLeft - me.l, t = node.offsetTop - me.t, p = node.parentNode; + if(d.isMoz){ + // Mozilla: + // If offsetParent has a computed overflow != visible, the offsetLeft is decreased + // by the parent's border. + // We don't want to compute the parent's style, so instead we examine node's + // computed left/top which is more stable. + var sl = parseFloat(s.left), st = parseFloat(s.top); + if(!isNaN(sl) && !isNaN(st)){ + l = sl, t = st; + }else{ + // If child's computed left/top are not parseable as a number (e.g. "auto"), we + // have no choice but to examine the parent's computed style. + if(p && p.style){ + var pcs = gcs(p); + if(pcs.overflow != "visible"){ + var be = d._getBorderExtents(p, pcs); + l += be.l, t += be.t; + } + } + } + }else if(d.isOpera || (d.isIE > 7 && !d.isQuirks)){ + // On Opera and IE 8, offsetLeft/Top includes the parent's border + if(p){ + be = d._getBorderExtents(p); + l -= be.l; + t -= be.t; + } + } + return { + l: l, + t: t, + w: node.offsetWidth + me.w, + h: node.offsetHeight + me.h + }; + } + + dojo._getContentBox = function(node, computedStyle){ + // summary: + // Returns an object that encodes the width, height, left and top + // positions of the node's content box, irrespective of the + // current box model. + + // clientWidth/Height are important since the automatically account for scrollbars + // fallback to offsetWidth/Height for special cases (see #3378) + var s = computedStyle || gcs(node), + pe = d._getPadExtents(node, s), + be = d._getBorderExtents(node, s), + w = node.clientWidth, + h + ; + if(!w){ + w = node.offsetWidth, h = node.offsetHeight; + }else{ + h = node.clientHeight, be.w = be.h = 0; + } + // On Opera, offsetLeft includes the parent's border + if(d.isOpera){ pe.l += be.l; pe.t += be.t; }; + return { + l: pe.l, + t: pe.t, + w: w - pe.w - be.w, + h: h - pe.h - be.h + }; + } + + dojo._getBorderBox = function(node, computedStyle){ + var s = computedStyle || gcs(node), + pe = d._getPadExtents(node, s), + cb = d._getContentBox(node, s) + ; + return { + l: cb.l - pe.l, + t: cb.t - pe.t, + w: cb.w + pe.w, + h: cb.h + pe.h + }; + } + + // Box setters depend on box context because interpretation of width/height styles + // vary wrt box context. + // + // The value of dojo.boxModel is used to determine box context. + // dojo.boxModel can be set directly to change behavior. + // + // Beware of display: inline objects that have padding styles + // because the user agent ignores padding (it's a bogus setup anyway) + // + // Be careful with IMGs because they are inline or block depending on + // browser and browser mode. + // + // Elements other than DIV may have special quirks, like built-in + // margins or padding, or values not detectable via computedStyle. + // In particular, margins on TABLE do not seems to appear + // at all in computedStyle on Mozilla. + + dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){ + // summary: + // sets width/height/left/top in the current (native) box-model + // dimentions. Uses the unit passed in u. + // node: + // DOM Node reference. Id string not supported for performance + // reasons. + // l: + // left offset from parent. + // t: + // top offset from parent. + // w: + // width in current box model. + // h: + // width in current box model. + // u: + // unit measure to use for other measures. Defaults to "px". + u = u || "px"; + var s = node.style; + if(!isNaN(l)){ s.left = l + u; } + if(!isNaN(t)){ s.top = t + u; } + if(w >= 0){ s.width = w + u; } + if(h >= 0){ s.height = h + u; } + } + + dojo._isButtonTag = function(/*DomNode*/node) { + // summary: + // True if the node is BUTTON or INPUT.type="button". + return node.tagName == "BUTTON" + || node.tagName=="INPUT" && (node.getAttribute("type")||'').toUpperCase() == "BUTTON"; // boolean + } + + dojo._usesBorderBox = function(/*DomNode*/node){ + // summary: + // True if the node uses border-box layout. + + // We could test the computed style of node to see if a particular box + // has been specified, but there are details and we choose not to bother. + + // TABLE and BUTTON (and INPUT type=button) are always border-box by default. + // If you have assigned a different box to either one via CSS then + // box functions will break. + + var n = node.tagName; + return d.boxModel=="border-box" || n=="TABLE" || d._isButtonTag(node); // boolean + } + + dojo._setContentSize = function(/*DomNode*/node, /*Number*/widthPx, /*Number*/heightPx, /*Object*/computedStyle){ + // summary: + // Sets the size of the node's contents, irrespective of margins, + // padding, or borders. + if(d._usesBorderBox(node)){ + var pb = d._getPadBorderExtents(node, computedStyle); + if(widthPx >= 0){ widthPx += pb.w; } + if(heightPx >= 0){ heightPx += pb.h; } + } + d._setBox(node, NaN, NaN, widthPx, heightPx); + } + + dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, + /*Number?*/widthPx, /*Number?*/heightPx, + /*Object*/computedStyle){ + // summary: + // sets the size of the node's margin box and placement + // (left/top), irrespective of box model. Think of it as a + // passthrough to dojo._setBox that handles box-model vagaries for + // you. + + var s = computedStyle || gcs(node), + // Some elements have special padding, margin, and box-model settings. + // To use box functions you may need to set padding, margin explicitly. + // Controlling box-model is harder, in a pinch you might set dojo.boxModel. + bb = d._usesBorderBox(node), + pb = bb ? _nilExtents : d._getPadBorderExtents(node, s) + ; + if(d.isWebKit){ + // on Safari (3.1.2), button nodes with no explicit size have a default margin + // setting an explicit size eliminates the margin. + // We have to swizzle the width to get correct margin reading. + if(d._isButtonTag(node)){ + var ns = node.style; + if(widthPx >= 0 && !ns.width) { ns.width = "4px"; } + if(heightPx >= 0 && !ns.height) { ns.height = "4px"; } + } + } + var mb = d._getMarginExtents(node, s); + if(widthPx >= 0){ widthPx = Math.max(widthPx - pb.w - mb.w, 0); } + if(heightPx >= 0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); } + d._setBox(node, leftPx, topPx, widthPx, heightPx); + } + + var _nilExtents = { l:0, t:0, w:0, h:0 }; + + // public API + + dojo.marginBox = function(/*DomNode|String*/node, /*Object?*/box){ + // summary: + // Getter/setter for the margin-box of node. + // description: + // Getter/setter for the margin-box of node. + // Returns an object in the expected format of box (regardless + // if box is passed). The object might look like: + // `{ l: 50, t: 200, w: 300: h: 150 }` + // for a node offset from its parent 50px to the left, 200px from + // the top with a margin width of 300px and a margin-height of + // 150px. + // node: + // id or reference to DOM Node to get/set box for + // box: + // If passed, denotes that dojo.marginBox() should + // update/set the margin box for node. Box is an object in the + // above format. All properties are optional if passed. + // example: + // Retrieve the marginbox of a passed node + // | var box = dojo.marginBox("someNodeId"); + // | console.dir(box); + // + // example: + // Set a node's marginbox to the size of another node + // | var box = dojo.marginBox("someNodeId"); + // | dojo.marginBox("someOtherNode", box); + + var n = byId(node), s = gcs(n), b = box; + return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object + } + + dojo.contentBox = function(/*DomNode|String*/node, /*Object?*/box){ + // summary: + // Getter/setter for the content-box of node. + // description: + // Returns an object in the expected format of box (regardless if box is passed). + // The object might look like: + // `{ l: 50, t: 200, w: 300: h: 150 }` + // for a node offset from its parent 50px to the left, 200px from + // the top with a content width of 300px and a content-height of + // 150px. Note that the content box may have a much larger border + // or margin box, depending on the box model currently in use and + // CSS values set/inherited for node. + // While the getter will return top and left values, the + // setter only accepts setting the width and height. + // node: + // id or reference to DOM Node to get/set box for + // box: + // If passed, denotes that dojo.contentBox() should + // update/set the content box for node. Box is an object in the + // above format, but only w (width) and h (height) are supported. + // All properties are optional if passed. + var n = byId(node), s = gcs(n), b = box; + return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object + } + + // ============================= + // Positioning + // ============================= + + var _sumAncestorProperties = function(node, prop){ + if(!(node = (node||0).parentNode)){return 0} + var val, retVal = 0, _b = d.body(); + while(node && node.style){ + if(gcs(node).position == "fixed"){ + return 0; + } + val = node[prop]; + if(val){ + retVal += val - 0; + // opera and khtml #body & #html has the same values, we only + // need one value + if(node == _b){ break; } + } + node = node.parentNode; + } + return retVal; // integer + } + + dojo._docScroll = function(){ + var n = d.global; + return "pageXOffset" in n? { x:n.pageXOffset, y:n.pageYOffset } : + (n=d.doc.documentElement, n.clientHeight? { x:d._fixIeBiDiScrollLeft(n.scrollLeft), y:n.scrollTop } : + (n=d.body(), { x:n.scrollLeft||0, y:n.scrollTop||0 })); + }; + + dojo._isBodyLtr = function(){ + return "_bodyLtr" in d? d._bodyLtr : + d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean + } + + dojo._getIeDocumentElementOffset = function(){ + // summary: + // returns the offset in x and y from the document body to the + // visual edge of the page + // description: + // The following values in IE contain an offset: + // | event.clientX + // | event.clientY + // | node.getBoundingClientRect().left + // | node.getBoundingClientRect().top + // But other position related values do not contain this offset, + // such as node.offsetLeft, node.offsetTop, node.style.left and + // node.style.top. The offset is always (2, 2) in LTR direction. + // When the body is in RTL direction, the offset counts the width + // of left scroll bar's width. This function computes the actual + // offset. + + //NOTE: assumes we're being called in an IE browser + + var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks + + if(d.isIE < 8){ + var r = de.getBoundingClientRect(); // works well for IE6+ + //console.debug('rect left,top = ' + r.left+','+r.top + ', html client left/top = ' + de.clientLeft+','+de.clientTop + ', rtl = ' + (!d._isBodyLtr()) + ', quirks = ' + d.isQuirks); + var l = r.left, + t = r.top; + if(d.isIE < 7){ + l += de.clientLeft; // scrollbar size in strict/RTL, or, + t += de.clientTop; // HTML border size in strict + } + return { + x: l < 0? 0 : l, // FRAME element border size can lead to inaccurate negative values + y: t < 0? 0 : t + }; + }else{ + return { + x: 0, + y: 0 + }; + } + + }; + + dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ + // In RTL direction, scrollLeft should be a negative value, but IE < 8 + // returns a positive one. All codes using documentElement.scrollLeft + // must call this function to fix this error, otherwise the position + // will offset to right when there is a horizontal scrollbar. + + var dd = d.doc; + if(d.isIE < 8 && !d._isBodyLtr()){ + var de = d.isQuirks ? dd.body : dd.documentElement; + return scrollLeft + de.clientWidth - de.scrollWidth; // Integer + } + return scrollLeft; // Integer + } + + // FIXME: need a setter for coords or a moveTo!! + dojo._abs = dojo.position = function(/*DomNode*/node, /*Boolean?*/includeScroll){ + // summary: + // Gets the position and size of the passed element relative to + // the viewport (if includeScroll==false), or relative to the + // document root (if includeScroll==true). + // + // description: + // Returns an object of the form: + // { x: 100, y: 300, w: 20, h: 15 } + // If includeScroll==true, the x and y values will include any + // document offsets that may affect the position relative to the + // viewport. + // Uses the border-box model (inclusive of border and padding but + // not margin). Does not act as a setter. + + var db = d.body(), dh = db.parentNode, ret; + node = byId(node); + if(node["getBoundingClientRect"]){ + // IE6+, FF3+, super-modern WebKit, and Opera 9.6+ all take this branch + ret = node.getBoundingClientRect(); + ret = { x: ret.left, y: ret.top, w: ret.right - ret.left, h: ret.bottom - ret.top }; + if(d.isIE){ + // On IE there's a 2px offset that we need to adjust for, see _getIeDocumentElementOffset() + var offset = d._getIeDocumentElementOffset(); + + // fixes the position in IE, quirks mode + ret.x -= offset.x + (d.isQuirks ? db.clientLeft+db.offsetLeft : 0); + ret.y -= offset.y + (d.isQuirks ? db.clientTop+db.offsetTop : 0); + }else if(d.isFF == 3){ + // In FF3 you have to subtract the document element margins. + // Fixed in FF3.5 though. + var cs = gcs(dh); + ret.x -= px(dh, cs.marginLeft) + px(dh, cs.borderLeftWidth); + ret.y -= px(dh, cs.marginTop) + px(dh, cs.borderTopWidth); + } + }else{ + // FF2 and older WebKit + ret = { + x: 0, + y: 0, + w: node.offsetWidth, + h: node.offsetHeight + }; + if(node["offsetParent"]){ + ret.x -= _sumAncestorProperties(node, "scrollLeft"); + ret.y -= _sumAncestorProperties(node, "scrollTop"); + + var curnode = node; + do{ + var n = curnode.offsetLeft, + t = curnode.offsetTop; + ret.x += isNaN(n) ? 0 : n; + ret.y += isNaN(t) ? 0 : t; + + cs = gcs(curnode); + if(curnode != node){ + if(d.isMoz){ + // tried left+right with differently sized left/right borders + // it really is 2xleft border in FF, not left+right, even in RTL! + ret.x += 2 * px(curnode,cs.borderLeftWidth); + ret.y += 2 * px(curnode,cs.borderTopWidth); + }else{ + ret.x += px(curnode, cs.borderLeftWidth); + ret.y += px(curnode, cs.borderTopWidth); + } + } + // static children in a static div in FF2 are affected by the div's border as well + // but offsetParent will skip this div! + if(d.isMoz && cs.position=="static"){ + var parent=curnode.parentNode; + while(parent!=curnode.offsetParent){ + var pcs=gcs(parent); + if(pcs.position=="static"){ + ret.x += px(curnode,pcs.borderLeftWidth); + ret.y += px(curnode,pcs.borderTopWidth); + } + parent=parent.parentNode; + } + } + curnode = curnode.offsetParent; + }while((curnode != dh) && curnode); + }else if(node.x && node.y){ + ret.x += isNaN(node.x) ? 0 : node.x; + ret.y += isNaN(node.y) ? 0 : node.y; + } + } + // account for document scrolling + // if offsetParent is used, ret value already includes scroll position + // so we may have to actually remove that value if !includeScroll + if(includeScroll){ + var scroll = d._docScroll(); + ret.x += scroll.x; + ret.y += scroll.y; + } + + return ret; // Object + } + + dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){ + // summary: + // Deprecated: Use position() for border-box x/y/w/h + // or marginBox() for margin-box w/h/l/t. + // Returns an object representing a node's size and position. + // + // description: + // Returns an object that measures margin-box (w)idth/(h)eight + // and absolute position x/y of the border-box. Also returned + // is computed (l)eft and (t)op values in pixels from the + // node's offsetParent as returned from marginBox(). + // Return value will be in the form: + //| { l: 50, t: 200, w: 300: h: 150, x: 100, y: 300 } + // Does not act as a setter. If includeScroll is passed, the x and + // y params are affected as one would expect in dojo.position(). + var n = byId(node), s = gcs(n), mb = d._getMarginBox(n, s); + var abs = d.position(n, includeScroll); + mb.x = abs.x; + mb.y = abs.y; + return mb; + } + + // ============================= + // Element attribute Functions + // ============================= + + // dojo.attr() should conform to http://www.w3.org/TR/DOM-Level-2-Core/ + + var _propNames = { + // properties renamed to avoid clashes with reserved words + "class": "className", + "for": "htmlFor", + // properties written as camelCase + tabindex: "tabIndex", + readonly: "readOnly", + colspan: "colSpan", + frameborder: "frameBorder", + rowspan: "rowSpan", + valuetype: "valueType" + }, + _attrNames = { + // original attribute names + classname: "class", + htmlfor: "for", + // for IE + tabindex: "tabIndex", + readonly: "readOnly" + }, + _forcePropNames = { + innerHTML: 1, + className: 1, + htmlFor: d.isIE, + value: 1 + }; + + var _fixAttrName = function(/*String*/ name){ + return _attrNames[name.toLowerCase()] || name; + }; + + var _hasAttr = function(node, name){ + var attr = node.getAttributeNode && node.getAttributeNode(name); + return attr && attr.specified; // Boolean + }; + + // There is a difference in the presence of certain properties and their default values + // between browsers. For example, on IE "disabled" is present on all elements, + // but it is value is "false"; "tabIndex" of
    returns 0 by default on IE, yet other browsers + // can return -1. + + dojo.hasAttr = function(/*DomNode|String*/node, /*String*/name){ + // summary: + // Returns true if the requested attribute is specified on the + // given element, and false otherwise. + // node: + // id or reference to the element to check + // name: + // the name of the attribute + // returns: + // true if the requested attribute is specified on the + // given element, and false otherwise + var lc = name.toLowerCase(); + return _forcePropNames[_propNames[lc] || name] || _hasAttr(byId(node), _attrNames[lc] || name); // Boolean + } + + var _evtHdlrMap = {}, _ctr = 0, + _attrId = dojo._scopeName + "attrid", + // the next dictionary lists elements with read-only innerHTML on IE + _roInnerHtml = {col: 1, colgroup: 1, + // frameset: 1, head: 1, html: 1, style: 1, + table: 1, tbody: 1, tfoot: 1, thead: 1, tr: 1, title: 1}; + + dojo.attr = function(/*DomNode|String*/node, /*String|Object*/name, /*String?*/value){ + // summary: + // Gets or sets an attribute on an HTML element. + // description: + // Handles normalized getting and setting of attributes on DOM + // Nodes. If 2 arguments are passed, and a the second argumnt is a + // string, acts as a getter. + // + // If a third argument is passed, or if the second argument is a + // map of attributes, acts as a setter. + // + // When passing functions as values, note that they will not be + // directly assigned to slots on the node, but rather the default + // behavior will be removed and the new behavior will be added + // using `dojo.connect()`, meaning that event handler properties + // will be normalized and that some caveats with regards to + // non-standard behaviors for onsubmit apply. Namely that you + // should cancel form submission using `dojo.stopEvent()` on the + // passed event object instead of returning a boolean value from + // the handler itself. + // node: + // id or reference to the element to get or set the attribute on + // name: + // the name of the attribute to get or set. + // value: + // The value to set for the attribute + // returns: + // when used as a getter, the value of the requested attribute + // or null if that attribute does not have a specified or + // default value; + // + // when used as a setter, the DOM node + // + // example: + // | // get the current value of the "foo" attribute on a node + // | dojo.attr(dojo.byId("nodeId"), "foo"); + // | // or we can just pass the id: + // | dojo.attr("nodeId", "foo"); + // + // example: + // | // use attr() to set the tab index + // | dojo.attr("nodeId", "tabIndex", 3); + // | + // + // example: + // Set multiple values at once, including event handlers: + // | dojo.attr("formId", { + // | "foo": "bar", + // | "tabIndex": -1, + // | "method": "POST", + // | "onsubmit": function(e){ + // | // stop submitting the form. Note that the IE behavior + // | // of returning true or false will have no effect here + // | // since our handler is connect()ed to the built-in + // | // onsubmit behavior and so we need to use + // | // dojo.stopEvent() to ensure that the submission + // | // doesn't proceed. + // | dojo.stopEvent(e); + // | + // | // submit the form with Ajax + // | dojo.xhrPost({ form: "formId" }); + // | } + // | }); + // + // example: + // Style is s special case: Only set with an object hash of styles + // | dojo.attr("someNode",{ + // | id:"bar", + // | style:{ + // | width:"200px", height:"100px", color:"#000" + // | } + // | }); + // + // example: + // Again, only set style as an object hash of styles: + // | var obj = { color:"#fff", backgroundColor:"#000" }; + // | dojo.attr("someNode", "style", obj); + // | + // | // though shorter to use `dojo.style()` in this case: + // | dojo.style("someNode", obj); + + node = byId(node); + var args = arguments.length, prop; + if(args == 2 && typeof name != "string"){ // inline'd type check + // the object form of setter: the 2nd argument is a dictionary + for(var x in name){ + d.attr(node, x, name[x]); + } + return node; // DomNode + } + var lc = name.toLowerCase(), + propName = _propNames[lc] || name, + forceProp = _forcePropNames[propName], + attrName = _attrNames[lc] || name; + if(args == 3){ + // setter + do{ + if(propName == "style" && typeof value != "string"){ // inline'd type check + // special case: setting a style + d.style(node, value); + break; + } + if(propName == "innerHTML"){ + // special case: assigning HTML + if(d.isIE && node.tagName.toLowerCase() in _roInnerHtml){ + d.empty(node); + node.appendChild(d._toDom(value, node.ownerDocument)); + }else{ + node[propName] = value; + } + break; + } + if(d.isFunction(value)){ + // special case: assigning an event handler + // clobber if we can + var attrId = d.attr(node, _attrId); + if(!attrId){ + attrId = _ctr++; + d.attr(node, _attrId, attrId); + } + if(!_evtHdlrMap[attrId]){ + _evtHdlrMap[attrId] = {}; + } + var h = _evtHdlrMap[attrId][propName]; + if(h){ + d.disconnect(h); + }else{ + try{ + delete node[propName]; + }catch(e){} + } + // ensure that event objects are normalized, etc. + _evtHdlrMap[attrId][propName] = d.connect(node, propName, value); + break; + } + if(forceProp || typeof value == "boolean"){ + // special case: forcing assignment to the property + // special case: setting boolean to a property instead of attribute + node[propName] = value; + break; + } + // node's attribute + node.setAttribute(attrName, value); + }while(false); + return node; // DomNode + } + // getter + // should we access this attribute via a property or + // via getAttribute()? + value = node[propName]; + if(forceProp && typeof value != "undefined"){ + // node's property + return value; // Anything + } + if(propName != "href" && (typeof value == "boolean" || d.isFunction(value))){ + // node's property + return value; // Anything + } + // node's attribute + // we need _hasAttr() here to guard against IE returning a default value + return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything + } + + dojo.removeAttr = function(/*DomNode|String*/ node, /*String*/ name){ + // summary: + // Removes an attribute from an HTML element. + // node: + // id or reference to the element to remove the attribute from + // name: + // the name of the attribute to remove + byId(node).removeAttribute(_fixAttrName(name)); + } + + dojo.getNodeProp = function(/*DomNode|String*/ node, /*String*/ name){ + // summary: + // Returns an effective value of a property or an attribute. + // node: + // id or reference to the element to remove the attribute from + // name: + // the name of the attribute + node = byId(node); + var lc = name.toLowerCase(), + propName = _propNames[lc] || name; + if((propName in node) && propName != "href"){ + // node's property + return node[propName]; // Anything + } + // node's attribute + var attrName = _attrNames[lc] || name; + return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything + } + + dojo.create = function(tag, attrs, refNode, pos){ + // summary: + // Create an element, allowing for optional attribute decoration + // and placement. + // + // description: + // A DOM Element creation function. A shorthand method for creating a node or + // a fragment, and allowing for a convenient optional attribute setting step, + // as well as an optional DOM placement reference. + //| + // Attributes are set by passing the optional object through `dojo.attr`. + // See `dojo.attr` for noted caveats and nuances, and API if applicable. + //| + // Placement is done via `dojo.place`, assuming the new node to be the action + // node, passing along the optional reference node and position. + // + // tag: String|DomNode + // A string of the element to create (eg: "div", "a", "p", "li", "script", "br"), + // or an existing DOM node to process. + // + // attrs: Object + // An object-hash of attributes to set on the newly created node. + // Can be null, if you don't want to set any attributes/styles. + // See: `dojo.attr` for a description of available attributes. + // + // refNode: String?|DomNode? + // Optional reference node. Used by `dojo.place` to place the newly created + // node somewhere in the dom relative to refNode. Can be a DomNode reference + // or String ID of a node. + // + // pos: String? + // Optional positional reference. Defaults to "last" by way of `dojo.place`, + // though can be set to "first","after","before","last", "replace" or "only" + // to further control the placement of the new node relative to the refNode. + // 'refNode' is required if a 'pos' is specified. + // + // returns: DomNode + // + // example: + // Create a DIV: + // | var n = dojo.create("div"); + // + // example: + // Create a DIV with content: + // | var n = dojo.create("div", { innerHTML:"

    hi

    " }); + // + // example: + // Place a new DIV in the BODY, with no attributes set + // | var n = dojo.create("div", null, dojo.body()); + // + // example: + // Create an UL, and populate it with LI's. Place the list as the first-child of a + // node with id="someId": + // | var ul = dojo.create("ul", null, "someId", "first"); + // | var items = ["one", "two", "three", "four"]; + // | dojo.forEach(items, function(data){ + // | dojo.create("li", { innerHTML: data }, ul); + // | }); + // + // example: + // Create an anchor, with an href. Place in BODY: + // | dojo.create("a", { href:"foo.html", title:"Goto FOO!" }, dojo.body()); + // + // example: + // Create a `dojo.NodeList()` from a new element (for syntatic sugar): + // | dojo.query(dojo.create('div')) + // | .addClass("newDiv") + // | .onclick(function(e){ console.log('clicked', e.target) }) + // | .place("#someNode"); // redundant, but cleaner. + + var doc = d.doc; + if(refNode){ + refNode = byId(refNode); + doc = refNode.ownerDocument; + } + if(typeof tag == "string"){ // inline'd type check + tag = doc.createElement(tag); + } + if(attrs){ d.attr(tag, attrs); } + if(refNode){ d.place(tag, refNode, pos); } + return tag; // DomNode + } + + /*===== + dojo.empty = function(node){ + // summary: + // safely removes all children of the node. + // node: DOMNode|String + // a reference to a DOM node or an id. + // example: + // Destroy node's children byId: + // | dojo.empty("someId"); + // + // example: + // Destroy all nodes' children in a list by reference: + // | dojo.query(".someNode").forEach(dojo.empty); + } + =====*/ + + d.empty = + d.isIE ? function(node){ + node = byId(node); + for(var c; c = node.lastChild;){ // intentional assignment + d.destroy(c); + } + } : + function(node){ + byId(node).innerHTML = ""; + }; + + /*===== + dojo._toDom = function(frag, doc){ + // summary: + // instantiates an HTML fragment returning the corresponding DOM. + // frag: String + // the HTML fragment + // doc: DocumentNode? + // optional document to use when creating DOM nodes, defaults to + // dojo.doc if not specified. + // returns: DocumentFragment + // + // example: + // Create a table row: + // | var tr = dojo._toDom("First!"); + } + =====*/ + + // support stuff for dojo._toDom + var tagWrap = { + option: ["select"], + tbody: ["table"], + thead: ["table"], + tfoot: ["table"], + tr: ["table", "tbody"], + td: ["table", "tbody", "tr"], + th: ["table", "thead", "tr"], + legend: ["fieldset"], + caption: ["table"], + colgroup: ["table"], + col: ["table", "colgroup"], + li: ["ul"] + }, + reTag = /<\s*([\w\:]+)/, + masterNode = {}, masterNum = 0, + masterName = "__" + d._scopeName + "ToDomId"; + + // generate start/end tag strings to use + // for the injection for each special tag wrap case. + for(var param in tagWrap){ + var tw = tagWrap[param]; + tw.pre = param == "option" ? ' + // | + // | + // | + // | + // + // yields this object structure as the result of a call to + // formToObject(): + // + // | { + // | blah: "blah", + // | multi: [ + // | "thud", + // | "thonk" + // | ] + // | }; + + var ret = {}; + var exclude = "file|submit|image|reset|button|"; + _d.forEach(dojo.byId(formNode).elements, function(item){ + var _in = item.name; + var type = (item.type||"").toLowerCase(); + if(_in && type && exclude.indexOf(type) == -1 && !item.disabled){ + setValue(ret, _in, _d.fieldToObject(item)); + if(type == "image"){ + ret[_in+".x"] = ret[_in+".y"] = ret[_in].x = ret[_in].y = 0; + } + } + }); + return ret; // Object + } + + dojo.objectToQuery = function(/*Object*/ map){ + // summary: + // takes a name/value mapping object and returns a string representing + // a URL-encoded version of that object. + // example: + // this object: + // + // | { + // | blah: "blah", + // | multi: [ + // | "thud", + // | "thonk" + // | ] + // | }; + // + // yields the following query string: + // + // | "blah=blah&multi=thud&multi=thonk" + + // FIXME: need to implement encodeAscii!! + var enc = encodeURIComponent; + var pairs = []; + var backstop = {}; + for(var name in map){ + var value = map[name]; + if(value != backstop[name]){ + var assign = enc(name) + "="; + if(_d.isArray(value)){ + for(var i=0; i < value.length; i++){ + pairs.push(assign + enc(value[i])); + } + }else{ + pairs.push(assign + enc(value)); + } + } + } + return pairs.join("&"); // String + } + + dojo.formToQuery = function(/*DOMNode||String*/ formNode){ + // summary: + // Returns a URL-encoded string representing the form passed as either a + // node or string ID identifying the form to serialize + return _d.objectToQuery(_d.formToObject(formNode)); // String + } + + dojo.formToJson = function(/*DOMNode||String*/ formNode, /*Boolean?*/prettyPrint){ + // summary: + // Create a serialized JSON string from a form node or string + // ID identifying the form to serialize + return _d.toJson(_d.formToObject(formNode), prettyPrint); // String + } + + dojo.queryToObject = function(/*String*/ str){ + // summary: + // Create an object representing a de-serialized query section of a + // URL. Query keys with multiple values are returned in an array. + // + // example: + // This string: + // + // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" + // + // results in this object structure: + // + // | { + // | foo: [ "bar", "baz" ], + // | thinger: " spaces =blah", + // | zonk: "blarg" + // | } + // + // Note that spaces and other urlencoded entities are correctly + // handled. + + // FIXME: should we grab the URL string if we're not passed one? + var ret = {}; + var qp = str.split("&"); + var dec = decodeURIComponent; + _d.forEach(qp, function(item){ + if(item.length){ + var parts = item.split("="); + var name = dec(parts.shift()); + var val = dec(parts.join("=")); + if(typeof ret[name] == "string"){ // inline'd type check + ret[name] = [ret[name]]; + } + + if(_d.isArray(ret[name])){ + ret[name].push(val); + }else{ + ret[name] = val; + } + } + }); + return ret; // Object + } + + // need to block async callbacks from snatching this thread as the result + // of an async callback might call another sync XHR, this hangs khtml forever + // must checked by watchInFlight() + + dojo._blockAsync = false; + + // MOW: remove dojo._contentHandlers alias in 2.0 + var handlers = _d._contentHandlers = dojo.contentHandlers = { + // summary: + // A map of availble XHR transport handle types. Name matches the + // `handleAs` attribute passed to XHR calls. + // + // description: + // A map of availble XHR transport handle types. Name matches the + // `handleAs` attribute passed to XHR calls. Each contentHandler is + // called, passing the xhr object for manipulation. The return value + // from the contentHandler will be passed to the `load` or `handle` + // functions defined in the original xhr call. + // + // example: + // Creating a custom content-handler: + // | dojo.contentHandlers.makeCaps = function(xhr){ + // | return xhr.responseText.toUpperCase(); + // | } + // | // and later: + // | dojo.xhrGet({ + // | url:"foo.txt", + // | handleAs:"makeCaps", + // | load: function(data){ /* data is a toUpper version of foo.txt */ } + // | }); + + text: function(xhr){ + // summary: A contentHandler which simply returns the plaintext response data + return xhr.responseText; + }, + json: function(xhr){ + // summary: A contentHandler which returns a JavaScript object created from the response data + return _d.fromJson(xhr.responseText || null); + }, + "json-comment-filtered": function(xhr){ + // summary: A contentHandler which expects comment-filtered JSON. + // description: + // A contentHandler which expects comment-filtered JSON. + // the json-comment-filtered option was implemented to prevent + // "JavaScript Hijacking", but it is less secure than standard JSON. Use + // standard JSON instead. JSON prefixing can be used to subvert hijacking. + // + // Will throw a notice suggesting to use application/json mimetype, as + // json-commenting can introduce security issues. To decrease the chances of hijacking, + // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& + // + // use djConfig.useCommentedJson = true to turn off the notice + if(!dojo.config.useCommentedJson){ + console.warn("Consider using the standard mimetype:application/json." + + " json-commenting can introduce security issues. To" + + " decrease the chances of hijacking, use the standard the 'json' handler and" + + " prefix your json with: {}&&\n" + + "Use djConfig.useCommentedJson=true to turn off this message."); + } + + var value = xhr.responseText; + var cStartIdx = value.indexOf("\/*"); + var cEndIdx = value.lastIndexOf("*\/"); + if(cStartIdx == -1 || cEndIdx == -1){ + throw new Error("JSON was not comment filtered"); + } + return _d.fromJson(value.substring(cStartIdx+2, cEndIdx)); + }, + javascript: function(xhr){ + // summary: A contentHandler which evaluates the response data, expecting it to be valid JavaScript + + // FIXME: try Moz and IE specific eval variants? + return _d.eval(xhr.responseText); + }, + xml: function(xhr){ + // summary: A contentHandler returning an XML Document parsed from the response data + var result = xhr.responseXML; + if(_d.isIE && (!result || !result.documentElement)){ + //WARNING: this branch used by the xml handling in dojo.io.iframe, + //so be sure to test dojo.io.iframe if making changes below. + var ms = function(n){ return "MSXML" + n + ".DOMDocument"; } + var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)]; + _d.some(dp, function(p){ + try{ + var dom = new ActiveXObject(p); + dom.async = false; + dom.loadXML(xhr.responseText); + result = dom; + }catch(e){ return false; } + return true; + }); + } + return result; // DOMDocument + }, + "json-comment-optional": function(xhr){ + // summary: A contentHandler which checks the presence of comment-filtered JSON and + // alternates between the `json` and `json-comment-filtered` contentHandlers. + if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){ + return handlers["json-comment-filtered"](xhr); + }else{ + return handlers["json"](xhr); + } + } + }; + + /*===== + dojo.__IoArgs = function(){ + // url: String + // URL to server endpoint. + // content: Object? + // Contains properties with string values. These + // properties will be serialized as name1=value2 and + // passed in the request. + // timeout: Integer? + // Milliseconds to wait for the response. If this time + // passes, the then error callbacks are called. + // form: DOMNode? + // DOM node for a form. Used to extract the form values + // and send to the server. + // preventCache: Boolean? + // Default is false. If true, then a + // "dojo.preventCache" parameter is sent in the request + // with a value that changes with each request + // (timestamp). Useful only with GET-type requests. + // handleAs: String? + // Acceptable values depend on the type of IO + // transport (see specific IO calls for more information). + // rawBody: String? + // Sets the raw body for an HTTP request. If this is used, then the content + // property is ignored. This is mostly useful for HTTP methods that have + // a body to their requests, like PUT or POST. This property can be used instead + // of postData and putData for dojo.rawXhrPost and dojo.rawXhrPut respectively. + // ioPublish: Boolean? + // Set this explicitly to false to prevent publishing of topics related to + // IO operations. Otherwise, if djConfig.ioPublish is set to true, topics + // will be published via dojo.publish for different phases of an IO operation. + // See dojo.__IoPublish for a list of topics that are published. + // load: Function? + // This function will be + // called on a successful HTTP response code. + // error: Function? + // This function will + // be called when the request fails due to a network or server error, the url + // is invalid, etc. It will also be called if the load or handle callback throws an + // exception, unless djConfig.debugAtAllCosts is true. This allows deployed applications + // to continue to run even when a logic error happens in the callback, while making + // it easier to troubleshoot while in debug mode. + // handle: Function? + // This function will + // be called at the end of every request, whether or not an error occurs. + this.url = url; + this.content = content; + this.timeout = timeout; + this.form = form; + this.preventCache = preventCache; + this.handleAs = handleAs; + this.ioPublish = ioPublish; + this.load = function(response, ioArgs){ + // ioArgs: dojo.__IoCallbackArgs + // Provides additional information about the request. + // response: Object + // The response in the format as defined with handleAs. + } + this.error = function(response, ioArgs){ + // ioArgs: dojo.__IoCallbackArgs + // Provides additional information about the request. + // response: Object + // The response in the format as defined with handleAs. + } + this.handle = function(loadOrError, response, ioArgs){ + // loadOrError: String + // Provides a string that tells you whether this function + // was called because of success (load) or failure (error). + // response: Object + // The response in the format as defined with handleAs. + // ioArgs: dojo.__IoCallbackArgs + // Provides additional information about the request. + } + } + =====*/ + + /*===== + dojo.__IoCallbackArgs = function(args, xhr, url, query, handleAs, id, canDelete, json){ + // args: Object + // the original object argument to the IO call. + // xhr: XMLHttpRequest + // For XMLHttpRequest calls only, the + // XMLHttpRequest object that was used for the + // request. + // url: String + // The final URL used for the call. Many times it + // will be different than the original args.url + // value. + // query: String + // For non-GET requests, the + // name1=value1&name2=value2 parameters sent up in + // the request. + // handleAs: String + // The final indicator on how the response will be + // handled. + // id: String + // For dojo.io.script calls only, the internal + // script ID used for the request. + // canDelete: Boolean + // For dojo.io.script calls only, indicates + // whether the script tag that represents the + // request can be deleted after callbacks have + // been called. Used internally to know when + // cleanup can happen on JSONP-type requests. + // json: Object + // For dojo.io.script calls only: holds the JSON + // response for JSONP-type requests. Used + // internally to hold on to the JSON responses. + // You should not need to access it directly -- + // the same object should be passed to the success + // callbacks directly. + this.args = args; + this.xhr = xhr; + this.url = url; + this.query = query; + this.handleAs = handleAs; + this.id = id; + this.canDelete = canDelete; + this.json = json; + } + =====*/ + + /*===== + dojo.__IoPublish = function(){ + // summary: + // This is a list of IO topics that can be published + // if djConfig.ioPublish is set to true. IO topics can be + // published for any Input/Output, network operation. So, + // dojo.xhr, dojo.io.script and dojo.io.iframe can all + // trigger these topics to be published. + // start: String + // "/dojo/io/start" is sent when there are no outstanding IO + // requests, and a new IO request is started. No arguments + // are passed with this topic. + // send: String + // "/dojo/io/send" is sent whenever a new IO request is started. + // It passes the dojo.Deferred for the request with the topic. + // load: String + // "/dojo/io/load" is sent whenever an IO request has loaded + // successfully. It passes the response and the dojo.Deferred + // for the request with the topic. + // error: String + // "/dojo/io/error" is sent whenever an IO request has errored. + // It passes the error and the dojo.Deferred + // for the request with the topic. + // done: String + // "/dojo/io/done" is sent whenever an IO request has completed, + // either by loading or by erroring. It passes the error and + // the dojo.Deferred for the request with the topic. + // stop: String + // "/dojo/io/stop" is sent when all outstanding IO requests have + // finished. No arguments are passed with this topic. + this.start = "/dojo/io/start"; + this.send = "/dojo/io/send"; + this.load = "/dojo/io/load"; + this.error = "/dojo/io/error"; + this.done = "/dojo/io/done"; + this.stop = "/dojo/io/stop"; + } + =====*/ + + dojo._ioSetArgs = function(/*dojo.__IoArgs*/args, + /*Function*/canceller, + /*Function*/okHandler, + /*Function*/errHandler){ + // summary: + // sets up the Deferred and ioArgs property on the Deferred so it + // can be used in an io call. + // args: + // The args object passed into the public io call. Recognized properties on + // the args object are: + // canceller: + // The canceller function used for the Deferred object. The function + // will receive one argument, the Deferred object that is related to the + // canceller. + // okHandler: + // The first OK callback to be registered with Deferred. It has the opportunity + // to transform the OK response. It will receive one argument -- the Deferred + // object returned from this function. + // errHandler: + // The first error callback to be registered with Deferred. It has the opportunity + // to do cleanup on an error. It will receive two arguments: error (the + // Error object) and dfd, the Deferred object returned from this function. + + var ioArgs = {args: args, url: args.url}; + + //Get values from form if requestd. + var formObject = null; + if(args.form){ + var form = _d.byId(args.form); + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //so use it for all. See #2844 + var actnNode = form.getAttributeNode("action"); + ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); + formObject = _d.formToObject(form); + } + + // set up the query params + var miArgs = [{}]; + + if(formObject){ + // potentially over-ride url-provided params w/ form values + miArgs.push(formObject); + } + if(args.content){ + // stuff in content over-rides what's set by form + miArgs.push(args.content); + } + if(args.preventCache){ + miArgs.push({"dojo.preventCache": new Date().valueOf()}); + } + ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs)); + + // .. and the real work of getting the deferred in order, etc. + ioArgs.handleAs = args.handleAs || "text"; + var d = new _d.Deferred(canceller); + d.addCallbacks(okHandler, function(error){ + return errHandler(error, d); + }); + + //Support specifying load, error and handle callback functions from the args. + //For those callbacks, the "this" object will be the args object. + //The callbacks will get the deferred result value as the + //first argument and the ioArgs object as the second argument. + var ld = args.load; + if(ld && _d.isFunction(ld)){ + d.addCallback(function(value){ + return ld.call(args, value, ioArgs); + }); + } + var err = args.error; + if(err && _d.isFunction(err)){ + d.addErrback(function(value){ + return err.call(args, value, ioArgs); + }); + } + var handle = args.handle; + if(handle && _d.isFunction(handle)){ + d.addBoth(function(value){ + return handle.call(args, value, ioArgs); + }); + } + + //Plug in topic publishing, if dojo.publish is loaded. + if(cfg.ioPublish && _d.publish && ioArgs.args.ioPublish !== false){ + d.addCallbacks( + function(res){ + _d.publish("/dojo/io/load", [d, res]); + return res; + }, + function(res){ + _d.publish("/dojo/io/error", [d, res]); + return res; + } + ); + d.addBoth(function(res){ + _d.publish("/dojo/io/done", [d, res]); + return res; + }); + } + + d.ioArgs = ioArgs; + + // FIXME: need to wire up the xhr object's abort method to something + // analagous in the Deferred + return d; + } + + var _deferredCancel = function(/*Deferred*/dfd){ + // summary: canceller function for dojo._ioSetArgs call. + + dfd.canceled = true; + var xhr = dfd.ioArgs.xhr; + var _at = typeof xhr.abort; + if(_at == "function" || _at == "object" || _at == "unknown"){ + xhr.abort(); + } + var err = dfd.ioArgs.error; + if(!err){ + err = new Error("xhr cancelled"); + err.dojoType="cancel"; + } + return err; + } + var _deferredOk = function(/*Deferred*/dfd){ + // summary: okHandler function for dojo._ioSetArgs call. + + var ret = handlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr); + return ret === undefined ? null : ret; + } + var _deferError = function(/*Error*/error, /*Deferred*/dfd){ + // summary: errHandler function for dojo._ioSetArgs call. + + if(!dfd.ioArgs.args.failOk){ + console.error(error); + } + return error; + } + + // avoid setting a timer per request. It degrades performance on IE + // something fierece if we don't use unified loops. + var _inFlightIntvl = null; + var _inFlight = []; + + //Use a separate count for knowing if we are starting/stopping io calls. + //Cannot use _inFlight.length since it can change at a different time than + //when we want to do this kind of test. We only want to decrement the count + //after a callback/errback has finished, since the callback/errback should be + //considered as part of finishing a request. + var _pubCount = 0; + var _checkPubCount = function(dfd){ + if(_pubCount <= 0){ + _pubCount = 0; + if(cfg.ioPublish && _d.publish && (!dfd || dfd && dfd.ioArgs.args.ioPublish !== false)){ + _d.publish("/dojo/io/stop"); + } + } + }; + + var _watchInFlight = function(){ + //summary: + // internal method that checks each inflight XMLHttpRequest to see + // if it has completed or if the timeout situation applies. + + var now = (new Date()).getTime(); + // make sure sync calls stay thread safe, if this callback is called + // during a sync call and this results in another sync call before the + // first sync call ends the browser hangs + if(!_d._blockAsync){ + // we need manual loop because we often modify _inFlight (and therefore 'i') while iterating + // note: the second clause is an assigment on purpose, lint may complain + for(var i = 0, tif; i < _inFlight.length && (tif = _inFlight[i]); i++){ + var dfd = tif.dfd; + var func = function(){ + if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ + _inFlight.splice(i--, 1); + _pubCount -= 1; + }else if(tif.ioCheck(dfd)){ + _inFlight.splice(i--, 1); + tif.resHandle(dfd); + _pubCount -= 1; + }else if(dfd.startTime){ + //did we timeout? + if(dfd.startTime + (dfd.ioArgs.args.timeout || 0) < now){ + _inFlight.splice(i--, 1); + var err = new Error("timeout exceeded"); + err.dojoType = "timeout"; + dfd.errback(err); + //Cancel the request so the io module can do appropriate cleanup. + dfd.cancel(); + _pubCount -= 1; + } + } + }; + if(dojo.config.debugAtAllCosts){ + func.call(this); + }else{ + try{ + func.call(this); + }catch(e){ + dfd.errback(e); + } + } + } + } + + _checkPubCount(dfd); + + if(!_inFlight.length){ + clearInterval(_inFlightIntvl); + _inFlightIntvl = null; + return; + } + } + + dojo._ioCancelAll = function(){ + //summary: Cancels all pending IO requests, regardless of IO type + //(xhr, script, iframe). + try{ + _d.forEach(_inFlight, function(i){ + try{ + i.dfd.cancel(); + }catch(e){/*squelch*/} + }); + }catch(e){/*squelch*/} + } + + //Automatically call cancel all io calls on unload + //in IE for trac issue #2357. + if(_d.isIE){ + _d.addOnWindowUnload(_d._ioCancelAll); + } + + _d._ioNotifyStart = function(/*Deferred*/dfd){ + // summary: + // If dojo.publish is available, publish topics + // about the start of a request queue and/or the + // the beginning of request. + // description: + // Used by IO transports. An IO transport should + // call this method before making the network connection. + if(cfg.ioPublish && _d.publish && dfd.ioArgs.args.ioPublish !== false){ + if(!_pubCount){ + _d.publish("/dojo/io/start"); + } + _pubCount += 1; + _d.publish("/dojo/io/send", [dfd]); + } + } + + _d._ioWatch = function(dfd, validCheck, ioCheck, resHandle){ + // summary: + // Watches the io request represented by dfd to see if it completes. + // dfd: Deferred + // The Deferred object to watch. + // validCheck: Function + // Function used to check if the IO request is still valid. Gets the dfd + // object as its only argument. + // ioCheck: Function + // Function used to check if basic IO call worked. Gets the dfd + // object as its only argument. + // resHandle: Function + // Function used to process response. Gets the dfd + // object as its only argument. + var args = dfd.ioArgs.args; + if(args.timeout){ + dfd.startTime = (new Date()).getTime(); + } + + _inFlight.push({dfd: dfd, validCheck: validCheck, ioCheck: ioCheck, resHandle: resHandle}); + if(!_inFlightIntvl){ + _inFlightIntvl = setInterval(_watchInFlight, 50); + } + // handle sync requests + //A weakness: async calls in flight + //could have their handlers called as part of the + //_watchInFlight call, before the sync's callbacks + // are called. + if(args.sync){ + _watchInFlight(); + } + } + + var _defaultContentType = "application/x-www-form-urlencoded"; + + var _validCheck = function(/*Deferred*/dfd){ + return dfd.ioArgs.xhr.readyState; //boolean + } + var _ioCheck = function(/*Deferred*/dfd){ + return 4 == dfd.ioArgs.xhr.readyState; //boolean + } + var _resHandle = function(/*Deferred*/dfd){ + var xhr = dfd.ioArgs.xhr; + if(_d._isDocumentOk(xhr)){ + dfd.callback(dfd); + }else{ + var err = new Error("Unable to load " + dfd.ioArgs.url + " status:" + xhr.status); + err.status = xhr.status; + err.responseText = xhr.responseText; + dfd.errback(err); + } + } + + dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){ + //summary: Adds query params discovered by the io deferred construction to the URL. + //Only use this for operations which are fundamentally GET-type operations. + if(ioArgs.query.length){ + ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; + ioArgs.query = null; + } + } + + /*===== + dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, { + constructor: function(){ + // summary: + // In addition to the properties listed for the dojo._IoArgs type, + // the following properties are allowed for dojo.xhr* methods. + // handleAs: String? + // Acceptable values are: text (default), json, json-comment-optional, + // json-comment-filtered, javascript, xml. See `dojo.contentHandlers` + // sync: Boolean? + // false is default. Indicates whether the request should + // be a synchronous (blocking) request. + // headers: Object? + // Additional HTTP headers to send in the request. + // failOk: Boolean? + // false is default. Indicates whether a request should be + // allowed to fail (and therefore no console error message in + // the event of a failure) + this.handleAs = handleAs; + this.sync = sync; + this.headers = headers; + this.failOk = failOk; + } + }); + =====*/ + + dojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){ + // summary: + // Sends an HTTP request with the given method. + // description: + // Sends an HTTP request with the given method. + // See also dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts + // for those HTTP methods. There are also methods for "raw" PUT and POST methods + // via dojo.rawXhrPut() and dojo.rawXhrPost() respectively. + // method: + // HTTP method to be used, such as GET, POST, PUT, DELETE. Should be uppercase. + // hasBody: + // If the request has an HTTP body, then pass true for hasBody. + + //Make the Deferred object for this xhr request. + var dfd = _d._ioSetArgs(args, _deferredCancel, _deferredOk, _deferError); + var ioArgs = dfd.ioArgs; + + //Pass the args to _xhrObj, to allow alternate XHR calls based specific calls, like + //the one used for iframe proxies. + var xhr = ioArgs.xhr = _d._xhrObj(ioArgs.args); + //If XHR factory fails, cancel the deferred. + if(!xhr){ + dfd.cancel(); + return dfd; + } + + //Allow for specifying the HTTP body completely. + if("postData" in args){ + ioArgs.query = args.postData; + }else if("putData" in args){ + ioArgs.query = args.putData; + }else if("rawBody" in args){ + ioArgs.query = args.rawBody; + }else if((arguments.length > 2 && !hasBody) || "POST|PUT".indexOf(method.toUpperCase()) == -1){ + //Check for hasBody being passed. If no hasBody, + //then only append query string if not a POST or PUT request. + _d._ioAddQueryToUrl(ioArgs); + } + + // IE 6 is a steaming pile. It won't let you call apply() on the native function (xhr.open). + // workaround for IE6's apply() "issues" + xhr.open(method, ioArgs.url, args.sync !== true, args.user || undefined, args.password || undefined); + if(args.headers){ + for(var hdr in args.headers){ + if(hdr.toLowerCase() === "content-type" && !args.contentType){ + args.contentType = args.headers[hdr]; + }else if(args.headers[hdr]){ + //Only add header if it has a value. This allows for instnace, skipping + //insertion of X-Requested-With by specifying empty value. + xhr.setRequestHeader(hdr, args.headers[hdr]); + } + } + } + // FIXME: is this appropriate for all content types? + xhr.setRequestHeader("Content-Type", args.contentType || _defaultContentType); + if(!args.headers || !("X-Requested-With" in args.headers)){ + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + } + // FIXME: set other headers here! + _d._ioNotifyStart(dfd); + if(dojo.config.debugAtAllCosts){ + xhr.send(ioArgs.query); + }else{ + try{ + xhr.send(ioArgs.query); + }catch(e){ + ioArgs.error = e; + dfd.cancel(); + } + } + _d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle); + xhr = null; + return dfd; // dojo.Deferred + } + + dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP GET request to the server. + return _d.xhr("GET", args); // dojo.Deferred + } + + dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP POST request to the server. In addtion to the properties + // listed for the dojo.__XhrArgs type, the following property is allowed: + // postData: + // String. Send raw data in the body of the POST request. + return _d.xhr("POST", args, true); // dojo.Deferred + } + + dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP PUT request to the server. In addtion to the properties + // listed for the dojo.__XhrArgs type, the following property is allowed: + // putData: + // String. Send raw data in the body of the PUT request. + return _d.xhr("PUT", args, true); // dojo.Deferred + } + + dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP DELETE request to the server. + return _d.xhr("DELETE", args); //dojo.Deferred + } + + /* + dojo.wrapForm = function(formNode){ + //summary: + // A replacement for FormBind, but not implemented yet. + + // FIXME: need to think harder about what extensions to this we might + // want. What should we allow folks to do w/ this? What events to + // set/send? + throw new Error("dojo.wrapForm not yet implemented"); + } + */ +})(); + +} + +if(!dojo._hasResource["dojo._base.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.fx"] = true; +dojo.provide("dojo._base.fx"); + +/* + Animation loosely package based on Dan Pupius' work, contributed under CLA: + http://pupius.co.uk/js/Toolkit.Drawing.js +*/ +(function(){ + var d = dojo; + var _mixin = d._mixin; + + dojo._Line = function(/*int*/ start, /*int*/ end){ + // summary: + // dojo._Line is the object used to generate values from a start value + // to an end value + // start: int + // Beginning value for range + // end: int + // Ending value for range + this.start = start; + this.end = end; + }; + + dojo._Line.prototype.getValue = function(/*float*/ n){ + // summary: Returns the point on the line + // n: a floating point number greater than 0 and less than 1 + return ((this.end - this.start) * n) + this.start; // Decimal + }; + + dojo.Animation = function(args){ + // summary: + // A generic animation class that fires callbacks into its handlers + // object at various states. + // description: + // A generic animation class that fires callbacks into its handlers + // object at various states. Nearly all dojo animation functions + // return an instance of this method, usually without calling the + // .play() method beforehand. Therefore, you will likely need to + // call .play() on instances of `dojo.Animation` when one is + // returned. + // args: Object + // The 'magic argument', mixing all the properties into this + // animation instance. + + _mixin(this, args); + if(d.isArray(this.curve)){ + this.curve = new d._Line(this.curve[0], this.curve[1]); + } + + }; + + // Alias to drop come 2.0: + d._Animation = d.Animation; + + d.extend(dojo.Animation, { + // duration: Integer + // The time in milliseonds the animation will take to run + duration: 350, + + /*===== + // curve: dojo._Line|Array + // A two element array of start and end values, or a `dojo._Line` instance to be + // used in the Animation. + curve: null, + + // easing: Function? + // A Function to adjust the acceleration (or deceleration) of the progress + // across a dojo._Line + easing: null, + =====*/ + + // repeat: Integer? + // The number of times to loop the animation + repeat: 0, + + // rate: Integer? + // the time in milliseconds to wait before advancing to next frame + // (used as a fps timer: 1000/rate = fps) + rate: 20 /* 50 fps */, + + /*===== + // delay: Integer? + // The time in milliseconds to wait before starting animation after it + // has been .play()'ed + delay: null, + + // beforeBegin: Event? + // Synthetic event fired before a dojo.Animation begins playing (synchronous) + beforeBegin: null, + + // onBegin: Event? + // Synthetic event fired as a dojo.Animation begins playing (useful?) + onBegin: null, + + // onAnimate: Event? + // Synthetic event fired at each interval of a `dojo.Animation` + onAnimate: null, + + // onEnd: Event? + // Synthetic event fired after the final frame of a `dojo.Animation` + onEnd: null, + + // onPlay: Event? + // Synthetic event fired any time a `dojo.Animation` is play()'ed + onPlay: null, + + // onPause: Event? + // Synthetic event fired when a `dojo.Animation` is paused + onPause: null, + + // onStop: Event + // Synthetic event fires when a `dojo.Animation` is stopped + onStop: null, + + =====*/ + + _percent: 0, + _startRepeatCount: 0, + + _getStep: function(){ + var _p = this._percent, + _e = this.easing + ; + return _e ? _e(_p) : _p; + }, + _fire: function(/*Event*/ evt, /*Array?*/ args){ + // summary: + // Convenience function. Fire event "evt" and pass it the + // arguments specified in "args". + // description: + // Convenience function. Fire event "evt" and pass it the + // arguments specified in "args". + // Fires the callback in the scope of the `dojo.Animation` + // instance. + // evt: + // The event to fire. + // args: + // The arguments to pass to the event. + var a = args||[]; + if(this[evt]){ + if(d.config.debugAtAllCosts){ + this[evt].apply(this, a); + }else{ + try{ + this[evt].apply(this, a); + }catch(e){ + // squelch and log because we shouldn't allow exceptions in + // synthetic event handlers to cause the internal timer to run + // amuck, potentially pegging the CPU. I'm not a fan of this + // squelch, but hopefully logging will make it clear what's + // going on + console.error("exception in animation handler for:", evt); + console.error(e); + } + } + } + return this; // dojo.Animation + }, + + play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){ + // summary: + // Start the animation. + // delay: + // How many milliseconds to delay before starting. + // gotoStart: + // If true, starts the animation from the beginning; otherwise, + // starts it from its current position. + // returns: dojo.Animation + // The instance to allow chaining. + + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + if(gotoStart){ + _t._stopTimer(); + _t._active = _t._paused = false; + _t._percent = 0; + }else if(_t._active && !_t._paused){ + return _t; + } + + _t._fire("beforeBegin", [_t.node]); + + var de = delay || _t.delay, + _p = dojo.hitch(_t, "_play", gotoStart); + + if(de > 0){ + _t._delayTimer = setTimeout(_p, de); + return _t; + } + _p(); + return _t; + }, + + _play: function(gotoStart){ + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + _t._startTime = new Date().valueOf(); + if(_t._paused){ + _t._startTime -= _t.duration * _t._percent; + } + + _t._active = true; + _t._paused = false; + var value = _t.curve.getValue(_t._getStep()); + if(!_t._percent){ + if(!_t._startRepeatCount){ + _t._startRepeatCount = _t.repeat; + } + _t._fire("onBegin", [value]); + } + + _t._fire("onPlay", [value]); + + _t._cycle(); + return _t; // dojo.Animation + }, + + pause: function(){ + // summary: Pauses a running animation. + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + _t._stopTimer(); + if(!_t._active){ return _t; /*dojo.Animation*/ } + _t._paused = true; + _t._fire("onPause", [_t.curve.getValue(_t._getStep())]); + return _t; // dojo.Animation + }, + + gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){ + // summary: + // Sets the progress of the animation. + // percent: + // A percentage in decimal notation (between and including 0.0 and 1.0). + // andPlay: + // If true, play the animation after setting the progress. + var _t = this; + _t._stopTimer(); + _t._active = _t._paused = true; + _t._percent = percent; + if(andPlay){ _t.play(); } + return _t; // dojo.Animation + }, + + stop: function(/*boolean?*/ gotoEnd){ + // summary: Stops a running animation. + // gotoEnd: If true, the animation will end. + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + if(!_t._timer){ return _t; /* dojo.Animation */ } + _t._stopTimer(); + if(gotoEnd){ + _t._percent = 1; + } + _t._fire("onStop", [_t.curve.getValue(_t._getStep())]); + _t._active = _t._paused = false; + return _t; // dojo.Animation + }, + + status: function(){ + // summary: + // Returns a string token representation of the status of + // the animation, one of: "paused", "playing", "stopped" + if(this._active){ + return this._paused ? "paused" : "playing"; // String + } + return "stopped"; // String + }, + + _cycle: function(){ + var _t = this; + if(_t._active){ + var curr = new Date().valueOf(); + var step = (curr - _t._startTime) / (_t.duration); + + if(step >= 1){ + step = 1; + } + _t._percent = step; + + // Perform easing + if(_t.easing){ + step = _t.easing(step); + } + + _t._fire("onAnimate", [_t.curve.getValue(step)]); + + if(_t._percent < 1){ + _t._startTimer(); + }else{ + _t._active = false; + + if(_t.repeat > 0){ + _t.repeat--; + _t.play(null, true); + }else if(_t.repeat == -1){ + _t.play(null, true); + }else{ + if(_t._startRepeatCount){ + _t.repeat = _t._startRepeatCount; + _t._startRepeatCount = 0; + } + } + _t._percent = 0; + _t._fire("onEnd", [_t.node]); + !_t.repeat && _t._stopTimer(); + } + } + return _t; // dojo.Animation + }, + + _clearTimer: function(){ + // summary: Clear the play delay timer + clearTimeout(this._delayTimer); + delete this._delayTimer; + } + + }); + + // the local timer, stubbed into all Animation instances + var ctr = 0, + timer = null, + runner = { + run: function(){} + }; + + d.extend(d.Animation, { + + _startTimer: function(){ + if(!this._timer){ + this._timer = d.connect(runner, "run", this, "_cycle"); + ctr++; + } + if(!timer){ + timer = setInterval(d.hitch(runner, "run"), this.rate); + } + }, + + _stopTimer: function(){ + if(this._timer){ + d.disconnect(this._timer); + this._timer = null; + ctr--; + } + if(ctr <= 0){ + clearInterval(timer); + timer = null; + ctr = 0; + } + } + + }); + + var _makeFadeable = + d.isIE ? function(node){ + // only set the zoom if the "tickle" value would be the same as the + // default + var ns = node.style; + // don't set the width to auto if it didn't already cascade that way. + // We don't want to f anyones designs + if(!ns.width.length && d.style(node, "width") == "auto"){ + ns.width = "auto"; + } + } : + function(){}; + + dojo._fade = function(/*Object*/ args){ + // summary: + // Returns an animation that will fade the node defined by + // args.node from the start to end values passed (args.start + // args.end) (end is mandatory, start is optional) + + args.node = d.byId(args.node); + var fArgs = _mixin({ properties: {} }, args), + props = (fArgs.properties.opacity = {}); + + props.start = !("start" in fArgs) ? + function(){ + return +d.style(fArgs.node, "opacity")||0; + } : fArgs.start; + props.end = fArgs.end; + + var anim = d.animateProperty(fArgs); + d.connect(anim, "beforeBegin", d.partial(_makeFadeable, fArgs.node)); + + return anim; // dojo.Animation + }; + + /*===== + dojo.__FadeArgs = function(node, duration, easing){ + // node: DOMNode|String + // The node referenced in the animation + // duration: Integer? + // Duration of the animation in milliseconds. + // easing: Function? + // An easing function. + this.node = node; + this.duration = duration; + this.easing = easing; + } + =====*/ + + dojo.fadeIn = function(/*dojo.__FadeArgs*/ args){ + // summary: + // Returns an animation that will fade node defined in 'args' from + // its current opacity to fully opaque. + return d._fade(_mixin({ end: 1 }, args)); // dojo.Animation + }; + + dojo.fadeOut = function(/*dojo.__FadeArgs*/ args){ + // summary: + // Returns an animation that will fade node defined in 'args' + // from its current opacity to fully transparent. + return d._fade(_mixin({ end: 0 }, args)); // dojo.Animation + }; + + dojo._defaultEasing = function(/*Decimal?*/ n){ + // summary: The default easing function for dojo.Animation(s) + return 0.5 + ((Math.sin((n + 1.5) * Math.PI)) / 2); + }; + + var PropLine = function(properties){ + // PropLine is an internal class which is used to model the values of + // an a group of CSS properties across an animation lifecycle. In + // particular, the "getValue" function handles getting interpolated + // values between start and end for a particular CSS value. + this._properties = properties; + for(var p in properties){ + var prop = properties[p]; + if(prop.start instanceof d.Color){ + // create a reusable temp color object to keep intermediate results + prop.tempColor = new d.Color(); + } + } + }; + + PropLine.prototype.getValue = function(r){ + var ret = {}; + for(var p in this._properties){ + var prop = this._properties[p], + start = prop.start; + if(start instanceof d.Color){ + ret[p] = d.blendColors(start, prop.end, r, prop.tempColor).toCss(); + }else if(!d.isArray(start)){ + ret[p] = ((prop.end - start) * r) + start + (p != "opacity" ? prop.units || "px" : 0); + } + } + return ret; + }; + + /*===== + dojo.declare("dojo.__AnimArgs", [dojo.__FadeArgs], { + // Properties: Object? + // A hash map of style properties to Objects describing the transition, + // such as the properties of dojo._Line with an additional 'units' property + properties: {} + + //TODOC: add event callbacks + }); + =====*/ + + dojo.animateProperty = function(/*dojo.__AnimArgs*/ args){ + // summary: + // Returns an animation that will transition the properties of + // node defined in `args` depending how they are defined in + // `args.properties` + // + // description: + // `dojo.animateProperty` is the foundation of most `dojo.fx` + // animations. It takes an object of "properties" corresponding to + // style properties, and animates them in parallel over a set + // duration. + // + // example: + // A simple animation that changes the width of the specified node. + // | dojo.animateProperty({ + // | node: "nodeId", + // | properties: { width: 400 }, + // | }).play(); + // Dojo figures out the start value for the width and converts the + // integer specified for the width to the more expressive but + // verbose form `{ width: { end: '400', units: 'px' } }` which you + // can also specify directly. Defaults to 'px' if ommitted. + // + // example: + // Animate width, height, and padding over 2 seconds... the + // pedantic way: + // | dojo.animateProperty({ node: node, duration:2000, + // | properties: { + // | width: { start: '200', end: '400', units:"px" }, + // | height: { start:'200', end: '400', units:"px" }, + // | paddingTop: { start:'5', end:'50', units:"px" } + // | } + // | }).play(); + // Note 'paddingTop' is used over 'padding-top'. Multi-name CSS properties + // are written using "mixed case", as the hyphen is illegal as an object key. + // + // example: + // Plug in a different easing function and register a callback for + // when the animation ends. Easing functions accept values between + // zero and one and return a value on that basis. In this case, an + // exponential-in curve. + // | dojo.animateProperty({ + // | node: "nodeId", + // | // dojo figures out the start value + // | properties: { width: { end: 400 } }, + // | easing: function(n){ + // | return (n==0) ? 0 : Math.pow(2, 10 * (n - 1)); + // | }, + // | onEnd: function(node){ + // | // called when the animation finishes. The animation + // | // target is passed to this function + // | } + // | }).play(500); // delay playing half a second + // + // example: + // Like all `dojo.Animation`s, animateProperty returns a handle to the + // Animation instance, which fires the events common to Dojo FX. Use `dojo.connect` + // to access these events outside of the Animation definiton: + // | var anim = dojo.animateProperty({ + // | node:"someId", + // | properties:{ + // | width:400, height:500 + // | } + // | }); + // | dojo.connect(anim,"onEnd", function(){ + // | console.log("animation ended"); + // | }); + // | // play the animation now: + // | anim.play(); + // + // example: + // Each property can be a function whose return value is substituted along. + // Additionally, each measurement (eg: start, end) can be a function. The node + // reference is passed direcly to callbacks. + // | dojo.animateProperty({ + // | node:"mine", + // | properties:{ + // | height:function(node){ + // | // shrink this node by 50% + // | return dojo.position(node).h / 2 + // | }, + // | width:{ + // | start:function(node){ return 100; }, + // | end:function(node){ return 200; } + // | } + // | } + // | }).play(); + // + + var n = args.node = d.byId(args.node); + if(!args.easing){ args.easing = d._defaultEasing; } + + var anim = new d.Animation(args); + d.connect(anim, "beforeBegin", anim, function(){ + var pm = {}; + for(var p in this.properties){ + // Make shallow copy of properties into pm because we overwrite + // some values below. In particular if start/end are functions + // we don't want to overwrite them or the functions won't be + // called if the animation is reused. + if(p == "width" || p == "height"){ + this.node.display = "block"; + } + var prop = this.properties[p]; + if(d.isFunction(prop)){ + prop = prop(n); + } + prop = pm[p] = _mixin({}, (d.isObject(prop) ? prop: { end: prop })); + + if(d.isFunction(prop.start)){ + prop.start = prop.start(n); + } + if(d.isFunction(prop.end)){ + prop.end = prop.end(n); + } + var isColor = (p.toLowerCase().indexOf("color") >= 0); + function getStyle(node, p){ + // dojo.style(node, "height") can return "auto" or "" on IE; this is more reliable: + var v = { height: node.offsetHeight, width: node.offsetWidth }[p]; + if(v !== undefined){ return v; } + v = d.style(node, p); + return (p == "opacity") ? +v : (isColor ? v : parseFloat(v)); + } + if(!("end" in prop)){ + prop.end = getStyle(n, p); + }else if(!("start" in prop)){ + prop.start = getStyle(n, p); + } + + if(isColor){ + prop.start = new d.Color(prop.start); + prop.end = new d.Color(prop.end); + }else{ + prop.start = (p == "opacity") ? +prop.start : parseFloat(prop.start); + } + } + this.curve = new PropLine(pm); + }); + d.connect(anim, "onAnimate", d.hitch(d, "style", anim.node)); + return anim; // dojo.Animation + }; + + dojo.anim = function( /*DOMNode|String*/ node, + /*Object*/ properties, + /*Integer?*/ duration, + /*Function?*/ easing, + /*Function?*/ onEnd, + /*Integer?*/ delay){ + // summary: + // A simpler interface to `dojo.animateProperty()`, also returns + // an instance of `dojo.Animation` but begins the animation + // immediately, unlike nearly every other Dojo animation API. + // description: + // `dojo.anim` is a simpler (but somewhat less powerful) version + // of `dojo.animateProperty`. It uses defaults for many basic properties + // and allows for positional parameters to be used in place of the + // packed "property bag" which is used for other Dojo animation + // methods. + // + // The `dojo.Animation` object returned from `dojo.anim` will be + // already playing when it is returned from this function, so + // calling play() on it again is (usually) a no-op. + // node: + // a DOM node or the id of a node to animate CSS properties on + // duration: + // The number of milliseconds over which the animation + // should run. Defaults to the global animation default duration + // (350ms). + // easing: + // An easing function over which to calculate acceleration + // and deceleration of the animation through its duration. + // A default easing algorithm is provided, but you may + // plug in any you wish. A large selection of easing algorithms + // are available in `dojo.fx.easing`. + // onEnd: + // A function to be called when the animation finishes + // running. + // delay: + // The number of milliseconds to delay beginning the + // animation by. The default is 0. + // example: + // Fade out a node + // | dojo.anim("id", { opacity: 0 }); + // example: + // Fade out a node over a full second + // | dojo.anim("id", { opacity: 0 }, 1000); + return d.animateProperty({ // dojo.Animation + node: node, + duration: duration || d.Animation.prototype.duration, + properties: properties, + easing: easing, + onEnd: onEnd + }).play(delay || 0); + }; +})(); + +} + +if(!dojo._hasResource["dojo._base.browser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.browser"] = true; +dojo.provide("dojo._base.browser"); + +//Need this to be the last code segment in base, so do not place any +//dojo.requireIf calls in this file. Otherwise, due to how the build system +//puts all requireIf dependencies after the current file, the require calls +//could be called before all of base is defined. +dojo.forEach(dojo.config.require, function(i){ + dojo["require"](i); +}); + +} + + //INSERT dojo.i18n._preloadLocalizations HERE + + //Check if document already complete, and if so, just trigger page load + //listeners. NOTE: does not work with Firefox before 3.6. To support + //those browsers, set djConfig.afterOnLoad = true when you know Dojo is added + //after page load. Using a timeout so the rest of this + //script gets evaluated properly. This work needs to happen after the + //dojo.config.require work done in dojo._base. + if(dojo.isBrowser && (document.readyState === "complete" || dojo.config.afterOnLoad)){ + window.setTimeout(dojo._loadInit, 100); + } +})(); + diff --git a/tests/javascript/frameworks/dojo/dojo-1.6.0.js b/tests/javascript/frameworks/dojo/dojo-1.6.0.js new file mode 100644 index 0000000000000000000000000000000000000000..09bfc98314abf3f1fec1ef313cd09f9faa1705b1 --- /dev/null +++ b/tests/javascript/frameworks/dojo/dojo-1.6.0.js @@ -0,0 +1,11287 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + +/* + This is an optimized version of Dojo, built for deployment and not for + development. To get sources and documentation, please visit: + + http://dojotoolkit.org +*/ + +;(function(){ + + /* + dojo, dijit, and dojox must always be the first three, and in that order. + djConfig.scopeMap = [ + ["dojo", "fojo"], + ["dijit", "fijit"], + ["dojox", "fojox"] + + ] + */ + + /**Build will replace this comment with a scoped djConfig **/ + + //The null below can be relaced by a build-time value used instead of djConfig.scopeMap. + var sMap = null; + + //See if new scopes need to be defined. + if((sMap || (typeof djConfig != "undefined" && djConfig.scopeMap)) && (typeof window != "undefined")){ + var scopeDef = "", scopePrefix = "", scopeSuffix = "", scopeMap = {}, scopeMapRev = {}; + sMap = sMap || djConfig.scopeMap; + for(var i = 0; i < sMap.length; i++){ + //Make local variables, then global variables that use the locals. + var newScope = sMap[i]; + scopeDef += "var " + newScope[0] + " = {}; " + newScope[1] + " = " + newScope[0] + ";" + newScope[1] + "._scopeName = '" + newScope[1] + "';"; + scopePrefix += (i == 0 ? "" : ",") + newScope[0]; + scopeSuffix += (i == 0 ? "" : ",") + newScope[1]; + scopeMap[newScope[0]] = newScope[1]; + scopeMapRev[newScope[1]] = newScope[0]; + } + + eval(scopeDef + "dojo._scopeArgs = [" + scopeSuffix + "];"); + + dojo._scopePrefixArgs = scopePrefix; + dojo._scopePrefix = "(function(" + scopePrefix + "){"; + dojo._scopeSuffix = "})(" + scopeSuffix + ")"; + dojo._scopeMap = scopeMap; + dojo._scopeMapRev = scopeMapRev; + } + +/*===== +// note: +// 'djConfig' does not exist under 'dojo.*' so that it can be set before the +// 'dojo' variable exists. +// note: +// Setting any of these variables *after* the library has loaded does +// nothing at all. + +djConfig = { + // summary: + // Application code can set the global 'djConfig' prior to loading + // the library to override certain global settings for how dojo works. + // + // isDebug: Boolean + // Defaults to `false`. If set to `true`, ensures that Dojo provides + // extended debugging feedback via Firebug. If Firebug is not available + // on your platform, setting `isDebug` to `true` will force Dojo to + // pull in (and display) the version of Firebug Lite which is + // integrated into the Dojo distribution, thereby always providing a + // debugging/logging console when `isDebug` is enabled. Note that + // Firebug's `console.*` methods are ALWAYS defined by Dojo. If + // `isDebug` is false and you are on a platform without Firebug, these + // methods will be defined as no-ops. + isDebug: false, + // debugAtAllCosts: Boolean + // Defaults to `false`. If set to `true`, this triggers an alternate + // mode of the package system in which dependencies are detected and + // only then are resources evaluated in dependency order via + // ` + // | + d._modulePrefixes[module] = { name: module, value: prefix }; + }; + + dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){ + // summary: + // Declares translated resources and loads them if necessary, in the + // same style as dojo.require. Contents of the resource bundle are + // typically strings, but may be any name/value pair, represented in + // JSON format. See also `dojo.i18n.getLocalization`. + // + // description: + // Load translated resource bundles provided underneath the "nls" + // directory within a package. Translated resources may be located in + // different packages throughout the source tree. + // + // Each directory is named for a locale as specified by RFC 3066, + // (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase. + // Note that the two bundles in the example do not define all the + // same variants. For a given locale, bundles will be loaded for + // that locale and all more general locales above it, including a + // fallback at the root directory. For example, a declaration for + // the "de-at" locale will first load `nls/de-at/bundleone.js`, + // then `nls/de/bundleone.js` and finally `nls/bundleone.js`. The + // data will be flattened into a single Object so that lookups + // will follow this cascading pattern. An optional build step can + // preload the bundles to avoid data redundancy and the multiple + // network hits normally required to load these resources. + // + // moduleName: + // name of the package containing the "nls" directory in which the + // bundle is found + // + // bundleName: + // bundle name, i.e. the filename without the '.js' suffix. Using "nls" as a + // a bundle name is not supported, since "nls" is the name of the folder + // that holds bundles. Using "nls" as the bundle name will cause problems + // with the custom build. + // + // locale: + // the locale to load (optional) By default, the browser's user + // locale as defined by dojo.locale + // + // availableFlatLocales: + // A comma-separated list of the available, flattened locales for this + // bundle. This argument should only be set by the build process. + // + // example: + // A particular widget may define one or more resource bundles, + // structured in a program as follows, where moduleName is + // mycode.mywidget and bundleNames available include bundleone and + // bundletwo: + // | ... + // | mycode/ + // | mywidget/ + // | nls/ + // | bundleone.js (the fallback translation, English in this example) + // | bundletwo.js (also a fallback translation) + // | de/ + // | bundleone.js + // | bundletwo.js + // | de-at/ + // | bundleone.js + // | en/ + // | (empty; use the fallback translation) + // | en-us/ + // | bundleone.js + // | en-gb/ + // | bundleone.js + // | es/ + // | bundleone.js + // | bundletwo.js + // | ...etc + // | ... + // + + d.require("dojo.i18n"); + d.i18n._requireLocalization.apply(d.hostenv, arguments); + }; + + var ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"), + ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"); + + dojo._Url = function(/*dojo._Url|String...*/){ + // summary: + // Constructor to create an object representing a URL. + // It is marked as private, since we might consider removing + // or simplifying it. + // description: + // Each argument is evaluated in order relative to the next until + // a canonical uri is produced. To get an absolute Uri relative to + // the current document use: + // new dojo._Url(document.baseURI, url) + + var n = null, + _a = arguments, + uri = [_a[0]]; + // resolve uri components relative to each other + for(var i = 1; i<_a.length; i++){ + if(!_a[i]){ continue; } + + // Safari doesn't support this.constructor so we have to be explicit + // FIXME: Tracked (and fixed) in Webkit bug 3537. + // http://bugs.webkit.org/show_bug.cgi?id=3537 + var relobj = new d._Url(_a[i]+""), + uriobj = new d._Url(uri[0]+""); + + if( + relobj.path == "" && + !relobj.scheme && + !relobj.authority && + !relobj.query + ){ + if(relobj.fragment != n){ + uriobj.fragment = relobj.fragment; + } + relobj = uriobj; + }else if(!relobj.scheme){ + relobj.scheme = uriobj.scheme; + + if(!relobj.authority){ + relobj.authority = uriobj.authority; + + if(relobj.path.charAt(0) != "/"){ + var path = uriobj.path.substring(0, + uriobj.path.lastIndexOf("/") + 1) + relobj.path; + + var segs = path.split("/"); + for(var j = 0; j < segs.length; j++){ + if(segs[j] == "."){ + // flatten "./" references + if(j == segs.length - 1){ + segs[j] = ""; + }else{ + segs.splice(j, 1); + j--; + } + }else if(j > 0 && !(j == 1 && segs[0] == "") && + segs[j] == ".." && segs[j-1] != ".."){ + // flatten "../" references + if(j == (segs.length - 1)){ + segs.splice(j, 1); + segs[j - 1] = ""; + }else{ + segs.splice(j - 1, 2); + j -= 2; + } + } + } + relobj.path = segs.join("/"); + } + } + } + + uri = []; + if(relobj.scheme){ + uri.push(relobj.scheme, ":"); + } + if(relobj.authority){ + uri.push("//", relobj.authority); + } + uri.push(relobj.path); + if(relobj.query){ + uri.push("?", relobj.query); + } + if(relobj.fragment){ + uri.push("#", relobj.fragment); + } + } + + this.uri = uri.join(""); + + // break the uri into its main components + var r = this.uri.match(ore); + + this.scheme = r[2] || (r[1] ? "" : n); + this.authority = r[4] || (r[3] ? "" : n); + this.path = r[5]; // can never be undefined + this.query = r[7] || (r[6] ? "" : n); + this.fragment = r[9] || (r[8] ? "" : n); + + if(this.authority != n){ + // server based naming authority + r = this.authority.match(ire); + + this.user = r[3] || n; + this.password = r[4] || n; + this.host = r[6] || r[7]; // ipv6 || ipv4 + this.port = r[9] || n; + } + } + + dojo._Url.prototype.toString = function(){ return this.uri; }; + + dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ + // summary: + // Returns a `dojo._Url` object relative to a module. + // example: + // | var pngPath = dojo.moduleUrl("acme","images/small.png"); + // | console.dir(pngPath); // list the object properties + // | // create an image and set it's source to pngPath's value: + // | var img = document.createElement("img"); + // | // NOTE: we assign the string representation of the url object + // | img.src = pngPath.toString(); + // | // add our image to the document + // | dojo.body().appendChild(img); + // example: + // you may de-reference as far as you like down the package + // hierarchy. This is sometimes handy to avoid lenghty relative + // urls or for building portable sub-packages. In this example, + // the `acme.widget` and `acme.util` directories may be located + // under different roots (see `dojo.registerModulePath`) but the + // the modules which reference them can be unaware of their + // relative locations on the filesystem: + // | // somewhere in a configuration block + // | dojo.registerModulePath("acme.widget", "../../acme/widget"); + // | dojo.registerModulePath("acme.util", "../../util"); + // | + // | // ... + // | + // | // code in a module using acme resources + // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); + // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); + + var loc = d._getModuleSymbols(module).join('/'); + if(!loc){ return null; } + if(loc.lastIndexOf("/") != loc.length-1){ + loc += "/"; + } + + //If the path is an absolute path (starts with a / or is on another + //domain/xdomain) then don't add the baseUrl. + var colonIndex = loc.indexOf(":"); + if(loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > loc.indexOf("/"))){ + loc = d.baseUrl + loc; + } + + return new d._Url(loc, url); // dojo._Url + }; + +})(); + +/*===== +dojo.isBrowser = { + // example: + // | if(dojo.isBrowser){ ... } +}; + +dojo.isFF = { + // example: + // | if(dojo.isFF > 1){ ... } +}; + +dojo.isIE = { + // example: + // | if(dojo.isIE > 6){ + // | // we are IE7 + // | } +}; + +dojo.isSafari = { + // example: + // | if(dojo.isSafari){ ... } + // example: + // Detect iPhone: + // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ + // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test. + // | } +}; + +dojo = { + // isBrowser: Boolean + // True if the client is a web-browser + isBrowser: true, + // isFF: Number | undefined + // Version as a Number if client is FireFox. undefined otherwise. Corresponds to + // major detected FireFox version (1.5, 2, 3, etc.) + isFF: 2, + // isIE: Number | undefined + // Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to + // major detected IE version (6, 7, 8, etc.) + isIE: 6, + // isKhtml: Number | undefined + // Version as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major + // detected version. + isKhtml: 0, + // isWebKit: Number | undefined + // Version as a Number if client is a WebKit-derived browser (Konqueror, + // Safari, Chrome, etc.). undefined otherwise. + isWebKit: 0, + // isMozilla: Number | undefined + // Version as a Number if client is a Mozilla-based browser (Firefox, + // SeaMonkey). undefined otherwise. Corresponds to major detected version. + isMozilla: 0, + // isOpera: Number | undefined + // Version as a Number if client is Opera. undefined otherwise. Corresponds to + // major detected version. + isOpera: 0, + // isSafari: Number | undefined + // Version as a Number if client is Safari or iPhone. undefined otherwise. + isSafari: 0, + // isChrome: Number | undefined + // Version as a Number if client is Chrome browser. undefined otherwise. + isChrome: 0 + // isMac: Boolean + // True if the client runs on Mac +} +=====*/ +if(typeof window != 'undefined'){ + dojo.isBrowser = true; + dojo._name = "browser"; + + // attempt to figure out the path to dojo if it isn't set in the config + (function(){ + var d = dojo; + + // this is a scope protection closure. We set browser versions and grab + // the URL we were loaded from here. + + // grab the node we were loaded from + if(document && document.getElementsByTagName){ + var scripts = document.getElementsByTagName("script"); + var rePkg = /dojo(\.xd)?\.js(\W|$)/i; + for(var i = 0; i < scripts.length; i++){ + var src = scripts[i].getAttribute("src"); + if(!src){ continue; } + var m = src.match(rePkg); + if(m){ + // find out where we came from + if(!d.config.baseUrl){ + d.config.baseUrl = src.substring(0, m.index); + } + // and find out if we need to modify our behavior + var cfg = (scripts[i].getAttribute("djConfig") || scripts[i].getAttribute("data-dojo-config")); + if(cfg){ + var cfgo = eval("({ "+cfg+" })"); + for(var x in cfgo){ + dojo.config[x] = cfgo[x]; + } + } + break; // "first Dojo wins" + } + } + } + d.baseUrl = d.config.baseUrl; + + // fill in the rendering support information in dojo.render.* + var n = navigator; + var dua = n.userAgent, + dav = n.appVersion, + tv = parseFloat(dav); + + if(dua.indexOf("Opera") >= 0){ d.isOpera = tv; } + if(dua.indexOf("AdobeAIR") >= 0){ d.isAIR = 1; } + d.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : 0; + d.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined; + d.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined; + d.isMac = dav.indexOf("Macintosh") >= 0; + + // safari detection derived from: + // http://developer.apple.com/internet/safari/faq.html#anchor2 + // http://developer.apple.com/internet/safari/uamatrix.html + var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0); + if(index && !dojo.isChrome){ + // try to grab the explicit Safari version first. If we don't get + // one, look for less than 419.3 as the indication that we're on something + // "Safari 2-ish". + d.isSafari = parseFloat(dav.split("Version/")[1]); + if(!d.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){ + d.isSafari = 2; + } + } + + if(dua.indexOf("Gecko") >= 0 && !d.isKhtml && !d.isWebKit){ d.isMozilla = d.isMoz = tv; } + if(d.isMoz){ + //We really need to get away from this. Consider a sane isGecko approach for the future. + d.isFF = parseFloat(dua.split("Firefox/")[1] || dua.split("Minefield/")[1]) || undefined; + } + if(document.all && !d.isOpera){ + d.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined; + //In cases where the page has an HTTP header or META tag with + //X-UA-Compatible, then it is in emulation mode. + //Make sure isIE reflects the desired version. + //document.documentMode of 5 means quirks mode. + //Only switch the value if documentMode's major version + //is different from isIE's major version. + var mode = document.documentMode; + if(mode && mode != 5 && Math.floor(d.isIE) != mode){ + d.isIE = mode; + } + } + + //Workaround to get local file loads of dojo to work on IE 7 + //by forcing to not use native xhr. + if(dojo.isIE && window.location.protocol === "file:"){ + dojo.config.ieForceActiveXXhr=true; + } + + d.isQuirks = document.compatMode == "BackCompat"; + + // TODO: is the HTML LANG attribute relevant? + d.locale = dojo.config.locale || (d.isIE ? n.userLanguage : n.language).toLowerCase(); + + // These are in order of decreasing likelihood; this will change in time. + d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; + + d._xhrObj = function(){ + // summary: + // does the work of portably generating a new XMLHTTPRequest object. + var http, last_e; + if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){ + try{ http = new XMLHttpRequest(); }catch(e){} + } + if(!http){ + for(var i=0; i<3; ++i){ + var progid = d._XMLHTTP_PROGIDS[i]; + try{ + http = new ActiveXObject(progid); + }catch(e){ + last_e = e; + } + + if(http){ + d._XMLHTTP_PROGIDS = [progid]; // so faster next time + break; + } + } + } + + if(!http){ + throw new Error("XMLHTTP not available: "+last_e); + } + + return http; // XMLHTTPRequest instance + } + + d._isDocumentOk = function(http){ + var stat = http.status || 0; + return (stat >= 200 && stat < 300) || // Boolean + stat == 304 || // allow any 2XX response code + stat == 1223 || // get it out of the cache + // Internet Explorer mangled the status code + !stat; // OR we're Titanium/browser chrome/chrome extension requesting a local file + } + + //See if base tag is in use. + //This is to fix http://trac.dojotoolkit.org/ticket/3973, + //but really, we need to find out how to get rid of the dojo._Url reference + //below and still have DOH work with the dojo.i18n test following some other + //test that uses the test frame to load a document (trac #2757). + //Opera still has problems, but perhaps a larger issue of base tag support + //with XHR requests (hasBase is true, but the request is still made to document + //path, not base path). + var owloc = window.location+""; + var base = document.getElementsByTagName("base"); + var hasBase = (base && base.length > 0); + + d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){ + // summary: Read the contents of the specified uri and return those contents. + // uri: + // A relative or absolute uri. If absolute, it still must be in + // the same "domain" as we are. + // fail_ok: + // Default false. If fail_ok and loading fails, return null + // instead of throwing. + // returns: The response text. null is returned when there is a + // failure and failure is okay (an exception otherwise) + + // NOTE: must be declared before scope switches ie. this._xhrObj() + var http = d._xhrObj(); + + if(!hasBase && dojo._Url){ + uri = (new dojo._Url(owloc, uri)).toString(); + } + + if(d.config.cacheBust){ + //Make sure we have a string before string methods are used on uri + uri += ""; + uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,""); + } + + http.open('GET', uri, false); + try{ + http.send(null); + if(!d._isDocumentOk(http)){ + var err = Error("Unable to load "+uri+" status:"+ http.status); + err.status = http.status; + err.responseText = http.responseText; + throw err; + } + }catch(e){ + if(fail_ok){ return null; } // null + // rethrow the exception + throw e; + } + return http.responseText; // String + } + + var _w = window; + var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){ + // summary: + // non-destructively adds the specified function to the node's + // evtName handler. + // evtName: should be in the form "onclick" for "onclick" handlers. + // Make sure you pass in the "on" part. + var _a = _w.attachEvent || _w.addEventListener; + evtName = _w.attachEvent ? evtName : evtName.substring(2); + _a(evtName, function(){ + fp.apply(_w, arguments); + }, false); + }; + + d._windowUnloaders = []; + + d.windowUnloaded = function(){ + // summary: + // signal fired by impending window destruction. You may use + // dojo.addOnWindowUnload() to register a listener for this + // event. NOTE: if you wish to dojo.connect() to this method + // to perform page/application cleanup, be aware that this + // event WILL NOT fire if no handler has been registered with + // dojo.addOnWindowUnload. This behavior started in Dojo 1.3. + // Previous versions always triggered dojo.windowUnloaded. See + // dojo.addOnWindowUnload for more info. + var mll = d._windowUnloaders; + while(mll.length){ + (mll.pop())(); + } + d = null; + }; + + var _onWindowUnloadAttached = 0; + d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ + // summary: + // registers a function to be triggered when window.onunload + // fires. + // description: + // The first time that addOnWindowUnload is called Dojo + // will register a page listener to trigger your unload + // handler with. Note that registering these handlers may + // destory "fastback" page caching in browsers that support + // it. Be careful trying to modify the DOM or access + // JavaScript properties during this phase of page unloading: + // they may not always be available. Consider + // dojo.addOnUnload() if you need to modify the DOM or do + // heavy JavaScript work since it fires at the eqivalent of + // the page's "onbeforeunload" event. + // example: + // | dojo.addOnWindowUnload(functionPointer) + // | dojo.addOnWindowUnload(object, "functionName"); + // | dojo.addOnWindowUnload(object, function(){ /* ... */}); + + d._onto(d._windowUnloaders, obj, functionName); + if(!_onWindowUnloadAttached){ + _onWindowUnloadAttached = 1; + _handleNodeEvent("onunload", d.windowUnloaded); + } + }; + + var _onUnloadAttached = 0; + d.addOnUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ + // summary: + // registers a function to be triggered when the page unloads. + // description: + // The first time that addOnUnload is called Dojo will + // register a page listener to trigger your unload handler + // with. + // + // In a browser enviroment, the functions will be triggered + // during the window.onbeforeunload event. Be careful of doing + // too much work in an unload handler. onbeforeunload can be + // triggered if a link to download a file is clicked, or if + // the link is a javascript: link. In these cases, the + // onbeforeunload event fires, but the document is not + // actually destroyed. So be careful about doing destructive + // operations in a dojo.addOnUnload callback. + // + // Further note that calling dojo.addOnUnload will prevent + // browsers from using a "fast back" cache to make page + // loading via back button instantaneous. + // example: + // | dojo.addOnUnload(functionPointer) + // | dojo.addOnUnload(object, "functionName") + // | dojo.addOnUnload(object, function(){ /* ... */}); + + d._onto(d._unloaders, obj, functionName); + if(!_onUnloadAttached){ + _onUnloadAttached = 1; + _handleNodeEvent("onbeforeunload", dojo.unloaded); + } + }; + + })(); + + //START DOMContentLoaded + dojo._initFired = false; + dojo._loadInit = function(e){ + if(dojo._scrollIntervalId){ + clearInterval(dojo._scrollIntervalId); + dojo._scrollIntervalId = 0; + } + + if(!dojo._initFired){ + dojo._initFired = true; + + //Help out IE to avoid memory leak. + if(!dojo.config.afterOnLoad && window.detachEvent){ + window.detachEvent("onload", dojo._loadInit); + } + + if(dojo._inFlightCount == 0){ + dojo._modulesLoaded(); + } + } + } + + if(!dojo.config.afterOnLoad){ + if(document.addEventListener){ + //Standards. Hooray! Assumption here that if standards based, + //it knows about DOMContentLoaded. It is OK if it does not, the fall through + //to window onload should be good enough. + document.addEventListener("DOMContentLoaded", dojo._loadInit, false); + window.addEventListener("load", dojo._loadInit, false); + }else if(window.attachEvent){ + window.attachEvent("onload", dojo._loadInit); + + //DOMContentLoaded approximation. Diego Perini found this MSDN article + //that indicates doScroll is available after DOM ready, so do a setTimeout + //to check when it is available. + //http://msdn.microsoft.com/en-us/library/ms531426.aspx + if(!dojo.config.skipIeDomLoaded && self === self.top){ + dojo._scrollIntervalId = setInterval(function (){ + try{ + //When dojo is loaded into an iframe in an IE HTML Application + //(HTA), such as in a selenium test, javascript in the iframe + //can't see anything outside of it, so self===self.top is true, + //but the iframe is not the top window and doScroll will be + //available before document.body is set. Test document.body + //before trying the doScroll trick + if(document.body){ + document.documentElement.doScroll("left"); + dojo._loadInit(); + } + }catch (e){} + }, 30); + } + } + } + + if(dojo.isIE){ + try{ + (function(){ + document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); + var vmlElems = ["*", "group", "roundrect", "oval", "shape", "rect", "imagedata", "path", "textpath", "text"], + i = 0, l = 1, s = document.createStyleSheet(); + if(dojo.isIE >= 8){ + i = 1; + l = vmlElems.length; + } + for(; i < l; ++i){ + s.addRule("v\\:" + vmlElems[i], "behavior:url(#default#VML); display:inline-block"); + } + })(); + }catch(e){} + } + //END DOMContentLoaded + + /* + OpenAjax.subscribe("OpenAjax", "onload", function(){ + if(dojo._inFlightCount == 0){ + dojo._modulesLoaded(); + } + }); + + OpenAjax.subscribe("OpenAjax", "onunload", function(){ + dojo.unloaded(); + }); + */ +} //if (typeof window != 'undefined') + +//Register any module paths set up in djConfig. Need to do this +//in the hostenvs since hostenv_browser can read djConfig from a +//script tag's attribute. +(function(){ + var mp = dojo.config["modulePaths"]; + if(mp){ + for(var param in mp){ + dojo.registerModulePath(param, mp[param]); + } + } +})(); + +//Load debug code if necessary. +if(dojo.config.isDebug){ + dojo.require("dojo._firebug.firebug"); +} + +if(dojo.config.debugAtAllCosts){ + // this breaks the new AMD based module loader. The XDomain won't be necessary + // anyway if you switch to the asynchronous loader + //dojo.config.useXDomain = true; + //dojo.require("dojo._base._loader.loader_xd"); + dojo.require("dojo._base._loader.loader_debug"); + dojo.require("dojo.i18n"); +} + +if(!dojo._hasResource["dojo._base.lang"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.lang"] = true; +dojo.provide("dojo._base.lang"); + +(function(){ + var d = dojo, opts = Object.prototype.toString; + + // Crockford (ish) functions + + dojo.isString = function(/*anything*/ it){ + // summary: + // Return true if it is a String + return (typeof it == "string" || it instanceof String); // Boolean + }; + + dojo.isArray = function(/*anything*/ it){ + // summary: + // Return true if it is an Array. + // Does not work on Arrays created in other windows. + return it && (it instanceof Array || typeof it == "array"); // Boolean + }; + + dojo.isFunction = function(/*anything*/ it){ + // summary: + // Return true if it is a Function + return opts.call(it) === "[object Function]"; + }; + + dojo.isObject = function(/*anything*/ it){ + // summary: + // Returns true if it is a JavaScript object (or an Array, a Function + // or null) + return it !== undefined && + (it === null || typeof it == "object" || d.isArray(it) || d.isFunction(it)); // Boolean + }; + + dojo.isArrayLike = function(/*anything*/ it){ + // summary: + // similar to dojo.isArray() but more permissive + // description: + // Doesn't strongly test for "arrayness". Instead, settles for "isn't + // a string or number and has a length property". Arguments objects + // and DOM collections will return true when passed to + // dojo.isArrayLike(), but will return false when passed to + // dojo.isArray(). + // returns: + // If it walks like a duck and quacks like a duck, return `true` + return it && it !== undefined && // Boolean + // keep out built-in constructors (Number, String, ...) which have length + // properties + !d.isString(it) && !d.isFunction(it) && + !(it.tagName && it.tagName.toLowerCase() == 'form') && + (d.isArray(it) || isFinite(it.length)); + }; + + dojo.isAlien = function(/*anything*/ it){ + // summary: + // Returns true if it is a built-in function or some other kind of + // oddball that *should* report as a function but doesn't + return it && !d.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean + }; + + dojo.extend = function(/*Object*/ constructor, /*Object...*/ props){ + // summary: + // Adds all properties and methods of props to constructor's + // prototype, making them available to all instances created with + // constructor. + for(var i=1, l=arguments.length; i 2){ + return d._hitchArgs.apply(d, arguments); // Function + } + if(!method){ + method = scope; + scope = null; + } + if(d.isString(method)){ + scope = scope || d.global; + if(!scope[method]){ throw(['dojo.hitch: scope["', method, '"] is null (scope="', scope, '")'].join('')); } + return function(){ return scope[method].apply(scope, arguments || []); }; // Function + } + return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function + }; + + /*===== + dojo.delegate = function(obj, props){ + // summary: + // Returns a new object which "looks" to obj for properties which it + // does not have a value for. Optionally takes a bag of properties to + // seed the returned object with initially. + // description: + // This is a small implementaton of the Boodman/Crockford delegation + // pattern in JavaScript. An intermediate object constructor mediates + // the prototype chain for the returned object, using it to delegate + // down to obj for property lookup when object-local lookup fails. + // This can be thought of similarly to ES4's "wrap", save that it does + // not act on types but rather on pure objects. + // obj: + // The object to delegate to for properties not found directly on the + // return object or in props. + // props: + // an object containing properties to assign to the returned object + // returns: + // an Object of anonymous type + // example: + // | var foo = { bar: "baz" }; + // | var thinger = dojo.delegate(foo, { thud: "xyzzy"}); + // | thinger.bar == "baz"; // delegated to foo + // | foo.thud == undefined; // by definition + // | thinger.thud == "xyzzy"; // mixed in from props + // | foo.bar = "thonk"; + // | thinger.bar == "thonk"; // still delegated to foo's bar + } + =====*/ + + dojo.delegate = dojo._delegate = (function(){ + // boodman/crockford delegation w/ cornford optimization + function TMP(){} + return function(obj, props){ + TMP.prototype = obj; + var tmp = new TMP(); + TMP.prototype = null; + if(props){ + d._mixin(tmp, props); + } + return tmp; // Object + }; + })(); + + /*===== + dojo._toArray = function(obj, offset, startWith){ + // summary: + // Converts an array-like object (i.e. arguments, DOMCollection) to an + // array. Returns a new Array with the elements of obj. + // obj: Object + // the object to "arrayify". We expect the object to have, at a + // minimum, a length property which corresponds to integer-indexed + // properties. + // offset: Number? + // the location in obj to start iterating from. Defaults to 0. + // Optional. + // startWith: Array? + // An array to pack with the properties of obj. If provided, + // properties in obj are appended at the end of startWith and + // startWith is the returned array. + } + =====*/ + + var efficient = function(obj, offset, startWith){ + return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0)); + }; + + var slow = function(obj, offset, startWith){ + var arr = startWith||[]; + for(var x = offset || 0; x < obj.length; x++){ + arr.push(obj[x]); + } + return arr; + }; + + dojo._toArray = + d.isIE ? function(obj){ + return ((obj.item) ? slow : efficient).apply(this, arguments); + } : + efficient; + + dojo.partial = function(/*Function|String*/method /*, ...*/){ + // summary: + // similar to hitch() except that the scope object is left to be + // whatever the execution context eventually becomes. + // description: + // Calling dojo.partial is the functional equivalent of calling: + // | dojo.hitch(null, funcName, ...); + var arr = [ null ]; + return d.hitch.apply(d, arr.concat(d._toArray(arguments))); // Function + }; + + var extraNames = d._extraNames, extraLen = extraNames.length, empty = {}; + + dojo.clone = function(/*anything*/ o){ + // summary: + // Clones objects (including DOM nodes) and all children. + // Warning: do not clone cyclic structures. + if(!o || typeof o != "object" || d.isFunction(o)){ + // null, undefined, any non-object, or function + return o; // anything + } + if(o.nodeType && "cloneNode" in o){ + // DOM Node + return o.cloneNode(true); // Node + } + if(o instanceof Date){ + // Date + return new Date(o.getTime()); // Date + } + if(o instanceof RegExp){ + // RegExp + return new RegExp(o); // RegExp + } + var r, i, l, s, name; + if(d.isArray(o)){ + // array + r = []; + for(i = 0, l = o.length; i < l; ++i){ + if(i in o){ + r.push(d.clone(o[i])); + } + } +// we don't clone functions for performance reasons +// }else if(d.isFunction(o)){ +// // function +// r = function(){ return o.apply(this, arguments); }; + }else{ + // generic objects + r = o.constructor ? new o.constructor() : {}; + } + for(name in o){ + // the "tobj" condition avoid copying properties in "source" + // inherited from Object.prototype. For example, if target has a custom + // toString() method, don't overwrite it with the toString() method + // that source inherited from Object.prototype + s = o[name]; + if(!(name in r) || (r[name] !== s && (!(name in empty) || empty[name] !== s))){ + r[name] = d.clone(s); + } + } + // IE doesn't recognize some custom functions in for..in + if(extraLen){ + for(i = 0; i < extraLen; ++i){ + name = extraNames[i]; + s = o[name]; + if(!(name in r) || (r[name] !== s && (!(name in empty) || empty[name] !== s))){ + r[name] = s; // functions only, we don't clone them + } + } + } + return r; // Object + }; + + /*===== + dojo.trim = function(str){ + // summary: + // Trims whitespace from both sides of the string + // str: String + // String to be trimmed + // returns: String + // Returns the trimmed string + // description: + // This version of trim() was selected for inclusion into the base due + // to its compact size and relatively good performance + // (see [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript) + // Uses String.prototype.trim instead, if available. + // The fastest but longest version of this function is located at + // dojo.string.trim() + return ""; // String + } + =====*/ + + dojo.trim = String.prototype.trim ? + function(str){ return str.trim(); } : + function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }; + + /*===== + dojo.replace = function(tmpl, map, pattern){ + // summary: + // Performs parameterized substitutions on a string. Throws an + // exception if any parameter is unmatched. + // tmpl: String + // String to be used as a template. + // map: Object|Function + // If an object, it is used as a dictionary to look up substitutions. + // If a function, it is called for every substitution with following + // parameters: a whole match, a name, an offset, and the whole template + // string (see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace + // for more details). + // pattern: RegEx? + // Optional regular expression objects that overrides the default pattern. + // Must be global and match one item. The default is: /\{([^\}]+)\}/g, + // which matches patterns like that: "{xxx}", where "xxx" is any sequence + // of characters, which doesn't include "}". + // returns: String + // Returns the substituted string. + // example: + // | // uses a dictionary for substitutions: + // | dojo.replace("Hello, {name.first} {name.last} AKA {nick}!", + // | { + // | nick: "Bob", + // | name: { + // | first: "Robert", + // | middle: "X", + // | last: "Cringely" + // | } + // | }); + // | // returns: Hello, Robert Cringely AKA Bob! + // example: + // | // uses an array for substitutions: + // | dojo.replace("Hello, {0} {2}!", + // | ["Robert", "X", "Cringely"]); + // | // returns: Hello, Robert Cringely! + // example: + // | // uses a function for substitutions: + // | function sum(a){ + // | var t = 0; + // | dojo.forEach(a, function(x){ t += x; }); + // | return t; + // | } + // | dojo.replace( + // | "{count} payments averaging {avg} USD per payment.", + // | dojo.hitch( + // | { payments: [11, 16, 12] }, + // | function(_, key){ + // | switch(key){ + // | case "count": return this.payments.length; + // | case "min": return Math.min.apply(Math, this.payments); + // | case "max": return Math.max.apply(Math, this.payments); + // | case "sum": return sum(this.payments); + // | case "avg": return sum(this.payments) / this.payments.length; + // | } + // | } + // | ) + // | ); + // | // prints: 3 payments averaging 13 USD per payment. + // example: + // | // uses an alternative PHP-like pattern for substitutions: + // | dojo.replace("Hello, ${0} ${2}!", + // | ["Robert", "X", "Cringely"], /\$\{([^\}]+)\}/g); + // | // returns: Hello, Robert Cringely! + return ""; // String + } + =====*/ + + var _pattern = /\{([^\}]+)\}/g; + dojo.replace = function(tmpl, map, pattern){ + return tmpl.replace(pattern || _pattern, d.isFunction(map) ? + map : function(_, k){ return d.getObject(k, false, map); }); + }; +})(); + +} + +if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.array"] = true; +dojo.provide("dojo._base.array"); + +(function(){ + var _getParts = function(arr, obj, cb){ + return [ + (typeof arr == "string") ? arr.split("") : arr, + obj || dojo.global, + // FIXME: cache the anonymous functions we create here? + (typeof cb == "string") ? new Function("item", "index", "array", cb) : cb + ]; + }; + + var everyOrSome = function(/*Boolean*/every, /*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + for(var i=0,l=arr.length; i end) || i < end){ + for(; i != end; i += step){ + if(array[i] == value){ return i; } + } + } + return -1; // Number + }, + + lastIndexOf: function(/*Array*/array, /*Object*/value, /*Integer?*/fromIndex){ + // summary: + // locates the last index of the provided value in the passed + // array. If the value is not found, -1 is returned. + // description: + // This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when + // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript + // 1.6's lastIndexOf skips the holes in the sparse array. + // For details on this method, see: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf + return dojo.indexOf(array, value, fromIndex, true); // Number + }, + + forEach: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + // summary: + // for every item in arr, callback is invoked. Return values are ignored. + // If you want to break out of the loop, consider using dojo.every() or dojo.some(). + // forEach does not allow breaking out of the loop over the items in arr. + // arr: + // the array to iterate over. If a string, operates on individual characters. + // callback: + // a function is invoked with three arguments: item, index, and array + // thisObject: + // may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when + // run over sparse arrays, this implemenation passes the "holes" in the sparse array to + // the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array. + // For more details, see: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach + // example: + // | // log out all members of the array: + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | function(item){ + // | console.log(item); + // | } + // | ); + // example: + // | // log out the members and their indexes + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | function(item, idx, arr){ + // | console.log(item, "at index:", idx); + // | } + // | ); + // example: + // | // use a scoped object member as the callback + // | + // | var obj = { + // | prefix: "logged via obj.callback:", + // | callback: function(item){ + // | console.log(this.prefix, item); + // | } + // | }; + // | + // | // specifying the scope function executes the callback in that scope + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | obj.callback, + // | obj + // | ); + // | + // | // alternately, we can accomplish the same thing with dojo.hitch() + // | dojo.forEach( + // | [ "thinger", "blah", "howdy", 10 ], + // | dojo.hitch(obj, "callback") + // | ); + + // match the behavior of the built-in forEach WRT empty arrs + if(!arr || !arr.length){ return; } + + // FIXME: there are several ways of handilng thisObject. Is + // dojo.global always the default context? + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + for(var i=0,l=arr.length; i1; }); + // example: + // | // returns true + // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); + return everyOrSome(true, arr, callback, thisObject); // Boolean + }, + + some: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ + // summary: + // Determines whether or not any item in arr satisfies the + // condition implemented by callback. + // arr: + // the array to iterate over. If a string, operates on individual characters. + // callback: + // a function is invoked with three arguments: item, index, + // and array and returns true if the condition is met. + // thisObject: + // may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when + // run over sparse arrays, this implemenation passes the "holes" in the sparse array to + // the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array. + // For more details, see: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/some + // example: + // | // is true + // | dojo.some([1, 2, 3, 4], function(item){ return item>1; }); + // example: + // | // is false + // | dojo.some([1, 2, 3, 4], function(item){ return item<1; }); + return everyOrSome(false, arr, callback, thisObject); // Boolean + }, + + map: function(/*Array|String*/arr, /*Function|String*/callback, /*Function?*/thisObject){ + // summary: + // applies callback to each element of arr and returns + // an Array with the results + // arr: + // the array to iterate on. If a string, operates on + // individual characters. + // callback: + // a function is invoked with three arguments, (item, index, + // array), and returns a value + // thisObject: + // may be used to scope the call to callback + // description: + // This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when + // run over sparse arrays, this implemenation passes the "holes" in the sparse array to + // the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array. + // For more details, see: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map + // example: + // | // returns [2, 3, 4, 5] + // | dojo.map([1, 2, 3, 4], function(item){ return item+1 }); + + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + var outArr = (arguments[3] ? (new arguments[3]()) : []); + for(var i=0,l=arr.length; i1; }); + + var _p = _getParts(arr, thisObject, callback); arr = _p[0]; + var outArr = []; + for(var i=0,l=arr.length; i= 0; --j){ + proto = lin[j].prototype; + if(!proto.hasOwnProperty("declaredClass")){ + proto.declaredClass = "uniqName_" + (counter++); + } + name = proto.declaredClass; + if(!nameMap.hasOwnProperty(name)){ + nameMap[name] = {count: 0, refs: [], cls: lin[j]}; + ++clsCount; + } + rec = nameMap[name]; + if(top && top !== rec){ + rec.refs.push(top); + ++top.count; + } + top = rec; + } + ++top.count; + roots[0].refs.push(top); + } + + // remove classes without external references recursively + while(roots.length){ + top = roots.pop(); + result.push(top.cls); + --clsCount; + // optimization: follow a single-linked chain + while(refs = top.refs, refs.length == 1){ + top = refs[0]; + if(!top || --top.count){ + // branch or end of chain => do not end to roots + top = 0; + break; + } + result.push(top.cls); + --clsCount; + } + if(top){ + // branch + for(i = 0, l = refs.length; i < l; ++i){ + top = refs[i]; + if(!--top.count){ + roots.push(top); + } + } + } + } + if(clsCount){ + err("can't build consistent linearization", className); + } + + // calculate the superclass offset + base = bases[0]; + result[0] = base ? + base._meta && base === result[result.length - base._meta.bases.length] ? + base._meta.bases.length : 1 : 0; + + return result; + } + + function inherited(args, a, f){ + var name, chains, bases, caller, meta, base, proto, opf, pos, + cache = this._inherited = this._inherited || {}; + + // crack arguments + if(typeof args == "string"){ + name = args; + args = a; + a = f; + } + f = 0; + + caller = args.callee; + name = name || caller.nom; + if(!name){ + err("can't deduce a name to call inherited()", this.declaredClass); + } + + meta = this.constructor._meta; + bases = meta.bases; + + pos = cache.p; + if(name != cname){ + // method + if(cache.c !== caller){ + // cache bust + pos = 0; + base = bases[0]; + meta = base._meta; + if(meta.hidden[name] !== caller){ + // error detection + chains = meta.chains; + if(chains && typeof chains[name] == "string"){ + err("calling chained method with inherited: " + name, this.declaredClass); + } + // find caller + do{ + meta = base._meta; + proto = base.prototype; + if(meta && (proto[name] === caller && proto.hasOwnProperty(name) || meta.hidden[name] === caller)){ + break; + } + }while(base = bases[++pos]); // intentional assignment + pos = base ? pos : -1; + } + } + // find next + base = bases[++pos]; + if(base){ + proto = base.prototype; + if(base._meta && proto.hasOwnProperty(name)){ + f = proto[name]; + }else{ + opf = op[name]; + do{ + proto = base.prototype; + f = proto[name]; + if(f && (base._meta ? proto.hasOwnProperty(name) : f !== opf)){ + break; + } + }while(base = bases[++pos]); // intentional assignment + } + } + f = base && f || op[name]; + }else{ + // constructor + if(cache.c !== caller){ + // cache bust + pos = 0; + meta = bases[0]._meta; + if(meta && meta.ctor !== caller){ + // error detection + chains = meta.chains; + if(!chains || chains.constructor !== "manual"){ + err("calling chained constructor with inherited", this.declaredClass); + } + // find caller + while(base = bases[++pos]){ // intentional assignment + meta = base._meta; + if(meta && meta.ctor === caller){ + break; + } + } + pos = base ? pos : -1; + } + } + // find next + while(base = bases[++pos]){ // intentional assignment + meta = base._meta; + f = meta ? meta.ctor : base; + if(f){ + break; + } + } + f = base && f; + } + + // cache the found super method + cache.c = f; + cache.p = pos; + + // now we have the result + if(f){ + return a === true ? f : f.apply(this, a || args); + } + // intentionally if a super method was not found + } + + function getInherited(name, args){ + if(typeof name == "string"){ + return this.inherited(name, args, true); + } + return this.inherited(name, true); + } + + // emulation of "instanceof" + function isInstanceOf(cls){ + var bases = this.constructor._meta.bases; + for(var i = 0, l = bases.length; i < l; ++i){ + if(bases[i] === cls){ + return true; + } + } + return this instanceof cls; + } + + function mixOwn(target, source){ + var name, i = 0, l = d._extraNames.length; + // add props adding metadata for incoming functions skipping a constructor + for(name in source){ + if(name != cname && source.hasOwnProperty(name)){ + target[name] = source[name]; + } + } + // process unenumerable methods on IE + for(; i < l; ++i){ + name = d._extraNames[i]; + if(name != cname && source.hasOwnProperty(name)){ + target[name] = source[name]; + } + } + } + + // implementation of safe mixin function + function safeMixin(target, source){ + var name, t, i = 0, l = d._extraNames.length; + // add props adding metadata for incoming functions skipping a constructor + for(name in source){ + t = source[name]; + if((t !== op[name] || !(name in op)) && name != cname){ + if(opts.call(t) == "[object Function]"){ + // non-trivial function method => attach its name + t.nom = name; + } + target[name] = t; + } + } + // process unenumerable methods on IE + for(; i < l; ++i){ + name = d._extraNames[i]; + t = source[name]; + if((t !== op[name] || !(name in op)) && name != cname){ + if(opts.call(t) == "[object Function]"){ + // non-trivial function method => attach its name + t.nom = name; + } + target[name] = t; + } + } + return target; + } + + function extend(source){ + safeMixin(this.prototype, source); + return this; + } + + // chained constructor compatible with the legacy dojo.declare() + function chainedConstructor(bases, ctorSpecial){ + return function(){ + var a = arguments, args = a, a0 = a[0], f, i, m, + l = bases.length, preArgs; + + if(!(this instanceof a.callee)){ + // not called via new, so force it + return applyNew(a); + } + + //this._inherited = {}; + // perform the shaman's rituals of the original dojo.declare() + // 1) call two types of the preamble + if(ctorSpecial && (a0 && a0.preamble || this.preamble)){ + // full blown ritual + preArgs = new Array(bases.length); + // prepare parameters + preArgs[0] = a; + for(i = 0;;){ + // process the preamble of the 1st argument + a0 = a[0]; + if(a0){ + f = a0.preamble; + if(f){ + a = f.apply(this, a) || a; + } + } + // process the preamble of this class + f = bases[i].prototype; + f = f.hasOwnProperty("preamble") && f.preamble; + if(f){ + a = f.apply(this, a) || a; + } + // one peculiarity of the preamble: + // it is called if it is not needed, + // e.g., there is no constructor to call + // let's watch for the last constructor + // (see ticket #9795) + if(++i == l){ + break; + } + preArgs[i] = a; + } + } + // 2) call all non-trivial constructors using prepared arguments + for(i = l - 1; i >= 0; --i){ + f = bases[i]; + m = f._meta; + f = m ? m.ctor : f; + if(f){ + f.apply(this, preArgs ? preArgs[i] : a); + } + } + // 3) continue the original ritual: call the postscript + f = this.postscript; + if(f){ + f.apply(this, args); + } + }; + } + + // chained constructor compatible with the legacy dojo.declare() + function singleConstructor(ctor, ctorSpecial){ + return function(){ + var a = arguments, t = a, a0 = a[0], f; + + if(!(this instanceof a.callee)){ + // not called via new, so force it + return applyNew(a); + } + + //this._inherited = {}; + // perform the shaman's rituals of the original dojo.declare() + // 1) call two types of the preamble + if(ctorSpecial){ + // full blown ritual + if(a0){ + // process the preamble of the 1st argument + f = a0.preamble; + if(f){ + t = f.apply(this, t) || t; + } + } + f = this.preamble; + if(f){ + // process the preamble of this class + f.apply(this, t); + // one peculiarity of the preamble: + // it is called even if it is not needed, + // e.g., there is no constructor to call + // let's watch for the last constructor + // (see ticket #9795) + } + } + // 2) call a constructor + if(ctor){ + ctor.apply(this, a); + } + // 3) continue the original ritual: call the postscript + f = this.postscript; + if(f){ + f.apply(this, a); + } + }; + } + + // plain vanilla constructor (can use inherited() to call its base constructor) + function simpleConstructor(bases){ + return function(){ + var a = arguments, i = 0, f, m; + + if(!(this instanceof a.callee)){ + // not called via new, so force it + return applyNew(a); + } + + //this._inherited = {}; + // perform the shaman's rituals of the original dojo.declare() + // 1) do not call the preamble + // 2) call the top constructor (it can use this.inherited()) + for(; f = bases[i]; ++i){ // intentional assignment + m = f._meta; + f = m ? m.ctor : f; + if(f){ + f.apply(this, a); + break; + } + } + // 3) call the postscript + f = this.postscript; + if(f){ + f.apply(this, a); + } + }; + } + + function chain(name, bases, reversed){ + return function(){ + var b, m, f, i = 0, step = 1; + if(reversed){ + i = bases.length - 1; + step = -1; + } + for(; b = bases[i]; i += step){ // intentional assignment + m = b._meta; + f = (m ? m.hidden : b.prototype)[name]; + if(f){ + f.apply(this, arguments); + } + } + }; + } + + // forceNew(ctor) + // return a new object that inherits from ctor.prototype but + // without actually running ctor on the object. + function forceNew(ctor){ + // create object with correct prototype using a do-nothing + // constructor + xtor.prototype = ctor.prototype; + var t = new xtor; + xtor.prototype = null; // clean up + return t; + } + + // applyNew(args) + // just like 'new ctor()' except that the constructor and its arguments come + // from args, which must be an array or an arguments object + function applyNew(args){ + // create an object with ctor's prototype but without + // calling ctor on it. + var ctor = args.callee, t = forceNew(ctor); + // execute the real constructor on the new object + ctor.apply(t, args); + return t; + } + + d.declare = function(className, superclass, props){ + // crack parameters + if(typeof className != "string"){ + props = superclass; + superclass = className; + className = ""; + } + props = props || {}; + + var proto, i, t, ctor, name, bases, chains, mixins = 1, parents = superclass; + + // build a prototype + if(opts.call(superclass) == "[object Array]"){ + // C3 MRO + bases = c3mro(superclass, className); + t = bases[0]; + mixins = bases.length - t; + superclass = bases[mixins]; + }else{ + bases = [0]; + if(superclass){ + if(opts.call(superclass) == "[object Function]"){ + t = superclass._meta; + bases = bases.concat(t ? t.bases : superclass); + }else{ + err("base class is not a callable constructor.", className); + } + }else if(superclass !== null){ + err("unknown base class. Did you use dojo.require to pull it in?", className); + } + } + if(superclass){ + for(i = mixins - 1;; --i){ + proto = forceNew(superclass); + if(!i){ + // stop if nothing to add (the last base) + break; + } + // mix in properties + t = bases[i]; + (t._meta ? mixOwn : mix)(proto, t.prototype); + // chain in new constructor + ctor = new Function; + ctor.superclass = superclass; + ctor.prototype = proto; + superclass = proto.constructor = ctor; + } + }else{ + proto = {}; + } + // add all properties + safeMixin(proto, props); + // add constructor + t = props.constructor; + if(t !== op.constructor){ + t.nom = cname; + proto.constructor = t; + } + + // collect chains and flags + for(i = mixins - 1; i; --i){ // intentional assignment + t = bases[i]._meta; + if(t && t.chains){ + chains = mix(chains || {}, t.chains); + } + } + if(proto["-chains-"]){ + chains = mix(chains || {}, proto["-chains-"]); + } + + // build ctor + t = !chains || !chains.hasOwnProperty(cname); + bases[0] = ctor = (chains && chains.constructor === "manual") ? simpleConstructor(bases) : + (bases.length == 1 ? singleConstructor(props.constructor, t) : chainedConstructor(bases, t)); + + // add meta information to the constructor + ctor._meta = {bases: bases, hidden: props, chains: chains, + parents: parents, ctor: props.constructor}; + ctor.superclass = superclass && superclass.prototype; + ctor.extend = extend; + ctor.prototype = proto; + proto.constructor = ctor; + + // add "standard" methods to the prototype + proto.getInherited = getInherited; + proto.inherited = inherited; + proto.isInstanceOf = isInstanceOf; + + // add name if specified + if(className){ + proto.declaredClass = className; + d.setObject(className, ctor); + } + + // build chains and add them to the prototype + if(chains){ + for(name in chains){ + if(proto[name] && typeof chains[name] == "string" && name != cname){ + t = proto[name] = chain(name, bases, chains[name] === "after"); + t.nom = name; + } + } + } + // chained methods do not return values + // no need to chain "invisible" functions + + return ctor; // Function + }; + + d.safeMixin = safeMixin; + + /*===== + dojo.declare = function(className, superclass, props){ + // summary: + // Create a feature-rich constructor from compact notation. + // className: String?: + // The optional name of the constructor (loosely, a "class") + // stored in the "declaredClass" property in the created prototype. + // It will be used as a global name for a created constructor. + // superclass: Function|Function[]: + // May be null, a Function, or an Array of Functions. This argument + // specifies a list of bases (the left-most one is the most deepest + // base). + // props: Object: + // An object whose properties are copied to the created prototype. + // Add an instance-initialization function by making it a property + // named "constructor". + // returns: + // New constructor function. + // description: + // Create a constructor using a compact notation for inheritance and + // prototype extension. + // + // Mixin ancestors provide a type of multiple inheritance. + // Prototypes of mixin ancestors are copied to the new class: + // changes to mixin prototypes will not affect classes to which + // they have been mixed in. + // + // Ancestors can be compound classes created by this version of + // dojo.declare. In complex cases all base classes are going to be + // linearized according to C3 MRO algorithm + // (see http://www.python.org/download/releases/2.3/mro/ for more + // details). + // + // "className" is cached in "declaredClass" property of the new class, + // if it was supplied. The immediate super class will be cached in + // "superclass" property of the new class. + // + // Methods in "props" will be copied and modified: "nom" property + // (the declared name of the method) will be added to all copied + // functions to help identify them for the internal machinery. Be + // very careful, while reusing methods: if you use the same + // function under different names, it can produce errors in some + // cases. + // + // It is possible to use constructors created "manually" (without + // dojo.declare) as bases. They will be called as usual during the + // creation of an instance, their methods will be chained, and even + // called by "this.inherited()". + // + // Special property "-chains-" governs how to chain methods. It is + // a dictionary, which uses method names as keys, and hint strings + // as values. If a hint string is "after", this method will be + // called after methods of its base classes. If a hint string is + // "before", this method will be called before methods of its base + // classes. + // + // If "constructor" is not mentioned in "-chains-" property, it will + // be chained using the legacy mode: using "after" chaining, + // calling preamble() method before each constructor, if available, + // and calling postscript() after all constructors were executed. + // If the hint is "after", it is chained as a regular method, but + // postscript() will be called after the chain of constructors. + // "constructor" cannot be chained "before", but it allows + // a special hint string: "manual", which means that constructors + // are not going to be chained in any way, and programmer will call + // them manually using this.inherited(). In the latter case + // postscript() will be called after the construction. + // + // All chaining hints are "inherited" from base classes and + // potentially can be overridden. Be very careful when overriding + // hints! Make sure that all chained methods can work in a proposed + // manner of chaining. + // + // Once a method was chained, it is impossible to unchain it. The + // only exception is "constructor". You don't need to define a + // method in order to supply a chaining hint. + // + // If a method is chained, it cannot use this.inherited() because + // all other methods in the hierarchy will be called automatically. + // + // Usually constructors and initializers of any kind are chained + // using "after" and destructors of any kind are chained as + // "before". Note that chaining assumes that chained methods do not + // return any value: any returned value will be discarded. + // + // example: + // | dojo.declare("my.classes.bar", my.classes.foo, { + // | // properties to be added to the class prototype + // | someValue: 2, + // | // initialization function + // | constructor: function(){ + // | this.myComplicatedObject = new ReallyComplicatedObject(); + // | }, + // | // other functions + // | someMethod: function(){ + // | doStuff(); + // | } + // | }); + // + // example: + // | var MyBase = dojo.declare(null, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var MyClass1 = dojo.declare(MyBase, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var MyClass2 = dojo.declare(MyBase, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var MyDiamond = dojo.declare([MyClass1, MyClass2], { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // + // example: + // | var F = function(){ console.log("raw constructor"); }; + // | F.prototype.method = function(){ + // | console.log("raw method"); + // | }; + // | var A = dojo.declare(F, { + // | constructor: function(){ + // | console.log("A.constructor"); + // | }, + // | method: function(){ + // | console.log("before calling F.method..."); + // | this.inherited(arguments); + // | console.log("...back in A"); + // | } + // | }); + // | new A().method(); + // | // will print: + // | // raw constructor + // | // A.constructor + // | // before calling F.method... + // | // raw method + // | // ...back in A + // + // example: + // | var A = dojo.declare(null, { + // | "-chains-": { + // | destroy: "before" + // | } + // | }); + // | var B = dojo.declare(A, { + // | constructor: function(){ + // | console.log("B.constructor"); + // | }, + // | destroy: function(){ + // | console.log("B.destroy"); + // | } + // | }); + // | var C = dojo.declare(B, { + // | constructor: function(){ + // | console.log("C.constructor"); + // | }, + // | destroy: function(){ + // | console.log("C.destroy"); + // | } + // | }); + // | new C().destroy(); + // | // prints: + // | // B.constructor + // | // C.constructor + // | // C.destroy + // | // B.destroy + // + // example: + // | var A = dojo.declare(null, { + // | "-chains-": { + // | constructor: "manual" + // | } + // | }); + // | var B = dojo.declare(A, { + // | constructor: function(){ + // | // ... + // | // call the base constructor with new parameters + // | this.inherited(arguments, [1, 2, 3]); + // | // ... + // | } + // | }); + // + // example: + // | var A = dojo.declare(null, { + // | "-chains-": { + // | m1: "before" + // | }, + // | m1: function(){ + // | console.log("A.m1"); + // | }, + // | m2: function(){ + // | console.log("A.m2"); + // | } + // | }); + // | var B = dojo.declare(A, { + // | "-chains-": { + // | m2: "after" + // | }, + // | m1: function(){ + // | console.log("B.m1"); + // | }, + // | m2: function(){ + // | console.log("B.m2"); + // | } + // | }); + // | var x = new B(); + // | x.m1(); + // | // prints: + // | // B.m1 + // | // A.m1 + // | x.m2(); + // | // prints: + // | // A.m2 + // | // B.m2 + return new Function(); // Function + }; + =====*/ + + /*===== + dojo.safeMixin = function(target, source){ + // summary: + // Mix in properties skipping a constructor and decorating functions + // like it is done by dojo.declare. + // target: Object + // Target object to accept new properties. + // source: Object + // Source object for new properties. + // description: + // This function is used to mix in properties like dojo._mixin does, + // but it skips a constructor property and decorates functions like + // dojo.declare does. + // + // It is meant to be used with classes and objects produced with + // dojo.declare. Functions mixed in with dojo.safeMixin can use + // this.inherited() like normal methods. + // + // This function is used to implement extend() method of a constructor + // produced with dojo.declare(). + // + // example: + // | var A = dojo.declare(null, { + // | m1: function(){ + // | console.log("A.m1"); + // | }, + // | m2: function(){ + // | console.log("A.m2"); + // | } + // | }); + // | var B = dojo.declare(A, { + // | m1: function(){ + // | this.inherited(arguments); + // | console.log("B.m1"); + // | } + // | }); + // | B.extend({ + // | m2: function(){ + // | this.inherited(arguments); + // | console.log("B.m2"); + // | } + // | }); + // | var x = new B(); + // | dojo.safeMixin(x, { + // | m1: function(){ + // | this.inherited(arguments); + // | console.log("X.m1"); + // | }, + // | m2: function(){ + // | this.inherited(arguments); + // | console.log("X.m2"); + // | } + // | }); + // | x.m2(); + // | // prints: + // | // A.m1 + // | // B.m1 + // | // X.m1 + }; + =====*/ + + /*===== + Object.inherited = function(name, args, newArgs){ + // summary: + // Calls a super method. + // name: String? + // The optional method name. Should be the same as the caller's + // name. Usually "name" is specified in complex dynamic cases, when + // the calling method was dynamically added, undecorated by + // dojo.declare, and it cannot be determined. + // args: Arguments + // The caller supply this argument, which should be the original + // "arguments". + // newArgs: Object? + // If "true", the found function will be returned without + // executing it. + // If Array, it will be used to call a super method. Otherwise + // "args" will be used. + // returns: + // Whatever is returned by a super method, or a super method itself, + // if "true" was specified as newArgs. + // description: + // This method is used inside method of classes produced with + // dojo.declare to call a super method (next in the chain). It is + // used for manually controlled chaining. Consider using the regular + // chaining, because it is faster. Use "this.inherited()" only in + // complex cases. + // + // This method cannot me called from automatically chained + // constructors including the case of a special (legacy) + // constructor chaining. It cannot be called from chained methods. + // + // If "this.inherited()" cannot find the next-in-chain method, it + // does nothing and returns "undefined". The last method in chain + // can be a default method implemented in Object, which will be + // called last. + // + // If "name" is specified, it is assumed that the method that + // received "args" is the parent method for this call. It is looked + // up in the chain list and if it is found the next-in-chain method + // is called. If it is not found, the first-in-chain method is + // called. + // + // If "name" is not specified, it will be derived from the calling + // method (using a methoid property "nom"). + // + // example: + // | var B = dojo.declare(A, { + // | method1: function(a, b, c){ + // | this.inherited(arguments); + // | }, + // | method2: function(a, b){ + // | return this.inherited(arguments, [a + b]); + // | } + // | }); + // | // next method is not in the chain list because it is added + // | // manually after the class was created. + // | B.prototype.method3 = function(){ + // | console.log("This is a dynamically-added method."); + // | this.inherited("method3", arguments); + // | }; + // example: + // | var B = dojo.declare(A, { + // | method: function(a, b){ + // | var super = this.inherited(arguments, true); + // | // ... + // | if(!super){ + // | console.log("there is no super method"); + // | return 0; + // | } + // | return super.apply(this, arguments); + // | } + // | }); + return {}; // Object + } + =====*/ + + /*===== + Object.getInherited = function(name, args){ + // summary: + // Returns a super method. + // name: String? + // The optional method name. Should be the same as the caller's + // name. Usually "name" is specified in complex dynamic cases, when + // the calling method was dynamically added, undecorated by + // dojo.declare, and it cannot be determined. + // args: Arguments + // The caller supply this argument, which should be the original + // "arguments". + // returns: + // Returns a super method (Function) or "undefined". + // description: + // This method is a convenience method for "this.inherited()". + // It uses the same algorithm but instead of executing a super + // method, it returns it, or "undefined" if not found. + // + // example: + // | var B = dojo.declare(A, { + // | method: function(a, b){ + // | var super = this.getInherited(arguments); + // | // ... + // | if(!super){ + // | console.log("there is no super method"); + // | return 0; + // | } + // | return super.apply(this, arguments); + // | } + // | }); + return {}; // Object + } + =====*/ + + /*===== + Object.isInstanceOf = function(cls){ + // summary: + // Checks the inheritance chain to see if it is inherited from this + // class. + // cls: Function + // Class constructor. + // returns: + // "true", if this object is inherited from this class, "false" + // otherwise. + // description: + // This method is used with instances of classes produced with + // dojo.declare to determine of they support a certain interface or + // not. It models "instanceof" operator. + // + // example: + // | var A = dojo.declare(null, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var B = dojo.declare(null, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var C = dojo.declare([A, B], { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | var D = dojo.declare(A, { + // | // constructor, properties, and methods go here + // | // ... + // | }); + // | + // | var a = new A(), b = new B(), c = new C(), d = new D(); + // | + // | console.log(a.isInstanceOf(A)); // true + // | console.log(b.isInstanceOf(A)); // false + // | console.log(c.isInstanceOf(A)); // true + // | console.log(d.isInstanceOf(A)); // true + // | + // | console.log(a.isInstanceOf(B)); // false + // | console.log(b.isInstanceOf(B)); // true + // | console.log(c.isInstanceOf(B)); // true + // | console.log(d.isInstanceOf(B)); // false + // | + // | console.log(a.isInstanceOf(C)); // false + // | console.log(b.isInstanceOf(C)); // false + // | console.log(c.isInstanceOf(C)); // true + // | console.log(d.isInstanceOf(C)); // false + // | + // | console.log(a.isInstanceOf(D)); // false + // | console.log(b.isInstanceOf(D)); // false + // | console.log(c.isInstanceOf(D)); // false + // | console.log(d.isInstanceOf(D)); // true + return {}; // Object + } + =====*/ + + /*===== + Object.extend = function(source){ + // summary: + // Adds all properties and methods of source to constructor's + // prototype, making them available to all instances created with + // constructor. This method is specific to constructors created with + // dojo.declare. + // source: Object + // Source object which properties are going to be copied to the + // constructor's prototype. + // description: + // Adds source properties to the constructor's prototype. It can + // override existing properties. + // + // This method is similar to dojo.extend function, but it is specific + // to constructors produced by dojo.declare. It is implemented + // using dojo.safeMixin, and it skips a constructor property, + // and properly decorates copied functions. + // + // example: + // | var A = dojo.declare(null, { + // | m1: function(){}, + // | s1: "Popokatepetl" + // | }); + // | A.extend({ + // | m1: function(){}, + // | m2: function(){}, + // | f1: true, + // | d1: 42 + // | }); + }; + =====*/ +})(); + +} + +if(!dojo._hasResource["dojo._base.connect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.connect"] = true; +dojo.provide("dojo._base.connect"); + +// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA + +// low-level delegation machinery +dojo._listener = { + // create a dispatcher function + getDispatcher: function(){ + // following comments pulled out-of-line to prevent cloning them + // in the returned function. + // - indices (i) that are really in the array of listeners (ls) will + // not be in Array.prototype. This is the 'sparse array' trick + // that keeps us safe from libs that take liberties with built-in + // objects + // - listener is invoked with current scope (this) + return function(){ + var ap = Array.prototype, c = arguments.callee, ls = c._listeners, t = c.target, + // return value comes from original target function + r = t && t.apply(this, arguments), + // make local copy of listener array so it is immutable during processing + i, lls = [].concat(ls) + ; + + // invoke listeners after target function + for(i in lls){ + if(!(i in ap)){ + lls[i].apply(this, arguments); + } + } + // return value comes from original target function + return r; + }; + }, + // add a listener to an object + add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ + // Whenever 'method' is invoked, 'listener' will have the same scope. + // Trying to supporting a context object for the listener led to + // complexity. + // Non trivial to provide 'once' functionality here + // because listener could be the result of a dojo.hitch call, + // in which case two references to the same hitch target would not + // be equivalent. + source = source || dojo.global; + // The source method is either null, a dispatcher, or some other function + var f = source[method]; + // Ensure a dispatcher + if(!f || !f._listeners){ + var d = dojo._listener.getDispatcher(); + // original target function is special + d.target = f; + // dispatcher holds a list of listeners + d._listeners = []; + // redirect source to dispatcher + f = source[method] = d; + } + // The contract is that a handle is returned that can + // identify this listener for disconnect. + // + // The type of the handle is private. Here is it implemented as Integer. + // DOM event code has this same contract but handle is Function + // in non-IE browsers. + // + // We could have separate lists of before and after listeners. + return f._listeners.push(listener); /*Handle*/ + }, + // remove a listener from an object + remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){ + var f = (source || dojo.global)[method]; + // remember that handle is the index+1 (0 is not a valid handle) + if(f && f._listeners && handle--){ + delete f._listeners[handle]; + } + } +}; + +// Multiple delegation for arbitrary methods. + +// This unit knows nothing about DOM, but we include DOM aware documentation +// and dontFix argument here to help the autodocs. Actual DOM aware code is in +// event.js. + +dojo.connect = function(/*Object|null*/ obj, + /*String*/ event, + /*Object|null*/ context, + /*String|Function*/ method, + /*Boolean?*/ dontFix){ + // summary: + // `dojo.connect` is the core event handling and delegation method in + // Dojo. It allows one function to "listen in" on the execution of + // any other, triggering the second whenever the first is called. Many + // listeners may be attached to a function, and source functions may + // be either regular function calls or DOM events. + // + // description: + // Connects listeners to actions, so that after event fires, a + // listener is called with the same arguments passed to the original + // function. + // + // Since `dojo.connect` allows the source of events to be either a + // "regular" JavaScript function or a DOM event, it provides a uniform + // interface for listening to all the types of events that an + // application is likely to deal with though a single, unified + // interface. DOM programmers may want to think of it as + // "addEventListener for everything and anything". + // + // When setting up a connection, the `event` parameter must be a + // string that is the name of the method/event to be listened for. If + // `obj` is null, `dojo.global` is assumed, meaning that connections + // to global methods are supported but also that you may inadvertently + // connect to a global by passing an incorrect object name or invalid + // reference. + // + // `dojo.connect` generally is forgiving. If you pass the name of a + // function or method that does not yet exist on `obj`, connect will + // not fail, but will instead set up a stub method. Similarly, null + // arguments may simply be omitted such that fewer than 4 arguments + // may be required to set up a connection See the examples for details. + // + // The return value is a handle that is needed to + // remove this connection with `dojo.disconnect`. + // + // obj: + // The source object for the event function. + // Defaults to `dojo.global` if null. + // If obj is a DOM node, the connection is delegated + // to the DOM event manager (unless dontFix is true). + // + // event: + // String name of the event function in obj. + // I.e. identifies a property `obj[event]`. + // + // context: + // The object that method will receive as "this". + // + // If context is null and method is a function, then method + // inherits the context of event. + // + // If method is a string then context must be the source + // object object for method (context[method]). If context is null, + // dojo.global is used. + // + // method: + // A function reference, or name of a function in context. + // The function identified by method fires after event does. + // method receives the same arguments as the event. + // See context argument comments for information on method's scope. + // + // dontFix: + // If obj is a DOM node, set dontFix to true to prevent delegation + // of this connection to the DOM event manager. + // + // example: + // When obj.onchange(), do ui.update(): + // | dojo.connect(obj, "onchange", ui, "update"); + // | dojo.connect(obj, "onchange", ui, ui.update); // same + // + // example: + // Using return value for disconnect: + // | var link = dojo.connect(obj, "onchange", ui, "update"); + // | ... + // | dojo.disconnect(link); + // + // example: + // When onglobalevent executes, watcher.handler is invoked: + // | dojo.connect(null, "onglobalevent", watcher, "handler"); + // + // example: + // When ob.onCustomEvent executes, customEventHandler is invoked: + // | dojo.connect(ob, "onCustomEvent", null, "customEventHandler"); + // | dojo.connect(ob, "onCustomEvent", "customEventHandler"); // same + // + // example: + // When ob.onCustomEvent executes, customEventHandler is invoked + // with the same scope (this): + // | dojo.connect(ob, "onCustomEvent", null, customEventHandler); + // | dojo.connect(ob, "onCustomEvent", customEventHandler); // same + // + // example: + // When globalEvent executes, globalHandler is invoked + // with the same scope (this): + // | dojo.connect(null, "globalEvent", null, globalHandler); + // | dojo.connect("globalEvent", globalHandler); // same + + // normalize arguments + var a=arguments, args=[], i=0; + // if a[0] is a String, obj was omitted + args.push(dojo.isString(a[0]) ? null : a[i++], a[i++]); + // if the arg-after-next is a String or Function, context was NOT omitted + var a1 = a[i+1]; + args.push(dojo.isString(a1)||dojo.isFunction(a1) ? a[i++] : null, a[i++]); + // absorb any additional arguments + for(var l=a.length; i44 + // + var returnDeferred = progressCallback == mutator ? this : new dojo.Deferred(promise.cancel); + var listener = { + resolved: resolvedCallback, + error: errorCallback, + progress: progressCallback, + deferred: returnDeferred + }; + if(nextListener){ + head = head.next = listener; + } + else{ + nextListener = head = listener; + } + if(finished){ + notify(); + } + return returnDeferred.promise; + }; + var deferred = this; + this.cancel = promise.cancel = function () { + // summary: + // Cancels the asynchronous operation + if(!finished){ + var error = canceller && canceller(deferred); + if(!finished){ + if (!(error instanceof Error)) { + error = new Error(error); + } + error.log = false; + deferred.reject(error); + } + } + }; + freeze(promise); + }; + dojo.extend(dojo.Deferred, { + addCallback: function (/*Function*/callback) { + return this.addCallbacks(dojo.hitch.apply(dojo, arguments)); + }, + + addErrback: function (/*Function*/errback) { + return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments)); + }, + + addBoth: function (/*Function*/callback) { + var enclosed = dojo.hitch.apply(dojo, arguments); + return this.addCallbacks(enclosed, enclosed); + }, + fired: -1 + }); +})(); +dojo.when = function(promiseOrValue, /*Function?*/callback, /*Function?*/errback, /*Function?*/progressHandler){ + // summary: + // This provides normalization between normal synchronous values and + // asynchronous promises, so you can interact with them in a common way + // example: + // | function printFirstAndList(items){ + // | dojo.when(findFirst(items), console.log); + // | dojo.when(findLast(items), console.log); + // | } + // | function findFirst(items){ + // | return dojo.when(items, function(items){ + // | return items[0]; + // | }); + // | } + // | function findLast(items){ + // | return dojo.when(items, function(items){ + // | return items[items.length]; + // | }); + // | } + // And now all three of his functions can be used sync or async. + // | printFirstAndLast([1,2,3,4]) will work just as well as + // | printFirstAndLast(dojo.xhrGet(...)); + + if(promiseOrValue && typeof promiseOrValue.then === "function"){ + return promiseOrValue.then(callback, errback, progressHandler); + } + return callback(promiseOrValue); +}; + +} + +if(!dojo._hasResource["dojo._base.json"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.json"] = true; +dojo.provide("dojo._base.json"); + +dojo.fromJson = function(/*String*/ json){ + // summary: + // Parses a [JSON](http://json.org) string to return a JavaScript object. + // description: + // Throws for invalid JSON strings, but it does not use a strict JSON parser. It + // delegates to eval(). The content passed to this method must therefore come + // from a trusted source. + // json: + // a string literal of a JSON item, for instance: + // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` + + return eval("(" + json + ")"); // Object +}; + +dojo._escapeString = function(/*String*/str){ + //summary: + // Adds escape sequences for non-visual characters, double quote and + // backslash and surrounds with double quotes to form a valid string + // literal. + return ('"' + str.replace(/(["\\])/g, '\\$1') + '"'). + replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n"). + replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r"); // string +}; + +dojo.toJsonIndentStr = "\t"; +dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){ + // summary: + // Returns a [JSON](http://json.org) serialization of an object. + // description: + // Returns a [JSON](http://json.org) serialization of an object. + // Note that this doesn't check for infinite recursion, so don't do that! + // it: + // an object to be serialized. Objects may define their own + // serialization via a special "__json__" or "json" function + // property. If a specialized serializer has been defined, it will + // be used as a fallback. + // prettyPrint: + // if true, we indent objects and arrays to make the output prettier. + // The variable `dojo.toJsonIndentStr` is used as the indent string -- + // to use something other than the default (tab), change that variable + // before calling dojo.toJson(). + // _indentStr: + // private variable for recursive calls when pretty printing, do not use. + // example: + // simple serialization of a trivial object + // | var jsonStr = dojo.toJson({ howdy: "stranger!", isStrange: true }); + // | doh.is('{"howdy":"stranger!","isStrange":true}', jsonStr); + // example: + // a custom serializer for an objects of a particular class: + // | dojo.declare("Furby", null, { + // | furbies: "are strange", + // | furbyCount: 10, + // | __json__: function(){ + // | }, + // | }); + + if(it === undefined){ + return "undefined"; + } + var objtype = typeof it; + if(objtype == "number" || objtype == "boolean"){ + return it + ""; + } + if(it === null){ + return "null"; + } + if(dojo.isString(it)){ + return dojo._escapeString(it); + } + // recurse + var recurse = arguments.callee; + // short-circuit for objects that support "json" serialization + // if they return "self" then just pass-through... + var newObj; + _indentStr = _indentStr || ""; + var nextIndent = prettyPrint ? _indentStr + dojo.toJsonIndentStr : ""; + var tf = it.__json__||it.json; + if(dojo.isFunction(tf)){ + newObj = tf.call(it); + if(it !== newObj){ + return recurse(newObj, prettyPrint, nextIndent); + } + } + if(it.nodeType && it.cloneNode){ // isNode + // we can't seriailize DOM nodes as regular objects because they have cycles + // DOM nodes could be serialized with something like outerHTML, but + // that can be provided by users in the form of .json or .__json__ function. + throw new Error("Can't serialize DOM nodes"); + } + + var sep = prettyPrint ? " " : ""; + var newLine = prettyPrint ? "\n" : ""; + + // array + if(dojo.isArray(it)){ + var res = dojo.map(it, function(obj){ + var val = recurse(obj, prettyPrint, nextIndent); + if(typeof val != "string"){ + val = "undefined"; + } + return newLine + nextIndent + val; + }); + return "[" + res.join("," + sep) + newLine + _indentStr + "]"; + } + /* + // look in the registry + try { + window.o = it; + newObj = dojo.json.jsonRegistry.match(it); + return recurse(newObj, prettyPrint, nextIndent); + }catch(e){ + // console.log(e); + } + // it's a function with no adapter, skip it + */ + if(objtype == "function"){ + return null; // null + } + // generic object code path + var output = [], key; + for(key in it){ + var keyStr, val; + if(typeof key == "number"){ + keyStr = '"' + key + '"'; + }else if(typeof key == "string"){ + keyStr = dojo._escapeString(key); + }else{ + // skip non-string or number keys + continue; + } + val = recurse(it[key], prettyPrint, nextIndent); + if(typeof val != "string"){ + // skip non-serializable values + continue; + } + // FIXME: use += on Moz!! + // MOW NOTE: using += is a pain because you have to account for the dangling comma... + output.push(newLine + nextIndent + keyStr + ":" + sep + val); + } + return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String +}; + +} + +if(!dojo._hasResource["dojo._base.Color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.Color"] = true; +dojo.provide("dojo._base.Color"); + +(function(){ + + var d = dojo; + + dojo.Color = function(/*Array|String|Object*/ color){ + // summary: + // Takes a named string, hex string, array of rgb or rgba values, + // an object with r, g, b, and a properties, or another `dojo.Color` object + // and creates a new Color instance to work from. + // + // example: + // Work with a Color instance: + // | var c = new dojo.Color(); + // | c.setColor([0,0,0]); // black + // | var hex = c.toHex(); // #000000 + // + // example: + // Work with a node's color: + // | var color = dojo.style("someNode", "backgroundColor"); + // | var n = new dojo.Color(color); + // | // adjust the color some + // | n.r *= .5; + // | console.log(n.toString()); // rgb(128, 255, 255); + if(color){ this.setColor(color); } + }; + + // FIXME: + // there's got to be a more space-efficient way to encode or discover + // these!! Use hex? + dojo.Color.named = { + black: [0,0,0], + silver: [192,192,192], + gray: [128,128,128], + white: [255,255,255], + maroon: [128,0,0], + red: [255,0,0], + purple: [128,0,128], + fuchsia: [255,0,255], + green: [0,128,0], + lime: [0,255,0], + olive: [128,128,0], + yellow: [255,255,0], + navy: [0,0,128], + blue: [0,0,255], + teal: [0,128,128], + aqua: [0,255,255], + transparent: d.config.transparentColor || [255,255,255] + }; + + dojo.extend(dojo.Color, { + r: 255, g: 255, b: 255, a: 1, + _set: function(r, g, b, a){ + var t = this; t.r = r; t.g = g; t.b = b; t.a = a; + }, + setColor: function(/*Array|String|Object*/ color){ + // summary: + // Takes a named string, hex string, array of rgb or rgba values, + // an object with r, g, b, and a properties, or another `dojo.Color` object + // and sets this color instance to that value. + // + // example: + // | var c = new dojo.Color(); // no color + // | c.setColor("#ededed"); // greyish + if(d.isString(color)){ + d.colorFromString(color, this); + }else if(d.isArray(color)){ + d.colorFromArray(color, this); + }else{ + this._set(color.r, color.g, color.b, color.a); + if(!(color instanceof d.Color)){ this.sanitize(); } + } + return this; // dojo.Color + }, + sanitize: function(){ + // summary: + // Ensures the object has correct attributes + // description: + // the default implementation does nothing, include dojo.colors to + // augment it with real checks + return this; // dojo.Color + }, + toRgb: function(){ + // summary: + // Returns 3 component array of rgb values + // example: + // | var c = new dojo.Color("#000000"); + // | console.log(c.toRgb()); // [0,0,0] + var t = this; + return [t.r, t.g, t.b]; // Array + }, + toRgba: function(){ + // summary: + // Returns a 4 component array of rgba values from the color + // represented by this object. + var t = this; + return [t.r, t.g, t.b, t.a]; // Array + }, + toHex: function(){ + // summary: + // Returns a CSS color string in hexadecimal representation + // example: + // | console.log(new dojo.Color([0,0,0]).toHex()); // #000000 + var arr = d.map(["r", "g", "b"], function(x){ + var s = this[x].toString(16); + return s.length < 2 ? "0" + s : s; + }, this); + return "#" + arr.join(""); // String + }, + toCss: function(/*Boolean?*/ includeAlpha){ + // summary: + // Returns a css color string in rgb(a) representation + // example: + // | var c = new dojo.Color("#FFF").toCss(); + // | console.log(c); // rgb('255','255','255') + var t = this, rgb = t.r + ", " + t.g + ", " + t.b; + return (includeAlpha ? "rgba(" + rgb + ", " + t.a : "rgb(" + rgb) + ")"; // String + }, + toString: function(){ + // summary: + // Returns a visual representation of the color + return this.toCss(true); // String + } + }); + + dojo.blendColors = function( + /*dojo.Color*/ start, + /*dojo.Color*/ end, + /*Number*/ weight, + /*dojo.Color?*/ obj + ){ + // summary: + // Blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend, + // can reuse a previously allocated dojo.Color object for the result + var t = obj || new d.Color(); + d.forEach(["r", "g", "b", "a"], function(x){ + t[x] = start[x] + (end[x] - start[x]) * weight; + if(x != "a"){ t[x] = Math.round(t[x]); } + }); + return t.sanitize(); // dojo.Color + }; + + dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){ + // summary: + // Returns a `dojo.Color` instance from a string of the form + // "rgb(...)" or "rgba(...)". Optionally accepts a `dojo.Color` + // object to update with the parsed value and return instead of + // creating a new object. + // returns: + // A dojo.Color object. If obj is passed, it will be the return value. + var m = color.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/); + return m && dojo.colorFromArray(m[1].split(/\s*,\s*/), obj); // dojo.Color + }; + + dojo.colorFromHex = function(/*String*/ color, /*dojo.Color?*/ obj){ + // summary: + // Converts a hex string with a '#' prefix to a color object. + // Supports 12-bit #rgb shorthand. Optionally accepts a + // `dojo.Color` object to update with the parsed value. + // + // returns: + // A dojo.Color object. If obj is passed, it will be the return value. + // + // example: + // | var thing = dojo.colorFromHex("#ededed"); // grey, longhand + // + // example: + // | var thing = dojo.colorFromHex("#000"); // black, shorthand + var t = obj || new d.Color(), + bits = (color.length == 4) ? 4 : 8, + mask = (1 << bits) - 1; + color = Number("0x" + color.substr(1)); + if(isNaN(color)){ + return null; // dojo.Color + } + d.forEach(["b", "g", "r"], function(x){ + var c = color & mask; + color >>= bits; + t[x] = bits == 4 ? 17 * c : c; + }); + t.a = 1; + return t; // dojo.Color + }; + + dojo.colorFromArray = function(/*Array*/ a, /*dojo.Color?*/ obj){ + // summary: + // Builds a `dojo.Color` from a 3 or 4 element array, mapping each + // element in sequence to the rgb(a) values of the color. + // example: + // | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha + // returns: + // A dojo.Color object. If obj is passed, it will be the return value. + var t = obj || new d.Color(); + t._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3])); + if(isNaN(t.a)){ t.a = 1; } + return t.sanitize(); // dojo.Color + }; + + dojo.colorFromString = function(/*String*/ str, /*dojo.Color?*/ obj){ + // summary: + // Parses `str` for a color value. Accepts hex, rgb, and rgba + // style color values. + // description: + // Acceptable input values for str may include arrays of any form + // accepted by dojo.colorFromArray, hex strings such as "#aaaaaa", or + // rgb or rgba strings such as "rgb(133, 200, 16)" or "rgba(10, 10, + // 10, 50)" + // returns: + // A dojo.Color object. If obj is passed, it will be the return value. + var a = d.Color.named[str]; + return a && d.colorFromArray(a, obj) || d.colorFromRgb(str, obj) || d.colorFromHex(str, obj); + }; +})(); + +} + +if(!dojo._hasResource["dojo._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.window"] = true; +dojo.provide("dojo._base.window"); + +/*===== +dojo.doc = { + // summary: + // Alias for the current document. 'dojo.doc' can be modified + // for temporary context shifting. Also see dojo.withDoc(). + // description: + // Refer to dojo.doc rather + // than referring to 'window.document' to ensure your code runs + // correctly in managed contexts. + // example: + // | n.appendChild(dojo.doc.createElement('div')); +} +=====*/ +dojo.doc = window["document"] || null; + +dojo.body = function(){ + // summary: + // Return the body element of the document + // return the body object associated with dojo.doc + // example: + // | dojo.body().appendChild(dojo.doc.createElement('div')); + + // Note: document.body is not defined for a strict xhtml document + // Would like to memoize this, but dojo.doc can change vi dojo.withDoc(). + return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node +}; + +dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){ + // summary: + // changes the behavior of many core Dojo functions that deal with + // namespace and DOM lookup, changing them to work in a new global + // context (e.g., an iframe). The varibles dojo.global and dojo.doc + // are modified as a result of calling this function and the result of + // `dojo.body()` likewise differs. + dojo.global = globalObject; + dojo.doc = globalDocument; +}; + +dojo.withGlobal = function( /*Object*/globalObject, + /*Function*/callback, + /*Object?*/thisObject, + /*Array?*/cbArguments){ + // summary: + // Invoke callback with globalObject as dojo.global and + // globalObject.document as dojo.doc. + // description: + // Invoke callback with globalObject as dojo.global and + // globalObject.document as dojo.doc. If provided, globalObject + // will be executed in the context of object thisObject + // When callback() returns or throws an error, the dojo.global + // and dojo.doc will be restored to its previous state. + + var oldGlob = dojo.global; + try{ + dojo.global = globalObject; + return dojo.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments); + }finally{ + dojo.global = oldGlob; + } +}; + +dojo.withDoc = function( /*DocumentElement*/documentObject, + /*Function*/callback, + /*Object?*/thisObject, + /*Array?*/cbArguments){ + // summary: + // Invoke callback with documentObject as dojo.doc. + // description: + // Invoke callback with documentObject as dojo.doc. If provided, + // callback will be executed in the context of object thisObject + // When callback() returns or throws an error, the dojo.doc will + // be restored to its previous state. + + var oldDoc = dojo.doc, + oldLtr = dojo._bodyLtr, + oldQ = dojo.isQuirks; + + try{ + dojo.doc = documentObject; + delete dojo._bodyLtr; // uncache + dojo.isQuirks = dojo.doc.compatMode == "BackCompat"; // no need to check for QuirksMode which was Opera 7 only + + if(thisObject && typeof callback == "string"){ + callback = thisObject[callback]; + } + + return callback.apply(thisObject, cbArguments || []); + }finally{ + dojo.doc = oldDoc; + delete dojo._bodyLtr; // in case it was undefined originally, and set to true/false by the alternate document + if(oldLtr !== undefined){ dojo._bodyLtr = oldLtr; } + dojo.isQuirks = oldQ; + } +}; + +} + +if(!dojo._hasResource["dojo._base.event"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.event"] = true; +dojo.provide("dojo._base.event"); + +// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA + +(function(){ + // DOM event listener machinery + var del = (dojo._event_listener = { + add: function(/*DOMNode*/ node, /*String*/ name, /*Function*/ fp){ + if(!node){return;} + name = del._normalizeEventName(name); + fp = del._fixCallback(name, fp); + var oname = name; + if( + !dojo.isIE && + (name == "mouseenter" || name == "mouseleave") + ){ + var ofp = fp; + //oname = name; + name = (name == "mouseenter") ? "mouseover" : "mouseout"; + fp = function(e){ + if(!dojo.isDescendant(e.relatedTarget, node)){ + // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable. + return ofp.call(this, e); + } + } + } + node.addEventListener(name, fp, false); + return fp; /*Handle*/ + }, + remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ + // summary: + // clobbers the listener from the node + // node: + // DOM node to attach the event to + // event: + // the name of the handler to remove the function from + // handle: + // the handle returned from add + if(node){ + event = del._normalizeEventName(event); + if(!dojo.isIE && (event == "mouseenter" || event == "mouseleave")){ + event = (event == "mouseenter") ? "mouseover" : "mouseout"; + } + + node.removeEventListener(event, handle, false); + } + }, + _normalizeEventName: function(/*String*/ name){ + // Generally, name should be lower case, unless it is special + // somehow (e.g. a Mozilla DOM event). + // Remove 'on'. + return name.slice(0,2) =="on" ? name.slice(2) : name; + }, + _fixCallback: function(/*String*/ name, fp){ + // By default, we only invoke _fixEvent for 'keypress' + // If code is added to _fixEvent for other events, we have + // to revisit this optimization. + // This also applies to _fixEvent overrides for Safari and Opera + // below. + return name != "keypress" ? fp : function(e){ return fp.call(this, del._fixEvent(e, this)); }; + }, + _fixEvent: function(evt, sender){ + // _fixCallback only attaches us to keypress. + // Switch on evt.type anyway because we might + // be called directly from dojo.fixEvent. + switch(evt.type){ + case "keypress": + del._setKeyChar(evt); + break; + } + return evt; + }, + _setKeyChar: function(evt){ + evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : ''; + evt.charOrCode = evt.keyChar || evt.keyCode; + }, + // For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE + // we map those virtual key codes to ascii here + // not valid for all (non-US) keyboards, so maybe we shouldn't bother + _punctMap: { + 106:42, + 111:47, + 186:59, + 187:43, + 188:44, + 189:45, + 190:46, + 191:47, + 192:96, + 219:91, + 220:92, + 221:93, + 222:39 + } + }); + + // DOM events + + dojo.fixEvent = function(/*Event*/ evt, /*DOMNode*/ sender){ + // summary: + // normalizes properties on the event object including event + // bubbling methods, keystroke normalization, and x/y positions + // evt: Event + // native event object + // sender: DOMNode + // node to treat as "currentTarget" + return del._fixEvent(evt, sender); + }; + + dojo.stopEvent = function(/*Event*/ evt){ + // summary: + // prevents propagation and clobbers the default action of the + // passed event + // evt: Event + // The event object. If omitted, window.event is used on IE. + evt.preventDefault(); + evt.stopPropagation(); + // NOTE: below, this method is overridden for IE + }; + + // the default listener to use on dontFix nodes, overriden for IE + var node_listener = dojo._listener; + + // Unify connect and event listeners + dojo._connect = function(obj, event, context, method, dontFix){ + // FIXME: need a more strict test + var isNode = obj && (obj.nodeType||obj.attachEvent||obj.addEventListener); + // choose one of three listener options: raw (connect.js), DOM event on a Node, custom event on a Node + // we need the third option to provide leak prevention on broken browsers (IE) + var lid = isNode ? (dontFix ? 2 : 1) : 0, l = [dojo._listener, del, node_listener][lid]; + // create a listener + var h = l.add(obj, event, dojo.hitch(context, method)); + // formerly, the disconnect package contained "l" directly, but if client code + // leaks the disconnect package (by connecting it to a node), referencing "l" + // compounds the problem. + // instead we return a listener id, which requires custom _disconnect below. + // return disconnect package + return [ obj, event, h, lid ]; + }; + + dojo._disconnect = function(obj, event, handle, listener){ + ([dojo._listener, del, node_listener][listener]).remove(obj, event, handle); + }; + + // Constants + + // Public: client code should test + // keyCode against these named constants, as the + // actual codes can vary by browser. + dojo.keys = { + // summary: + // Definitions for common key values + BACKSPACE: 8, + TAB: 9, + CLEAR: 12, + ENTER: 13, + SHIFT: 16, + CTRL: 17, + ALT: 18, + META: dojo.isSafari ? 91 : 224, // the apple key on macs + PAUSE: 19, + CAPS_LOCK: 20, + ESCAPE: 27, + SPACE: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + LEFT_ARROW: 37, + UP_ARROW: 38, + RIGHT_ARROW: 39, + DOWN_ARROW: 40, + INSERT: 45, + DELETE: 46, + HELP: 47, + LEFT_WINDOW: 91, + RIGHT_WINDOW: 92, + SELECT: 93, + NUMPAD_0: 96, + NUMPAD_1: 97, + NUMPAD_2: 98, + NUMPAD_3: 99, + NUMPAD_4: 100, + NUMPAD_5: 101, + NUMPAD_6: 102, + NUMPAD_7: 103, + NUMPAD_8: 104, + NUMPAD_9: 105, + NUMPAD_MULTIPLY: 106, + NUMPAD_PLUS: 107, + NUMPAD_ENTER: 108, + NUMPAD_MINUS: 109, + NUMPAD_PERIOD: 110, + NUMPAD_DIVIDE: 111, + F1: 112, + F2: 113, + F3: 114, + F4: 115, + F5: 116, + F6: 117, + F7: 118, + F8: 119, + F9: 120, + F10: 121, + F11: 122, + F12: 123, + F13: 124, + F14: 125, + F15: 126, + NUM_LOCK: 144, + SCROLL_LOCK: 145, + // virtual key mapping + copyKey: dojo.isMac && !dojo.isAIR ? (dojo.isSafari ? 91 : 224 ) : 17 + }; + + var evtCopyKey = dojo.isMac ? "metaKey" : "ctrlKey"; + + dojo.isCopyKey = function(e){ + // summary: + // Checks an event for the copy key (meta on Mac, and ctrl anywhere else) + // e: Event + // Event object to examine + return e[evtCopyKey]; // Boolean + }; + + // Public: decoding mouse buttons from events + +/*===== + dojo.mouseButtons = { + // LEFT: Number + // Numeric value of the left mouse button for the platform. + LEFT: 0, + // MIDDLE: Number + // Numeric value of the middle mouse button for the platform. + MIDDLE: 1, + // RIGHT: Number + // Numeric value of the right mouse button for the platform. + RIGHT: 2, + + isButton: function(e, button){ + // summary: + // Checks an event object for a pressed button + // e: Event + // Event object to examine + // button: Number + // The button value (example: dojo.mouseButton.LEFT) + return e.button == button; // Boolean + }, + isLeft: function(e){ + // summary: + // Checks an event object for the pressed left button + // e: Event + // Event object to examine + return e.button == 0; // Boolean + }, + isMiddle: function(e){ + // summary: + // Checks an event object for the pressed middle button + // e: Event + // Event object to examine + return e.button == 1; // Boolean + }, + isRight: function(e){ + // summary: + // Checks an event object for the pressed right button + // e: Event + // Event object to examine + return e.button == 2; // Boolean + } + }; +=====*/ + + if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){ + dojo.mouseButtons = { + LEFT: 1, + MIDDLE: 4, + RIGHT: 2, + // helper functions + isButton: function(e, button){ return e.button & button; }, + isLeft: function(e){ return e.button & 1; }, + isMiddle: function(e){ return e.button & 4; }, + isRight: function(e){ return e.button & 2; } + }; + }else{ + dojo.mouseButtons = { + LEFT: 0, + MIDDLE: 1, + RIGHT: 2, + // helper functions + isButton: function(e, button){ return e.button == button; }, + isLeft: function(e){ return e.button == 0; }, + isMiddle: function(e){ return e.button == 1; }, + isRight: function(e){ return e.button == 2; } + }; + } + + // IE event normalization + if(dojo.isIE){ + var _trySetKeyCode = function(e, code){ + try{ + // squelch errors when keyCode is read-only + // (e.g. if keyCode is ctrl or shift) + return (e.keyCode = code); + }catch(e){ + return 0; + } + }; + + // by default, use the standard listener + var iel = dojo._listener; + var listenersName = (dojo._ieListenersName = "_" + dojo._scopeName + "_listeners"); + // dispatcher tracking property + if(!dojo.config._allow_leaks){ + // custom listener that handles leak protection for DOM events + node_listener = iel = dojo._ie_listener = { + // support handler indirection: event handler functions are + // referenced here. Event dispatchers hold only indices. + handlers: [], + // add a listener to an object + add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ + source = source || dojo.global; + var f = source[method]; + if(!f||!f[listenersName]){ + var d = dojo._getIeDispatcher(); + // original target function is special + d.target = f && (ieh.push(f) - 1); + // dispatcher holds a list of indices into handlers table + d[listenersName] = []; + // redirect source to dispatcher + f = source[method] = d; + } + return f[listenersName].push(ieh.push(listener) - 1) ; /*Handle*/ + }, + // remove a listener from an object + remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){ + var f = (source||dojo.global)[method], l = f && f[listenersName]; + if(f && l && handle--){ + delete ieh[l[handle]]; + delete l[handle]; + } + } + }; + // alias used above + var ieh = iel.handlers; + } + + dojo.mixin(del, { + add: function(/*DOMNode*/ node, /*String*/ event, /*Function*/ fp){ + if(!node){return;} // undefined + event = del._normalizeEventName(event); + if(event=="onkeypress"){ + // we need to listen to onkeydown to synthesize + // keypress events that otherwise won't fire + // on IE + var kd = node.onkeydown; + if(!kd || !kd[listenersName] || !kd._stealthKeydownHandle){ + var h = del.add(node, "onkeydown", del._stealthKeyDown); + kd = node.onkeydown; + kd._stealthKeydownHandle = h; + kd._stealthKeydownRefs = 1; + }else{ + kd._stealthKeydownRefs++; + } + } + return iel.add(node, event, del._fixCallback(fp)); + }, + remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ + event = del._normalizeEventName(event); + iel.remove(node, event, handle); + if(event=="onkeypress"){ + var kd = node.onkeydown; + if(--kd._stealthKeydownRefs <= 0){ + iel.remove(node, "onkeydown", kd._stealthKeydownHandle); + delete kd._stealthKeydownHandle; + } + } + }, + _normalizeEventName: function(/*String*/ eventName){ + // Generally, eventName should be lower case, unless it is + // special somehow (e.g. a Mozilla event) + // ensure 'on' + return eventName.slice(0,2) != "on" ? "on" + eventName : eventName; + }, + _nop: function(){}, + _fixEvent: function(/*Event*/ evt, /*DOMNode*/ sender){ + // summary: + // normalizes properties on the event object including event + // bubbling methods, keystroke normalization, and x/y positions + // evt: + // native event object + // sender: + // node to treat as "currentTarget" + if(!evt){ + var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; + evt = w.event; + } + if(!evt){return(evt);} + evt.target = evt.srcElement; + evt.currentTarget = (sender || evt.srcElement); + evt.layerX = evt.offsetX; + evt.layerY = evt.offsetY; + // FIXME: scroll position query is duped from dojo.html to + // avoid dependency on that entire module. Now that HTML is in + // Base, we should convert back to something similar there. + var se = evt.srcElement, doc = (se && se.ownerDocument) || document; + // DO NOT replace the following to use dojo.body(), in IE, document.documentElement should be used + // here rather than document.body + var docBody = ((dojo.isIE < 6) || (doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement; + var offset = dojo._getIeDocumentElementOffset(); + evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; + evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y; + if(evt.type == "mouseover"){ + evt.relatedTarget = evt.fromElement; + } + if(evt.type == "mouseout"){ + evt.relatedTarget = evt.toElement; + } + if (dojo.isIE < 9 || dojo.isQuirks) { + evt.stopPropagation = del._stopPropagation; + evt.preventDefault = del._preventDefault; + } + return del._fixKeys(evt); + }, + _fixKeys: function(evt){ + switch(evt.type){ + case "keypress": + var c = ("charCode" in evt ? evt.charCode : evt.keyCode); + if (c==10){ + // CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla + c=0; + evt.keyCode = 13; + }else if(c==13||c==27){ + c=0; // Mozilla considers ENTER and ESC non-printable + }else if(c==3){ + c=99; // Mozilla maps CTRL-BREAK to CTRL-c + } + // Mozilla sets keyCode to 0 when there is a charCode + // but that stops the event on IE. + evt.charCode = c; + del._setKeyChar(evt); + break; + } + return evt; + }, + _stealthKeyDown: function(evt){ + // IE doesn't fire keypress for most non-printable characters. + // other browsers do, we simulate it here. + var kp = evt.currentTarget.onkeypress; + // only works if kp exists and is a dispatcher + if(!kp || !kp[listenersName]){ return; } + // munge key/charCode + var k=evt.keyCode; + // These are Windows Virtual Key Codes + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp + var unprintable = k!=13 && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222); + // synthesize keypress for most unprintables and CTRL-keys + if(unprintable||evt.ctrlKey){ + var c = unprintable ? 0 : k; + if(evt.ctrlKey){ + if(k==3 || k==13){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ + c -= 48; // map CTRL-[numpad 0-9] to ASCII + }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ + c += 32; // map CTRL-[A-Z] to lowercase + }else{ + c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII + } + } + // simulate a keypress event + var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); + kp.call(evt.currentTarget, faux); + evt.cancelBubble = faux.cancelBubble; + evt.returnValue = faux.returnValue; + _trySetKeyCode(evt, faux.keyCode); + } + }, + // Called in Event scope + _stopPropagation: function(){ + this.cancelBubble = true; + }, + _preventDefault: function(){ + // Setting keyCode to 0 is the only way to prevent certain keypresses (namely + // ctrl-combinations that correspond to menu accelerator keys). + // Otoh, it prevents upstream listeners from getting this information + // Try to split the difference here by clobbering keyCode only for ctrl + // combinations. If you still need to access the key upstream, bubbledKeyCode is + // provided as a workaround. + this.bubbledKeyCode = this.keyCode; + if(this.ctrlKey){_trySetKeyCode(this, 0);} + this.returnValue = false; + } + }); + + // override stopEvent for IE + dojo.stopEvent = (dojo.isIE < 9 || dojo.isQuirks) ? function(evt){ + evt = evt || window.event; + del._stopPropagation.call(evt); + del._preventDefault.call(evt); + } : dojo.stopEvent; + } + + del._synthesizeEvent = function(evt, props){ + var faux = dojo.mixin({}, evt, props); + del._setKeyChar(faux); + // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); + // but it throws an error when preventDefault is invoked on Safari + // does Event.preventDefault not support "apply" on Safari? + faux.preventDefault = function(){ evt.preventDefault(); }; + faux.stopPropagation = function(){ evt.stopPropagation(); }; + return faux; + }; + + // Opera event normalization + if(dojo.isOpera){ + dojo.mixin(del, { + _fixEvent: function(evt, sender){ + switch(evt.type){ + case "keypress": + var c = evt.which; + if(c==3){ + c=99; // Mozilla maps CTRL-BREAK to CTRL-c + } + // can't trap some keys at all, like INSERT and DELETE + // there is no differentiating info between DELETE and ".", or INSERT and "-" + c = c<41 && !evt.shiftKey ? 0 : c; + if(evt.ctrlKey && !evt.shiftKey && c>=65 && c<=90){ + // lowercase CTRL-[A-Z] keys + c += 32; + } + return del._synthesizeEvent(evt, { charCode: c }); + } + return evt; + } + }); + } + + // Webkit event normalization + if(dojo.isWebKit){ + del._add = del.add; + del._remove = del.remove; + + dojo.mixin(del, { + add: function(/*DOMNode*/ node, /*String*/ event, /*Function*/ fp){ + if(!node){return;} // undefined + var handle = del._add(node, event, fp); + if(del._normalizeEventName(event) == "keypress"){ + // we need to listen to onkeydown to synthesize + // keypress events that otherwise won't fire + // in Safari 3.1+: https://lists.webkit.org/pipermail/webkit-dev/2007-December/002992.html + handle._stealthKeyDownHandle = del._add(node, "keydown", function(evt){ + //A variation on the IE _stealthKeydown function + //Synthesize an onkeypress event, but only for unprintable characters. + var k=evt.keyCode; + // These are Windows Virtual Key Codes + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp + var unprintable = k!=13 && k!=32 && (k<48 || k>90) && (k<96 || k>111) && (k<186 || k>192) && (k<219 || k>222); + // synthesize keypress for most unprintables and CTRL-keys + if(unprintable || evt.ctrlKey){ + var c = unprintable ? 0 : k; + if(evt.ctrlKey){ + if(k==3 || k==13){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ + c -= 48; // map CTRL-[numpad 0-9] to ASCII + }else if(!evt.shiftKey && c>=65 && c<=90){ + c += 32; // map CTRL-[A-Z] to lowercase + }else{ + c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII + } + } + // simulate a keypress event + var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); + fp.call(evt.currentTarget, faux); + } + }); + } + return handle; /*Handle*/ + }, + + remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ + if(node){ + if(handle._stealthKeyDownHandle){ + del._remove(node, "keydown", handle._stealthKeyDownHandle); + } + del._remove(node, event, handle); + } + }, + _fixEvent: function(evt, sender){ + switch(evt.type){ + case "keypress": + if(evt.faux){ return evt; } + var c = evt.charCode; + c = c>=32 ? c : 0; + return del._synthesizeEvent(evt, {charCode: c, faux: true}); + } + return evt; + } + }); + } + })(); + +if(dojo.isIE){ + // keep this out of the closure + // closing over 'iel' or 'ieh' b0rks leak prevention + // ls[i] is an index into the master handler array + dojo._ieDispatcher = function(args, sender){ + var ap = Array.prototype, + h = dojo._ie_listener.handlers, + c = args.callee, + ls = c[dojo._ieListenersName], + t = h[c.target]; + // return value comes from original target function + var r = t && t.apply(sender, args); + // make local copy of listener array so it's immutable during processing + var lls = [].concat(ls); + // invoke listeners after target function + for(var i in lls){ + var f = h[lls[i]]; + if(!(i in ap) && f){ + f.apply(sender, args); + } + } + return r; + }; + dojo._getIeDispatcher = function(){ + // ensure the returned function closes over nothing ("new Function" apparently doesn't close) + return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)"); // function + }; + // keep this out of the closure to reduce RAM allocation + dojo._event_listener._fixCallback = function(fp){ + var f = dojo._event_listener._fixEvent; + return function(e){ return fp.call(this, f(e, this)); }; + }; +} + +} + +if(!dojo._hasResource["dojo._base.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.html"] = true; +dojo.provide("dojo._base.html"); + +// FIXME: need to add unit tests for all the semi-public methods + +try{ + document.execCommand("BackgroundImageCache", false, true); +}catch(e){ + // sane browsers don't have cache "issues" +} + +// ============================= +// DOM Functions +// ============================= + +/*===== +dojo.byId = function(id, doc){ + // summary: + // Returns DOM node with matching `id` attribute or `null` + // if not found. If `id` is a DomNode, this function is a no-op. + // + // id: String|DOMNode + // A string to match an HTML id attribute or a reference to a DOM Node + // + // doc: Document? + // Document to work in. Defaults to the current value of + // dojo.doc. Can be used to retrieve + // node references from other documents. + // + // example: + // Look up a node by ID: + // | var n = dojo.byId("foo"); + // + // example: + // Check if a node exists, and use it. + // | var n = dojo.byId("bar"); + // | if(n){ doStuff() ... } + // + // example: + // Allow string or DomNode references to be passed to a custom function: + // | var foo = function(nodeOrId){ + // | nodeOrId = dojo.byId(nodeOrId); + // | // ... more stuff + // | } +=====*/ + +if(dojo.isIE){ + dojo.byId = function(id, doc){ + if(typeof id != "string"){ + return id; + } + var _d = doc || dojo.doc, te = _d.getElementById(id); + // attributes.id.value is better than just id in case the + // user has a name=id inside a form + if(te && (te.attributes.id.value == id || te.id == id)){ + return te; + }else{ + var eles = _d.all[id]; + if(!eles || eles.nodeName){ + eles = [eles]; + } + // if more than 1, choose first with the correct id + var i=0; + while((te=eles[i++])){ + if((te.attributes && te.attributes.id && te.attributes.id.value == id) + || te.id == id){ + return te; + } + } + } + }; +}else{ + dojo.byId = function(id, doc){ + // inline'd type check. + // be sure to return null per documentation, to match IE branch. + return ((typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id) || null; // DomNode + }; +} +/*===== +}; +=====*/ + +(function(){ + var d = dojo; + var byId = d.byId; + + var _destroyContainer = null, + _destroyDoc; + d.addOnWindowUnload(function(){ + _destroyContainer = null; //prevent IE leak + }); + +/*===== + dojo._destroyElement = function(node){ + // summary: + // Existing alias for `dojo.destroy`. Deprecated, will be removed + // in 2.0 + } +=====*/ + dojo._destroyElement = dojo.destroy = function(/*String|DomNode*/node){ + // summary: + // Removes a node from its parent, clobbering it and all of its + // children. + // + // description: + // Removes a node from its parent, clobbering it and all of its + // children. Function only works with DomNodes, and returns nothing. + // + // node: + // A String ID or DomNode reference of the element to be destroyed + // + // example: + // Destroy a node byId: + // | dojo.destroy("someId"); + // + // example: + // Destroy all nodes in a list by reference: + // | dojo.query(".someNode").forEach(dojo.destroy); + + node = byId(node); + try{ + var doc = node.ownerDocument; + // cannot use _destroyContainer.ownerDocument since this can throw an exception on IE + if(!_destroyContainer || _destroyDoc != doc){ + _destroyContainer = doc.createElement("div"); + _destroyDoc = doc; + } + _destroyContainer.appendChild(node.parentNode ? node.parentNode.removeChild(node) : node); + // NOTE: see http://trac.dojotoolkit.org/ticket/2931. This may be a bug and not a feature + _destroyContainer.innerHTML = ""; + }catch(e){ + /* squelch */ + } + }; + + dojo.isDescendant = function(/*DomNode|String*/node, /*DomNode|String*/ancestor){ + // summary: + // Returns true if node is a descendant of ancestor + // node: string id or node reference to test + // ancestor: string id or node reference of potential parent to test against + // + // example: + // Test is node id="bar" is a descendant of node id="foo" + // | if(dojo.isDescendant("bar", "foo")){ ... } + try{ + node = byId(node); + ancestor = byId(ancestor); + while(node){ + if(node == ancestor){ + return true; // Boolean + } + node = node.parentNode; + } + }catch(e){ /* squelch, return false */ } + return false; // Boolean + }; + + dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){ + // summary: + // Enable or disable selection on a node + // node: + // id or reference to node + // selectable: + // state to put the node in. false indicates unselectable, true + // allows selection. + // example: + // Make the node id="bar" unselectable + // | dojo.setSelectable("bar"); + // example: + // Make the node id="bar" selectable + // | dojo.setSelectable("bar", true); + node = byId(node); + if(d.isMozilla){ + node.style.MozUserSelect = selectable ? "" : "none"; + }else if(d.isKhtml || d.isWebKit){ + node.style.KhtmlUserSelect = selectable ? "auto" : "none"; + }else if(d.isIE){ + var v = (node.unselectable = selectable ? "" : "on"); + d.query("*", node).forEach("item.unselectable = '"+v+"'"); + } + //FIXME: else? Opera? + }; + + var _insertBefore = function(/*DomNode*/node, /*DomNode*/ref){ + var parent = ref.parentNode; + if(parent){ + parent.insertBefore(node, ref); + } + }; + + var _insertAfter = function(/*DomNode*/node, /*DomNode*/ref){ + // summary: + // Try to insert node after ref + var parent = ref.parentNode; + if(parent){ + if(parent.lastChild == ref){ + parent.appendChild(node); + }else{ + parent.insertBefore(node, ref.nextSibling); + } + } + }; + + dojo.place = function(node, refNode, position){ + // summary: + // Attempt to insert node into the DOM, choosing from various positioning options. + // Returns the first argument resolved to a DOM node. + // + // node: String|DomNode + // id or node reference, or HTML fragment starting with "<" to place relative to refNode + // + // refNode: String|DomNode + // id or node reference to use as basis for placement + // + // position: String|Number? + // string noting the position of node relative to refNode or a + // number indicating the location in the childNodes collection of refNode. + // Accepted string values are: + // | * before + // | * after + // | * replace + // | * only + // | * first + // | * last + // "first" and "last" indicate positions as children of refNode, "replace" replaces refNode, + // "only" replaces all children. position defaults to "last" if not specified + // + // returns: DomNode + // Returned values is the first argument resolved to a DOM node. + // + // .place() is also a method of `dojo.NodeList`, allowing `dojo.query` node lookups. + // + // example: + // Place a node by string id as the last child of another node by string id: + // | dojo.place("someNode", "anotherNode"); + // + // example: + // Place a node by string id before another node by string id + // | dojo.place("someNode", "anotherNode", "before"); + // + // example: + // Create a Node, and place it in the body element (last child): + // | dojo.place("
    ", dojo.body()); + // + // example: + // Put a new LI as the first child of a list by id: + // | dojo.place("
  • ", "someUl", "first"); + + refNode = byId(refNode); + if(typeof node == "string"){ // inline'd type check + node = /^\s* td", node).forEach(function(i){ + d._setOpacity(i, opacity); + }); + } + return opacity; + } : + function(node, opacity){ + return node.style.opacity = opacity; + }; + + var _pixelNamesCache = { + left: true, top: true + }; + var _pixelRegExp = /margin|padding|width|height|max|min|offset/; // |border + var _toStyleValue = function(node, type, value){ + type = type.toLowerCase(); // FIXME: should we really be doing string case conversion here? Should we cache it? Need to profile! + if(d.isIE){ + if(value == "auto"){ + if(type == "height"){ return node.offsetHeight; } + if(type == "width"){ return node.offsetWidth; } + } + if(type == "fontweight"){ + switch(value){ + case 700: return "bold"; + case 400: + default: return "normal"; + } + } + } + if(!(type in _pixelNamesCache)){ + _pixelNamesCache[type] = _pixelRegExp.test(type); + } + return _pixelNamesCache[type] ? px(node, value) : value; + }; + + var _floatStyle = d.isIE ? "styleFloat" : "cssFloat", + _floatAliases = { "cssFloat": _floatStyle, "styleFloat": _floatStyle, "float": _floatStyle } + ; + + // public API + + dojo.style = function( /*DomNode|String*/ node, + /*String?|Object?*/ style, + /*String?*/ value){ + // summary: + // Accesses styles on a node. If 2 arguments are + // passed, acts as a getter. If 3 arguments are passed, acts + // as a setter. + // description: + // Getting the style value uses the computed style for the node, so the value + // will be a calculated value, not just the immediate node.style value. + // Also when getting values, use specific style names, + // like "borderBottomWidth" instead of "border" since compound values like + // "border" are not necessarily reflected as expected. + // If you want to get node dimensions, use `dojo.marginBox()`, + // `dojo.contentBox()` or `dojo.position()`. + // node: + // id or reference to node to get/set style for + // style: + // the style property to set in DOM-accessor format + // ("borderWidth", not "border-width") or an object with key/value + // pairs suitable for setting each property. + // value: + // If passed, sets value on the node for style, handling + // cross-browser concerns. When setting a pixel value, + // be sure to include "px" in the value. For instance, top: "200px". + // Otherwise, in some cases, some browsers will not apply the style. + // example: + // Passing only an ID or node returns the computed style object of + // the node: + // | dojo.style("thinger"); + // example: + // Passing a node and a style property returns the current + // normalized, computed value for that property: + // | dojo.style("thinger", "opacity"); // 1 by default + // + // example: + // Passing a node, a style property, and a value changes the + // current display of the node and returns the new computed value + // | dojo.style("thinger", "opacity", 0.5); // == 0.5 + // + // example: + // Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node: + // | dojo.style("thinger", { + // | "opacity": 0.5, + // | "border": "3px solid black", + // | "height": "300px" + // | }); + // + // example: + // When the CSS style property is hyphenated, the JavaScript property is camelCased. + // font-size becomes fontSize, and so on. + // | dojo.style("thinger",{ + // | fontSize:"14pt", + // | letterSpacing:"1.2em" + // | }); + // + // example: + // dojo.NodeList implements .style() using the same syntax, omitting the "node" parameter, calling + // dojo.style() on every element of the list. See: `dojo.query()` and `dojo.NodeList()` + // | dojo.query(".someClassName").style("visibility","hidden"); + // | // or + // | dojo.query("#baz > div").style({ + // | opacity:0.75, + // | fontSize:"13pt" + // | }); + + var n = byId(node), args = arguments.length, op = (style == "opacity"); + style = _floatAliases[style] || style; + if(args == 3){ + return op ? d._setOpacity(n, value) : n.style[style] = value; /*Number*/ + } + if(args == 2 && op){ + return d._getOpacity(n); + } + var s = gcs(n); + if(args == 2 && typeof style != "string"){ // inline'd type check + for(var x in style){ + d.style(node, x, style[x]); + } + return s; + } + return (args == 1) ? s : _toStyleValue(n, style, s[style] || n.style[style]); /* CSS2Properties||String||Number */ + }; + + // ============================= + // Box Functions + // ============================= + + dojo._getPadExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // Returns object with special values specifically useful for node + // fitting. + // description: + // Returns an object with `w`, `h`, `l`, `t` properties: + // | l/t = left/top padding (respectively) + // | w = the total of the left and right padding + // | h = the total of the top and bottom padding + // If 'node' has position, l/t forms the origin for child nodes. + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + l = px(n, s.paddingLeft), + t = px(n, s.paddingTop); + return { + l: l, + t: t, + w: l+px(n, s.paddingRight), + h: t+px(n, s.paddingBottom) + }; + }; + + dojo._getBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // returns an object with properties useful for noting the border + // dimensions. + // description: + // * l/t = the sum of left/top border (respectively) + // * w = the sum of the left and right border + // * h = the sum of the top and bottom border + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + ne = "none", + s = computedStyle||gcs(n), + bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0), + bt = (s.borderTopStyle != ne ? px(n, s.borderTopWidth) : 0); + return { + l: bl, + t: bt, + w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0), + h: bt + (s.borderBottomStyle!=ne ? px(n, s.borderBottomWidth) : 0) + }; + }; + + dojo._getPadBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){ + // summary: + // Returns object with properties useful for box fitting with + // regards to padding. + // description: + // * l/t = the sum of left/top padding and left/top border (respectively) + // * w = the sum of the left and right padding and border + // * h = the sum of the top and bottom padding and border + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + p = d._getPadExtents(n, s), + b = d._getBorderExtents(n, s); + return { + l: p.l + b.l, + t: p.t + b.t, + w: p.w + b.w, + h: p.h + b.h + }; + }; + + dojo._getMarginExtents = function(n, computedStyle){ + // summary: + // returns object with properties useful for box fitting with + // regards to box margins (i.e., the outer-box). + // + // * l/t = marginLeft, marginTop, respectively + // * w = total width, margin inclusive + // * h = total height, margin inclusive + // + // The w/h are used for calculating boxes. + // Normally application code will not need to invoke this + // directly, and will use the ...box... functions instead. + var + s = computedStyle||gcs(n), + l = px(n, s.marginLeft), + t = px(n, s.marginTop), + r = px(n, s.marginRight), + b = px(n, s.marginBottom); + if(d.isWebKit && (s.position != "absolute")){ + // FIXME: Safari's version of the computed right margin + // is the space between our right edge and the right edge + // of our offsetParent. + // What we are looking for is the actual margin value as + // determined by CSS. + // Hack solution is to assume left/right margins are the same. + r = l; + } + return { + l: l, + t: t, + w: l+r, + h: t+b + }; + }; + + // Box getters work in any box context because offsetWidth/clientWidth + // are invariant wrt box context + // + // They do *not* work for display: inline objects that have padding styles + // because the user agent ignores padding (it's bogus styling in any case) + // + // Be careful with IMGs because they are inline or block depending on + // browser and browser mode. + + // Although it would be easier to read, there are not separate versions of + // _getMarginBox for each browser because: + // 1. the branching is not expensive + // 2. factoring the shared code wastes cycles (function call overhead) + // 3. duplicating the shared code wastes bytes + + dojo._getMarginBox = function(/*DomNode*/node, /*Object*/computedStyle){ + // summary: + // returns an object that encodes the width, height, left and top + // positions of the node's margin box. + var s = computedStyle || gcs(node), me = d._getMarginExtents(node, s); + var l = node.offsetLeft - me.l, t = node.offsetTop - me.t, p = node.parentNode; + if(d.isMoz){ + // Mozilla: + // If offsetParent has a computed overflow != visible, the offsetLeft is decreased + // by the parent's border. + // We don't want to compute the parent's style, so instead we examine node's + // computed left/top which is more stable. + var sl = parseFloat(s.left), st = parseFloat(s.top); + if(!isNaN(sl) && !isNaN(st)){ + l = sl, t = st; + }else{ + // If child's computed left/top are not parseable as a number (e.g. "auto"), we + // have no choice but to examine the parent's computed style. + if(p && p.style){ + var pcs = gcs(p); + if(pcs.overflow != "visible"){ + var be = d._getBorderExtents(p, pcs); + l += be.l, t += be.t; + } + } + } + }else if(d.isOpera || (d.isIE > 7 && !d.isQuirks)){ + // On Opera and IE 8, offsetLeft/Top includes the parent's border + if(p){ + be = d._getBorderExtents(p); + l -= be.l; + t -= be.t; + } + } + return { + l: l, + t: t, + w: node.offsetWidth + me.w, + h: node.offsetHeight + me.h + }; + } + + dojo._getMarginSize = function(/*DomNode*/node, /*Object*/computedStyle){ + // summary: + // returns an object that encodes the width and height of + // the node's margin box + node = byId(node); + var me = d._getMarginExtents(node, computedStyle || gcs(node)); + + var size = node.getBoundingClientRect(); + return { + w: (size.right - size.left) + me.w, + h: (size.bottom - size.top) + me.h + } + } + + dojo._getContentBox = function(node, computedStyle){ + // summary: + // Returns an object that encodes the width, height, left and top + // positions of the node's content box, irrespective of the + // current box model. + + // clientWidth/Height are important since the automatically account for scrollbars + // fallback to offsetWidth/Height for special cases (see #3378) + var s = computedStyle || gcs(node), + pe = d._getPadExtents(node, s), + be = d._getBorderExtents(node, s), + w = node.clientWidth, + h + ; + if(!w){ + w = node.offsetWidth, h = node.offsetHeight; + }else{ + h = node.clientHeight, be.w = be.h = 0; + } + // On Opera, offsetLeft includes the parent's border + if(d.isOpera){ pe.l += be.l; pe.t += be.t; }; + return { + l: pe.l, + t: pe.t, + w: w - pe.w - be.w, + h: h - pe.h - be.h + }; + }; + + dojo._getBorderBox = function(node, computedStyle){ + var s = computedStyle || gcs(node), + pe = d._getPadExtents(node, s), + cb = d._getContentBox(node, s) + ; + return { + l: cb.l - pe.l, + t: cb.t - pe.t, + w: cb.w + pe.w, + h: cb.h + pe.h + }; + }; + + // Box setters depend on box context because interpretation of width/height styles + // vary wrt box context. + // + // The value of dojo.boxModel is used to determine box context. + // dojo.boxModel can be set directly to change behavior. + // + // Beware of display: inline objects that have padding styles + // because the user agent ignores padding (it's a bogus setup anyway) + // + // Be careful with IMGs because they are inline or block depending on + // browser and browser mode. + // + // Elements other than DIV may have special quirks, like built-in + // margins or padding, or values not detectable via computedStyle. + // In particular, margins on TABLE do not seems to appear + // at all in computedStyle on Mozilla. + + dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){ + // summary: + // sets width/height/left/top in the current (native) box-model + // dimentions. Uses the unit passed in u. + // node: + // DOM Node reference. Id string not supported for performance + // reasons. + // l: + // left offset from parent. + // t: + // top offset from parent. + // w: + // width in current box model. + // h: + // width in current box model. + // u: + // unit measure to use for other measures. Defaults to "px". + u = u || "px"; + var s = node.style; + if(!isNaN(l)){ s.left = l + u; } + if(!isNaN(t)){ s.top = t + u; } + if(w >= 0){ s.width = w + u; } + if(h >= 0){ s.height = h + u; } + }; + + dojo._isButtonTag = function(/*DomNode*/node) { + // summary: + // True if the node is BUTTON or INPUT.type="button". + return node.tagName == "BUTTON" + || node.tagName=="INPUT" && (node.getAttribute("type")||'').toUpperCase() == "BUTTON"; // boolean + }; + + dojo._usesBorderBox = function(/*DomNode*/node){ + // summary: + // True if the node uses border-box layout. + + // We could test the computed style of node to see if a particular box + // has been specified, but there are details and we choose not to bother. + + // TABLE and BUTTON (and INPUT type=button) are always border-box by default. + // If you have assigned a different box to either one via CSS then + // box functions will break. + + var n = node.tagName; + return d.boxModel=="border-box" || n=="TABLE" || d._isButtonTag(node); // boolean + }; + + dojo._setContentSize = function(/*DomNode*/node, /*Number*/widthPx, /*Number*/heightPx, /*Object*/computedStyle){ + // summary: + // Sets the size of the node's contents, irrespective of margins, + // padding, or borders. + if(d._usesBorderBox(node)){ + var pb = d._getPadBorderExtents(node, computedStyle); + if(widthPx >= 0){ widthPx += pb.w; } + if(heightPx >= 0){ heightPx += pb.h; } + } + d._setBox(node, NaN, NaN, widthPx, heightPx); + }; + + dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, + /*Number?*/widthPx, /*Number?*/heightPx, + /*Object*/computedStyle){ + // summary: + // sets the size of the node's margin box and placement + // (left/top), irrespective of box model. Think of it as a + // passthrough to dojo._setBox that handles box-model vagaries for + // you. + + var s = computedStyle || gcs(node), + // Some elements have special padding, margin, and box-model settings. + // To use box functions you may need to set padding, margin explicitly. + // Controlling box-model is harder, in a pinch you might set dojo.boxModel. + bb = d._usesBorderBox(node), + pb = bb ? _nilExtents : d._getPadBorderExtents(node, s) + ; + if(d.isWebKit){ + // on Safari (3.1.2), button nodes with no explicit size have a default margin + // setting an explicit size eliminates the margin. + // We have to swizzle the width to get correct margin reading. + if(d._isButtonTag(node)){ + var ns = node.style; + if(widthPx >= 0 && !ns.width) { ns.width = "4px"; } + if(heightPx >= 0 && !ns.height) { ns.height = "4px"; } + } + } + var mb = d._getMarginExtents(node, s); + if(widthPx >= 0){ widthPx = Math.max(widthPx - pb.w - mb.w, 0); } + if(heightPx >= 0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); } + d._setBox(node, leftPx, topPx, widthPx, heightPx); + }; + + var _nilExtents = { l:0, t:0, w:0, h:0 }; + + // public API + + dojo.marginBox = function(/*DomNode|String*/node, /*Object?*/box){ + // summary: + // Getter/setter for the margin-box of node. + // description: + // Getter/setter for the margin-box of node. + // Returns an object in the expected format of box (regardless + // if box is passed). The object might look like: + // `{ l: 50, t: 200, w: 300: h: 150 }` + // for a node offset from its parent 50px to the left, 200px from + // the top with a margin width of 300px and a margin-height of + // 150px. + // node: + // id or reference to DOM Node to get/set box for + // box: + // If passed, denotes that dojo.marginBox() should + // update/set the margin box for node. Box is an object in the + // above format. All properties are optional if passed. + // example: + // Retrieve the marginbox of a passed node + // | var box = dojo.marginBox("someNodeId"); + // | console.dir(box); + // + // example: + // Set a node's marginbox to the size of another node + // | var box = dojo.marginBox("someNodeId"); + // | dojo.marginBox("someOtherNode", box); + + var n = byId(node), s = gcs(n), b = box; + return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object + }; + + dojo.contentBox = function(/*DomNode|String*/node, /*Object?*/box){ + // summary: + // Getter/setter for the content-box of node. + // description: + // Returns an object in the expected format of box (regardless if box is passed). + // The object might look like: + // `{ l: 50, t: 200, w: 300: h: 150 }` + // for a node offset from its parent 50px to the left, 200px from + // the top with a content width of 300px and a content-height of + // 150px. Note that the content box may have a much larger border + // or margin box, depending on the box model currently in use and + // CSS values set/inherited for node. + // While the getter will return top and left values, the + // setter only accepts setting the width and height. + // node: + // id or reference to DOM Node to get/set box for + // box: + // If passed, denotes that dojo.contentBox() should + // update/set the content box for node. Box is an object in the + // above format, but only w (width) and h (height) are supported. + // All properties are optional if passed. + var n = byId(node), s = gcs(n), b = box; + return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object + }; + + // ============================= + // Positioning + // ============================= + + var _sumAncestorProperties = function(node, prop){ + if(!(node = (node||0).parentNode)){return 0;} + var val, retVal = 0, _b = d.body(); + while(node && node.style){ + if(gcs(node).position == "fixed"){ + return 0; + } + val = node[prop]; + if(val){ + retVal += val - 0; + // opera and khtml #body & #html has the same values, we only + // need one value + if(node == _b){ break; } + } + node = node.parentNode; + } + return retVal; // integer + }; + + dojo._docScroll = function(){ + var n = d.global; + return "pageXOffset" in n + ? { x:n.pageXOffset, y:n.pageYOffset } + : (n = d.isQuirks? d.doc.body : d.doc.documentElement, { x:d._fixIeBiDiScrollLeft(n.scrollLeft || 0), y:n.scrollTop || 0 }); + }; + + dojo._isBodyLtr = function(){ + return "_bodyLtr" in d? d._bodyLtr : + d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean + }; + + dojo._getIeDocumentElementOffset = function(){ + // summary: + // returns the offset in x and y from the document body to the + // visual edge of the page + // description: + // The following values in IE contain an offset: + // | event.clientX + // | event.clientY + // | node.getBoundingClientRect().left + // | node.getBoundingClientRect().top + // But other position related values do not contain this offset, + // such as node.offsetLeft, node.offsetTop, node.style.left and + // node.style.top. The offset is always (2, 2) in LTR direction. + // When the body is in RTL direction, the offset counts the width + // of left scroll bar's width. This function computes the actual + // offset. + + //NOTE: assumes we're being called in an IE browser + + var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks + + if(d.isIE < 8){ + var r = de.getBoundingClientRect(); // works well for IE6+ + //console.debug('rect left,top = ' + r.left+','+r.top + ', html client left/top = ' + de.clientLeft+','+de.clientTop + ', rtl = ' + (!d._isBodyLtr()) + ', quirks = ' + d.isQuirks); + var l = r.left, + t = r.top; + if(d.isIE < 7){ + l += de.clientLeft; // scrollbar size in strict/RTL, or, + t += de.clientTop; // HTML border size in strict + } + return { + x: l < 0? 0 : l, // FRAME element border size can lead to inaccurate negative values + y: t < 0? 0 : t + }; + }else{ + return { + x: 0, + y: 0 + }; + } + + }; + + dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ + // In RTL direction, scrollLeft should be a negative value, but IE + // returns a positive one. All codes using documentElement.scrollLeft + // must call this function to fix this error, otherwise the position + // will offset to right when there is a horizontal scrollbar. + + var ie = d.isIE; + if(ie && !d._isBodyLtr()){ + var qk = d.isQuirks, + de = qk ? d.doc.body : d.doc.documentElement; + if(ie == 6 && !qk && d.global.frameElement && de.scrollHeight > de.clientHeight){ + scrollLeft += de.clientLeft; // workaround ie6+strict+rtl+iframe+vertical-scrollbar bug where clientWidth is too small by clientLeft pixels + } + return (ie < 8 || qk) ? (scrollLeft + de.clientWidth - de.scrollWidth) : -scrollLeft; // Integer + } + return scrollLeft; // Integer + }; + + // FIXME: need a setter for coords or a moveTo!! + dojo._abs = dojo.position = function(/*DomNode*/node, /*Boolean?*/includeScroll){ + // summary: + // Gets the position and size of the passed element relative to + // the viewport (if includeScroll==false), or relative to the + // document root (if includeScroll==true). + // + // description: + // Returns an object of the form: + // { x: 100, y: 300, w: 20, h: 15 } + // If includeScroll==true, the x and y values will include any + // document offsets that may affect the position relative to the + // viewport. + // Uses the border-box model (inclusive of border and padding but + // not margin). Does not act as a setter. + + node = byId(node); + var db = d.body(), + dh = db.parentNode, + ret = node.getBoundingClientRect(); + ret = { x: ret.left, y: ret.top, w: ret.right - ret.left, h: ret.bottom - ret.top }; + if(d.isIE){ + // On IE there's a 2px offset that we need to adjust for, see _getIeDocumentElementOffset() + var offset = d._getIeDocumentElementOffset(); + + // fixes the position in IE, quirks mode + ret.x -= offset.x + (d.isQuirks ? db.clientLeft+db.offsetLeft : 0); + ret.y -= offset.y + (d.isQuirks ? db.clientTop+db.offsetTop : 0); + }else if(d.isFF == 3){ + // In FF3 you have to subtract the document element margins. + // Fixed in FF3.5 though. + var cs = gcs(dh); + ret.x -= px(dh, cs.marginLeft) + px(dh, cs.borderLeftWidth); + ret.y -= px(dh, cs.marginTop) + px(dh, cs.borderTopWidth); + } + // account for document scrolling + if(includeScroll){ + var scroll = d._docScroll(); + ret.x += scroll.x; + ret.y += scroll.y; + } + + return ret; // Object + }; + + dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){ + // summary: + // Deprecated: Use position() for border-box x/y/w/h + // or marginBox() for margin-box w/h/l/t. + // Returns an object representing a node's size and position. + // + // description: + // Returns an object that measures margin-box (w)idth/(h)eight + // and absolute position x/y of the border-box. Also returned + // is computed (l)eft and (t)op values in pixels from the + // node's offsetParent as returned from marginBox(). + // Return value will be in the form: + //| { l: 50, t: 200, w: 300: h: 150, x: 100, y: 300 } + // Does not act as a setter. If includeScroll is passed, the x and + // y params are affected as one would expect in dojo.position(). + var n = byId(node), s = gcs(n), mb = d._getMarginBox(n, s); + var abs = d.position(n, includeScroll); + mb.x = abs.x; + mb.y = abs.y; + return mb; + }; + + // ============================= + // Element attribute Functions + // ============================= + + // dojo.attr() should conform to http://www.w3.org/TR/DOM-Level-2-Core/ + + var _propNames = { + // properties renamed to avoid clashes with reserved words + "class": "className", + "for": "htmlFor", + // properties written as camelCase + tabindex: "tabIndex", + readonly: "readOnly", + colspan: "colSpan", + frameborder: "frameBorder", + rowspan: "rowSpan", + valuetype: "valueType" + }, + _attrNames = { + // original attribute names + classname: "class", + htmlfor: "for", + // for IE + tabindex: "tabIndex", + readonly: "readOnly" + }, + _forcePropNames = { + innerHTML: 1, + className: 1, + htmlFor: d.isIE, + value: 1 + }; + + var _fixAttrName = function(/*String*/ name){ + return _attrNames[name.toLowerCase()] || name; + }; + + var _hasAttr = function(node, name){ + var attr = node.getAttributeNode && node.getAttributeNode(name); + return attr && attr.specified; // Boolean + }; + + // There is a difference in the presence of certain properties and their default values + // between browsers. For example, on IE "disabled" is present on all elements, + // but it is value is "false"; "tabIndex" of
    returns 0 by default on IE, yet other browsers + // can return -1. + + dojo.hasAttr = function(/*DomNode|String*/node, /*String*/name){ + // summary: + // Returns true if the requested attribute is specified on the + // given element, and false otherwise. + // node: + // id or reference to the element to check + // name: + // the name of the attribute + // returns: + // true if the requested attribute is specified on the + // given element, and false otherwise + var lc = name.toLowerCase(); + return _forcePropNames[_propNames[lc] || name] || _hasAttr(byId(node), _attrNames[lc] || name); // Boolean + }; + + var _evtHdlrMap = {}, _ctr = 0, + _attrId = dojo._scopeName + "attrid", + // the next dictionary lists elements with read-only innerHTML on IE + _roInnerHtml = {col: 1, colgroup: 1, + // frameset: 1, head: 1, html: 1, style: 1, + table: 1, tbody: 1, tfoot: 1, thead: 1, tr: 1, title: 1}; + + dojo.attr = function(/*DomNode|String*/node, /*String|Object*/name, /*String?*/value){ + // summary: + // Gets or sets an attribute on an HTML element. + // description: + // Handles normalized getting and setting of attributes on DOM + // Nodes. If 2 arguments are passed, and a the second argumnt is a + // string, acts as a getter. + // + // If a third argument is passed, or if the second argument is a + // map of attributes, acts as a setter. + // + // When passing functions as values, note that they will not be + // directly assigned to slots on the node, but rather the default + // behavior will be removed and the new behavior will be added + // using `dojo.connect()`, meaning that event handler properties + // will be normalized and that some caveats with regards to + // non-standard behaviors for onsubmit apply. Namely that you + // should cancel form submission using `dojo.stopEvent()` on the + // passed event object instead of returning a boolean value from + // the handler itself. + // node: + // id or reference to the element to get or set the attribute on + // name: + // the name of the attribute to get or set. + // value: + // The value to set for the attribute + // returns: + // when used as a getter, the value of the requested attribute + // or null if that attribute does not have a specified or + // default value; + // + // when used as a setter, the DOM node + // + // example: + // | // get the current value of the "foo" attribute on a node + // | dojo.attr(dojo.byId("nodeId"), "foo"); + // | // or we can just pass the id: + // | dojo.attr("nodeId", "foo"); + // + // example: + // | // use attr() to set the tab index + // | dojo.attr("nodeId", "tabIndex", 3); + // | + // + // example: + // Set multiple values at once, including event handlers: + // | dojo.attr("formId", { + // | "foo": "bar", + // | "tabIndex": -1, + // | "method": "POST", + // | "onsubmit": function(e){ + // | // stop submitting the form. Note that the IE behavior + // | // of returning true or false will have no effect here + // | // since our handler is connect()ed to the built-in + // | // onsubmit behavior and so we need to use + // | // dojo.stopEvent() to ensure that the submission + // | // doesn't proceed. + // | dojo.stopEvent(e); + // | + // | // submit the form with Ajax + // | dojo.xhrPost({ form: "formId" }); + // | } + // | }); + // + // example: + // Style is s special case: Only set with an object hash of styles + // | dojo.attr("someNode",{ + // | id:"bar", + // | style:{ + // | width:"200px", height:"100px", color:"#000" + // | } + // | }); + // + // example: + // Again, only set style as an object hash of styles: + // | var obj = { color:"#fff", backgroundColor:"#000" }; + // | dojo.attr("someNode", "style", obj); + // | + // | // though shorter to use `dojo.style()` in this case: + // | dojo.style("someNode", obj); + + node = byId(node); + var args = arguments.length, prop; + if(args == 2 && typeof name != "string"){ // inline'd type check + // the object form of setter: the 2nd argument is a dictionary + for(var x in name){ + d.attr(node, x, name[x]); + } + return node; // DomNode + } + var lc = name.toLowerCase(), + propName = _propNames[lc] || name, + forceProp = _forcePropNames[propName], + attrName = _attrNames[lc] || name; + if(args == 3){ + // setter + do{ + if(propName == "style" && typeof value != "string"){ // inline'd type check + // special case: setting a style + d.style(node, value); + break; + } + if(propName == "innerHTML"){ + // special case: assigning HTML + if(d.isIE && node.tagName.toLowerCase() in _roInnerHtml){ + d.empty(node); + node.appendChild(d._toDom(value, node.ownerDocument)); + }else{ + node[propName] = value; + } + break; + } + if(d.isFunction(value)){ + // special case: assigning an event handler + // clobber if we can + var attrId = d.attr(node, _attrId); + if(!attrId){ + attrId = _ctr++; + d.attr(node, _attrId, attrId); + } + if(!_evtHdlrMap[attrId]){ + _evtHdlrMap[attrId] = {}; + } + var h = _evtHdlrMap[attrId][propName]; + if(h){ + d.disconnect(h); + }else{ + try{ + delete node[propName]; + }catch(e){} + } + // ensure that event objects are normalized, etc. + _evtHdlrMap[attrId][propName] = d.connect(node, propName, value); + break; + } + if(forceProp || typeof value == "boolean"){ + // special case: forcing assignment to the property + // special case: setting boolean to a property instead of attribute + node[propName] = value; + break; + } + // node's attribute + node.setAttribute(attrName, value); + }while(false); + return node; // DomNode + } + // getter + // should we access this attribute via a property or + // via getAttribute()? + value = node[propName]; + if(forceProp && typeof value != "undefined"){ + // node's property + return value; // Anything + } + if(propName != "href" && (typeof value == "boolean" || d.isFunction(value))){ + // node's property + return value; // Anything + } + // node's attribute + // we need _hasAttr() here to guard against IE returning a default value + return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything + }; + + dojo.removeAttr = function(/*DomNode|String*/ node, /*String*/ name){ + // summary: + // Removes an attribute from an HTML element. + // node: + // id or reference to the element to remove the attribute from + // name: + // the name of the attribute to remove + byId(node).removeAttribute(_fixAttrName(name)); + }; + + dojo.getNodeProp = function(/*DomNode|String*/ node, /*String*/ name){ + // summary: + // Returns an effective value of a property or an attribute. + // node: + // id or reference to the element to remove the attribute from + // name: + // the name of the attribute + node = byId(node); + var lc = name.toLowerCase(), + propName = _propNames[lc] || name; + if((propName in node) && propName != "href"){ + // node's property + return node[propName]; // Anything + } + // node's attribute + var attrName = _attrNames[lc] || name; + return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything + }; + + dojo.create = function(tag, attrs, refNode, pos){ + // summary: + // Create an element, allowing for optional attribute decoration + // and placement. + // + // description: + // A DOM Element creation function. A shorthand method for creating a node or + // a fragment, and allowing for a convenient optional attribute setting step, + // as well as an optional DOM placement reference. + //| + // Attributes are set by passing the optional object through `dojo.attr`. + // See `dojo.attr` for noted caveats and nuances, and API if applicable. + //| + // Placement is done via `dojo.place`, assuming the new node to be the action + // node, passing along the optional reference node and position. + // + // tag: String|DomNode + // A string of the element to create (eg: "div", "a", "p", "li", "script", "br"), + // or an existing DOM node to process. + // + // attrs: Object + // An object-hash of attributes to set on the newly created node. + // Can be null, if you don't want to set any attributes/styles. + // See: `dojo.attr` for a description of available attributes. + // + // refNode: String?|DomNode? + // Optional reference node. Used by `dojo.place` to place the newly created + // node somewhere in the dom relative to refNode. Can be a DomNode reference + // or String ID of a node. + // + // pos: String? + // Optional positional reference. Defaults to "last" by way of `dojo.place`, + // though can be set to "first","after","before","last", "replace" or "only" + // to further control the placement of the new node relative to the refNode. + // 'refNode' is required if a 'pos' is specified. + // + // returns: DomNode + // + // example: + // Create a DIV: + // | var n = dojo.create("div"); + // + // example: + // Create a DIV with content: + // | var n = dojo.create("div", { innerHTML:"

    hi

    " }); + // + // example: + // Place a new DIV in the BODY, with no attributes set + // | var n = dojo.create("div", null, dojo.body()); + // + // example: + // Create an UL, and populate it with LI's. Place the list as the first-child of a + // node with id="someId": + // | var ul = dojo.create("ul", null, "someId", "first"); + // | var items = ["one", "two", "three", "four"]; + // | dojo.forEach(items, function(data){ + // | dojo.create("li", { innerHTML: data }, ul); + // | }); + // + // example: + // Create an anchor, with an href. Place in BODY: + // | dojo.create("a", { href:"foo.html", title:"Goto FOO!" }, dojo.body()); + // + // example: + // Create a `dojo.NodeList()` from a new element (for syntatic sugar): + // | dojo.query(dojo.create('div')) + // | .addClass("newDiv") + // | .onclick(function(e){ console.log('clicked', e.target) }) + // | .place("#someNode"); // redundant, but cleaner. + + var doc = d.doc; + if(refNode){ + refNode = byId(refNode); + doc = refNode.ownerDocument; + } + if(typeof tag == "string"){ // inline'd type check + tag = doc.createElement(tag); + } + if(attrs){ d.attr(tag, attrs); } + if(refNode){ d.place(tag, refNode, pos); } + return tag; // DomNode + }; + + /*===== + dojo.empty = function(node){ + // summary: + // safely removes all children of the node. + // node: DOMNode|String + // a reference to a DOM node or an id. + // example: + // Destroy node's children byId: + // | dojo.empty("someId"); + // + // example: + // Destroy all nodes' children in a list by reference: + // | dojo.query(".someNode").forEach(dojo.empty); + } + =====*/ + + d.empty = + d.isIE ? function(node){ + node = byId(node); + for(var c; c = node.lastChild;){ // intentional assignment + d.destroy(c); + } + } : + function(node){ + byId(node).innerHTML = ""; + }; + + /*===== + dojo._toDom = function(frag, doc){ + // summary: + // instantiates an HTML fragment returning the corresponding DOM. + // frag: String + // the HTML fragment + // doc: DocumentNode? + // optional document to use when creating DOM nodes, defaults to + // dojo.doc if not specified. + // returns: DocumentFragment + // + // example: + // Create a table row: + // | var tr = dojo._toDom("First!"); + } + =====*/ + + // support stuff for dojo._toDom + var tagWrap = { + option: ["select"], + tbody: ["table"], + thead: ["table"], + tfoot: ["table"], + tr: ["table", "tbody"], + td: ["table", "tbody", "tr"], + th: ["table", "thead", "tr"], + legend: ["fieldset"], + caption: ["table"], + colgroup: ["table"], + col: ["table", "colgroup"], + li: ["ul"] + }, + reTag = /<\s*([\w\:]+)/, + masterNode = {}, masterNum = 0, + masterName = "__" + d._scopeName + "ToDomId"; + + // generate start/end tag strings to use + // for the injection for each special tag wrap case. + for(var param in tagWrap){ + if(tagWrap.hasOwnProperty(param)){ + var tw = tagWrap[param]; + tw.pre = param == "option" ? ' + // | + // | + // | + // | + // + // yields this object structure as the result of a call to + // formToObject(): + // + // | { + // | blah: "blah", + // | multi: [ + // | "thud", + // | "thonk" + // | ] + // | }; + + var ret = {}; + var exclude = "file|submit|image|reset|button|"; + _d.forEach(dojo.byId(formNode).elements, function(item){ + var _in = item.name; + var type = (item.type||"").toLowerCase(); + if(_in && type && exclude.indexOf(type) == -1 && !item.disabled){ + setValue(ret, _in, _d.fieldToObject(item)); + if(type == "image"){ + ret[_in+".x"] = ret[_in+".y"] = ret[_in].x = ret[_in].y = 0; + } + } + }); + return ret; // Object + }; + + dojo.objectToQuery = function(/*Object*/ map){ + // summary: + // takes a name/value mapping object and returns a string representing + // a URL-encoded version of that object. + // example: + // this object: + // + // | { + // | blah: "blah", + // | multi: [ + // | "thud", + // | "thonk" + // | ] + // | }; + // + // yields the following query string: + // + // | "blah=blah&multi=thud&multi=thonk" + + // FIXME: need to implement encodeAscii!! + var enc = encodeURIComponent; + var pairs = []; + var backstop = {}; + for(var name in map){ + var value = map[name]; + if(value != backstop[name]){ + var assign = enc(name) + "="; + if(_d.isArray(value)){ + for(var i=0; i < value.length; i++){ + pairs.push(assign + enc(value[i])); + } + }else{ + pairs.push(assign + enc(value)); + } + } + } + return pairs.join("&"); // String + }; + + dojo.formToQuery = function(/*DOMNode||String*/ formNode){ + // summary: + // Returns a URL-encoded string representing the form passed as either a + // node or string ID identifying the form to serialize + return _d.objectToQuery(_d.formToObject(formNode)); // String + }; + + dojo.formToJson = function(/*DOMNode||String*/ formNode, /*Boolean?*/prettyPrint){ + // summary: + // Create a serialized JSON string from a form node or string + // ID identifying the form to serialize + return _d.toJson(_d.formToObject(formNode), prettyPrint); // String + }; + + dojo.queryToObject = function(/*String*/ str){ + // summary: + // Create an object representing a de-serialized query section of a + // URL. Query keys with multiple values are returned in an array. + // + // example: + // This string: + // + // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" + // + // results in this object structure: + // + // | { + // | foo: [ "bar", "baz" ], + // | thinger: " spaces =blah", + // | zonk: "blarg" + // | } + // + // Note that spaces and other urlencoded entities are correctly + // handled. + + // FIXME: should we grab the URL string if we're not passed one? + var ret = {}; + var qp = str.split("&"); + var dec = decodeURIComponent; + _d.forEach(qp, function(item){ + if(item.length){ + var parts = item.split("="); + var name = dec(parts.shift()); + var val = dec(parts.join("=")); + if(typeof ret[name] == "string"){ // inline'd type check + ret[name] = [ret[name]]; + } + + if(_d.isArray(ret[name])){ + ret[name].push(val); + }else{ + ret[name] = val; + } + } + }); + return ret; // Object + }; + + // need to block async callbacks from snatching this thread as the result + // of an async callback might call another sync XHR, this hangs khtml forever + // must checked by watchInFlight() + + dojo._blockAsync = false; + + // MOW: remove dojo._contentHandlers alias in 2.0 + var handlers = _d._contentHandlers = dojo.contentHandlers = { + // summary: + // A map of availble XHR transport handle types. Name matches the + // `handleAs` attribute passed to XHR calls. + // + // description: + // A map of availble XHR transport handle types. Name matches the + // `handleAs` attribute passed to XHR calls. Each contentHandler is + // called, passing the xhr object for manipulation. The return value + // from the contentHandler will be passed to the `load` or `handle` + // functions defined in the original xhr call. + // + // example: + // Creating a custom content-handler: + // | dojo.contentHandlers.makeCaps = function(xhr){ + // | return xhr.responseText.toUpperCase(); + // | } + // | // and later: + // | dojo.xhrGet({ + // | url:"foo.txt", + // | handleAs:"makeCaps", + // | load: function(data){ /* data is a toUpper version of foo.txt */ } + // | }); + + text: function(xhr){ + // summary: A contentHandler which simply returns the plaintext response data + return xhr.responseText; + }, + json: function(xhr){ + // summary: A contentHandler which returns a JavaScript object created from the response data + return _d.fromJson(xhr.responseText || null); + }, + "json-comment-filtered": function(xhr){ + // summary: A contentHandler which expects comment-filtered JSON. + // description: + // A contentHandler which expects comment-filtered JSON. + // the json-comment-filtered option was implemented to prevent + // "JavaScript Hijacking", but it is less secure than standard JSON. Use + // standard JSON instead. JSON prefixing can be used to subvert hijacking. + // + // Will throw a notice suggesting to use application/json mimetype, as + // json-commenting can introduce security issues. To decrease the chances of hijacking, + // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& + // + // use djConfig.useCommentedJson = true to turn off the notice + if(!dojo.config.useCommentedJson){ + console.warn("Consider using the standard mimetype:application/json." + + " json-commenting can introduce security issues. To" + + " decrease the chances of hijacking, use the standard the 'json' handler and" + + " prefix your json with: {}&&\n" + + "Use djConfig.useCommentedJson=true to turn off this message."); + } + + var value = xhr.responseText; + var cStartIdx = value.indexOf("\/*"); + var cEndIdx = value.lastIndexOf("*\/"); + if(cStartIdx == -1 || cEndIdx == -1){ + throw new Error("JSON was not comment filtered"); + } + return _d.fromJson(value.substring(cStartIdx+2, cEndIdx)); + }, + javascript: function(xhr){ + // summary: A contentHandler which evaluates the response data, expecting it to be valid JavaScript + + // FIXME: try Moz and IE specific eval variants? + return _d.eval(xhr.responseText); + }, + xml: function(xhr){ + // summary: A contentHandler returning an XML Document parsed from the response data + var result = xhr.responseXML; + if(_d.isIE && (!result || !result.documentElement)){ + //WARNING: this branch used by the xml handling in dojo.io.iframe, + //so be sure to test dojo.io.iframe if making changes below. + var ms = function(n){ return "MSXML" + n + ".DOMDocument"; }; + var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)]; + _d.some(dp, function(p){ + try{ + var dom = new ActiveXObject(p); + dom.async = false; + dom.loadXML(xhr.responseText); + result = dom; + }catch(e){ return false; } + return true; + }); + } + return result; // DOMDocument + }, + "json-comment-optional": function(xhr){ + // summary: A contentHandler which checks the presence of comment-filtered JSON and + // alternates between the `json` and `json-comment-filtered` contentHandlers. + if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){ + return handlers["json-comment-filtered"](xhr); + }else{ + return handlers["json"](xhr); + } + } + }; + + /*===== + dojo.__IoArgs = function(){ + // url: String + // URL to server endpoint. + // content: Object? + // Contains properties with string values. These + // properties will be serialized as name1=value2 and + // passed in the request. + // timeout: Integer? + // Milliseconds to wait for the response. If this time + // passes, the then error callbacks are called. + // form: DOMNode? + // DOM node for a form. Used to extract the form values + // and send to the server. + // preventCache: Boolean? + // Default is false. If true, then a + // "dojo.preventCache" parameter is sent in the request + // with a value that changes with each request + // (timestamp). Useful only with GET-type requests. + // handleAs: String? + // Acceptable values depend on the type of IO + // transport (see specific IO calls for more information). + // rawBody: String? + // Sets the raw body for an HTTP request. If this is used, then the content + // property is ignored. This is mostly useful for HTTP methods that have + // a body to their requests, like PUT or POST. This property can be used instead + // of postData and putData for dojo.rawXhrPost and dojo.rawXhrPut respectively. + // ioPublish: Boolean? + // Set this explicitly to false to prevent publishing of topics related to + // IO operations. Otherwise, if djConfig.ioPublish is set to true, topics + // will be published via dojo.publish for different phases of an IO operation. + // See dojo.__IoPublish for a list of topics that are published. + // load: Function? + // This function will be + // called on a successful HTTP response code. + // error: Function? + // This function will + // be called when the request fails due to a network or server error, the url + // is invalid, etc. It will also be called if the load or handle callback throws an + // exception, unless djConfig.debugAtAllCosts is true. This allows deployed applications + // to continue to run even when a logic error happens in the callback, while making + // it easier to troubleshoot while in debug mode. + // handle: Function? + // This function will + // be called at the end of every request, whether or not an error occurs. + this.url = url; + this.content = content; + this.timeout = timeout; + this.form = form; + this.preventCache = preventCache; + this.handleAs = handleAs; + this.ioPublish = ioPublish; + this.load = function(response, ioArgs){ + // ioArgs: dojo.__IoCallbackArgs + // Provides additional information about the request. + // response: Object + // The response in the format as defined with handleAs. + } + this.error = function(response, ioArgs){ + // ioArgs: dojo.__IoCallbackArgs + // Provides additional information about the request. + // response: Object + // The response in the format as defined with handleAs. + } + this.handle = function(loadOrError, response, ioArgs){ + // loadOrError: String + // Provides a string that tells you whether this function + // was called because of success (load) or failure (error). + // response: Object + // The response in the format as defined with handleAs. + // ioArgs: dojo.__IoCallbackArgs + // Provides additional information about the request. + } + } + =====*/ + + /*===== + dojo.__IoCallbackArgs = function(args, xhr, url, query, handleAs, id, canDelete, json){ + // args: Object + // the original object argument to the IO call. + // xhr: XMLHttpRequest + // For XMLHttpRequest calls only, the + // XMLHttpRequest object that was used for the + // request. + // url: String + // The final URL used for the call. Many times it + // will be different than the original args.url + // value. + // query: String + // For non-GET requests, the + // name1=value1&name2=value2 parameters sent up in + // the request. + // handleAs: String + // The final indicator on how the response will be + // handled. + // id: String + // For dojo.io.script calls only, the internal + // script ID used for the request. + // canDelete: Boolean + // For dojo.io.script calls only, indicates + // whether the script tag that represents the + // request can be deleted after callbacks have + // been called. Used internally to know when + // cleanup can happen on JSONP-type requests. + // json: Object + // For dojo.io.script calls only: holds the JSON + // response for JSONP-type requests. Used + // internally to hold on to the JSON responses. + // You should not need to access it directly -- + // the same object should be passed to the success + // callbacks directly. + this.args = args; + this.xhr = xhr; + this.url = url; + this.query = query; + this.handleAs = handleAs; + this.id = id; + this.canDelete = canDelete; + this.json = json; + } + =====*/ + + /*===== + dojo.__IoPublish = function(){ + // summary: + // This is a list of IO topics that can be published + // if djConfig.ioPublish is set to true. IO topics can be + // published for any Input/Output, network operation. So, + // dojo.xhr, dojo.io.script and dojo.io.iframe can all + // trigger these topics to be published. + // start: String + // "/dojo/io/start" is sent when there are no outstanding IO + // requests, and a new IO request is started. No arguments + // are passed with this topic. + // send: String + // "/dojo/io/send" is sent whenever a new IO request is started. + // It passes the dojo.Deferred for the request with the topic. + // load: String + // "/dojo/io/load" is sent whenever an IO request has loaded + // successfully. It passes the response and the dojo.Deferred + // for the request with the topic. + // error: String + // "/dojo/io/error" is sent whenever an IO request has errored. + // It passes the error and the dojo.Deferred + // for the request with the topic. + // done: String + // "/dojo/io/done" is sent whenever an IO request has completed, + // either by loading or by erroring. It passes the error and + // the dojo.Deferred for the request with the topic. + // stop: String + // "/dojo/io/stop" is sent when all outstanding IO requests have + // finished. No arguments are passed with this topic. + this.start = "/dojo/io/start"; + this.send = "/dojo/io/send"; + this.load = "/dojo/io/load"; + this.error = "/dojo/io/error"; + this.done = "/dojo/io/done"; + this.stop = "/dojo/io/stop"; + } + =====*/ + + dojo._ioSetArgs = function(/*dojo.__IoArgs*/args, + /*Function*/canceller, + /*Function*/okHandler, + /*Function*/errHandler){ + // summary: + // sets up the Deferred and ioArgs property on the Deferred so it + // can be used in an io call. + // args: + // The args object passed into the public io call. Recognized properties on + // the args object are: + // canceller: + // The canceller function used for the Deferred object. The function + // will receive one argument, the Deferred object that is related to the + // canceller. + // okHandler: + // The first OK callback to be registered with Deferred. It has the opportunity + // to transform the OK response. It will receive one argument -- the Deferred + // object returned from this function. + // errHandler: + // The first error callback to be registered with Deferred. It has the opportunity + // to do cleanup on an error. It will receive two arguments: error (the + // Error object) and dfd, the Deferred object returned from this function. + + var ioArgs = {args: args, url: args.url}; + + //Get values from form if requestd. + var formObject = null; + if(args.form){ + var form = _d.byId(args.form); + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //so use it for all. See #2844 + var actnNode = form.getAttributeNode("action"); + ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); + formObject = _d.formToObject(form); + } + + // set up the query params + var miArgs = [{}]; + + if(formObject){ + // potentially over-ride url-provided params w/ form values + miArgs.push(formObject); + } + if(args.content){ + // stuff in content over-rides what's set by form + miArgs.push(args.content); + } + if(args.preventCache){ + miArgs.push({"dojo.preventCache": new Date().valueOf()}); + } + ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs)); + + // .. and the real work of getting the deferred in order, etc. + ioArgs.handleAs = args.handleAs || "text"; + var d = new _d.Deferred(canceller); + d.addCallbacks(okHandler, function(error){ + return errHandler(error, d); + }); + + //Support specifying load, error and handle callback functions from the args. + //For those callbacks, the "this" object will be the args object. + //The callbacks will get the deferred result value as the + //first argument and the ioArgs object as the second argument. + var ld = args.load; + if(ld && _d.isFunction(ld)){ + d.addCallback(function(value){ + return ld.call(args, value, ioArgs); + }); + } + var err = args.error; + if(err && _d.isFunction(err)){ + d.addErrback(function(value){ + return err.call(args, value, ioArgs); + }); + } + var handle = args.handle; + if(handle && _d.isFunction(handle)){ + d.addBoth(function(value){ + return handle.call(args, value, ioArgs); + }); + } + + //Plug in topic publishing, if dojo.publish is loaded. + if(cfg.ioPublish && _d.publish && ioArgs.args.ioPublish !== false){ + d.addCallbacks( + function(res){ + _d.publish("/dojo/io/load", [d, res]); + return res; + }, + function(res){ + _d.publish("/dojo/io/error", [d, res]); + return res; + } + ); + d.addBoth(function(res){ + _d.publish("/dojo/io/done", [d, res]); + return res; + }); + } + + d.ioArgs = ioArgs; + + // FIXME: need to wire up the xhr object's abort method to something + // analagous in the Deferred + return d; + }; + + var _deferredCancel = function(/*Deferred*/dfd){ + // summary: canceller function for dojo._ioSetArgs call. + + dfd.canceled = true; + var xhr = dfd.ioArgs.xhr; + var _at = typeof xhr.abort; + if(_at == "function" || _at == "object" || _at == "unknown"){ + xhr.abort(); + } + var err = dfd.ioArgs.error; + if(!err){ + err = new Error("xhr cancelled"); + err.dojoType="cancel"; + } + return err; + }; + var _deferredOk = function(/*Deferred*/dfd){ + // summary: okHandler function for dojo._ioSetArgs call. + + var ret = handlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr); + return ret === undefined ? null : ret; + }; + var _deferError = function(/*Error*/error, /*Deferred*/dfd){ + // summary: errHandler function for dojo._ioSetArgs call. + + if(!dfd.ioArgs.args.failOk){ + console.error(error); + } + return error; + }; + + // avoid setting a timer per request. It degrades performance on IE + // something fierece if we don't use unified loops. + var _inFlightIntvl = null; + var _inFlight = []; + + //Use a separate count for knowing if we are starting/stopping io calls. + //Cannot use _inFlight.length since it can change at a different time than + //when we want to do this kind of test. We only want to decrement the count + //after a callback/errback has finished, since the callback/errback should be + //considered as part of finishing a request. + var _pubCount = 0; + var _checkPubCount = function(dfd){ + if(_pubCount <= 0){ + _pubCount = 0; + if(cfg.ioPublish && _d.publish && (!dfd || dfd && dfd.ioArgs.args.ioPublish !== false)){ + _d.publish("/dojo/io/stop"); + } + } + }; + + var _watchInFlight = function(){ + //summary: + // internal method that checks each inflight XMLHttpRequest to see + // if it has completed or if the timeout situation applies. + + var now = (new Date()).getTime(); + // make sure sync calls stay thread safe, if this callback is called + // during a sync call and this results in another sync call before the + // first sync call ends the browser hangs + if(!_d._blockAsync){ + // we need manual loop because we often modify _inFlight (and therefore 'i') while iterating + // note: the second clause is an assigment on purpose, lint may complain + for(var i = 0, tif; i < _inFlight.length && (tif = _inFlight[i]); i++){ + var dfd = tif.dfd; + var func = function(){ + if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ + _inFlight.splice(i--, 1); + _pubCount -= 1; + }else if(tif.ioCheck(dfd)){ + _inFlight.splice(i--, 1); + tif.resHandle(dfd); + _pubCount -= 1; + }else if(dfd.startTime){ + //did we timeout? + if(dfd.startTime + (dfd.ioArgs.args.timeout || 0) < now){ + _inFlight.splice(i--, 1); + var err = new Error("timeout exceeded"); + err.dojoType = "timeout"; + dfd.errback(err); + //Cancel the request so the io module can do appropriate cleanup. + dfd.cancel(); + _pubCount -= 1; + } + } + }; + if(dojo.config.debugAtAllCosts){ + func.call(this); + }else{ + try{ + func.call(this); + }catch(e){ + dfd.errback(e); + } + } + } + } + + _checkPubCount(dfd); + + if(!_inFlight.length){ + clearInterval(_inFlightIntvl); + _inFlightIntvl = null; + return; + } + }; + + dojo._ioCancelAll = function(){ + //summary: Cancels all pending IO requests, regardless of IO type + //(xhr, script, iframe). + try{ + _d.forEach(_inFlight, function(i){ + try{ + i.dfd.cancel(); + }catch(e){/*squelch*/} + }); + }catch(e){/*squelch*/} + }; + + //Automatically call cancel all io calls on unload + //in IE for trac issue #2357. + if(_d.isIE){ + _d.addOnWindowUnload(_d._ioCancelAll); + } + + _d._ioNotifyStart = function(/*Deferred*/dfd){ + // summary: + // If dojo.publish is available, publish topics + // about the start of a request queue and/or the + // the beginning of request. + // description: + // Used by IO transports. An IO transport should + // call this method before making the network connection. + if(cfg.ioPublish && _d.publish && dfd.ioArgs.args.ioPublish !== false){ + if(!_pubCount){ + _d.publish("/dojo/io/start"); + } + _pubCount += 1; + _d.publish("/dojo/io/send", [dfd]); + } + }; + + _d._ioWatch = function(dfd, validCheck, ioCheck, resHandle){ + // summary: + // Watches the io request represented by dfd to see if it completes. + // dfd: Deferred + // The Deferred object to watch. + // validCheck: Function + // Function used to check if the IO request is still valid. Gets the dfd + // object as its only argument. + // ioCheck: Function + // Function used to check if basic IO call worked. Gets the dfd + // object as its only argument. + // resHandle: Function + // Function used to process response. Gets the dfd + // object as its only argument. + var args = dfd.ioArgs.args; + if(args.timeout){ + dfd.startTime = (new Date()).getTime(); + } + + _inFlight.push({dfd: dfd, validCheck: validCheck, ioCheck: ioCheck, resHandle: resHandle}); + if(!_inFlightIntvl){ + _inFlightIntvl = setInterval(_watchInFlight, 50); + } + // handle sync requests + //A weakness: async calls in flight + //could have their handlers called as part of the + //_watchInFlight call, before the sync's callbacks + // are called. + if(args.sync){ + _watchInFlight(); + } + }; + + var _defaultContentType = "application/x-www-form-urlencoded"; + + var _validCheck = function(/*Deferred*/dfd){ + return dfd.ioArgs.xhr.readyState; //boolean + }; + var _ioCheck = function(/*Deferred*/dfd){ + return 4 == dfd.ioArgs.xhr.readyState; //boolean + }; + var _resHandle = function(/*Deferred*/dfd){ + var xhr = dfd.ioArgs.xhr; + if(_d._isDocumentOk(xhr)){ + dfd.callback(dfd); + }else{ + var err = new Error("Unable to load " + dfd.ioArgs.url + " status:" + xhr.status); + err.status = xhr.status; + err.responseText = xhr.responseText; + dfd.errback(err); + } + }; + + dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){ + //summary: Adds query params discovered by the io deferred construction to the URL. + //Only use this for operations which are fundamentally GET-type operations. + if(ioArgs.query.length){ + ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; + ioArgs.query = null; + } + }; + + /*===== + dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, { + constructor: function(){ + // summary: + // In addition to the properties listed for the dojo._IoArgs type, + // the following properties are allowed for dojo.xhr* methods. + // handleAs: String? + // Acceptable values are: text (default), json, json-comment-optional, + // json-comment-filtered, javascript, xml. See `dojo.contentHandlers` + // sync: Boolean? + // false is default. Indicates whether the request should + // be a synchronous (blocking) request. + // headers: Object? + // Additional HTTP headers to send in the request. + // failOk: Boolean? + // false is default. Indicates whether a request should be + // allowed to fail (and therefore no console error message in + // the event of a failure) + this.handleAs = handleAs; + this.sync = sync; + this.headers = headers; + this.failOk = failOk; + } + }); + =====*/ + + dojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){ + // summary: + // Sends an HTTP request with the given method. + // description: + // Sends an HTTP request with the given method. + // See also dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts + // for those HTTP methods. There are also methods for "raw" PUT and POST methods + // via dojo.rawXhrPut() and dojo.rawXhrPost() respectively. + // method: + // HTTP method to be used, such as GET, POST, PUT, DELETE. Should be uppercase. + // hasBody: + // If the request has an HTTP body, then pass true for hasBody. + + //Make the Deferred object for this xhr request. + var dfd = _d._ioSetArgs(args, _deferredCancel, _deferredOk, _deferError); + var ioArgs = dfd.ioArgs; + + //Pass the args to _xhrObj, to allow alternate XHR calls based specific calls, like + //the one used for iframe proxies. + var xhr = ioArgs.xhr = _d._xhrObj(ioArgs.args); + //If XHR factory fails, cancel the deferred. + if(!xhr){ + dfd.cancel(); + return dfd; + } + + //Allow for specifying the HTTP body completely. + if("postData" in args){ + ioArgs.query = args.postData; + }else if("putData" in args){ + ioArgs.query = args.putData; + }else if("rawBody" in args){ + ioArgs.query = args.rawBody; + }else if((arguments.length > 2 && !hasBody) || "POST|PUT".indexOf(method.toUpperCase()) == -1){ + //Check for hasBody being passed. If no hasBody, + //then only append query string if not a POST or PUT request. + _d._ioAddQueryToUrl(ioArgs); + } + + // IE 6 is a steaming pile. It won't let you call apply() on the native function (xhr.open). + // workaround for IE6's apply() "issues" + xhr.open(method, ioArgs.url, args.sync !== true, args.user || undefined, args.password || undefined); + if(args.headers){ + for(var hdr in args.headers){ + if(hdr.toLowerCase() === "content-type" && !args.contentType){ + args.contentType = args.headers[hdr]; + }else if(args.headers[hdr]){ + //Only add header if it has a value. This allows for instnace, skipping + //insertion of X-Requested-With by specifying empty value. + xhr.setRequestHeader(hdr, args.headers[hdr]); + } + } + } + // FIXME: is this appropriate for all content types? + xhr.setRequestHeader("Content-Type", args.contentType || _defaultContentType); + if(!args.headers || !("X-Requested-With" in args.headers)){ + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + } + // FIXME: set other headers here! + _d._ioNotifyStart(dfd); + if(dojo.config.debugAtAllCosts){ + xhr.send(ioArgs.query); + }else{ + try{ + xhr.send(ioArgs.query); + }catch(e){ + ioArgs.error = e; + dfd.cancel(); + } + } + _d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle); + xhr = null; + return dfd; // dojo.Deferred + }; + + dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP GET request to the server. + return _d.xhr("GET", args); // dojo.Deferred + }; + + dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP POST request to the server. In addtion to the properties + // listed for the dojo.__XhrArgs type, the following property is allowed: + // postData: + // String. Send raw data in the body of the POST request. + return _d.xhr("POST", args, true); // dojo.Deferred + }; + + dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP PUT request to the server. In addtion to the properties + // listed for the dojo.__XhrArgs type, the following property is allowed: + // putData: + // String. Send raw data in the body of the PUT request. + return _d.xhr("PUT", args, true); // dojo.Deferred + }; + + dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){ + // summary: + // Sends an HTTP DELETE request to the server. + return _d.xhr("DELETE", args); //dojo.Deferred + }; + + /* + dojo.wrapForm = function(formNode){ + //summary: + // A replacement for FormBind, but not implemented yet. + + // FIXME: need to think harder about what extensions to this we might + // want. What should we allow folks to do w/ this? What events to + // set/send? + throw new Error("dojo.wrapForm not yet implemented"); + } + */ +})(); + +} + +if(!dojo._hasResource["dojo._base.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.fx"] = true; +dojo.provide("dojo._base.fx"); + +/* + Animation loosely package based on Dan Pupius' work, contributed under CLA: + http://pupius.co.uk/js/Toolkit.Drawing.js +*/ +(function(){ + var d = dojo; + var _mixin = d._mixin; + + dojo._Line = function(/*int*/ start, /*int*/ end){ + // summary: + // dojo._Line is the object used to generate values from a start value + // to an end value + // start: int + // Beginning value for range + // end: int + // Ending value for range + this.start = start; + this.end = end; + }; + + dojo._Line.prototype.getValue = function(/*float*/ n){ + // summary: Returns the point on the line + // n: a floating point number greater than 0 and less than 1 + return ((this.end - this.start) * n) + this.start; // Decimal + }; + + dojo.Animation = function(args){ + // summary: + // A generic animation class that fires callbacks into its handlers + // object at various states. + // description: + // A generic animation class that fires callbacks into its handlers + // object at various states. Nearly all dojo animation functions + // return an instance of this method, usually without calling the + // .play() method beforehand. Therefore, you will likely need to + // call .play() on instances of `dojo.Animation` when one is + // returned. + // args: Object + // The 'magic argument', mixing all the properties into this + // animation instance. + + _mixin(this, args); + if(d.isArray(this.curve)){ + this.curve = new d._Line(this.curve[0], this.curve[1]); + } + + }; + + // Alias to drop come 2.0: + d._Animation = d.Animation; + + d.extend(dojo.Animation, { + // duration: Integer + // The time in milliseonds the animation will take to run + duration: 350, + + /*===== + // curve: dojo._Line|Array + // A two element array of start and end values, or a `dojo._Line` instance to be + // used in the Animation. + curve: null, + + // easing: Function? + // A Function to adjust the acceleration (or deceleration) of the progress + // across a dojo._Line + easing: null, + =====*/ + + // repeat: Integer? + // The number of times to loop the animation + repeat: 0, + + // rate: Integer? + // the time in milliseconds to wait before advancing to next frame + // (used as a fps timer: 1000/rate = fps) + rate: 20 /* 50 fps */, + + /*===== + // delay: Integer? + // The time in milliseconds to wait before starting animation after it + // has been .play()'ed + delay: null, + + // beforeBegin: Event? + // Synthetic event fired before a dojo.Animation begins playing (synchronous) + beforeBegin: null, + + // onBegin: Event? + // Synthetic event fired as a dojo.Animation begins playing (useful?) + onBegin: null, + + // onAnimate: Event? + // Synthetic event fired at each interval of a `dojo.Animation` + onAnimate: null, + + // onEnd: Event? + // Synthetic event fired after the final frame of a `dojo.Animation` + onEnd: null, + + // onPlay: Event? + // Synthetic event fired any time a `dojo.Animation` is play()'ed + onPlay: null, + + // onPause: Event? + // Synthetic event fired when a `dojo.Animation` is paused + onPause: null, + + // onStop: Event + // Synthetic event fires when a `dojo.Animation` is stopped + onStop: null, + + =====*/ + + _percent: 0, + _startRepeatCount: 0, + + _getStep: function(){ + var _p = this._percent, + _e = this.easing + ; + return _e ? _e(_p) : _p; + }, + _fire: function(/*Event*/ evt, /*Array?*/ args){ + // summary: + // Convenience function. Fire event "evt" and pass it the + // arguments specified in "args". + // description: + // Convenience function. Fire event "evt" and pass it the + // arguments specified in "args". + // Fires the callback in the scope of the `dojo.Animation` + // instance. + // evt: + // The event to fire. + // args: + // The arguments to pass to the event. + var a = args||[]; + if(this[evt]){ + if(d.config.debugAtAllCosts){ + this[evt].apply(this, a); + }else{ + try{ + this[evt].apply(this, a); + }catch(e){ + // squelch and log because we shouldn't allow exceptions in + // synthetic event handlers to cause the internal timer to run + // amuck, potentially pegging the CPU. I'm not a fan of this + // squelch, but hopefully logging will make it clear what's + // going on + console.error("exception in animation handler for:", evt); + console.error(e); + } + } + } + return this; // dojo.Animation + }, + + play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){ + // summary: + // Start the animation. + // delay: + // How many milliseconds to delay before starting. + // gotoStart: + // If true, starts the animation from the beginning; otherwise, + // starts it from its current position. + // returns: dojo.Animation + // The instance to allow chaining. + + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + if(gotoStart){ + _t._stopTimer(); + _t._active = _t._paused = false; + _t._percent = 0; + }else if(_t._active && !_t._paused){ + return _t; + } + + _t._fire("beforeBegin", [_t.node]); + + var de = delay || _t.delay, + _p = dojo.hitch(_t, "_play", gotoStart); + + if(de > 0){ + _t._delayTimer = setTimeout(_p, de); + return _t; + } + _p(); + return _t; + }, + + _play: function(gotoStart){ + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + _t._startTime = new Date().valueOf(); + if(_t._paused){ + _t._startTime -= _t.duration * _t._percent; + } + + _t._active = true; + _t._paused = false; + var value = _t.curve.getValue(_t._getStep()); + if(!_t._percent){ + if(!_t._startRepeatCount){ + _t._startRepeatCount = _t.repeat; + } + _t._fire("onBegin", [value]); + } + + _t._fire("onPlay", [value]); + + _t._cycle(); + return _t; // dojo.Animation + }, + + pause: function(){ + // summary: Pauses a running animation. + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + _t._stopTimer(); + if(!_t._active){ return _t; /*dojo.Animation*/ } + _t._paused = true; + _t._fire("onPause", [_t.curve.getValue(_t._getStep())]); + return _t; // dojo.Animation + }, + + gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){ + // summary: + // Sets the progress of the animation. + // percent: + // A percentage in decimal notation (between and including 0.0 and 1.0). + // andPlay: + // If true, play the animation after setting the progress. + var _t = this; + _t._stopTimer(); + _t._active = _t._paused = true; + _t._percent = percent; + if(andPlay){ _t.play(); } + return _t; // dojo.Animation + }, + + stop: function(/*boolean?*/ gotoEnd){ + // summary: Stops a running animation. + // gotoEnd: If true, the animation will end. + var _t = this; + if(_t._delayTimer){ _t._clearTimer(); } + if(!_t._timer){ return _t; /* dojo.Animation */ } + _t._stopTimer(); + if(gotoEnd){ + _t._percent = 1; + } + _t._fire("onStop", [_t.curve.getValue(_t._getStep())]); + _t._active = _t._paused = false; + return _t; // dojo.Animation + }, + + status: function(){ + // summary: + // Returns a string token representation of the status of + // the animation, one of: "paused", "playing", "stopped" + if(this._active){ + return this._paused ? "paused" : "playing"; // String + } + return "stopped"; // String + }, + + _cycle: function(){ + var _t = this; + if(_t._active){ + var curr = new Date().valueOf(); + var step = (curr - _t._startTime) / (_t.duration); + + if(step >= 1){ + step = 1; + } + _t._percent = step; + + // Perform easing + if(_t.easing){ + step = _t.easing(step); + } + + _t._fire("onAnimate", [_t.curve.getValue(step)]); + + if(_t._percent < 1){ + _t._startTimer(); + }else{ + _t._active = false; + + if(_t.repeat > 0){ + _t.repeat--; + _t.play(null, true); + }else if(_t.repeat == -1){ + _t.play(null, true); + }else{ + if(_t._startRepeatCount){ + _t.repeat = _t._startRepeatCount; + _t._startRepeatCount = 0; + } + } + _t._percent = 0; + _t._fire("onEnd", [_t.node]); + !_t.repeat && _t._stopTimer(); + } + } + return _t; // dojo.Animation + }, + + _clearTimer: function(){ + // summary: Clear the play delay timer + clearTimeout(this._delayTimer); + delete this._delayTimer; + } + + }); + + // the local timer, stubbed into all Animation instances + var ctr = 0, + timer = null, + runner = { + run: function(){} + }; + + d.extend(d.Animation, { + + _startTimer: function(){ + if(!this._timer){ + this._timer = d.connect(runner, "run", this, "_cycle"); + ctr++; + } + if(!timer){ + timer = setInterval(d.hitch(runner, "run"), this.rate); + } + }, + + _stopTimer: function(){ + if(this._timer){ + d.disconnect(this._timer); + this._timer = null; + ctr--; + } + if(ctr <= 0){ + clearInterval(timer); + timer = null; + ctr = 0; + } + } + + }); + + var _makeFadeable = + d.isIE ? function(node){ + // only set the zoom if the "tickle" value would be the same as the + // default + var ns = node.style; + // don't set the width to auto if it didn't already cascade that way. + // We don't want to f anyones designs + if(!ns.width.length && d.style(node, "width") == "auto"){ + ns.width = "auto"; + } + } : + function(){}; + + dojo._fade = function(/*Object*/ args){ + // summary: + // Returns an animation that will fade the node defined by + // args.node from the start to end values passed (args.start + // args.end) (end is mandatory, start is optional) + + args.node = d.byId(args.node); + var fArgs = _mixin({ properties: {} }, args), + props = (fArgs.properties.opacity = {}); + + props.start = !("start" in fArgs) ? + function(){ + return +d.style(fArgs.node, "opacity")||0; + } : fArgs.start; + props.end = fArgs.end; + + var anim = d.animateProperty(fArgs); + d.connect(anim, "beforeBegin", d.partial(_makeFadeable, fArgs.node)); + + return anim; // dojo.Animation + }; + + /*===== + dojo.__FadeArgs = function(node, duration, easing){ + // node: DOMNode|String + // The node referenced in the animation + // duration: Integer? + // Duration of the animation in milliseconds. + // easing: Function? + // An easing function. + this.node = node; + this.duration = duration; + this.easing = easing; + } + =====*/ + + dojo.fadeIn = function(/*dojo.__FadeArgs*/ args){ + // summary: + // Returns an animation that will fade node defined in 'args' from + // its current opacity to fully opaque. + return d._fade(_mixin({ end: 1 }, args)); // dojo.Animation + }; + + dojo.fadeOut = function(/*dojo.__FadeArgs*/ args){ + // summary: + // Returns an animation that will fade node defined in 'args' + // from its current opacity to fully transparent. + return d._fade(_mixin({ end: 0 }, args)); // dojo.Animation + }; + + dojo._defaultEasing = function(/*Decimal?*/ n){ + // summary: The default easing function for dojo.Animation(s) + return 0.5 + ((Math.sin((n + 1.5) * Math.PI)) / 2); + }; + + var PropLine = function(properties){ + // PropLine is an internal class which is used to model the values of + // an a group of CSS properties across an animation lifecycle. In + // particular, the "getValue" function handles getting interpolated + // values between start and end for a particular CSS value. + this._properties = properties; + for(var p in properties){ + var prop = properties[p]; + if(prop.start instanceof d.Color){ + // create a reusable temp color object to keep intermediate results + prop.tempColor = new d.Color(); + } + } + }; + + PropLine.prototype.getValue = function(r){ + var ret = {}; + for(var p in this._properties){ + var prop = this._properties[p], + start = prop.start; + if(start instanceof d.Color){ + ret[p] = d.blendColors(start, prop.end, r, prop.tempColor).toCss(); + }else if(!d.isArray(start)){ + ret[p] = ((prop.end - start) * r) + start + (p != "opacity" ? prop.units || "px" : 0); + } + } + return ret; + }; + + /*===== + dojo.declare("dojo.__AnimArgs", [dojo.__FadeArgs], { + // Properties: Object? + // A hash map of style properties to Objects describing the transition, + // such as the properties of dojo._Line with an additional 'units' property + properties: {} + + //TODOC: add event callbacks + }); + =====*/ + + dojo.animateProperty = function(/*dojo.__AnimArgs*/ args){ + // summary: + // Returns an animation that will transition the properties of + // node defined in `args` depending how they are defined in + // `args.properties` + // + // description: + // `dojo.animateProperty` is the foundation of most `dojo.fx` + // animations. It takes an object of "properties" corresponding to + // style properties, and animates them in parallel over a set + // duration. + // + // example: + // A simple animation that changes the width of the specified node. + // | dojo.animateProperty({ + // | node: "nodeId", + // | properties: { width: 400 }, + // | }).play(); + // Dojo figures out the start value for the width and converts the + // integer specified for the width to the more expressive but + // verbose form `{ width: { end: '400', units: 'px' } }` which you + // can also specify directly. Defaults to 'px' if ommitted. + // + // example: + // Animate width, height, and padding over 2 seconds... the + // pedantic way: + // | dojo.animateProperty({ node: node, duration:2000, + // | properties: { + // | width: { start: '200', end: '400', units:"px" }, + // | height: { start:'200', end: '400', units:"px" }, + // | paddingTop: { start:'5', end:'50', units:"px" } + // | } + // | }).play(); + // Note 'paddingTop' is used over 'padding-top'. Multi-name CSS properties + // are written using "mixed case", as the hyphen is illegal as an object key. + // + // example: + // Plug in a different easing function and register a callback for + // when the animation ends. Easing functions accept values between + // zero and one and return a value on that basis. In this case, an + // exponential-in curve. + // | dojo.animateProperty({ + // | node: "nodeId", + // | // dojo figures out the start value + // | properties: { width: { end: 400 } }, + // | easing: function(n){ + // | return (n==0) ? 0 : Math.pow(2, 10 * (n - 1)); + // | }, + // | onEnd: function(node){ + // | // called when the animation finishes. The animation + // | // target is passed to this function + // | } + // | }).play(500); // delay playing half a second + // + // example: + // Like all `dojo.Animation`s, animateProperty returns a handle to the + // Animation instance, which fires the events common to Dojo FX. Use `dojo.connect` + // to access these events outside of the Animation definiton: + // | var anim = dojo.animateProperty({ + // | node:"someId", + // | properties:{ + // | width:400, height:500 + // | } + // | }); + // | dojo.connect(anim,"onEnd", function(){ + // | console.log("animation ended"); + // | }); + // | // play the animation now: + // | anim.play(); + // + // example: + // Each property can be a function whose return value is substituted along. + // Additionally, each measurement (eg: start, end) can be a function. The node + // reference is passed direcly to callbacks. + // | dojo.animateProperty({ + // | node:"mine", + // | properties:{ + // | height:function(node){ + // | // shrink this node by 50% + // | return dojo.position(node).h / 2 + // | }, + // | width:{ + // | start:function(node){ return 100; }, + // | end:function(node){ return 200; } + // | } + // | } + // | }).play(); + // + + var n = args.node = d.byId(args.node); + if(!args.easing){ args.easing = d._defaultEasing; } + + var anim = new d.Animation(args); + d.connect(anim, "beforeBegin", anim, function(){ + var pm = {}; + for(var p in this.properties){ + // Make shallow copy of properties into pm because we overwrite + // some values below. In particular if start/end are functions + // we don't want to overwrite them or the functions won't be + // called if the animation is reused. + if(p == "width" || p == "height"){ + this.node.display = "block"; + } + var prop = this.properties[p]; + if(d.isFunction(prop)){ + prop = prop(n); + } + prop = pm[p] = _mixin({}, (d.isObject(prop) ? prop: { end: prop })); + + if(d.isFunction(prop.start)){ + prop.start = prop.start(n); + } + if(d.isFunction(prop.end)){ + prop.end = prop.end(n); + } + var isColor = (p.toLowerCase().indexOf("color") >= 0); + function getStyle(node, p){ + // dojo.style(node, "height") can return "auto" or "" on IE; this is more reliable: + var v = { height: node.offsetHeight, width: node.offsetWidth }[p]; + if(v !== undefined){ return v; } + v = d.style(node, p); + return (p == "opacity") ? +v : (isColor ? v : parseFloat(v)); + } + if(!("end" in prop)){ + prop.end = getStyle(n, p); + }else if(!("start" in prop)){ + prop.start = getStyle(n, p); + } + + if(isColor){ + prop.start = new d.Color(prop.start); + prop.end = new d.Color(prop.end); + }else{ + prop.start = (p == "opacity") ? +prop.start : parseFloat(prop.start); + } + } + this.curve = new PropLine(pm); + }); + d.connect(anim, "onAnimate", d.hitch(d, "style", anim.node)); + return anim; // dojo.Animation + }; + + dojo.anim = function( /*DOMNode|String*/ node, + /*Object*/ properties, + /*Integer?*/ duration, + /*Function?*/ easing, + /*Function?*/ onEnd, + /*Integer?*/ delay){ + // summary: + // A simpler interface to `dojo.animateProperty()`, also returns + // an instance of `dojo.Animation` but begins the animation + // immediately, unlike nearly every other Dojo animation API. + // description: + // `dojo.anim` is a simpler (but somewhat less powerful) version + // of `dojo.animateProperty`. It uses defaults for many basic properties + // and allows for positional parameters to be used in place of the + // packed "property bag" which is used for other Dojo animation + // methods. + // + // The `dojo.Animation` object returned from `dojo.anim` will be + // already playing when it is returned from this function, so + // calling play() on it again is (usually) a no-op. + // node: + // a DOM node or the id of a node to animate CSS properties on + // duration: + // The number of milliseconds over which the animation + // should run. Defaults to the global animation default duration + // (350ms). + // easing: + // An easing function over which to calculate acceleration + // and deceleration of the animation through its duration. + // A default easing algorithm is provided, but you may + // plug in any you wish. A large selection of easing algorithms + // are available in `dojo.fx.easing`. + // onEnd: + // A function to be called when the animation finishes + // running. + // delay: + // The number of milliseconds to delay beginning the + // animation by. The default is 0. + // example: + // Fade out a node + // | dojo.anim("id", { opacity: 0 }); + // example: + // Fade out a node over a full second + // | dojo.anim("id", { opacity: 0 }, 1000); + return d.animateProperty({ // dojo.Animation + node: node, + duration: duration || d.Animation.prototype.duration, + properties: properties, + easing: easing, + onEnd: onEnd + }).play(delay || 0); + }; +})(); + +} + +if(!dojo._hasResource["dojo._base.browser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.browser"] = true; +dojo.provide("dojo._base.browser"); + + //Need this to be the last code segment in base, so do not place any + //dojo/requireIf calls in this file/ Otherwise, due to how the build system + //puts all requireIf dependencies after the current file, the require calls + //could be called before all of base is defined/ + dojo.forEach(dojo.config.require, function(i){ + dojo["require"](i); + }); + +} + +if(!dojo._hasResource["dojo._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base"] = true; +dojo.provide("dojo._base"); + +} + + //INSERT dojo.i18n._preloadLocalizations HERE + + //Check if document already complete, and if so, just trigger page load + //listeners. NOTE: does not work with Firefox before 3.6. To support + //those browsers, set djConfig.afterOnLoad = true when you know Dojo is added + //after page load. Using a timeout so the rest of this + //script gets evaluated properly. This work needs to happen after the + //dojo.config.require work done in dojo._base. + if(dojo.isBrowser && (document.readyState === "complete" || dojo.config.afterOnLoad)){ + window.setTimeout(dojo._loadInit, 100); + } +})(); + diff --git a/tests/javascript/frameworks/ext/ext-all-2.3.0.js b/tests/javascript/frameworks/ext/ext-all-2.3.0.js new file mode 100644 index 0000000000000000000000000000000000000000..fea834b4432e03bc36b72605e7a4f39af8beeebc --- /dev/null +++ b/tests/javascript/frameworks/ext/ext-all-2.3.0.js @@ -0,0 +1,2416 @@ +Ext={}; +Ext.util={}; +Ext.lib={}; +/* + * Ext JS Library 2.3.0 + * Copyright(c) 2006-2009, Ext JS, LLC. + * licensing@extjs.com + * + * http://extjs.com/license + */ + +Ext.DomHelper=function(){var tempTableEl=null;var emptyTags=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var tableRe=/^table|tbody|tr|td$/i;var createHtml=function(o){if(typeof o=='string'){return o;} +var b="";if(Ext.isArray(o)){for(var i=0,l=o.length;i";} +return b;};var createDom=function(o,parentNode){var el;if(Ext.isArray(o)){el=document.createDocumentFragment();for(var i=0,l=o.length;i',tbe=''+te,trs=tbs+'',tre=''+tbe;var insertIntoTable=function(tag,where,el,html){if(!tempTableEl){tempTableEl=document.createElement('div');} +var node;var before=null;if(tag=='td'){if(where=='afterbegin'||where=='beforeend'){return;} +if(where=='beforebegin'){before=el;el=el.parentNode;}else{before=el.nextSibling;el=el.parentNode;} +node=ieTable(4,trs,html,tre);} +else if(tag=='tr'){if(where=='beforebegin'){before=el;el=el.parentNode;node=ieTable(3,tbs,html,tbe);}else if(where=='afterend'){before=el.nextSibling;el=el.parentNode;node=ieTable(3,tbs,html,tbe);}else{if(where=='afterbegin'){before=el.firstChild;} +node=ieTable(4,trs,html,tre);}}else if(tag=='tbody'){if(where=='beforebegin'){before=el;el=el.parentNode;node=ieTable(2,ts,html,te);}else if(where=='afterend'){before=el.nextSibling;el=el.parentNode;node=ieTable(2,ts,html,te);}else{if(where=='afterbegin'){before=el.firstChild;} +node=ieTable(3,tbs,html,tbe);}}else{if(where=='beforebegin'||where=='afterend'){return;} +if(where=='afterbegin'){before=el.firstChild;} +node=ieTable(2,ts,html,te);} +el.insertBefore(node,before);return node;};return{useDom:false,markup:function(o){return createHtml(o);},applyStyles:function(el,styles){if(styles){el=Ext.fly(el);if(typeof styles=="string"){var re=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;var matches;while((matches=re.exec(styles))!=null){el.setStyle(matches[1],matches[2]);}}else if(typeof styles=="object"){for(var style in styles){el.setStyle(style,styles[style]);}}else if(typeof styles=="function"){Ext.DomHelper.applyStyles(el,styles.call());}}},insertHtml:function(where,el,html){where=where.toLowerCase();if(el.insertAdjacentHTML){if(tableRe.test(el.tagName)){var rs;if(rs=insertIntoTable(el.tagName.toLowerCase(),where,el,html)){return rs;}} +switch(where){case"beforebegin":el.insertAdjacentHTML('BeforeBegin',html);return el.previousSibling;case"afterbegin":el.insertAdjacentHTML('AfterBegin',html);return el.firstChild;case"beforeend":el.insertAdjacentHTML('BeforeEnd',html);return el.lastChild;case"afterend":el.insertAdjacentHTML('AfterEnd',html);return el.nextSibling;} +throw'Illegal insertion point -> "'+where+'"';} +var range=el.ownerDocument.createRange();var frag;switch(where){case"beforebegin":range.setStartBefore(el);frag=range.createContextualFragment(html);el.parentNode.insertBefore(frag,el);return el.previousSibling;case"afterbegin":if(el.firstChild){range.setStartBefore(el.firstChild);frag=range.createContextualFragment(html);el.insertBefore(frag,el.firstChild);return el.firstChild;}else{el.innerHTML=html;return el.firstChild;} +case"beforeend":if(el.lastChild){range.setStartAfter(el.lastChild);frag=range.createContextualFragment(html);el.appendChild(frag);return el.lastChild;}else{el.innerHTML=html;return el.lastChild;} +case"afterend":range.setStartAfter(el);frag=range.createContextualFragment(html);el.parentNode.insertBefore(frag,el.nextSibling);return el.nextSibling;} +throw'Illegal insertion point -> "'+where+'"';},insertBefore:function(el,o,returnElement){return this.doInsert(el,o,returnElement,"beforeBegin");},insertAfter:function(el,o,returnElement){return this.doInsert(el,o,returnElement,"afterEnd","nextSibling");},insertFirst:function(el,o,returnElement){return this.doInsert(el,o,returnElement,"afterBegin","firstChild");},doInsert:function(el,o,returnElement,pos,sibling){el=Ext.getDom(el);var newNode;if(this.useDom){newNode=createDom(o,null);(sibling==="firstChild"?el:el.parentNode).insertBefore(newNode,sibling?el[sibling]:el);}else{var html=createHtml(o);newNode=this.insertHtml(pos,el,html);} +return returnElement?Ext.get(newNode,true):newNode;},append:function(el,o,returnElement){el=Ext.getDom(el);var newNode;if(this.useDom){newNode=createDom(o,null);el.appendChild(newNode);}else{var html=createHtml(o);newNode=this.insertHtml("beforeEnd",el,html);} +return returnElement?Ext.get(newNode,true):newNode;},overwrite:function(el,o,returnElement){el=Ext.getDom(el);el.innerHTML=createHtml(o);return returnElement?Ext.get(el.firstChild,true):el.firstChild;},createTemplate:function(o){var html=createHtml(o);return new Ext.Template(html);}};}(); + +Ext.Template=function(html){var a=arguments;if(Ext.isArray(html)){html=html.join("");}else if(a.length>1){var buf=[];for(var i=0,len=a.length;i+~]\s?|\s|$)/;var tagTokenRe=/^(#)?([\w-\*]+)/;var nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/;var opera=Ext.isOpera;function child(p,index){var i=0;var n=p.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n;}} +n=n.nextSibling;} +return null;};function next(n){while((n=n.nextSibling)&&n.nodeType!=1);return n;};function prev(n){while((n=n.previousSibling)&&n.nodeType!=1);return n;};function children(d){var n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){d.removeChild(n);}else{n.nodeIndex=++ni;} +n=nx;} +return this;};function byClassName(c,a,v){if(!v){return c;} +var r=[],ri=-1,cn;for(var i=0,ci;ci=c[i];i++){if((' '+ci.className+' ').indexOf(v)!=-1){r[++ri]=ci;}} +return r;};function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0];} +if(!n){return null;} +if(attr=="for"){return n.htmlFor;} +if(attr=="class"||attr=="className"){return n.className;} +return n.getAttribute(attr)||n[attr];};function getNodes(ns,mode,tagName){var result=[],ri=-1,cs;if(!ns){return result;} +tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns];} +if(!mode){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[++ri]=ci;}}}else if(mode=="/"||mode==">"){var utag=tagName.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=opera?ni.childNodes:(ni.children||ni.childNodes);for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=='*'){result[++ri]=cj;}}}}else if(mode=="+"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1);if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=='*')){result[++ri]=n;}}}else if(mode=="~"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)){if(n.nodeName==utag||n.nodeName==tagName||tagName=='*'){result[++ri]=n;}}}} +return result;};function concat(a,b){if(b.slice){return a.concat(b);} +for(var i=0,l=b.length;i1){return nodup(results);} +return results;},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0];},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select");} +var n=valueCache[path](root);n=n[0]?n[0]:n;var v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==='')?defaultValue:v);},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v);},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el);} +var isArray=Ext.isArray(el);var result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0);},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple");} +var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result;},matchers:[{re:/^\.([\w-]+)/,select:'n = byClassName(n, null, " {1} ");'},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w-]+)/,select:'n = byId(n, null, "{1}");'},{re:/^@([\w-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v;},"!=":function(a,v){return a!=v;},"^=":function(a,v){return a&&a.substr(0,v.length)==v;},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v;},"*=":function(a,v){return a&&a.indexOf(v)!==-1;},"%=":function(a,v){return(a%v)==0;},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+'-');},"~=":function(a,v){return a&&(' '+a+' ').indexOf(' '+v+' ')!=-1;}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1);if(!n){r[++ri]=ci;}} +return r;},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1);if(!n){r[++ri]=ci;}} +return r;},"nth-child":function(c,a){var r=[],ri=-1;var m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a);var f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j;}} +pn._batch=batch;} +if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n;}}else if((n.nodeIndex+l)%f==0){r[++ri]=n;}} +return r;},"only-child":function(c){var r=[],ri=-1;;for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci;}} +return r;},"empty":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break;}} +if(empty){r[++ri]=ci;}} +return r;},"contains":function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||'').indexOf(v)!=-1){r[++ri]=ci;}} +return r;},"nodeValue":function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci;}} +return r;},"checked":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci;}} +return r;},"not":function(c,ss){return Ext.DomQuery.filter(c,ss,true);},"any":function(c,selectors){var ss=selectors.split('|');var r=[],ri=-1,s;for(var i=0,ci;ci=c[i];i++){for(var j=0;s=ss[j];j++){if(Ext.DomQuery.is(ci,s)){r[++ri]=ci;break;}}} +return r;},"odd":function(c){return this["nth-child"](c,"odd");},"even":function(c){return this["nth-child"](c,"even");},"nth":function(c,a){return c[a-1]||[];},"first":function(c){return c[0]||[];},"last":function(c){return c[c.length-1]||[];},"has":function(c,ss){var s=Ext.DomQuery.select;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci;}} +return r;},"next":function(c,ss){var is=Ext.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[++ri]=ci;}} +return r;},"prev":function(c,ss){var is=Ext.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci;}} +return r;}}};}();Ext.query=Ext.DomQuery.select; + +Ext.util.Observable=function(){if(this.listeners){this.on(this.listeners);delete this.listeners;}};Ext.util.Observable.prototype={fireEvent:function(){if(this.eventsSuspended!==true){var ce=this.events[arguments[0].toLowerCase()];if(typeof ce=="object"){return ce.fire.apply(ce,Array.prototype.slice.call(arguments,1));}} +return true;},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(eventName,fn,scope,o){if(typeof eventName=="object"){o=eventName;for(var e in o){if(this.filterOptRe.test(e)){continue;} +if(typeof o[e]=="function"){this.addListener(e,o[e],o.scope,o);}else{this.addListener(e,o[e].fn,o[e].scope,o[e]);}} +return;} +o=(!o||typeof o=="boolean")?{}:o;eventName=eventName.toLowerCase();var ce=this.events[eventName]||true;if(typeof ce=="boolean"){ce=new Ext.util.Event(this,eventName);this.events[eventName]=ce;} +ce.addListener(fn,scope,o);},removeListener:function(eventName,fn,scope){var ce=this.events[eventName.toLowerCase()];if(typeof ce=="object"){ce.removeListener(fn,scope);}},purgeListeners:function(){for(var evt in this.events){if(typeof this.events[evt]=="object"){this.events[evt].clearListeners();}}},relayEvents:function(o,events){var createHandler=function(ename){return function(){return this.fireEvent.apply(this,Ext.combine(ename,Array.prototype.slice.call(arguments,0)));};};for(var i=0,len=events.length;i0;},suspendEvents:function(){this.eventsSuspended=true;},resumeEvents:function(){this.eventsSuspended=false;},getMethodEvent:function(method){if(!this.methodEvents){this.methodEvents={};} +var e=this.methodEvents[method];if(!e){e={};this.methodEvents[method]=e;e.originalFn=this[method];e.methodName=method;e.before=[];e.after=[];var returnValue,v,cancel;var obj=this;var makeCall=function(fn,scope,args){if((v=fn.apply(scope||obj,args))!==undefined){if(typeof v==='object'){if(v.returnValue!==undefined){returnValue=v.returnValue;}else{returnValue=v;} +if(v.cancel===true){cancel=true;}}else if(v===false){cancel=true;}else{returnValue=v;}}} +this[method]=function(){returnValue=v=undefined;cancel=false;var args=Array.prototype.slice.call(arguments,0);for(var i=0,len=e.before.length;i0){this.firing=true;var args=Array.prototype.slice.call(arguments,0);for(var i=0;i");var defer=document.getElementById("ie-deferred-loader");defer.onreadystatechange=function(){if(this.readyState=="complete"){fireDocReady();}};}else if(Ext.isWebKit){docReadyProcId=setInterval(function(){var rs=document.readyState;if(rs=="complete"){fireDocReady();}},10);} +E.on(window,"load",fireDocReady);};var createBuffered=function(h,o){var task=new Ext.util.DelayedTask(h);return function(e){e=new Ext.EventObjectImpl(e);task.delay(o.buffer,h,null,[e]);};};var createSingle=function(h,el,ename,fn,scope){return function(e){Ext.EventManager.removeListener(el,ename,fn,scope);h(e);};};var createDelayed=function(h,o){return function(e){e=new Ext.EventObjectImpl(e);setTimeout(function(){h(e);},o.delay||10);};};var listen=function(element,ename,opt,fn,scope){var o=(!opt||typeof opt=="boolean")?{}:opt;fn=fn||o.fn;scope=scope||o.scope;var el=Ext.getDom(element);if(!el){throw"Error listening for \""+ename+'\". Element "'+element+'" doesn\'t exist.';} +var h=function(e){if(!window[xname]){return;} +e=Ext.EventObject.setEvent(e);var t;if(o.delegate){t=e.getTarget(o.delegate,el);if(!t){return;}}else{t=e.target;} +if(o.stopEvent===true){e.stopEvent();} +if(o.preventDefault===true){e.preventDefault();} +if(o.stopPropagation===true){e.stopPropagation();} +if(o.normalized===false){e=e.browserEvent;} +fn.call(scope||el,e,t,o);};if(o.delay){h=createDelayed(h,o);} +if(o.single){h=createSingle(h,el,ename,fn,scope);} +if(o.buffer){h=createBuffered(h,o);} +addListener(el,ename,fn,h,scope);return h;};var propRe=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/,curWidth=0,curHeight=0;var pub={addListener:function(element,eventName,fn,scope,options){if(typeof eventName=="object"){var o=eventName;for(var e in o){if(propRe.test(e)){continue;} +if(typeof o[e]=="function"){listen(element,e,o,o[e],o.scope);}else{listen(element,e,o[e]);}} +return;} +return listen(element,eventName,options,fn,scope);},removeListener:function(element,eventName,fn,scope){return removeListener(element,eventName,fn,scope);},removeAll:function(element){return removeAll(element);},onDocumentReady:function(fn,scope,options){if(docReadyState){docReadyEvent.addListener(fn,scope,options);docReadyEvent.fire();docReadyEvent.clearListeners();return;} +if(!docReadyEvent){initDocReady();} +options=options||{};if(!options.delay){options.delay=1;} +docReadyEvent.addListener(fn,scope,options);},doResizeEvent:function(){var h=D.getViewHeight(),w=D.getViewWidth();if(curHeight!=h||curWidth!=w){resizeEvent.fire(curWidth=w,curHeight=h);}},onWindowResize:function(fn,scope,options){if(!resizeEvent){resizeEvent=new Ext.util.Event();resizeTask=new Ext.util.DelayedTask(this.doResizeEvent);E.on(window,"resize",this.fireWindowResize,this);} +resizeEvent.addListener(fn,scope,options);},fireWindowResize:function(){if(resizeEvent){if((Ext.isIE||Ext.isAir)&&resizeTask){resizeTask.delay(50);}else{resizeEvent.fire(D.getViewWidth(),D.getViewHeight());}}},onTextResize:function(fn,scope,options){if(!textEvent){textEvent=new Ext.util.Event();var textEl=new Ext.Element(document.createElement('div'));textEl.dom.className='x-text-resize';textEl.dom.innerHTML='X';textEl.appendTo(document.body);textSize=textEl.dom.offsetHeight;setInterval(function(){if(textEl.dom.offsetHeight!=textSize){textEvent.fire(textSize,textSize=textEl.dom.offsetHeight);}},this.textResizeInterval);} +textEvent.addListener(fn,scope,options);},removeResizeListener:function(fn,scope){if(resizeEvent){resizeEvent.removeListener(fn,scope);}},fireResize:function(){if(resizeEvent){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());}},ieDeferSrc:false,textResizeInterval:50};pub.on=pub.addListener;pub.un=pub.removeListener;pub.stoppedMouseDownEvent=new Ext.util.Event();return pub;}();Ext.onReady=Ext.EventManager.onDocumentReady;(function(){var initExtCss=function(){var bd=document.body||document.getElementsByTagName('body')[0];if(!bd){return false;} +var cls=[' ',Ext.isIE?"ext-ie "+(Ext.isIE6?'ext-ie6':(Ext.isIE7?'ext-ie7':'ext-ie8')):Ext.isGecko?"ext-gecko "+(Ext.isGecko2?'ext-gecko2':'ext-gecko3'):Ext.isOpera?"ext-opera":Ext.isSafari?"ext-safari":Ext.isChrome?"ext-chrome":""];if(Ext.isMac){cls.push("ext-mac");} +if(Ext.isLinux){cls.push("ext-linux");} +if(Ext.isStrict||Ext.isBorderBox){var p=bd.parentNode;if(p){p.className+=Ext.isStrict?' ext-strict':' ext-border-box';}} +bd.className+=cls.join(' ');return true;} +if(!initExtCss()){Ext.onReady(initExtCss);}})();Ext.EventObject=function(){var E=Ext.lib.Event;var safariKeys={3:13,63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35};var btnMap=Ext.isIE?{1:0,4:1,2:2}:(Ext.isWebKit?{1:0,2:1,3:2}:{0:0,1:1,2:2});Ext.EventObjectImpl=function(e){if(e){this.setEvent(e.browserEvent||e);}};Ext.EventObjectImpl.prototype={browserEvent:null,button:-1,shiftKey:false,ctrlKey:false,altKey:false,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,RETURN:13,SHIFT:16,CTRL:17,CONTROL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGEUP:33,PAGE_DOWN:34,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,setEvent:function(e){if(e==this||(e&&e.browserEvent)){return e;} +this.browserEvent=e;if(e){this.button=e.button?btnMap[e.button]:(e.which?e.which-1:-1);if(e.type=='click'&&this.button==-1){this.button=0;} +this.type=e.type;this.shiftKey=e.shiftKey;this.ctrlKey=e.ctrlKey||e.metaKey;this.altKey=e.altKey;this.keyCode=e.keyCode;this.charCode=e.charCode;this.target=E.getTarget(e);this.xy=E.getXY(e);}else{this.button=-1;this.shiftKey=false;this.ctrlKey=false;this.altKey=false;this.keyCode=0;this.charCode=0;this.target=null;this.xy=[0,0];} +return this;},stopEvent:function(){if(this.browserEvent){if(this.browserEvent.type=='mousedown'){Ext.EventManager.stoppedMouseDownEvent.fire(this);} +E.stopEvent(this.browserEvent);}},preventDefault:function(){if(this.browserEvent){E.preventDefault(this.browserEvent);}},isNavKeyPress:function(){var k=this.keyCode;k=Ext.isSafari?(safariKeys[k]||k):k;return(k>=33&&k<=40)||k==this.RETURN||k==this.TAB||k==this.ESC;},isSpecialKey:function(){var k=this.keyCode;k=Ext.isSafari?(safariKeys[k]||k):k;return(this.type=='keypress'&&this.ctrlKey)||this.isNavKeyPress()||(k==this.BACKSPACE)||(k>=16&&k<=20)||(k>=44&&k<=45);},stopPropagation:function(){if(this.browserEvent){if(this.browserEvent.type=='mousedown'){Ext.EventManager.stoppedMouseDownEvent.fire(this);} +E.stopPropagation(this.browserEvent);}},getCharCode:function(){return this.charCode||this.keyCode;},getKey:function(){var k=this.keyCode||this.charCode;return Ext.isSafari?(safariKeys[k]||k):k;},getPageX:function(){return this.xy[0];},getPageY:function(){return this.xy[1];},getTime:function(){if(this.browserEvent){return E.getTime(this.browserEvent);} +return null;},getXY:function(){return this.xy;},getTarget:function(selector,maxDepth,returnEl){return selector?Ext.fly(this.target).findParent(selector,maxDepth,returnEl):(returnEl?Ext.get(this.target):this.target);},getRelatedTarget:function(){if(this.browserEvent){return E.getRelatedTarget(this.browserEvent);} +return null;},getWheelDelta:function(){var e=this.browserEvent;var delta=0;if(e.wheelDelta){delta=e.wheelDelta/120;}else if(e.detail){delta=-e.detail/3;} +return delta;},hasModifier:function(){return((this.ctrlKey||this.altKey)||this.shiftKey)?true:false;},within:function(el,related,allowEl){var t=this[related?"getRelatedTarget":"getTarget"]();return t&&((allowEl?(t===Ext.getDom(el)):false)||Ext.fly(el).contains(t));},getPoint:function(){return new Ext.lib.Point(this.xy[0],this.xy[1]);}};return new Ext.EventObjectImpl();}(); + +(function(){var D=Ext.lib.Dom;var E=Ext.lib.Event;var A=Ext.lib.Anim;var propCache={};var camelRe=/(-[a-z])/gi;var camelFn=function(m,a){return a.charAt(1).toUpperCase();};var view=document.defaultView;Ext.Element=function(element,forceNew){var dom=typeof element=="string"?document.getElementById(element):element;if(!dom){return null;} +var id=dom.id;if(forceNew!==true&&id&&Ext.Element.cache[id]){return Ext.Element.cache[id];} +this.dom=dom;this.id=id||Ext.id(dom);};var El=Ext.Element;El.prototype={originalDisplay:"",visibilityMode:1,defaultUnit:"px",setVisibilityMode:function(visMode){this.visibilityMode=visMode;return this;},enableDisplayMode:function(display){this.setVisibilityMode(El.DISPLAY);if(typeof display!="undefined")this.originalDisplay=display;return this;},findParent:function(simpleSelector,maxDepth,returnEl){var p=this.dom,b=document.body,depth=0,dq=Ext.DomQuery,stopEl;maxDepth=maxDepth||50;if(typeof maxDepth!="number"){stopEl=Ext.getDom(maxDepth);maxDepth=Number.MAX_VALUE;} +while(p&&p.nodeType==1&&depthch||tcb){c.scrollTop=b-ch;} +c.scrollTop=c.scrollTop;if(hscroll!==false){if(el.offsetWidth>c.clientWidth||lcr){c.scrollLeft=r-c.clientWidth;} +c.scrollLeft=c.scrollLeft;} +return this;},scrollChildIntoView:function(child,hscroll){Ext.fly(child,'_scrollChildIntoView').scrollIntoView(this,hscroll);},autoHeight:function(animate,duration,onComplete,easing){var oldHeight=this.getHeight();this.clip();this.setHeight(1);setTimeout(function(){var height=parseInt(this.dom.scrollHeight,10);if(!animate){this.setHeight(height);this.unclip();if(typeof onComplete=="function"){onComplete();}}else{this.setHeight(oldHeight);this.setHeight(height,animate,duration,function(){this.unclip();if(typeof onComplete=="function")onComplete();}.createDelegate(this),easing);}}.createDelegate(this),0);return this;},contains:function(el){if(!el){return false;} +return D.isAncestor(this.dom,el.dom?el.dom:el);},isVisible:function(deep){var vis=!(this.getStyle("visibility")=="hidden"||this.getStyle("display")=="none");if(deep!==true||!vis){return vis;} +var p=this.dom.parentNode;while(p&&p.tagName.toLowerCase()!="body"){if(!Ext.fly(p,'_isVisible').isVisible()){return false;} +p=p.parentNode;} +return true;},select:function(selector,unique){return El.select(selector,unique,this.dom);},query:function(selector){return Ext.DomQuery.select(selector,this.dom);},child:function(selector,returnDom){var n=Ext.DomQuery.selectNode(selector,this.dom);return returnDom?n:Ext.get(n);},down:function(selector,returnDom){var n=Ext.DomQuery.selectNode(" > "+selector,this.dom);return returnDom?n:Ext.get(n);},initDD:function(group,config,overrides){var dd=new Ext.dd.DD(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides);},initDDProxy:function(group,config,overrides){var dd=new Ext.dd.DDProxy(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides);},initDDTarget:function(group,config,overrides){var dd=new Ext.dd.DDTarget(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides);},setVisible:function(visible,animate){if(!animate||!A){if(this.visibilityMode==El.DISPLAY){this.setDisplayed(visible);}else{this.fixDisplay();this.dom.style.visibility=visible?"visible":"hidden";}}else{var dom=this.dom;var visMode=this.visibilityMode;if(visible){this.setOpacity(.01);this.setVisible(true);} +this.anim({opacity:{to:(visible?1:0)}},this.preanim(arguments,1),null,.35,'easeIn',function(){if(!visible){if(visMode==El.DISPLAY){dom.style.display="none";}else{dom.style.visibility="hidden";} +Ext.get(dom).setOpacity(1);}});} +return this;},isDisplayed:function(){return this.getStyle("display")!="none";},toggle:function(animate){this.setVisible(!this.isVisible(),this.preanim(arguments,0));return this;},setDisplayed:function(value){if(typeof value=="boolean"){value=value?this.originalDisplay:"none";} +this.setStyle("display",value);return this;},focus:function(){try{this.dom.focus();}catch(e){} +return this;},blur:function(){try{this.dom.blur();}catch(e){} +return this;},addClass:function(className){if(Ext.isArray(className)){for(var i=0,len=className.length;idw+scrollX){x=swapX?r.left-w:dw+scrollX-w;} +if(xdh+scrollY){y=swapY?r.top-h:dh+scrollY-h;} +if(yvr){x=vr-w;moved=true;} +if((y+h)>vb){y=vb-h;moved=true;} +if(x';E.onAvailable(id,function(){var hd=document.getElementsByTagName("head")[0];var re=/(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;var srcRe=/\ssrc=([\'\"])(.*?)\1/i;var typeRe=/\stype=([\'\"])(.*?)\1/i;var match;while(match=re.exec(html)){var attrs=match[1];var srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){var s=document.createElement("script");s.src=srcMatch[2];var typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2];} +hd.appendChild(s);}else if(match[2]&&match[2].length>0){if(window.execScript){window.execScript(match[2]);}else{window.eval(match[2]);}}} +var el=document.getElementById(id);if(el){Ext.removeNode(el);} +if(typeof callback=="function"){callback();}});dom.innerHTML=html.replace(/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this;},load:function(){var um=this.getUpdater();um.update.apply(um,arguments);return this;},getUpdater:function(){if(!this.updateManager){this.updateManager=new Ext.Updater(this);} +return this.updateManager;},unselectable:function(){this.dom.unselectable="on";this.swallowEvent("selectstart",true);this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");this.addClass("x-unselectable");return this;},getCenterXY:function(){return this.getAlignToXY(document,'c-c');},center:function(centerIn){this.alignTo(centerIn||document,'c-c');return this;},isBorderBox:function(){return noBoxAdjust[this.dom.tagName.toLowerCase()]||Ext.isBorderBox;},getBox:function(contentBox,local){var xy;if(!local){xy=this.getXY();}else{var left=parseInt(this.getStyle("left"),10)||0;var top=parseInt(this.getStyle("top"),10)||0;xy=[left,top];} +var el=this.dom,w=el.offsetWidth,h=el.offsetHeight,bx;if(!contentBox){bx={x:xy[0],y:xy[1],0:xy[0],1:xy[1],width:w,height:h};}else{var l=this.getBorderWidth("l")+this.getPadding("l");var r=this.getBorderWidth("r")+this.getPadding("r");var t=this.getBorderWidth("t")+this.getPadding("t");var b=this.getBorderWidth("b")+this.getPadding("b");bx={x:xy[0]+l,y:xy[1]+t,0:xy[0]+l,1:xy[1]+t,width:w-(l+r),height:h-(t+b)};} +bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx;},getFrameWidth:function(sides,onlyContentBox){return onlyContentBox&&Ext.isBorderBox?0:(this.getPadding(sides)+this.getBorderWidth(sides));},setBox:function(box,adjust,animate){var w=box.width,h=box.height;if((adjust&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"));} +this.setBounds(box.x,box.y,w,h,this.preanim(arguments,2));return this;},repaint:function(){var dom=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.get(dom).removeClass("x-repaint");},1);return this;},getMargins:function(side){if(!side){return{top:parseInt(this.getStyle("margin-top"),10)||0,left:parseInt(this.getStyle("margin-left"),10)||0,bottom:parseInt(this.getStyle("margin-bottom"),10)||0,right:parseInt(this.getStyle("margin-right"),10)||0};}else{return this.addStyles(side,El.margins);}},addStyles:function(sides,styles){var val=0,v,w;for(var i=0,len=sides.length;i=0?w:-1*w);}}} +return val;},createProxy:function(config,renderTo,matchBox){config=typeof config=="object"?config:{tag:"div",cls:config};var proxy;if(renderTo){proxy=Ext.DomHelper.append(renderTo,config,true);}else{proxy=Ext.DomHelper.insertBefore(this.dom,config,true);} +if(matchBox){proxy.setBox(this.getBox());} +return proxy;},mask:function(msg,msgCls){if(this.getStyle("position")=="static"){this.addClass("x-masked-relative");} +if(this._maskMsg){this._maskMsg.remove();} +if(this._mask){this._mask.remove();} +this._mask=Ext.DomHelper.append(this.dom,{cls:"ext-el-mask"},true);this.addClass("x-masked");this._mask.setDisplayed(true);if(typeof msg=='string'){this._maskMsg=Ext.DomHelper.append(this.dom,{cls:"ext-el-mask-msg",cn:{tag:'div'}},true);var mm=this._maskMsg;mm.dom.className=msgCls?"ext-el-mask-msg "+msgCls:"ext-el-mask-msg";mm.dom.firstChild.innerHTML=msg;mm.setDisplayed(true);mm.center(this);} +if(Ext.isIE&&!(Ext.isIE7&&Ext.isStrict)&&this.getStyle('height')=='auto'){this._mask.setSize(this.getWidth(),this.getHeight());} +return this._mask;},unmask:function(){if(this._mask){if(this._maskMsg){this._maskMsg.remove();delete this._maskMsg;} +this._mask.remove();delete this._mask;} +this.removeClass(["x-masked","x-masked-relative"]);},isMasked:function(){return this._mask&&this._mask.isVisible();},createShim:function(){var el=document.createElement('iframe');el.frameBorder='0';el.className='ext-shim';if(Ext.isIE&&Ext.isSecure){el.src=Ext.SSL_SECURE_URL;} +var shim=Ext.get(this.dom.parentNode.insertBefore(el,this.dom));shim.autoBoxAdjust=false;return shim;},remove:function(){Ext.removeNode(this.dom);delete El.cache[this.dom.id];},hover:function(overFn,outFn,scope){var preOverFn=function(e){if(!e.within(this,true)){overFn.apply(scope||this,arguments);}};var preOutFn=function(e){if(!e.within(this,true)){outFn.apply(scope||this,arguments);}};this.on("mouseover",preOverFn,this.dom);this.on("mouseout",preOutFn,this.dom);return this;},addClassOnOver:function(className){this.hover(function(){Ext.fly(this,'_internal').addClass(className);},function(){Ext.fly(this,'_internal').removeClass(className);});return this;},addClassOnFocus:function(className){this.on("focus",function(){Ext.fly(this,'_internal').addClass(className);},this.dom);this.on("blur",function(){Ext.fly(this,'_internal').removeClass(className);},this.dom);return this;},addClassOnClick:function(className){var dom=this.dom;this.on("mousedown",function(){Ext.fly(dom,'_internal').addClass(className);var d=Ext.getDoc();var fn=function(){Ext.fly(dom,'_internal').removeClass(className);d.removeListener("mouseup",fn);};d.on("mouseup",fn);});return this;},swallowEvent:function(eventName,preventDefault){var fn=function(e){e.stopPropagation();if(preventDefault){e.preventDefault();}};if(Ext.isArray(eventName)){for(var i=0,len=eventName.length;idom.clientHeight||dom.scrollWidth>dom.clientWidth;},scrollTo:function(side,value,animate){var prop=side.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!animate||!A){this.dom[prop]=value;}else{var to=prop=="scrollLeft"?[value,this.dom.scrollTop]:[this.dom.scrollLeft,value];this.anim({scroll:{"to":to}},this.preanim(arguments,2),'scroll');} +return this;},scroll:function(direction,distance,animate){if(!this.isScrollable()){return;} +var el=this.dom;var l=el.scrollLeft,t=el.scrollTop;var w=el.scrollWidth,h=el.scrollHeight;var cw=el.clientWidth,ch=el.clientHeight;direction=direction.toLowerCase();var scrolled=false;var a=this.preanim(arguments,2);switch(direction){case"l":case"left":if(w-l>cw){var v=Math.min(l+distance,w-cw);this.scrollTo("left",v,a);scrolled=true;} +break;case"r":case"right":if(l>0){var v=Math.max(l-distance,0);this.scrollTo("left",v,a);scrolled=true;} +break;case"t":case"top":case"up":if(t>0){var v=Math.max(t-distance,0);this.scrollTo("top",v,a);scrolled=true;} +break;case"b":case"bottom":case"down":if(h-t>ch){var v=Math.min(t+distance,h-ch);this.scrollTo("top",v,a);scrolled=true;} +break;} +return scrolled;},translatePoints:function(x,y){if(typeof x=='object'||Ext.isArray(x)){y=x[1];x=x[0];} +var p=this.getStyle('position');var o=this.getXY();var l=parseInt(this.getStyle('left'),10);var t=parseInt(this.getStyle('top'),10);if(isNaN(l)){l=(p=="relative")?0:this.dom.offsetLeft;} +if(isNaN(t)){t=(p=="relative")?0:this.dom.offsetTop;} +return{left:(x-o[0]+l),top:(y-o[1]+t)};},getScroll:function(){var d=this.dom,doc=document;if(d==doc||d==doc.body){var l,t;if(Ext.isIE&&Ext.isStrict){l=doc.documentElement.scrollLeft||(doc.body.scrollLeft||0);t=doc.documentElement.scrollTop||(doc.body.scrollTop||0);}else{l=window.pageXOffset||(doc.body.scrollLeft||0);t=window.pageYOffset||(doc.body.scrollTop||0);} +return{left:l,top:t};}else{return{left:d.scrollLeft,top:d.scrollTop};}},getColor:function(attr,defaultValue,prefix){var v=this.getStyle(attr);if(!v||v=="transparent"||v=="inherit"){return defaultValue;} +var color=typeof prefix=="undefined"?"#":prefix;if(v.substr(0,4)=="rgb("){var rvs=v.slice(4,v.length-1).split(",");for(var i=0;i<3;i++){var h=parseInt(rvs[i]);var s=h.toString(16);if(h<16){s="0"+s;} +color+=s;}}else{if(v.substr(0,1)=="#"){if(v.length==4){for(var i=1;i<4;i++){var c=v.charAt(i);color+=c+c;}}else if(v.length==7){color+=v.substr(1);}}} +return(color.length>5?color.toLowerCase():defaultValue);},boxWrap:function(cls){cls=cls||'x-box';var el=Ext.get(this.insertHtml('beforeBegin',String.format('
    '+El.boxMarkup+'
    ',cls)));el.child('.'+cls+'-mc').dom.appendChild(this.dom);return el;},getAttributeNS:Ext.isIE?function(ns,name){var d=this.dom;var type=typeof d[ns+":"+name];if(type!='undefined'&&type!='unknown'){return d[ns+":"+name];} +return d[name];}:function(ns,name){var d=this.dom;return d.getAttributeNS(ns,name)||d.getAttribute(ns+":"+name)||d.getAttribute(name)||d[name];},getTextWidth:function(text,min,max){return(Ext.util.TextMetrics.measure(this.dom,Ext.value(text,this.dom.innerHTML,true)).width).constrain(min||0,max||1000000);}};var ep=El.prototype;ep.on=ep.addListener;ep.mon=ep.addListener;ep.getUpdateManager=ep.getUpdater;ep.un=ep.removeListener;ep.autoBoxAdjust=true;El.unitPattern=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;El.addUnits=function(v,defaultUnit){if(v===""||v=="auto"){return v;} +if(v===undefined){return'';} +if(typeof v=="number"||!El.unitPattern.test(v)){return v+(defaultUnit||'px');} +return v;};El.boxMarkup='
    ';El.VISIBILITY=1;El.DISPLAY=2;El.borders={l:"border-left-width",r:"border-right-width",t:"border-top-width",b:"border-bottom-width"};El.paddings={l:"padding-left",r:"padding-right",t:"padding-top",b:"padding-bottom"};El.margins={l:"margin-left",r:"margin-right",t:"margin-top",b:"margin-bottom"};El.cache={};var docEl;El.get=function(el){var ex,elm,id;if(!el){return null;} +if(typeof el=="string"){if(!(elm=document.getElementById(el))){return null;} +if(ex=El.cache[el]){ex.dom=elm;}else{ex=El.cache[el]=new El(elm);} +return ex;}else if(el.tagName){if(!(id=el.id)){id=Ext.id(el);} +if(ex=El.cache[id]){ex.dom=el;}else{ex=El.cache[id]=new El(el);} +return ex;}else if(el instanceof El){if(el!=docEl){el.dom=document.getElementById(el.id)||el.dom;El.cache[el.id]=el;} +return el;}else if(el.isComposite){return el;}else if(Ext.isArray(el)){return El.select(el);}else if(el==document){if(!docEl){var f=function(){};f.prototype=El.prototype;docEl=new f();docEl.dom=document;} +return docEl;} +return null;};El.uncache=function(el){for(var i=0,a=arguments,len=a.length;i0?queue():el.afterFx(o);}});arguments.callee.anim={isAnimated:function(){return true;},stop:function(){active.stop();}};};queue();});return this;},pause:function(seconds){var el=this.getFxEl(),t;el.queueFx({},function(){t=setTimeout(function(){el.afterFx({});},seconds*1000);arguments.callee.anim={isAnimated:function(){return true;},stop:function(){clearTimeout(t);el.afterFx({});}};});return this;},fadeIn:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.setOpacity(0);this.fixDisplay();this.dom.style.visibility='visible';var to=o.endOpacity||1;arguments.callee.anim=this.fxanim({opacity:{to:to}},o,null,.5,"easeOut",function(){if(to==1){this.clearOpacity();} +el.afterFx(o);});});return this;},fadeOut:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var to=o.endOpacity||0;arguments.callee.anim=this.fxanim({opacity:{to:to}},o,null,.5,"easeOut",function(){if(to===0){if(this.visibilityMode==Ext.Element.DISPLAY||o.useDisplay){this.dom.style.display="none";}else{this.dom.style.visibility="hidden";} +this.clearOpacity();} +el.afterFx(o);});});return this;},scale:function(w,h,o){this.shift(Ext.apply({},o,{width:w,height:h}));return this;},shift:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var a={},w=o.width,h=o.height,x=o.x,y=o.y,op=o.opacity;if(w!==undefined){a.width={to:this.adjustWidth(w)};} +if(h!==undefined){a.height={to:this.adjustHeight(h)};} +if(o.left!==undefined){a.left={to:o.left};} +if(o.top!==undefined){a.top={to:o.top};} +if(o.right!==undefined){a.right={to:o.right};} +if(o.bottom!==undefined){a.bottom={to:o.bottom};} +if(x!==undefined||y!==undefined){a.points={to:[x!==undefined?x:this.getX(),y!==undefined?y:this.getY()]};} +if(op!==undefined){a.opacity={to:op};} +if(o.xy!==undefined){a.points={to:o.xy};} +arguments.callee.anim=this.fxanim(a,o,'motion',.35,"easeOut",function(){el.afterFx(o);});});return this;},ghost:function(anchor,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){anchor=anchor||"b";var r=this.getFxRestore();var w=this.getWidth(),h=this.getHeight();var st=this.dom.style;var after=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();} +el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;el.afterFx(o);};var a={opacity:{to:0},points:{}},pt=a.points;switch(anchor.toLowerCase()){case"t":pt.by=[0,-h];break;case"l":pt.by=[-w,0];break;case"r":pt.by=[w,0];break;case"b":pt.by=[0,h];break;case"tl":pt.by=[-w,-h];break;case"bl":pt.by=[-w,h];break;case"br":pt.by=[w,h];break;case"tr":pt.by=[w,-h];break;} +arguments.callee.anim=this.fxanim(a,o,'motion',.5,"easeOut",after);});return this;},syncFx:function(){this.fxDefaults=Ext.apply(this.fxDefaults||{},{block:false,concurrent:true,stopFx:false});return this;},sequenceFx:function(){this.fxDefaults=Ext.apply(this.fxDefaults||{},{block:false,concurrent:false,stopFx:false});return this;},nextFx:function(){var ef=this.fxQueue[0];if(ef){ef.call(this);}},hasActiveFx:function(){return this.fxQueue&&this.fxQueue[0];},stopFx:function(){if(this.hasActiveFx()){var cur=this.fxQueue[0];if(cur&&cur.anim&&cur.anim.isAnimated()){this.fxQueue=[cur];cur.anim.stop(true);}} +return this;},beforeFx:function(o){if(this.hasActiveFx()&&!o.concurrent){if(o.stopFx){this.stopFx();return true;} +return false;} +return true;},hasFxBlock:function(){var q=this.fxQueue;return q&&q[0]&&q[0].block;},queueFx:function(o,fn){if(!this.fxQueue){this.fxQueue=[];} +if(!this.hasFxBlock()){Ext.applyIf(o,this.fxDefaults);if(!o.concurrent){var run=this.beforeFx(o);fn.block=o.block;this.fxQueue.push(fn);if(run){this.nextFx();}}else{fn.call(this);}} +return this;},fxWrap:function(pos,o,vis){var wrap;if(!o.wrap||!(wrap=Ext.get(o.wrap))){var wrapXY;if(o.fixPosition){wrapXY=this.getXY();} +var div=document.createElement("div");div.style.visibility=vis;wrap=Ext.get(this.dom.parentNode.insertBefore(div,this.dom));wrap.setPositioning(pos);if(wrap.getStyle("position")=="static"){wrap.position("relative");} +this.clearPositioning('auto');wrap.clip();wrap.dom.appendChild(this.dom);if(wrapXY){wrap.setXY(wrapXY);}} +return wrap;},fxUnwrap:function(wrap,pos,o){this.clearPositioning();this.setPositioning(pos);if(!o.wrap){wrap.dom.parentNode.insertBefore(this.dom,wrap.dom);wrap.remove();}},getFxRestore:function(){var st=this.dom.style;return{pos:this.getPositioning(),width:st.width,height:st.height};},afterFx:function(o){if(o.afterStyle){this.applyStyles(o.afterStyle);} +if(o.afterCls){this.addClass(o.afterCls);} +if(o.remove===true){this.remove();} +if(!o.concurrent){this.fxQueue.shift();} +Ext.callback(o.callback,o.scope,[this]);if(!o.concurrent){this.nextFx();}},getFxEl:function(){return Ext.get(this.dom);},fxanim:function(args,opt,animType,defaultDur,defaultEase,cb){animType=animType||'run';opt=opt||{};var anim=Ext.lib.Anim[animType](this.dom,args,(opt.duration||defaultDur)||.35,(opt.easing||defaultEase)||'easeOut',function(){Ext.callback(cb,this);},this);opt.anim=anim;return anim;}};Ext.Fx.resize=Ext.Fx.scale;Ext.apply(Ext.Element.prototype,Ext.Fx); + +Ext.CompositeElement=function(els){this.elements=[];this.addElements(els);};Ext.CompositeElement.prototype={isComposite:true,addElements:function(els){if(!els)return this;if(typeof els=="string"){els=Ext.Element.selectorFunction(els);} +var yels=this.elements;var index=yels.length-1;for(var i=0,len=els.length;i";};if(typeof cfg.scripts!="undefined"){this.loadScripts=cfg.scripts;};if(typeof cfg.timeout!="undefined"){this.timeout=cfg.timeout;};} +this.showLoading();if(!discardUrl){this.defaultUrl=url;} +if(typeof url=="function"){url=url.call(this);} +var o=Ext.apply({},{url:url,params:(typeof params=="function"&&callerScope)?params.createDelegate(callerScope):params,success:this.processSuccess,failure:this.processFailure,scope:this,callback:undefined,timeout:(this.timeout*1000),disableCaching:this.disableCaching,argument:{"options":cfg,"url":url,"form":null,"callback":callback,"scope":callerScope||window,"params":params}},cfg);this.transaction=Ext.Ajax.request(o);}},formUpdate:function(form,url,reset,callback){if(this.fireEvent("beforeupdate",this.el,form,url)!==false){if(typeof url=="function"){url=url.call(this);} +form=Ext.getDom(form) +this.transaction=Ext.Ajax.request({form:form,url:url,success:this.processSuccess,failure:this.processFailure,scope:this,timeout:(this.timeout*1000),argument:{"url":url,"form":form,"callback":callback,"reset":reset}});this.showLoading.defer(1,this);}},refresh:function(callback){if(this.defaultUrl==null){return;} +this.update(this.defaultUrl,null,callback,true);},startAutoRefresh:function(interval,url,params,callback,refreshNow){if(refreshNow){this.update(url||this.defaultUrl,params,callback,true);} +if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);} +this.autoRefreshProcId=setInterval(this.update.createDelegate(this,[url||this.defaultUrl,params,callback,true]),interval*1000);},stopAutoRefresh:function(){if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);delete this.autoRefreshProcId;}},isAutoRefreshing:function(){return this.autoRefreshProcId?true:false;},showLoading:function(){if(this.showLoadIndicator){this.el.update(this.indicatorText);}},processSuccess:function(response){this.transaction=null;if(response.argument.form&&response.argument.reset){try{response.argument.form.reset();}catch(e){}} +if(this.loadScripts){this.renderer.render(this.el,response,this,this.updateComplete.createDelegate(this,[response]));}else{this.renderer.render(this.el,response,this);this.updateComplete(response);}},updateComplete:function(response){this.fireEvent("update",this.el,response);if(typeof response.argument.callback=="function"){response.argument.callback.call(response.argument.scope,this.el,true,response,response.argument.options);}},processFailure:function(response){this.transaction=null;this.fireEvent("failure",this.el,response);if(typeof response.argument.callback=="function"){response.argument.callback.call(response.argument.scope,this.el,false,response,response.argument.options);}},setRenderer:function(renderer){this.renderer=renderer;},getRenderer:function(){return this.renderer;},setDefaultUrl:function(defaultUrl){this.defaultUrl=defaultUrl;},abort:function(){if(this.transaction){Ext.Ajax.abort(this.transaction);}},isUpdating:function(){if(this.transaction){return Ext.Ajax.isLoading(this.transaction);} +return false;}});Ext.Updater.defaults={timeout:30,loadScripts:false,sslBlankUrl:(Ext.SSL_SECURE_URL||"javascript:false"),disableCaching:false,showLoadIndicator:true,indicatorText:'
    Loading...
    '};Ext.Updater.updateElement=function(el,url,params,options){var um=Ext.get(el).getUpdater();Ext.apply(um,options);um.update(url,params,options?options.callback:null);};Ext.Updater.BasicRenderer=function(){};Ext.Updater.BasicRenderer.prototype={render:function(el,response,updateManager,callback){el.update(response.responseText,updateManager.loadScripts,callback);}};Ext.UpdateManager=Ext.Updater; + +(function(){Date.useStrict=false;function xf(format){var args=Array.prototype.slice.call(arguments,1);return format.replace(/\{(\d+)\}/g,function(m,i){return args[i];});} +Date.formatCodeToRegex=function(character,currentGroup){var p=Date.parseCodes[character];if(p){p=typeof p=='function'?p():p;Date.parseCodes[character]=p;} +return p?Ext.applyIf({c:p.c?xf(p.c,currentGroup||"{0}"):p.c},p):{g:0,c:null,s:Ext.escapeRe(character)}} +var $f=Date.formatCodeToRegex;Ext.apply(Date,{parseFunctions:{"M$":function(input,strict){var re=new RegExp('\\/Date\\(([-+])?(\\d+)(?:[+-]\\d{4})?\\)\\/');var r=(input||'').match(re);return r?new Date(((r[1]||'')+r[2])*1):null;}},parseRegexes:[],formatFunctions:{"M$":function(){return'\\/Date('+this.getTime()+')\\/';}},y2kYear:50,MILLI:"ms",SECOND:"s",MINUTE:"mi",HOUR:"h",DAY:"d",MONTH:"mo",YEAR:"y",defaults:{},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNumbers:{Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11},getShortMonthName:function(month){return Date.monthNames[month].substring(0,3);},getShortDayName:function(day){return Date.dayNames[day].substring(0,3);},getMonthNumber:function(name){return Date.monthNumbers[name.substring(0,1).toUpperCase()+name.substring(1,3).toLowerCase()];},formatCodes:{d:"String.leftPad(this.getDate(), 2, '0')",D:"Date.getShortDayName(this.getDay())",j:"this.getDate()",l:"Date.dayNames[this.getDay()]",N:"(this.getDay() ? this.getDay() : 7)",S:"this.getSuffix()",w:"this.getDay()",z:"this.getDayOfYear()",W:"String.leftPad(this.getWeekOfYear(), 2, '0')",F:"Date.monthNames[this.getMonth()]",m:"String.leftPad(this.getMonth() + 1, 2, '0')",M:"Date.getShortMonthName(this.getMonth())",n:"(this.getMonth() + 1)",t:"this.getDaysInMonth()",L:"(this.isLeapYear() ? 1 : 0)",o:"(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",Y:"this.getFullYear()",y:"('' + this.getFullYear()).substring(2, 4)",a:"(this.getHours() < 12 ? 'am' : 'pm')",A:"(this.getHours() < 12 ? 'AM' : 'PM')",g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",G:"this.getHours()",h:"String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",H:"String.leftPad(this.getHours(), 2, '0')",i:"String.leftPad(this.getMinutes(), 2, '0')",s:"String.leftPad(this.getSeconds(), 2, '0')",u:"String.leftPad(this.getMilliseconds(), 3, '0')",O:"this.getGMTOffset()",P:"this.getGMTOffset(true)",T:"this.getTimezone()",Z:"(this.getTimezoneOffset() * -60)",c:function(){for(var c="Y-m-dTH:i:sP",code=[],i=0,l=c.length;i= 0? y : Ext.num(def.y, dt.getFullYear());","m = m >= 0? m : Ext.num(def.m - 1, dt.getMonth());","d = d >= 0? d : Ext.num(def.d, dt.getDate());","h = h || Ext.num(def.h, dt.getHours());","i = i || Ext.num(def.i, dt.getMinutes());","s = s || Ext.num(def.s, dt.getSeconds());","ms = ms || Ext.num(def.ms, dt.getMilliseconds());","if(z >= 0 && y >= 0){","v = new Date(y, 0, 1, h, i, s, ms);","v = !strict? v : (strict === true && (z <= 364 || (v.isLeapYear() && z <= 365))? v.add(Date.DAY, z) : null);","}else if(strict === true && !Date.isValid(y, m + 1, d, h, i, s, ms)){","v = null;","}else{","v = new Date(y, m, d, h, i, s, ms);","}","}","}","if(v){","if(zz != null){","v = v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - zz);","}else if(o){","v = v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));","}","}","return v;"].join('\n');return function(format){var regexNum=Date.parseRegexes.length,currentGroup=1,calc=[],regex=[],special=false,ch="";for(var i=0;i Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"},a:{g:1,c:"if (results[{0}] == 'am') {\n" ++"if (h == 12) { h = 0; }\n" ++"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"},A:{g:1,c:"if (results[{0}] == 'AM') {\n" ++"if (h == 12) { h = 0; }\n" ++"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"},g:function(){return $f("G");},G:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},h:function(){return $f("H");},H:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},i:{g:1,c:"i = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},s:{g:1,c:"s = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},u:{g:1,c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",s:"(\\d+)"},O:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),","mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+\-]\\d{4})"},P:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),","mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+\-]\\d{2}:\\d{2})"},T:{g:0,c:null,s:"[A-Z]{1,4}"},Z:{g:1,c:"zz = results[{0}] * 1;\n" ++"zz = (-43200 <= zz && zz <= 50400)? zz : null;\n",s:"([+\-]?\\d{1,5})"},c:function(){var calc=[],arr=[$f("Y",1),$f("m",2),$f("d",3),$f("h",4),$f("i",5),$f("s",6),{c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:["if(results[8]) {","if(results[8] == 'Z'){","zz = 0;","}else if (results[8].indexOf(':') > -1){",$f("P",8).c,"}else{",$f("O",8).c,"}","}"].join('\n')}];for(var i=0,l=arr.length;i0?"-":"+") ++String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0") ++(colon?":":"") ++String.leftPad(Math.abs(this.getTimezoneOffset()%60),2,"0");},getDayOfYear:function(){var i=0,num=0,d=this.clone(),m=this.getMonth();for(i=0,d.setMonth(0);i28){day=Math.min(day,this.getFirstDateOfMonth().add('mo',value).getLastDateOfMonth().getDate());} +d.setDate(day);d.setMonth(this.getMonth()+value);break;case Date.YEAR:d.setFullYear(this.getFullYear()+value);break;} +return d;},between:function(start,end){var t=this.getTime();return start.getTime()<=t&&t<=end.getTime();}});Date.prototype.format=Date.prototype.dateFormat;if(Ext.isSafari&&(navigator.userAgent.match(/WebKit\/(\d+)/)[1]||NaN)<420){Ext.apply(Date.prototype,{_xMonth:Date.prototype.setMonth,_xDate:Date.prototype.setDate,setMonth:function(num){if(num<=-1){var n=Math.ceil(-num),back_year=Math.ceil(n/12),month=(n%12)?12-n%12:0;this.setFullYear(this.getFullYear()-back_year);return this._xMonth(month);}else{return this._xMonth(num);}},setDate:function(d){return this.setTime(this.getTime()-(this.getDate()-d)*864e5);}});} + +Ext.util.DelayedTask=function(fn,scope,args){var id=null;var call=function(){id=null;fn.apply(scope,args||[]);};this.delay=function(delay,newFn,newScope,newArgs){if(id){this.cancel();} +fn=newFn||fn;scope=newScope||scope;args=newArgs||args;if(!id){id=setTimeout(call,delay);}};this.cancel=function(){if(id){clearTimeout(id);id=null;}};}; + +Ext.util.TaskRunner=function(interval){interval=interval||10;var tasks=[],removeQueue=[];var id=0;var running=false;var stopThread=function(){running=false;clearInterval(id);id=0;};var startThread=function(){if(!running){running=true;id=setInterval(runTasks,interval);}};var removeTask=function(t){removeQueue.push(t);if(t.onStop){t.onStop.apply(t.scope||t);}};var runTasks=function(){if(removeQueue.length>0){for(var i=0,len=removeQueue.length;i1||Ext.isArray(objs)){var args=arguments.length>1?arguments:objs;for(var i=0,len=args.length;i=this.length){return this.add(key,o);} +this.length++;this.items.splice(index,0,o);if(typeof key!="undefined"&&key!=null){this.map[key]=o;} +this.keys.splice(index,0,key);this.fireEvent("add",index,o,key);return o;},remove:function(o){return this.removeAt(this.indexOf(o));},removeAt:function(index){if(index=0){this.length--;var o=this.items[index];this.items.splice(index,1);var key=this.keys[index];if(typeof key!="undefined"){delete this.map[key];} +this.keys.splice(index,1);this.fireEvent("remove",o,key);return o;} +return false;},removeKey:function(key){return this.removeAt(this.indexOfKey(key));},getCount:function(){return this.length;},indexOf:function(o){return this.items.indexOf(o);},indexOfKey:function(key){return this.keys.indexOf(key);},item:function(key){var mk=this.map[key],item=mk!==undefined?mk:(typeof key=='number')?this.items[key]:undefined;return typeof item!='function'||this.allowFunctions?item:null;},itemAt:function(index){return this.items[index];},key:function(key){return this.map[key];},contains:function(o){return this.indexOf(o)!=-1;},containsKey:function(key){return typeof this.map[key]!="undefined";},clear:function(){this.length=0;this.items=[];this.keys=[];this.map={};this.fireEvent("clear");},first:function(){return this.items[0];},last:function(){return this.items[this.length-1];},_sort:function(property,dir,fn){var dsc=String(dir).toUpperCase()=="DESC"?-1:1;fn=fn||function(a,b){return a-b;};var c=[],k=this.keys,items=this.items;for(var i=0,len=items.length;iv2?1:(v1=end;i--){r[r.length]=items[i];}} +return r;},filter:function(property,value,anyMatch,caseSensitive){if(Ext.isEmpty(value,false)){return this.clone();} +value=this.createValueMatcher(value,anyMatch,caseSensitive);return this.filterBy(function(o){return o&&value.test(o[property]);});},filterBy:function(fn,scope){var r=new Ext.util.MixedCollection();r.getKey=this.getKey;var k=this.keys,it=this.items;for(var i=0,len=it.length;ilen){return value.substr(0,len-3)+"...";} +return value;},undef:function(value){return value!==undefined?value:"";},defaultValue:function(value,defaultValue){return value!==undefined&&value!==''?value:defaultValue;},htmlEncode:function(value){return!value?value:String(value).replace(/&/g,"&").replace(/>/g,">").replace(/").replace(/</g,"<").replace(/"/g,'"').replace(/&/g,"&");},trim:function(value){return String(value).replace(trimRe,"");},substr:function(value,start,length){return String(value).substr(start,length);},lowercase:function(value){return String(value).toLowerCase();},uppercase:function(value){return String(value).toUpperCase();},capitalize:function(value){return!value?value:value.charAt(0).toUpperCase()+value.substr(1).toLowerCase();},call:function(value,fn){if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);args.unshift(value);return eval(fn).apply(window,args);}else{return eval(fn).call(window,value);}},usMoney:function(v){v=(Math.round((v-0)*100))/100;v=(v==Math.floor(v))?v+".00":((v*10==Math.floor(v*10))?v+"0":v);v=String(v);var ps=v.split('.');var whole=ps[0];var sub=ps[1]?'.'+ps[1]:'.00';var r=/(\d+)(\d{3})/;while(r.test(whole)){whole=whole.replace(r,'$1'+','+'$2');} +v=whole+sub;if(v.charAt(0)=='-'){return'-$'+v.substr(1);} +return"$"+v;},date:function(v,format){if(!v){return"";} +if(!Ext.isDate(v)){v=new Date(Date.parse(v));} +return v.dateFormat(format||"m/d/Y");},dateRenderer:function(format){return function(v){return Ext.util.Format.date(v,format);};},stripTagsRE:/<\/?[^>]+>/gi,stripTags:function(v){return!v?v:String(v).replace(this.stripTagsRE,"");},stripScriptsRe:/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,stripScripts:function(v){return!v?v:String(v).replace(this.stripScriptsRe,"");},fileSize:function(size){if(size<1024){return size+" bytes";}else if(size<1048576){return(Math.round(((size*10)/1024))/10)+" KB";}else{return(Math.round(((size*10)/1048576))/10)+" MB";}},math:function(){var fns={};return function(v,a){if(!fns[a]){fns[a]=new Function('v','return v '+a+';');} +return fns[a](v);}}(),nl2br:function(v){return v===undefined||v===null?'':v.replace(/\n/g,'
    ');}};}(); + +Ext.XTemplate=function(){Ext.XTemplate.superclass.constructor.apply(this,arguments);var s=this.html;s=['',s,''].join('');var re=/]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;var nameRe=/^]*?for="(.*?)"/;var ifRe=/^]*?if="(.*?)"/;var execRe=/^]*?exec="(.*?)"/;var m,id=0;var tpls=[];while(m=s.match(re)){var m2=m[0].match(nameRe);var m3=m[0].match(ifRe);var m4=m[0].match(execRe);var exp=null,fn=null,exec=null;var name=m2&&m2[1]?m2[1]:'';if(m3){exp=m3&&m3[1]?m3[1]:null;if(exp){fn=new Function('values','parent','xindex','xcount','with(values){ return '+(Ext.util.Format.htmlDecode(exp))+'; }');}} +if(m4){exp=m4&&m4[1]?m4[1]:null;if(exp){exec=new Function('values','parent','xindex','xcount','with(values){ '+(Ext.util.Format.htmlDecode(exp))+'; }');}} +if(name){switch(name){case'.':name=new Function('values','parent','with(values){ return values; }');break;case'..':name=new Function('values','parent','with(values){ return parent; }');break;default:name=new Function('values','parent','with(values){ return '+name+'; }');}} +tpls.push({id:id,target:name,exec:exec,test:fn,body:m[1]||''});s=s.replace(m[0],'{xtpl'+id+'}');++id;} +for(var i=tpls.length-1;i>=0;--i){this.compileTpl(tpls[i]);} +this.master=tpls[tpls.length-1];this.tpls=tpls;};Ext.extend(Ext.XTemplate,Ext.Template,{re:/\{([\w-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g,codeRe:/\{\[((?:\\\]|.|\n)*?)\]\}/g,applySubTemplate:function(id,values,parent,xindex,xcount){var t=this.tpls[id];if(t.test&&!t.test.call(this,values,parent,xindex,xcount)){return'';} +if(t.exec&&t.exec.call(this,values,parent,xindex,xcount)){return'';} +var vs=t.target?t.target.call(this,values,parent):values;parent=t.target?values:parent;if(t.target&&Ext.isArray(vs)){var buf=[];for(var i=0,len=vs.length;i=0;--j){rules[ssRules[j].selectorText]=ssRules[j];}}catch(e){}},getRules:function(refreshCache){if(rules==null||refreshCache){rules={};var ds=doc.styleSheets;for(var i=0,len=ds.length;i=37&&k<=40){e.stopEvent();}},relay:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(h&&this[h]){if(this.doRelay(e,this[h],h)!==true){e[this.defaultEventAction]();}}},doRelay:function(e,h,hname){return h.call(this.scope||this,e);},enter:false,left:false,right:false,up:false,down:false,tab:false,esc:false,pageUp:false,pageDown:false,del:false,home:false,end:false,keyToHandler:{37:"left",39:"right",38:"up",40:"down",33:"pageUp",34:"pageDown",46:"del",36:"home",35:"end",13:"enter",27:"esc",9:"tab"},enable:function(){if(this.disabled){if(this.isKeyDown()){this.el.on("keydown",this.relay,this);}else{this.el.on("keydown",this.prepareEvent,this);this.el.on("keypress",this.relay,this);} +this.disabled=false;}},disable:function(){if(!this.disabled){if(this.isKeyDown()){this.el.un("keydown",this.relay,this);}else{this.el.un("keydown",this.prepareEvent,this);this.el.un("keypress",this.relay,this);} +this.disabled=true;}},isKeyDown:function(){return this.forceKeyDown||Ext.isIE||(Ext.isWebKit&&!Ext.isSafari2)||Ext.isAir;}}; + +Ext.KeyMap=function(el,config,eventName){this.el=Ext.get(el);this.eventName=eventName||"keydown";this.bindings=[];if(config){this.addBinding(config);} +this.enable();};Ext.KeyMap.prototype={stopEvent:false,addBinding:function(config){if(Ext.isArray(config)){for(var i=0,len=config.length;i=this.minX;i=i-iTickSize){if(!tickMap[i]){this.xTicks[this.xTicks.length]=i;tickMap[i]=true;}} +for(i=this.initPageX;i<=this.maxX;i=i+iTickSize){if(!tickMap[i]){this.xTicks[this.xTicks.length]=i;tickMap[i]=true;}} +this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(iStartY,iTickSize){this.yTicks=[];this.yTickSize=iTickSize;var tickMap={};for(var i=this.initPageY;i>=this.minY;i=i-iTickSize){if(!tickMap[i]){this.yTicks[this.yTicks.length]=i;tickMap[i]=true;}} +for(i=this.initPageY;i<=this.maxY;i=i+iTickSize){if(!tickMap[i]){this.yTicks[this.yTicks.length]=i;tickMap[i]=true;}} +this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(iLeft,iRight,iTickSize){this.leftConstraint=iLeft;this.rightConstraint=iRight;this.minX=this.initPageX-iLeft;this.maxX=this.initPageX+iRight;if(iTickSize){this.setXTicks(this.initPageX,iTickSize);} +this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(iUp,iDown,iTickSize){this.topConstraint=iUp;this.bottomConstraint=iDown;this.minY=this.initPageY-iUp;this.maxY=this.initPageY+iDown;if(iTickSize){this.setYTicks(this.initPageY,iTickSize);} +this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var dx=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var dy=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(dx,dy);}else{this.setInitPosition();} +if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);} +if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(val,tickArray){if(!tickArray){return val;}else if(tickArray[0]>=val){return tickArray[0];}else{for(var i=0,len=tickArray.length;i=val){var diff1=val-tickArray[i];var diff2=tickArray[next]-val;return(diff2>diff1)?tickArray[i]:tickArray[next];}} +return tickArray[tickArray.length-1];}},toString:function(){return("DragDrop "+this.id);}};})();if(!Ext.dd.DragDropMgr){Ext.dd.DragDropMgr=function(){var Event=Ext.EventManager;return{ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,mode:0,_execOnAll:function(sMethod,args){for(var i in this.ids){for(var j in this.ids[i]){var oDD=this.ids[i][j];if(!this.isTypeOfDD(oDD)){continue;} +oDD[sMethod].apply(oDD,args);}}},_onLoad:function(){this.init();Event.on(document,"mouseup",this.handleMouseUp,this,true);Event.on(document,"mousemove",this.handleMouseMove,this,true);Event.on(window,"unload",this._onUnload,this,true);Event.on(window,"resize",this._onResize,this,true);},_onResize:function(e){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(oDD,sGroup){if(!this.initialized){this.init();} +if(!this.ids[sGroup]){this.ids[sGroup]={};} +this.ids[sGroup][oDD.id]=oDD;},removeDDFromGroup:function(oDD,sGroup){if(!this.ids[sGroup]){this.ids[sGroup]={};} +var obj=this.ids[sGroup];if(obj&&obj[oDD.id]){delete obj[oDD.id];}},_remove:function(oDD){for(var g in oDD.groups){if(g&&this.ids[g]&&this.ids[g][oDD.id]){delete this.ids[g][oDD.id];}} +delete this.handleIds[oDD.id];},regHandle:function(sDDId,sHandleId){if(!this.handleIds[sDDId]){this.handleIds[sDDId]={};} +this.handleIds[sDDId][sHandleId]=sHandleId;},isDragDrop:function(id){return(this.getDDById(id))?true:false;},getRelated:function(p_oDD,bTargetsOnly){var oDDs=[];for(var i in p_oDD.groups){for(var j in this.ids[i]){var dd=this.ids[i][j];if(!this.isTypeOfDD(dd)){continue;} +if(!bTargetsOnly||dd.isTarget){oDDs[oDDs.length]=dd;}}} +return oDDs;},isLegalTarget:function(oDD,oTargetDD){var targets=this.getRelated(oDD,true);for(var i=0,len=targets.length;ithis.clickPixelThresh||diffY>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}} +if(this.dragThreshMet){this.dragCurrent.b4Drag(e);this.dragCurrent.onDrag(e);if(!this.dragCurrent.moveOnly){this.fireEvents(e,false);}} +this.stopEvent(e);return true;},fireEvents:function(e,isDrop){var dc=this.dragCurrent;if(!dc||dc.isLocked()){return;} +var pt=e.getPoint();var oldOvers=[];var outEvts=[];var overEvts=[];var dropEvts=[];var enterEvts=[];for(var i in this.dragOvers){var ddo=this.dragOvers[i];if(!this.isTypeOfDD(ddo)){continue;} +if(!this.isOverTarget(pt,ddo,this.mode)){outEvts.push(ddo);} +oldOvers[i]=true;delete this.dragOvers[i];} +for(var sGroup in dc.groups){if("string"!=typeof sGroup){continue;} +for(i in this.ids[sGroup]){var oDD=this.ids[sGroup][i];if(!this.isTypeOfDD(oDD)){continue;} +if(oDD.isTarget&&!oDD.isLocked()&&oDD!=dc){if(this.isOverTarget(pt,oDD,this.mode)){if(isDrop){dropEvts.push(oDD);}else{if(!oldOvers[oDD.id]){enterEvts.push(oDD);}else{overEvts.push(oDD);} +this.dragOvers[oDD.id]=oDD;}}}}} +if(this.mode){if(outEvts.length){dc.b4DragOut(e,outEvts);dc.onDragOut(e,outEvts);} +if(enterEvts.length){dc.onDragEnter(e,enterEvts);} +if(overEvts.length){dc.b4DragOver(e,overEvts);dc.onDragOver(e,overEvts);} +if(dropEvts.length){dc.b4DragDrop(e,dropEvts);dc.onDragDrop(e,dropEvts);}}else{var len=0;for(i=0,len=outEvts.length;i2000){}else{setTimeout(DDM._addListeners,10);if(document&&document.body){DDM._timeoutCount+=1;}}}},handleWasClicked:function(node,id){if(this.isHandle(id,node.id)){return true;}else{var p=node.parentNode;while(p){if(this.isHandle(id,p.id)){return true;}else{p=p.parentNode;}}} +return false;}};}();Ext.dd.DDM=Ext.dd.DragDropMgr;Ext.dd.DDM._addListeners();} +Ext.dd.DD=function(id,sGroup,config){if(id){this.init(id,sGroup,config);}};Ext.extend(Ext.dd.DD,Ext.dd.DragDrop,{scroll:true,autoOffset:function(iPageX,iPageY){var x=iPageX-this.startPageX;var y=iPageY-this.startPageY;this.setDelta(x,y);},setDelta:function(iDeltaX,iDeltaY){this.deltaX=iDeltaX;this.deltaY=iDeltaY;},setDragElPos:function(iPageX,iPageY){var el=this.getDragEl();this.alignElWithMouse(el,iPageX,iPageY);},alignElWithMouse:function(el,iPageX,iPageY){var oCoord=this.getTargetCoord(iPageX,iPageY);var fly=el.dom?el:Ext.fly(el,'_dd');if(!this.deltaSetXY){var aCoord=[oCoord.x,oCoord.y];fly.setXY(aCoord);var newLeft=fly.getLeft(true);var newTop=fly.getTop(true);this.deltaSetXY=[newLeft-oCoord.x,newTop-oCoord.y];}else{fly.setLeftTop(oCoord.x+this.deltaSetXY[0],oCoord.y+this.deltaSetXY[1]);} +this.cachePosition(oCoord.x,oCoord.y);this.autoScroll(oCoord.x,oCoord.y,el.offsetHeight,el.offsetWidth);return oCoord;},cachePosition:function(iPageX,iPageY){if(iPageX){this.lastPageX=iPageX;this.lastPageY=iPageY;}else{var aCoord=Ext.lib.Dom.getXY(this.getEl());this.lastPageX=aCoord[0];this.lastPageY=aCoord[1];}},autoScroll:function(x,y,h,w){if(this.scroll){var clientH=Ext.lib.Dom.getViewHeight();var clientW=Ext.lib.Dom.getViewWidth();var st=this.DDM.getScrollTop();var sl=this.DDM.getScrollLeft();var bot=h+y;var right=w+x;var toBot=(clientH+st-y-this.deltaY);var toRight=(clientW+sl-x-this.deltaX);var thresh=40;var scrAmt=(document.all)?80:30;if(bot>clientH&&toBot0&&y-stclientW&&toRight0&&x-slthis.maxX){x=this.maxX;}} +if(this.constrainY){if(ythis.maxY){y=this.maxY;}} +x=this.getTick(x,this.xTicks);y=this.getTick(y,this.yTicks);return{x:x,y:y};},applyConfig:function(){Ext.dd.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(e){this.autoOffset(e.getPageX(),e.getPageY());},b4Drag:function(e){this.setDragElPos(e.getPageX(),e.getPageY());},toString:function(){return("DD "+this.id);}});Ext.dd.DDProxy=function(id,sGroup,config){if(id){this.init(id,sGroup,config);this.initFrame();}};Ext.dd.DDProxy.dragElId="ygddfdiv";Ext.extend(Ext.dd.DDProxy,Ext.dd.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var self=this;var body=document.body;if(!body||!body.firstChild){setTimeout(function(){self.createFrame();},50);return;} +var div=this.getDragEl();if(!div){div=document.createElement("div");div.id=this.dragElId;var s=div.style;s.position="absolute";s.visibility="hidden";s.cursor="move";s.border="2px solid #aaa";s.zIndex=999;body.insertBefore(div,body.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){Ext.dd.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||Ext.dd.DDProxy.dragElId);},showFrame:function(iPageX,iPageY){var el=this.getEl();var dragEl=this.getDragEl();var s=dragEl.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(s.width,10)/2),Math.round(parseInt(s.height,10)/2));} +this.setDragElPos(iPageX,iPageY);Ext.fly(dragEl).show();},_resizeProxy:function(){if(this.resizeFrame){var el=this.getEl();Ext.fly(this.getDragEl()).setSize(el.offsetWidth,el.offsetHeight);}},b4MouseDown:function(e){var x=e.getPageX();var y=e.getPageY();this.autoOffset(x,y);this.setDragElPos(x,y);},b4StartDrag:function(x,y){this.showFrame(x,y);},b4EndDrag:function(e){Ext.fly(this.getDragEl()).hide();},endDrag:function(e){var lel=this.getEl();var del=this.getDragEl();del.style.visibility="";this.beforeMove();lel.style.visibility="hidden";Ext.dd.DDM.moveToEl(lel,del);del.style.visibility="hidden";lel.style.visibility="";this.afterDrag();},beforeMove:function(){},afterDrag:function(){},toString:function(){return("DDProxy "+this.id);}});Ext.dd.DDTarget=function(id,sGroup,config){if(id){this.initTarget(id,sGroup,config);}};Ext.extend(Ext.dd.DDTarget,Ext.dd.DragDrop,{toString:function(){return("DDTarget "+this.id);}}); + +Ext.dd.DragTracker=function(config){Ext.apply(this,config);this.addEvents('mousedown','mouseup','mousemove','dragstart','dragend','drag');this.dragRegion=new Ext.lib.Region(0,0,0,0);if(this.el){this.initEl(this.el);}} +Ext.extend(Ext.dd.DragTracker,Ext.util.Observable,{active:false,tolerance:5,autoStart:false,initEl:function(el){this.el=Ext.get(el);el.on('mousedown',this.onMouseDown,this,this.delegate?{delegate:this.delegate}:undefined);},destroy:function(){this.el.un('mousedown',this.onMouseDown,this);},onMouseDown:function(e,target){if(this.fireEvent('mousedown',this,e)!==false&&this.onBeforeStart(e)!==false){this.startXY=this.lastXY=e.getXY();this.dragTarget=this.delegate?target:this.el.dom;e.preventDefault();var doc=Ext.getDoc();doc.on('mouseup',this.onMouseUp,this);doc.on('mousemove',this.onMouseMove,this);doc.on('selectstart',this.stopSelect,this);if(this.autoStart){this.timer=this.triggerStart.defer(this.autoStart===true?1000:this.autoStart,this);}}},onMouseMove:function(e,target){if(this.active&&Ext.isIE&&!e.browserEvent.button){e.preventDefault();this.onMouseUp(e);return;} +e.preventDefault();var xy=e.getXY(),s=this.startXY;this.lastXY=xy;if(!this.active){if(Math.abs(s[0]-xy[0])>this.tolerance||Math.abs(s[1]-xy[1])>this.tolerance){this.triggerStart();}else{return;}} +this.fireEvent('mousemove',this,e);this.onDrag(e);this.fireEvent('drag',this,e);},onMouseUp:function(e){var doc=Ext.getDoc();doc.un('mousemove',this.onMouseMove,this);doc.un('mouseup',this.onMouseUp,this);doc.un('selectstart',this.stopSelect,this);e.preventDefault();this.clearStart();this.active=false;delete this.elRegion;this.fireEvent('mouseup',this,e);this.onEnd(e);this.fireEvent('dragend',this,e);},triggerStart:function(isTimer){this.clearStart();this.active=true;this.onStart(this.startXY);this.fireEvent('dragstart',this,this.startXY);},clearStart:function(){if(this.timer){clearTimeout(this.timer);delete this.timer;}},stopSelect:function(e){e.stopEvent();return false;},onBeforeStart:function(e){},onStart:function(xy){},onDrag:function(e){},onEnd:function(e){},getDragTarget:function(){return this.dragTarget;},getDragCt:function(){return this.el;},getXY:function(constrain){return constrain?this.constrainModes[constrain].call(this,this.lastXY):this.lastXY;},getOffset:function(constrain){var xy=this.getXY(constrain);var s=this.startXY;return[s[0]-xy[0],s[1]-xy[1]];},constrainModes:{'point':function(xy){if(!this.elRegion){this.elRegion=this.getDragCt().getRegion();} +var dr=this.dragRegion;dr.left=xy[0];dr.top=xy[1];dr.right=xy[0];dr.bottom=xy[1];dr.constrainTo(this.elRegion);return[dr.left,dr.top];}}}); + +Ext.dd.ScrollManager=function(){var ddm=Ext.dd.DragDropMgr;var els={};var dragEl=null;var proc={};var onStop=function(e){dragEl=null;clearProc();};var triggerRefresh=function(){if(ddm.dragCurrent){ddm.refreshCache(ddm.dragCurrent.groups);}};var doScroll=function(){if(ddm.dragCurrent){var dds=Ext.dd.ScrollManager;var inc=proc.el.ddScrollConfig?proc.el.ddScrollConfig.increment:dds.increment;if(!dds.animate){if(proc.el.scroll(proc.dir,inc)){triggerRefresh();}}else{proc.el.scroll(proc.dir,inc,true,dds.animDuration,triggerRefresh);}}};var clearProc=function(){if(proc.id){clearInterval(proc.id);} +proc.id=0;proc.el=null;proc.dir="";};var startProc=function(el,dir){clearProc();proc.el=el;proc.dir=dir;var freq=(el.ddScrollConfig&&el.ddScrollConfig.frequency)?el.ddScrollConfig.frequency:Ext.dd.ScrollManager.frequency;proc.id=setInterval(doScroll,freq);};var onFire=function(e,isDrop){if(isDrop||!ddm.dragCurrent){return;} +var dds=Ext.dd.ScrollManager;if(!dragEl||dragEl!=ddm.dragCurrent){dragEl=ddm.dragCurrent;dds.refreshCache();} +var xy=Ext.lib.Event.getXY(e);var pt=new Ext.lib.Point(xy[0],xy[1]);for(var id in els){var el=els[id],r=el._region;var c=el.ddScrollConfig?el.ddScrollConfig:dds;if(r&&r.contains(pt)&&el.isScrollable()){if(r.bottom-pt.y<=c.vthresh){if(proc.el!=el){startProc(el,"down");} +return;}else if(r.right-pt.x<=c.hthresh){if(proc.el!=el){startProc(el,"left");} +return;}else if(pt.y-r.top<=c.vthresh){if(proc.el!=el){startProc(el,"up");} +return;}else if(pt.x-r.left<=c.hthresh){if(proc.el!=el){startProc(el,"right");} +return;}}} +clearProc();};ddm.fireEvents=ddm.fireEvents.createSequence(onFire,ddm);ddm.stopDrag=ddm.stopDrag.createSequence(onStop,ddm);return{register:function(el){if(Ext.isArray(el)){for(var i=0,len=el.length;i]+>/gi,asText:function(s){return String(s).replace(this.stripTagsRE,"");},asUCText:function(s){return String(s).toUpperCase().replace(this.stripTagsRE,"");},asUCString:function(s){return String(s).toUpperCase();},asDate:function(s){if(!s){return 0;} +if(Ext.isDate(s)){return s.getTime();} +return Date.parse(String(s));},asFloat:function(s){var val=parseFloat(String(s).replace(/,/g,""));if(isNaN(val))val=0;return val;},asInt:function(s){var val=parseInt(String(s).replace(/,/g,""));if(isNaN(val))val=0;return val;}}; + +Ext.data.Record=function(data,id){this.id=(id||id===0)?id:++Ext.data.Record.AUTO_ID;this.data=data||{};};Ext.data.Record.create=function(o){var f=Ext.extend(Ext.data.Record,{});var p=f.prototype;p.fields=new Ext.util.MixedCollection(false,function(field){return field.name;});for(var i=0,len=o.length;i-1){this.data.removeAt(index);if(this.pruneModifiedRecords){this.modified.remove(record);} +if(this.snapshot){this.snapshot.remove(record);} +this.fireEvent("remove",this,record,index);}},removeAt:function(index){this.remove(this.getAt(index));},removeAll:function(){this.data.clear();if(this.snapshot){this.snapshot.clear();} +if(this.pruneModifiedRecords){this.modified=[];} +this.fireEvent("clear",this);},insert:function(index,records){records=[].concat(records);for(var i=0,len=records.length;iv2?1:(v10;},isExpandable:function(){return this.attributes.expandable||this.hasChildNodes();},appendChild:function(node){var multi=false;if(Ext.isArray(node)){multi=node;}else if(arguments.length>1){multi=arguments;} +if(multi){for(var i=0,len=multi.length;i0){var sortFn=scope?function(){fn.apply(scope,arguments);}:fn;cs.sort(sortFn);for(var i=0;ivw+s.left){x=vw-w-this.shadowOffset;moved=true;} +if((y+h)>vh+s.top){y=vh-h-this.shadowOffset;moved=true;} +if(x=ay){y=ay-h-5;}} +xy=[x,y];this.storeXY(xy);supr.setXY.call(this,xy);this.sync();}}},isVisible:function(){return this.visible;},showAction:function(){this.visible=true;if(this.useDisplay===true){this.setDisplayed("");}else if(this.lastXY){supr.setXY.call(this,this.lastXY);}else if(this.lastLT){supr.setLeftTop.call(this,this.lastLT[0],this.lastLT[1]);}},hideAction:function(){this.visible=false;if(this.useDisplay===true){this.setDisplayed(false);}else{this.setLeftTop(-10000,-10000);}},setVisible:function(v,a,d,c,e){if(v){this.showAction();} +if(a&&v){var cb=function(){this.sync(true);if(c){c();}}.createDelegate(this);supr.setVisible.call(this,true,true,d,cb,e);}else{if(!v){this.hideUnders(true);} +var cb=c;if(a){cb=function(){this.hideAction();if(c){c();}}.createDelegate(this);} +supr.setVisible.call(this,v,a,d,cb,e);if(v){this.sync(true);}else if(!a){this.hideAction();}}},storeXY:function(xy){delete this.lastLT;this.lastXY=xy;},storeLeftTop:function(left,top){delete this.lastXY;this.lastLT=[left,top];},beforeFx:function(){this.beforeAction();return Ext.Layer.superclass.beforeFx.apply(this,arguments);},afterFx:function(){Ext.Layer.superclass.afterFx.apply(this,arguments);this.sync(this.isVisible());},beforeAction:function(){if(!this.updating&&this.shadow){this.shadow.hide();}},setLeft:function(left){this.storeLeftTop(left,this.getTop(true));supr.setLeft.apply(this,arguments);this.sync();},setTop:function(top){this.storeLeftTop(this.getLeft(true),top);supr.setTop.apply(this,arguments);this.sync();},setLeftTop:function(left,top){this.storeLeftTop(left,top);supr.setLeftTop.apply(this,arguments);this.sync();},setXY:function(xy,a,d,c,e){this.fixDisplay();this.beforeAction();this.storeXY(xy);var cb=this.createCB(c);supr.setXY.call(this,xy,a,d,cb,e);if(!a){cb();}},createCB:function(c){var el=this;return function(){el.constrainXY();el.sync(true);if(c){c();}};},setX:function(x,a,d,c,e){this.setXY([x,this.getY()],a,d,c,e);},setY:function(y,a,d,c,e){this.setXY([this.getX(),y],a,d,c,e);},setSize:function(w,h,a,d,c,e){this.beforeAction();var cb=this.createCB(c);supr.setSize.call(this,w,h,a,d,cb,e);if(!a){cb();}},setWidth:function(w,a,d,c,e){this.beforeAction();var cb=this.createCB(c);supr.setWidth.call(this,w,a,d,cb,e);if(!a){cb();}},setHeight:function(h,a,d,c,e){this.beforeAction();var cb=this.createCB(c);supr.setHeight.call(this,h,a,d,cb,e);if(!a){cb();}},setBounds:function(x,y,w,h,a,d,c,e){this.beforeAction();var cb=this.createCB(c);if(!a){this.storeXY([x,y]);supr.setXY.call(this,[x,y]);supr.setSize.call(this,w,h,a,d,cb,e);cb();}else{supr.setBounds.call(this,x,y,w,h,a,d,cb,e);} +return this;},setZIndex:function(zindex){this.zindex=zindex;this.setStyle("z-index",zindex+2);if(this.shadow){this.shadow.setZIndex(zindex+1);} +if(this.shim){this.shim.setStyle("z-index",zindex);}}});})(); + +Ext.Shadow=function(config){Ext.apply(this,config);if(typeof this.mode!="string"){this.mode=this.defaultMode;} +var o=this.offset,a={h:0};var rad=Math.floor(this.offset/2);switch(this.mode.toLowerCase()){case"drop":a.w=0;a.l=a.t=o;a.t-=1;if(Ext.isIE){a.l-=this.offset+rad;a.t-=this.offset+rad;a.w-=rad;a.h-=rad;a.t+=1;} +break;case"sides":a.w=(o*2);a.l=-o;a.t=o-1;if(Ext.isIE){a.l-=(this.offset-rad);a.t-=this.offset+rad;a.l+=1;a.w-=(this.offset-rad)*2;a.w-=rad+1;a.h-=1;} +break;case"frame":a.w=a.h=(o*2);a.l=a.t=-o;a.t+=1;a.h-=2;if(Ext.isIE){a.l-=(this.offset-rad);a.t-=(this.offset-rad);a.l+=1;a.w-=(this.offset+rad+1);a.h-=(this.offset+rad);a.h+=1;} +break;};this.adjusts=a;};Ext.Shadow.prototype={offset:4,defaultMode:"drop",show:function(target){target=Ext.get(target);if(!this.el){this.el=Ext.Shadow.Pool.pull();if(this.el.dom.nextSibling!=target.dom){this.el.insertBefore(target);}} +this.el.setStyle("z-index",this.zIndex||parseInt(target.getStyle("z-index"),10)-1);if(Ext.isIE){this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")";} +this.realign(target.getLeft(true),target.getTop(true),target.getWidth(),target.getHeight());this.el.dom.style.display="block";},isVisible:function(){return this.el?true:false;},realign:function(l,t,w,h){if(!this.el){return;} +var a=this.adjusts,d=this.el.dom,s=d.style;var iea=0;s.left=(l+a.l)+"px";s.top=(t+a.t)+"px";var sw=(w+a.w),sh=(h+a.h),sws=sw+"px",shs=sh+"px";if(s.width!=sws||s.height!=shs){s.width=sws;s.height=shs;if(!Ext.isIE){var cn=d.childNodes;var sww=Math.max(0,(sw-12))+"px";cn[0].childNodes[1].style.width=sww;cn[1].childNodes[1].style.width=sww;cn[2].childNodes[1].style.width=sww;cn[1].style.height=Math.max(0,(sh-12))+"px";}}},hide:function(){if(this.el){this.el.dom.style.display="none";Ext.Shadow.Pool.push(this.el);delete this.el;}},setZIndex:function(z){this.zIndex=z;if(this.el){this.el.setStyle("z-index",z);}}};Ext.Shadow.Pool=function(){var p=[];var markup=Ext.isIE?'
    ':'
    ';return{pull:function(){var sh=p.shift();if(!sh){sh=Ext.get(Ext.DomHelper.insertHtml("beforeBegin",document.body.firstChild,markup));sh.autoBoxAdjust=false;} +return sh;},push:function(sh){p.push(sh);}};}(); + +Ext.BoxComponent=Ext.extend(Ext.Component,{initComponent:function(){Ext.BoxComponent.superclass.initComponent.call(this);this.addEvents('resize','move');},boxReady:false,deferHeight:false,setSize:function(w,h){if(typeof w=='object'){h=w.height;w=w.width;} +if(!this.boxReady){this.width=w;this.height=h;return this;} +if(this.lastSize&&this.lastSize.width==w&&this.lastSize.height==h){return this;} +this.lastSize={width:w,height:h};var adj=this.adjustSize(w,h);var aw=adj.width,ah=adj.height;if(aw!==undefined||ah!==undefined){var rz=this.getResizeEl();if(!this.deferHeight&&aw!==undefined&&ah!==undefined){rz.setSize(aw,ah);}else if(!this.deferHeight&&ah!==undefined){rz.setHeight(ah);}else if(aw!==undefined){rz.setWidth(aw);} +this.onResize(aw,ah,w,h);this.fireEvent('resize',this,aw,ah,w,h);} +return this;},setWidth:function(width){return this.setSize(width);},setHeight:function(height){return this.setSize(undefined,height);},getSize:function(){return this.el.getSize();},getPosition:function(local){if(local===true){return[this.el.getLeft(true),this.el.getTop(true)];} +return this.xy||this.el.getXY();},getBox:function(local){var s=this.el.getSize();if(local===true){s.x=this.el.getLeft(true);s.y=this.el.getTop(true);}else{var xy=this.xy||this.el.getXY();s.x=xy[0];s.y=xy[1];} +return s;},updateBox:function(box){this.setSize(box.width,box.height);this.setPagePosition(box.x,box.y);return this;},getResizeEl:function(){return this.resizeEl||this.el;},getPositionEl:function(){return this.positionEl||this.el;},setPosition:function(x,y){if(x&&typeof x[1]=='number'){y=x[1];x=x[0];} +this.x=x;this.y=y;if(!this.boxReady){return this;} +var adj=this.adjustPosition(x,y);var ax=adj.x,ay=adj.y;var el=this.getPositionEl();if(ax!==undefined||ay!==undefined){if(ax!==undefined&&ay!==undefined){el.setLeftTop(ax,ay);}else if(ax!==undefined){el.setLeft(ax);}else if(ay!==undefined){el.setTop(ay);} +this.onPosition(ax,ay);this.fireEvent('move',this,ax,ay);} +return this;},setPagePosition:function(x,y){if(x&&typeof x[1]=='number'){y=x[1];x=x[0];} +this.pageX=x;this.pageY=y;if(!this.boxReady){return;} +if(x===undefined||y===undefined){return;} +var p=this.el.translatePoints(x,y);this.setPosition(p.left,p.top);return this;},onRender:function(ct,position){Ext.BoxComponent.superclass.onRender.call(this,ct,position);if(this.resizeEl){this.resizeEl=Ext.get(this.resizeEl);} +if(this.positionEl){this.positionEl=Ext.get(this.positionEl);}},afterRender:function(){Ext.BoxComponent.superclass.afterRender.call(this);this.boxReady=true;this.setSize(this.width,this.height);if(this.x||this.y){this.setPosition(this.x,this.y);}else if(this.pageX||this.pageY){this.setPagePosition(this.pageX,this.pageY);}},syncSize:function(){delete this.lastSize;this.setSize(this.autoWidth?undefined:this.el.getWidth(),this.autoHeight?undefined:this.el.getHeight());return this;},onResize:function(adjWidth,adjHeight,rawWidth,rawHeight){},onPosition:function(x,y){},adjustSize:function(w,h){if(this.autoWidth){w='auto';} +if(this.autoHeight){h='auto';} +return{width:w,height:h};},adjustPosition:function(x,y){return{x:x,y:y};}});Ext.reg('box',Ext.BoxComponent); + +Ext.SplitBar=function(dragElement,resizingElement,orientation,placement,existingProxy){this.el=Ext.get(dragElement,true);this.el.dom.unselectable="on";this.resizingEl=Ext.get(resizingElement,true);this.orientation=orientation||Ext.SplitBar.HORIZONTAL;this.minSize=0;this.maxSize=2000;this.animate=false;this.useShim=false;this.shim=null;if(!existingProxy){this.proxy=Ext.SplitBar.createProxy(this.orientation);}else{this.proxy=Ext.get(existingProxy).dom;} +this.dd=new Ext.dd.DDProxy(this.el.dom.id,"XSplitBars",{dragElId:this.proxy.id});this.dd.b4StartDrag=this.onStartProxyDrag.createDelegate(this);this.dd.endDrag=this.onEndProxyDrag.createDelegate(this);this.dragSpecs={};this.adapter=new Ext.SplitBar.BasicLayoutAdapter();this.adapter.init(this);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.placement=placement||(this.el.getX()>this.resizingEl.getX()?Ext.SplitBar.LEFT:Ext.SplitBar.RIGHT);this.el.addClass("x-splitbar-h");}else{this.placement=placement||(this.el.getY()>this.resizingEl.getY()?Ext.SplitBar.TOP:Ext.SplitBar.BOTTOM);this.el.addClass("x-splitbar-v");} +this.addEvents("resize","moved","beforeresize","beforeapply");Ext.SplitBar.superclass.constructor.call(this);};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(x,y){this.fireEvent("beforeresize",this);this.overlay=Ext.DomHelper.append(document.body,{cls:"x-drag-overlay",html:" "},true);this.overlay.unselectable();this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var size=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();this.activeMaxSize=this.getMaximumSize();var c1=size-this.activeMinSize;var c2=Math.max(this.activeMaxSize-size,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?c1:c2,this.placement==Ext.SplitBar.LEFT?c2:c1);this.dd.setYConstraint(0,0);}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?c1:c2,this.placement==Ext.SplitBar.TOP?c2:c1);} +this.dragSpecs.startSize=size;this.dragSpecs.startPoint=[x,y];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,x,y);},onEndProxyDrag:function(e){Ext.get(this.proxy).setDisplayed(false);var endPoint=Ext.lib.Event.getXY(e);if(this.overlay){Ext.destroy(this.overlay);delete this.overlay;} +var newSize;if(this.orientation==Ext.SplitBar.HORIZONTAL){newSize=this.dragSpecs.startSize+ +(this.placement==Ext.SplitBar.LEFT?endPoint[0]-this.dragSpecs.startPoint[0]:this.dragSpecs.startPoint[0]-endPoint[0]);}else{newSize=this.dragSpecs.startSize+ +(this.placement==Ext.SplitBar.TOP?endPoint[1]-this.dragSpecs.startPoint[1]:this.dragSpecs.startPoint[1]-endPoint[1]);} +newSize=Math.min(Math.max(newSize,this.activeMinSize),this.activeMaxSize);if(newSize!=this.dragSpecs.startSize){if(this.fireEvent('beforeapply',this,newSize)!==false){this.adapter.setElementSize(this,newSize);this.fireEvent("moved",this,newSize);this.fireEvent("resize",this,newSize);}}},getAdapter:function(){return this.adapter;},setAdapter:function(adapter){this.adapter=adapter;this.adapter.init(this);},getMinimumSize:function(){return this.minSize;},setMinimumSize:function(minSize){this.minSize=minSize;},getMaximumSize:function(){return this.maxSize;},setMaximumSize:function(maxSize){this.maxSize=maxSize;},setCurrentSize:function(size){var oldAnimate=this.animate;this.animate=false;this.adapter.setElementSize(this,size);this.animate=oldAnimate;},destroy:function(removeEl){if(this.shim){this.shim.remove();} +this.dd.unreg();Ext.destroy(Ext.get(this.proxy));if(removeEl){this.el.remove();}}});Ext.SplitBar.createProxy=function(dir){var proxy=new Ext.Element(document.createElement("div"));proxy.unselectable();var cls='x-splitbar-proxy';proxy.addClass(cls+' '+(dir==Ext.SplitBar.HORIZONTAL?cls+'-h':cls+'-v'));document.body.appendChild(proxy.dom);return proxy.dom;};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(s){},getElementSize:function(s){if(s.orientation==Ext.SplitBar.HORIZONTAL){return s.resizingEl.getWidth();}else{return s.resizingEl.getHeight();}},setElementSize:function(s,newSize,onComplete){if(s.orientation==Ext.SplitBar.HORIZONTAL){if(!s.animate){s.resizingEl.setWidth(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setWidth(newSize,true,.1,onComplete,'easeOut');}}else{if(!s.animate){s.resizingEl.setHeight(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setHeight(newSize,true,.1,onComplete,'easeOut');}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(container){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(container);};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(s){this.basic.init(s);},getElementSize:function(s){return this.basic.getElementSize(s);},setElementSize:function(s,newSize,onComplete){this.basic.setElementSize(s,newSize,this.moveSplitter.createDelegate(this,[s]));},moveSplitter:function(s){var yes=Ext.SplitBar;switch(s.placement){case yes.LEFT:s.el.setX(s.resizingEl.getRight());break;case yes.RIGHT:s.el.setStyle("right",(this.container.getWidth()-s.resizingEl.getLeft())+"px");break;case yes.TOP:s.el.setY(s.resizingEl.getBottom());break;case yes.BOTTOM:s.el.setY(s.resizingEl.getTop()-s.el.getHeight());break;}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4; + +Ext.Container=Ext.extend(Ext.BoxComponent,{autoDestroy:true,defaultType:'panel',initComponent:function(){Ext.Container.superclass.initComponent.call(this);this.addEvents('afterlayout','beforeadd','beforeremove','add','remove');var items=this.items;if(items){delete this.items;if(Ext.isArray(items)){if(items.length>0){this.add.apply(this,items);}}else{this.add(items);}}},initItems:function(){if(!this.items){this.items=new Ext.util.MixedCollection(false,this.getComponentId);this.getLayout();}},setLayout:function(layout){if(this.layout&&this.layout!=layout){this.layout.setContainer(null);} +this.initItems();this.layout=layout;layout.setContainer(this);},render:function(){Ext.Container.superclass.render.apply(this,arguments);if(this.layout){if(typeof this.layout=='string'){this.layout=new Ext.Container.LAYOUTS[this.layout.toLowerCase()](this.layoutConfig);} +this.setLayout(this.layout);if(this.activeItem!==undefined){var item=this.activeItem;delete this.activeItem;this.layout.setActiveItem(item);return;}} +if(!this.ownerCt){this.doLayout();} +if(this.monitorResize===true){Ext.EventManager.onWindowResize(this.doLayout,this,[false]);}},getLayoutTarget:function(){return this.el;},getComponentId:function(comp){return comp.itemId||comp.id;},add:function(comp){this.initItems();var a=arguments,len=a.length;if(len>1){for(var i=0;i2){for(var i=len-1;i>=1;--i){this.insert(index,a[i]);} +return;} +var c=this.lookupComponent(this.applyDefaults(comp));if(c.ownerCt==this&&this.items.indexOf(c)0){item.setSize(size);}}});Ext.Container.LAYOUTS['fit']=Ext.layout.FitLayout; + +Ext.layout.CardLayout=Ext.extend(Ext.layout.FitLayout,{deferredRender:false,renderHidden:true,setActiveItem:function(item){item=this.container.getComponent(item);if(this.activeItem!=item){if(this.activeItem){this.activeItem.hide();} +this.activeItem=item;item.show();this.layout();}},renderAll:function(ct,target){if(this.deferredRender){this.renderItem(this.activeItem,undefined,target);}else{Ext.layout.CardLayout.superclass.renderAll.call(this,ct,target);}}});Ext.Container.LAYOUTS['card']=Ext.layout.CardLayout; + +Ext.layout.AnchorLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,getAnchorViewSize:function(ct,target){return target.dom==document.body?target.getViewSize():target.getStyleSize();},onLayout:function(ct,target){Ext.layout.AnchorLayout.superclass.onLayout.call(this,ct,target);var size=this.getAnchorViewSize(ct,target);var w=size.width,h=size.height;if(w<20||h<20){return;} +var aw,ah;if(ct.anchorSize){if(typeof ct.anchorSize=='number'){aw=ct.anchorSize;}else{aw=ct.anchorSize.width;ah=ct.anchorSize.height;}}else{aw=ct.initialConfig.width;ah=ct.initialConfig.height;} +var cs=ct.items.items,len=cs.length,i,c,a,cw,ch;for(i=0;i 
    ');tt.disableFormats=true;tt.compile();Ext.layout.BorderLayout.Region.prototype.toolTemplate=tt;} +this.collapsedEl=this.targetEl.createChild({cls:"x-layout-collapsed x-layout-collapsed-"+this.position,id:this.panel.id+'-xcollapsed'});this.collapsedEl.enableDisplayMode('block');if(this.collapseMode=='mini'){this.collapsedEl.addClass('x-layout-cmini-'+this.position);this.miniCollapsedEl=this.collapsedEl.createChild({cls:"x-layout-mini x-layout-mini-"+this.position,html:" "});this.miniCollapsedEl.addClassOnOver('x-layout-mini-over');this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on('click',this.onExpandClick,this,{stopEvent:true});}else{if(this.collapsible!==false&&!this.hideCollapseTool){var t=this.toolTemplate.append(this.collapsedEl.dom,{id:'expand-'+this.position},true);t.addClassOnOver('x-tool-expand-'+this.position+'-over');t.on('click',this.onExpandClick,this,{stopEvent:true});} +if(this.floatable!==false||this.titleCollapse){this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this[this.floatable?'collapseClick':'onExpandClick'],this);}}} +return this.collapsedEl;},onExpandClick:function(e){if(this.isSlid){this.afterSlideIn();this.panel.expand(false);}else{this.panel.expand();}},onCollapseClick:function(e){this.panel.collapse();},beforeCollapse:function(p,animate){this.lastAnim=animate;if(this.splitEl){this.splitEl.hide();} +this.getCollapsedEl().show();this.panel.el.setStyle('z-index',100);this.isCollapsed=true;this.layout.layout();},onCollapse:function(animate){this.panel.el.setStyle('z-index',1);if(this.lastAnim===false||this.panel.animCollapse===false){this.getCollapsedEl().dom.style.visibility='visible';}else{this.getCollapsedEl().slideIn(this.panel.slideAnchor,{duration:.2});} +this.state.collapsed=true;this.panel.saveState();},beforeExpand:function(animate){var c=this.getCollapsedEl();this.el.show();if(this.position=='east'||this.position=='west'){this.panel.setSize(undefined,c.getHeight());}else{this.panel.setSize(c.getWidth(),undefined);} +c.hide();c.dom.style.visibility='hidden';this.panel.el.setStyle('z-index',100);},onExpand:function(){this.isCollapsed=false;if(this.splitEl){this.splitEl.show();} +this.layout.layout();this.panel.el.setStyle('z-index',1);this.state.collapsed=false;this.panel.saveState();},collapseClick:function(e){if(this.isSlid){e.stopPropagation();this.slideIn();}else{e.stopPropagation();this.slideOut();}},onHide:function(){if(this.isCollapsed){this.getCollapsedEl().hide();}else if(this.splitEl){this.splitEl.hide();}},onShow:function(){if(this.isCollapsed){this.getCollapsedEl().show();}else if(this.splitEl){this.splitEl.show();}},isVisible:function(){return!this.panel.hidden;},getMargins:function(){return this.isCollapsed&&this.cmargins?this.cmargins:this.margins;},getSize:function(){return this.isCollapsed?this.getCollapsedEl().getSize():this.panel.getSize();},setPanel:function(panel){this.panel=panel;},getMinWidth:function(){return this.minWidth;},getMinHeight:function(){return this.minHeight;},applyLayoutCollapsed:function(box){var ce=this.getCollapsedEl();ce.setLeftTop(box.x,box.y);ce.setSize(box.width,box.height);},applyLayout:function(box){if(this.isCollapsed){this.applyLayoutCollapsed(box);}else{this.panel.setPosition(box.x,box.y);this.panel.setSize(box.width,box.height);}},beforeSlide:function(){this.panel.beforeEffect();},afterSlide:function(){this.panel.afterEffect();},initAutoHide:function(){if(this.autoHide!==false){if(!this.autoHideHd){var st=new Ext.util.DelayedTask(this.slideIn,this);this.autoHideHd={"mouseout":function(e){if(!e.within(this.el,true)){st.delay(500);}},"mouseover":function(e){st.cancel();},scope:this};} +this.el.on(this.autoHideHd);}},clearAutoHide:function(){if(this.autoHide!==false){this.el.un("mouseout",this.autoHideHd.mouseout);this.el.un("mouseover",this.autoHideHd.mouseover);}},clearMonitor:function(){Ext.getDoc().un("click",this.slideInIf,this);},slideOut:function(){if(this.isSlid||this.el.hasActiveFx()){return;} +this.isSlid=true;var ts=this.panel.tools;if(ts&&ts.toggle){ts.toggle.hide();} +this.el.show();if(this.position=='east'||this.position=='west'){this.panel.setSize(undefined,this.collapsedEl.getHeight());}else{this.panel.setSize(this.collapsedEl.getWidth(),undefined);} +this.restoreLT=[this.el.dom.style.left,this.el.dom.style.top];this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());this.el.setStyle("z-index",102);this.panel.el.replaceClass('x-panel-collapsed','x-panel-floating');if(this.animFloat!==false){this.beforeSlide();this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.afterSlide();this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this);},scope:this,block:true});}else{this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this);}},afterSlideIn:function(){this.clearAutoHide();this.isSlid=false;this.clearMonitor();this.el.setStyle("z-index","");this.panel.el.replaceClass('x-panel-floating','x-panel-collapsed');this.el.dom.style.left=this.restoreLT[0];this.el.dom.style.top=this.restoreLT[1];var ts=this.panel.tools;if(ts&&ts.toggle){ts.toggle.show();}},slideIn:function(cb){if(!this.isSlid||this.el.hasActiveFx()){Ext.callback(cb);return;} +this.isSlid=false;if(this.animFloat!==false){this.beforeSlide();this.el.slideOut(this.getSlideAnchor(),{callback:function(){this.el.hide();this.afterSlide();this.afterSlideIn();Ext.callback(cb);},scope:this,block:true});}else{this.el.hide();this.afterSlideIn();}},slideInIf:function(e){if(!e.within(this.el)){this.slideIn();}},anchors:{"west":"left","east":"right","north":"top","south":"bottom"},sanchors:{"west":"l","east":"r","north":"t","south":"b"},canchors:{"west":"tl-tr","east":"tr-tl","north":"tl-bl","south":"bl-tl"},getAnchor:function(){return this.anchors[this.position];},getCollapseAnchor:function(){return this.canchors[this.position];},getSlideAnchor:function(){return this.sanchors[this.position];},getAlignAdj:function(){var cm=this.cmargins;switch(this.position){case"west":return[0,0];break;case"east":return[0,0];break;case"north":return[0,0];break;case"south":return[0,0];break;}},getExpandAdj:function(){var c=this.collapsedEl,cm=this.cmargins;switch(this.position){case"west":return[-(cm.right+c.getWidth()+cm.left),0];break;case"east":return[cm.right+c.getWidth()+cm.left,0];break;case"north":return[0,-(cm.top+cm.bottom+c.getHeight())];break;case"south":return[0,cm.top+cm.bottom+c.getHeight()];break;}}};Ext.layout.BorderLayout.SplitRegion=function(layout,config,pos){Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this,layout,config,pos);this.applyLayout=this.applyFns[pos];};Ext.extend(Ext.layout.BorderLayout.SplitRegion,Ext.layout.BorderLayout.Region,{splitTip:"Drag to resize.",collapsibleSplitTip:"Drag to resize. Double click to hide.",useSplitTips:false,splitSettings:{north:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.TOP,maxFn:'getVMaxSize',minProp:'minHeight',maxProp:'maxHeight'},south:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.BOTTOM,maxFn:'getVMaxSize',minProp:'minHeight',maxProp:'maxHeight'},east:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.RIGHT,maxFn:'getHMaxSize',minProp:'minWidth',maxProp:'maxWidth'},west:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.LEFT,maxFn:'getHMaxSize',minProp:'minWidth',maxProp:'maxWidth'}},applyFns:{west:function(box){if(this.isCollapsed){return this.applyLayoutCollapsed(box);} +var sd=this.splitEl.dom,s=sd.style;this.panel.setPosition(box.x,box.y);var sw=sd.offsetWidth;s.left=(box.x+box.width-sw)+'px';s.top=(box.y)+'px';s.height=Math.max(0,box.height)+'px';this.panel.setSize(box.width-sw,box.height);},east:function(box){if(this.isCollapsed){return this.applyLayoutCollapsed(box);} +var sd=this.splitEl.dom,s=sd.style;var sw=sd.offsetWidth;this.panel.setPosition(box.x+sw,box.y);s.left=(box.x)+'px';s.top=(box.y)+'px';s.height=Math.max(0,box.height)+'px';this.panel.setSize(box.width-sw,box.height);},north:function(box){if(this.isCollapsed){return this.applyLayoutCollapsed(box);} +var sd=this.splitEl.dom,s=sd.style;var sh=sd.offsetHeight;this.panel.setPosition(box.x,box.y);s.left=(box.x)+'px';s.top=(box.y+box.height-sh)+'px';s.width=Math.max(0,box.width)+'px';this.panel.setSize(box.width,box.height-sh);},south:function(box){if(this.isCollapsed){return this.applyLayoutCollapsed(box);} +var sd=this.splitEl.dom,s=sd.style;var sh=sd.offsetHeight;this.panel.setPosition(box.x,box.y+sh);s.left=(box.x)+'px';s.top=(box.y)+'px';s.width=Math.max(0,box.width)+'px';this.panel.setSize(box.width,box.height-sh);}},render:function(ct,p){Ext.layout.BorderLayout.SplitRegion.superclass.render.call(this,ct,p);var ps=this.position;this.splitEl=ct.createChild({cls:"x-layout-split x-layout-split-"+ps,html:" ",id:this.panel.id+'-xsplit'});if(this.collapseMode=='mini'){this.miniSplitEl=this.splitEl.createChild({cls:"x-layout-mini x-layout-mini-"+ps,html:" "});this.miniSplitEl.addClassOnOver('x-layout-mini-over');this.miniSplitEl.on('click',this.onCollapseClick,this,{stopEvent:true});} +var s=this.splitSettings[ps];this.split=new Ext.SplitBar(this.splitEl.dom,p.el,s.orientation);this.split.placement=s.placement;this.split.getMaximumSize=this[s.maxFn].createDelegate(this);this.split.minSize=this.minSize||this[s.minProp];this.split.on("beforeapply",this.onSplitMove,this);this.split.useShim=this.useShim===true;this.maxSize=this.maxSize||this[s.maxProp];if(p.hidden){this.splitEl.hide();} +if(this.useSplitTips){this.splitEl.dom.title=this.collapsible?this.collapsibleSplitTip:this.splitTip;} +if(this.collapsible){this.splitEl.on("dblclick",this.onCollapseClick,this);}},getSize:function(){if(this.isCollapsed){return this.collapsedEl.getSize();} +var s=this.panel.getSize();if(this.position=='north'||this.position=='south'){s.height+=this.splitEl.dom.offsetHeight;}else{s.width+=this.splitEl.dom.offsetWidth;} +return s;},getHMaxSize:function(){var cmax=this.maxSize||10000;var center=this.layout.center;return Math.min(cmax,(this.el.getWidth()+center.el.getWidth())-center.getMinWidth());},getVMaxSize:function(){var cmax=this.maxSize||10000;var center=this.layout.center;return Math.min(cmax,(this.el.getHeight()+center.el.getHeight())-center.getMinHeight());},onSplitMove:function(split,newSize){var s=this.panel.getSize();this.lastSplitSize=newSize;if(this.position=='north'||this.position=='south'){this.panel.setSize(s.width,newSize);this.state.height=newSize;}else{this.panel.setSize(newSize,s.height);this.state.width=newSize;} +this.layout.layout();this.panel.saveState();return false;},getSplitBar:function(){return this.split;},destroy:function(){Ext.destroy(this.miniSplitEl,this.split,this.splitEl);}});Ext.Container.LAYOUTS['border']=Ext.layout.BorderLayout; + +Ext.layout.FormLayout=Ext.extend(Ext.layout.AnchorLayout,{labelSeparator:':',getAnchorViewSize:function(ct,target){return(ct.body||ct.el).getStyleSize();},setContainer:function(ct){Ext.layout.FormLayout.superclass.setContainer.call(this,ct);if(ct.labelAlign){ct.addClass('x-form-label-'+ct.labelAlign);} +if(ct.hideLabels){this.labelStyle="display:none";this.elementStyle="padding-left:0;";this.labelAdjust=0;}else{this.labelSeparator=ct.labelSeparator||this.labelSeparator;ct.labelWidth=ct.labelWidth||100;if(typeof ct.labelWidth=='number'){var pad=(typeof ct.labelPad=='number'?ct.labelPad:5);this.labelAdjust=ct.labelWidth+pad;this.labelStyle="width:"+ct.labelWidth+"px;";this.elementStyle="padding-left:"+(ct.labelWidth+pad)+'px';} +if(ct.labelAlign=='top'){this.labelStyle="width:auto;";this.labelAdjust=0;this.elementStyle="padding-left:0;";}} +if(!this.fieldTpl){var t=new Ext.Template('
    ','','
    ','
    ','
    ');t.disableFormats=true;t.compile();Ext.layout.FormLayout.prototype.fieldTpl=t;}},getLabelStyle:function(s){var ls='',items=[this.labelStyle,s];for(var i=0,len=items.length;i=cols)||(this.cells[rowIndex]&&this.cells[rowIndex][colIndex])){if(cols&&colIndex>=cols){rowIndex++;colIndex=0;}else{colIndex++;}} +return[colIndex,rowIndex];},renderItem:function(c,position,target){if(c&&!c.rendered){c.render(this.getNextCell(c));if(this.extraCls){var t=c.getPositionEl?c.getPositionEl():c;t.addClass(this.extraCls);}}},isValidParent:function(c,target){return true;}});Ext.Container.LAYOUTS['table']=Ext.layout.TableLayout; + +Ext.layout.AbsoluteLayout=Ext.extend(Ext.layout.AnchorLayout,{extraCls:'x-abs-layout-item',isForm:false,setContainer:function(ct){Ext.layout.AbsoluteLayout.superclass.setContainer.call(this,ct);if(ct.isXType('form')){this.isForm=true;}},onLayout:function(ct,target){if(this.isForm){ct.body.position();}else{target.position();} +Ext.layout.AbsoluteLayout.superclass.onLayout.call(this,ct,target);},getAnchorViewSize:function(ct,target){return this.isForm?ct.body.getStyleSize():Ext.layout.AbsoluteLayout.superclass.getAnchorViewSize.call(this,ct,target);},isValidParent:function(c,target){return this.isForm?true:Ext.layout.AbsoluteLayout.superclass.isValidParent.call(this,c,target);},adjustWidthAnchor:function(value,comp){return value?value-comp.getPosition(true)[0]:value;},adjustHeightAnchor:function(value,comp){return value?value-comp.getPosition(true)[1]:value;}});Ext.Container.LAYOUTS['absolute']=Ext.layout.AbsoluteLayout; + +Ext.Viewport=Ext.extend(Ext.Container,{initComponent:function(){Ext.Viewport.superclass.initComponent.call(this);document.getElementsByTagName('html')[0].className+=' x-viewport';this.el=Ext.getBody();this.el.setHeight=Ext.emptyFn;this.el.setWidth=Ext.emptyFn;this.el.setSize=Ext.emptyFn;this.el.dom.scroll='no';this.allowDomMove=false;this.autoWidth=true;this.autoHeight=true;Ext.EventManager.onWindowResize(this.fireResize,this);this.renderTo=this.el;},fireResize:function(w,h){this.fireEvent('resize',this,w,h,w,h);}});Ext.reg('viewport',Ext.Viewport); + +Ext.Panel=Ext.extend(Ext.Container,{baseCls:'x-panel',collapsedCls:'x-panel-collapsed',maskDisabled:true,animCollapse:Ext.enableFx,headerAsText:true,buttonAlign:'right',collapsed:false,collapseFirst:true,minButtonWidth:75,elements:'body',toolTarget:'header',collapseEl:'bwrap',slideAnchor:'t',disabledClass:'',deferHeight:true,expandDefaults:{duration:.25},collapseDefaults:{duration:.25},initComponent:function(){Ext.Panel.superclass.initComponent.call(this);this.addEvents('bodyresize','titlechange','iconchange','collapse','expand','beforecollapse','beforeexpand','beforeclose','close','activate','deactivate');if(this.tbar){this.elements+=',tbar';if(typeof this.tbar=='object'){this.topToolbar=this.tbar;} +delete this.tbar;} +if(this.bbar){this.elements+=',bbar';if(typeof this.bbar=='object'){this.bottomToolbar=this.bbar;} +delete this.bbar;} +if(this.header===true){this.elements+=',header';delete this.header;}else if(this.headerCfg||(this.title&&this.header!==false)){this.elements+=',header';} +if(this.footerCfg||this.footer===true){this.elements+=',footer';delete this.footer;} +if(this.buttons){var btns=this.buttons;this.buttons=[];for(var i=0,len=btns.length;i'+this.header.dom.innerHTML+'';if(this.iconCls){this.setIconClass(this.iconCls);}}} +if(this.floating){this.makeFloating(this.floating);} +if(this.collapsible){this.tools=this.tools?this.tools.slice(0):[];if(!this.hideCollapseTool){this.tools[this.collapseFirst?'unshift':'push']({id:'toggle',handler:this.toggleCollapse,scope:this});} +if(this.titleCollapse&&this.header){this.header.on('click',this.toggleCollapse,this);this.header.setStyle('cursor','pointer');}} +if(this.tools){var ts=this.tools;this.tools={};this.addTool.apply(this,ts);}else{this.tools={};} +if(this.buttons&&this.buttons.length>0){var tb=this.footer.createChild({cls:'x-panel-btns-ct',cn:{cls:"x-panel-btns x-panel-btns-"+this.buttonAlign,html:'
    '}},null,true);var tr=tb.getElementsByTagName('tr')[0];for(var i=0,len=this.buttons.length;i 
    ');tt.disableFormats=true;tt.compile();Ext.Panel.prototype.toolTemplate=tt;} +for(var i=0,a=arguments,len=a.length;i0){a.sort(sortWindows);var seed=a[0].manager.zseed;for(var i=0;i=0;--i){if(!accessList[i].hidden){setActiveWin(accessList[i]);return;}} +setActiveWin(null);};return{zseed:9000,register:function(win){list[win.id]=win;accessList.push(win);win.on('hide',activateLast);},unregister:function(win){delete list[win.id];win.un('hide',activateLast);accessList.remove(win);},get:function(id){return typeof id=="object"?id:list[id];},bringToFront:function(win){win=this.get(win);if(win!=front){win._lastAccess=new Date().getTime();orderWindows();return true;} +return false;},sendToBack:function(win){win=this.get(win);win._lastAccess=-(new Date().getTime());orderWindows();return win;},hideAll:function(){for(var id in list){if(list[id]&&typeof list[id]!="function"&&list[id].isVisible()){list[id].hide();}}},getActive:function(){return front;},getBy:function(fn,scope){var r=[];for(var i=accessList.length-1;i>=0;--i){var win=accessList[i];if(fn.call(scope||win,win)!==false){r.push(win);}} +return r;},each:function(fn,scope){for(var id in list){if(list[id]&&typeof list[id]!="function"){if(fn.call(scope||list[id],list[id])===false){return;}}}}};};Ext.WindowMgr=new Ext.WindowGroup(); + +Ext.dd.PanelProxy=function(panel,config){this.panel=panel;this.id=this.panel.id+'-ddproxy';Ext.apply(this,config);};Ext.dd.PanelProxy.prototype={insertProxy:true,setStatus:Ext.emptyFn,reset:Ext.emptyFn,update:Ext.emptyFn,stop:Ext.emptyFn,sync:Ext.emptyFn,getEl:function(){return this.ghost;},getGhost:function(){return this.ghost;},getProxy:function(){return this.proxy;},hide:function(){if(this.ghost){if(this.proxy){this.proxy.remove();delete this.proxy;} +this.panel.el.dom.style.display='';this.ghost.remove();delete this.ghost;}},show:function(){if(!this.ghost){this.ghost=this.panel.createGhost(undefined,undefined,Ext.getBody());this.ghost.setXY(this.panel.el.getXY()) +if(this.insertProxy){this.proxy=this.panel.el.insertSibling({cls:'x-panel-dd-spacer'});this.proxy.setSize(this.panel.getSize());} +this.panel.el.dom.style.display='none';}},repair:function(xy,callback,scope){this.hide();if(typeof callback=="function"){callback.call(scope||this);}},moveProxy:function(parentNode,before){if(this.proxy){parentNode.insertBefore(this.proxy.dom,before);}}};Ext.Panel.DD=function(panel,cfg){this.panel=panel;this.dragData={panel:panel};this.proxy=new Ext.dd.PanelProxy(panel,cfg);Ext.Panel.DD.superclass.constructor.call(this,panel.el,cfg);var h=panel.header;if(h){this.setHandleElId(h.id);} +(h?h:this.panel.body).setStyle('cursor','move');this.scroll=false;};Ext.extend(Ext.Panel.DD,Ext.dd.DragSource,{showFrame:Ext.emptyFn,startDrag:Ext.emptyFn,b4StartDrag:function(x,y){this.proxy.show();},b4MouseDown:function(e){var x=e.getPageX();var y=e.getPageY();this.autoOffset(x,y);},onInitDrag:function(x,y){this.onStartDrag(x,y);return true;},createFrame:Ext.emptyFn,getDragEl:function(e){return this.proxy.ghost.dom;},endDrag:function(e){this.proxy.hide();this.panel.saveState();},autoOffset:function(x,y){x-=this.startPageX;y-=this.startPageY;this.setDelta(x,y);}}); + +Ext.state.Provider=function(){this.addEvents("statechange");this.state={};Ext.state.Provider.superclass.constructor.call(this);};Ext.extend(Ext.state.Provider,Ext.util.Observable,{get:function(name,defaultValue){return typeof this.state[name]=="undefined"?defaultValue:this.state[name];},clear:function(name){delete this.state[name];this.fireEvent("statechange",this,name,null);},set:function(name,value){this.state[name]=value;this.fireEvent("statechange",this,name,value);},decodeValue:function(cookie){var re=/^(a|n|d|b|s|o)\:(.*)$/;var matches=re.exec(unescape(cookie));if(!matches||!matches[1])return;var type=matches[1];var v=matches[2];switch(type){case"n":return parseFloat(v);case"d":return new Date(Date.parse(v));case"b":return(v=="1");case"a":var all=[];var values=v.split("^");for(var i=0,len=values.length;i0){if(!skipUpdate){this.selected.removeClass(this.selectedClass);} +this.selected.clear();this.last=false;if(!suppressEvent){this.fireEvent("selectionchange",this,this.selected.elements);}}},isSelected:function(node){return this.selected.contains(this.getNode(node));},deselect:function(node){if(this.isSelected(node)){node=this.getNode(node);this.selected.removeElement(node);if(this.last==node.viewIndex){this.last=false;} +Ext.fly(node).removeClass(this.selectedClass);this.fireEvent("selectionchange",this,this.selected.elements);}},select:function(nodeInfo,keepExisting,suppressEvent){if(Ext.isArray(nodeInfo)){if(!keepExisting){this.clearSelections(true);} +for(var i=0,len=nodeInfo.length;i=end&&ns[i];i--){nodes.push(ns[i]);}} +return nodes;},indexOf:function(node){node=this.getNode(node);if(typeof node.viewIndex=="number"){return node.viewIndex;} +return this.all.indexOf(node);},onBeforeLoad:function(){if(this.loadingText){this.clearSelections(false,true);this.el.update('
    '+this.loadingText+'
    ');this.all.clear();}},onDestroy:function(){Ext.DataView.superclass.onDestroy.call(this);this.setStore(null);}});Ext.reg('dataview',Ext.DataView); + +Ext.ColorPalette=function(config){Ext.ColorPalette.superclass.constructor.call(this,config);this.addEvents('select');if(this.handler){this.on("select",this.handler,this.scope,true);}};Ext.extend(Ext.ColorPalette,Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:'click',ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],onRender:function(container,position){var t=this.tpl||new Ext.XTemplate(' ');var el=document.createElement("div");el.id=this.getId();el.className=this.itemCls;t.overwrite(el,this.colors);container.dom.insertBefore(el,position);this.el=Ext.get(el);this.el.on(this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!='click'){this.el.on('click',Ext.emptyFn,this,{delegate:"a",preventDefault:true});}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var s=this.value;this.value=null;this.select(s);}},handleClick:function(e,t){e.preventDefault();if(!this.disabled){var c=t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(c.toUpperCase());}},select:function(color){color=color.replace("#","");if(color!=this.value||this.allowReselect){var el=this.el;if(this.value){el.child("a.color-"+this.value).removeClass("x-color-palette-sel");} +el.child("a.color-"+color).addClass("x-color-palette-sel");this.value=color;this.fireEvent("select",this,color);}}});Ext.reg('colorpalette',Ext.ColorPalette); + +Ext.DatePicker=Ext.extend(Ext.Component,{todayText:"Today",okText:" OK ",cancelText:"Cancel",todayTip:"{0} (Spacebar)",minText:"This date is before the minimum date",maxText:"This date is after the maximum date",format:"m/d/y",disabledDaysText:"Disabled",disabledDatesText:"Disabled",monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:'Next Month (Control+Right)',prevText:'Previous Month (Control+Left)',monthYearText:'Choose a month (Control+Up/Down to move years)',startDay:0,showToday:true,initComponent:function(){Ext.DatePicker.superclass.initComponent.call(this);this.value=this.value?this.value.clearTime():new Date().clearTime();this.addEvents('select');if(this.handler){this.on("select",this.handler,this.scope||this);} +this.initDisabledDays();},initDisabledDays:function(){if(!this.disabledDatesRE&&this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i','  ',''];var dn=this.dayNames;for(var i=0;i<7;i++){var d=this.startDay+i;if(d>6){d=d-7;} +m.push("");} +m[m.length]="";for(var i=0;i<42;i++){if(i%7==0&&i!=0){m[m.length]="";} +m[m.length]='';} +m.push('
    ",dn[d].substr(0,1),"
    ',this.showToday?'':'','
    ');var el=document.createElement("div");el.className="x-date-picker";el.innerHTML=m.join("");container.dom.insertBefore(el,position);this.el=Ext.get(el);this.eventEl=Ext.get(el.firstChild);this.leftClickRpt=new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"),{handler:this.showPrevMonth,scope:this,preventDefault:true,stopDefault:true});this.rightClickRpt=new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"),{handler:this.showNextMonth,scope:this,preventDefault:true,stopDefault:true});this.eventEl.on("mousewheel",this.handleMouseWheel,this);this.monthPicker=this.el.down('div.x-date-mp');this.monthPicker.enableDisplayMode('block');this.keyNav=new Ext.KeyNav(this.eventEl,{"left":function(e){e.ctrlKey?this.showPrevMonth():this.update(this.activeDate.add("d",-1));},"right":function(e){e.ctrlKey?this.showNextMonth():this.update(this.activeDate.add("d",1));},"up":function(e){e.ctrlKey?this.showNextYear():this.update(this.activeDate.add("d",-7));},"down":function(e){e.ctrlKey?this.showPrevYear():this.update(this.activeDate.add("d",7));},"pageUp":function(e){this.showNextMonth();},"pageDown":function(e){this.showPrevMonth();},"enter":function(e){e.stopPropagation();return true;},scope:this});this.eventEl.on("click",this.handleDateClick,this,{delegate:"a.x-date-date"});this.el.unselectable();this.cells=this.el.select("table.x-date-inner tbody td");this.textNodes=this.el.query("table.x-date-inner tbody span");this.mbtn=new Ext.Button({text:" ",tooltip:this.monthYearText,renderTo:this.el.child("td.x-date-middle",true)});this.mbtn.on('click',this.showMonthPicker,this);this.mbtn.el.child(this.mbtn.menuClassTarget).addClass("x-btn-with-menu");if(this.showToday){this.todayKeyListener=this.eventEl.addKeyListener(Ext.EventObject.SPACE,this.selectToday,this);var today=(new Date()).dateFormat(this.format);this.todayBtn=new Ext.Button({renderTo:this.el.child("td.x-date-bottom",true),text:String.format(this.todayText,today),tooltip:String.format(this.todayTip,today),handler:this.selectToday,scope:this});} +if(Ext.isIE){this.el.repaint();} +this.onEnable(true);},createMonthPicker:function(){if(!this.monthPicker.dom.firstChild){var buf=[''];for(var i=0;i<6;i++){buf.push('','',i==0?'':'');} +buf.push('','
    ',Date.getShortMonthName(i),'',Date.getShortMonthName(i+6),'
    ');this.monthPicker.update(buf.join(''));this.monthPicker.on('click',this.onMonthClick,this);this.monthPicker.on('dblclick',this.onMonthDblClick,this);this.mpMonths=this.monthPicker.select('td.x-date-mp-month');this.mpYears=this.monthPicker.select('td.x-date-mp-year');this.mpMonths.each(function(m,a,i){i+=1;if((i%2)==0){m.dom.xmonth=5+Math.round(i*.5);}else{m.dom.xmonth=Math.round((i-1)*.5);}});}},showMonthPicker:function(){if(!this.disabled){this.createMonthPicker();var size=this.el.getSize();this.monthPicker.setSize(size);this.monthPicker.child('table').setSize(size);this.mpSelMonth=(this.activeDate||this.value).getMonth();this.updateMPMonth(this.mpSelMonth);this.mpSelYear=(this.activeDate||this.value).getFullYear();this.updateMPYear(this.mpSelYear);this.monthPicker.slideIn('t',{duration:.2});}},updateMPYear:function(y){this.mpyear=y;var ys=this.mpYears.elements;for(var i=1;i<=10;i++){var td=ys[i-1],y2;if((i%2)==0){y2=y+Math.round(i*.5);td.firstChild.innerHTML=y2;td.xyear=y2;}else{y2=y-(5-Math.round(i*.5));td.firstChild.innerHTML=y2;td.xyear=y2;} +this.mpYears.item(i-1)[y2==this.mpSelYear?'addClass':'removeClass']('x-date-mp-sel');}},updateMPMonth:function(sm){this.mpMonths.each(function(m,a,i){m[m.dom.xmonth==sm?'addClass':'removeClass']('x-date-mp-sel');});},selectMPMonth:function(m){},onMonthClick:function(e,t){e.stopEvent();var el=new Ext.Element(t),pn;if(el.is('button.x-date-mp-cancel')){this.hideMonthPicker();} +else if(el.is('button.x-date-mp-ok')){var d=new Date(this.mpSelYear,this.mpSelMonth,(this.activeDate||this.value).getDate());if(d.getMonth()!=this.mpSelMonth){d=new Date(this.mpSelYear,this.mpSelMonth,1).getLastDateOfMonth();} +this.update(d);this.hideMonthPicker();} +else if(pn=el.up('td.x-date-mp-month',2)){this.mpMonths.removeClass('x-date-mp-sel');pn.addClass('x-date-mp-sel');this.mpSelMonth=pn.dom.xmonth;} +else if(pn=el.up('td.x-date-mp-year',2)){this.mpYears.removeClass('x-date-mp-sel');pn.addClass('x-date-mp-sel');this.mpSelYear=pn.dom.xyear;} +else if(el.is('a.x-date-mp-prev')){this.updateMPYear(this.mpyear-10);} +else if(el.is('a.x-date-mp-next')){this.updateMPYear(this.mpyear+10);}},onMonthDblClick:function(e,t){e.stopEvent();var el=new Ext.Element(t),pn;if(pn=el.up('td.x-date-mp-month',2)){this.update(new Date(this.mpSelYear,pn.dom.xmonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker();} +else if(pn=el.up('td.x-date-mp-year',2)){this.update(new Date(pn.dom.xyear,this.mpSelMonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker();}},hideMonthPicker:function(disableAnim){if(this.monthPicker){if(disableAnim===true){this.monthPicker.hide();}else{this.monthPicker.slideOut('t',{duration:.2});}}},showPrevMonth:function(e){this.update(this.activeDate.add("mo",-1));},showNextMonth:function(e){this.update(this.activeDate.add("mo",1));},showPrevYear:function(){this.update(this.activeDate.add("y",-1));},showNextYear:function(){this.update(this.activeDate.add("y",1));},handleMouseWheel:function(e){e.stopEvent();if(!this.disabled){var delta=e.getWheelDelta();if(delta>0){this.showPrevMonth();}else if(delta<0){this.showNextMonth();}}},handleDateClick:function(e,t){e.stopEvent();if(!this.disabled&&t.dateValue&&!Ext.fly(t.parentNode).hasClass("x-date-disabled")){this.setValue(new Date(t.dateValue));this.fireEvent("select",this,this.value);}},selectToday:function(){if(this.todayBtn&&!this.todayBtn.disabled){this.setValue(new Date().clearTime());this.fireEvent("select",this,this.value);}},update:function(date,forceRefresh){var vd=this.activeDate,vis=this.isVisible();this.activeDate=date;if(!forceRefresh&&vd&&this.el){var t=date.getTime();if(vd.getMonth()==date.getMonth()&&vd.getFullYear()==date.getFullYear()){this.cells.removeClass("x-date-selected");this.cells.each(function(c){if(c.dom.firstChild.dateValue==t){c.addClass("x-date-selected");if(vis){setTimeout(function(){try{c.dom.firstChild.focus();}catch(e){}},50);} +return false;}});return;}} +var days=date.getDaysInMonth();var firstOfMonth=date.getFirstDateOfMonth();var startingPos=firstOfMonth.getDay()-this.startDay;if(startingPos<0){startingPos+=7;} +var pm=date.add("mo",-1);var prevStart=pm.getDaysInMonth()-startingPos;var cells=this.cells.elements;var textEls=this.textNodes;days+=startingPos;var day=86400000;var d=(new Date(pm.getFullYear(),pm.getMonth(),prevStart)).clearTime();var today=new Date().clearTime().getTime();var sel=date.clearTime().getTime();var min=this.minDate?this.minDate.clearTime():Number.NEGATIVE_INFINITY;var max=this.maxDate?this.maxDate.clearTime():Number.POSITIVE_INFINITY;var ddMatch=this.disabledDatesRE;var ddText=this.disabledDatesText;var ddays=this.disabledDays?this.disabledDays.join(""):false;var ddaysText=this.disabledDaysText;var format=this.format;if(this.showToday){var td=new Date().clearTime();var disable=(tdmax||(ddMatch&&format&&ddMatch.test(td.dateFormat(format)))||(ddays&&ddays.indexOf(td.getDay())!=-1));if(!this.disabled){this.todayBtn.setDisabled(disable);this.todayKeyListener[disable?'disable':'enable']();}} +var setCellClass=function(cal,cell){cell.title="";var t=d.getTime();cell.firstChild.dateValue=t;if(t==today){cell.className+=" x-date-today";cell.title=cal.todayText;} +if(t==sel){cell.className+=" x-date-selected";if(vis){setTimeout(function(){try{cell.firstChild.focus();}catch(e){}},50);}} +if(tmax){cell.className=" x-date-disabled";cell.title=cal.maxText;return;} +if(ddays){if(ddays.indexOf(d.getDay())!=-1){cell.title=ddaysText;cell.className=" x-date-disabled";}} +if(ddMatch&&format){var fvalue=d.dateFormat(format);if(ddMatch.test(fvalue)){cell.title=ddText.replace("%0",fvalue);cell.className=" x-date-disabled";}}};var i=0;for(;i','','{text}','');tt.disableFormats=true;tt.compile();Ext.TabPanel.prototype.itemTpl=tt;} +this.items.each(this.initTab,this);},afterRender:function(){Ext.TabPanel.superclass.afterRender.call(this);if(this.autoTabs){this.readTabs(false);}},initEvents:function(){Ext.TabPanel.superclass.initEvents.call(this);this.on('add',this.onAdd,this);this.on('remove',this.onRemove,this);this.strip.on('mousedown',this.onStripMouseDown,this);this.strip.on('contextmenu',this.onStripContextMenu,this);if(this.enableTabScroll){this.strip.on('mousewheel',this.onWheel,this);}},findTargets:function(e){var item=null;var itemEl=e.getTarget('li',this.strip);if(itemEl){item=this.getComponent(itemEl.id.split(this.idDelimiter)[1]);if(item.disabled){return{close:null,item:null,el:null};}} +return{close:e.getTarget('.x-tab-strip-close',this.strip),item:item,el:itemEl};},onStripMouseDown:function(e){if(e.button!=0){return;} +e.preventDefault();var t=this.findTargets(e);if(t.close){this.remove(t.item);return;} +if(t.item&&t.item!=this.activeTab){this.setActiveTab(t.item);}},onStripContextMenu:function(e){e.preventDefault();var t=this.findTargets(e);if(t.item){this.fireEvent('contextmenu',this,t.item,e);}},readTabs:function(removeExisting){if(removeExisting===true){this.items.each(function(item){this.remove(item);},this);} +var tabs=this.el.query(this.autoTabSelector);for(var i=0,len=tabs.length;i0){this.setActiveTab(0);}else{this.activeTab=null;}} +this.delegateUpdates();},onBeforeShowItem:function(item){if(item!=this.activeTab){this.setActiveTab(item);return false;}},onItemDisabled:function(item){var el=this.getTabEl(item);if(el){Ext.fly(el).addClass('x-item-disabled');} +this.stack.remove(item);},onItemEnabled:function(item){var el=this.getTabEl(item);if(el){Ext.fly(el).removeClass('x-item-disabled');}},onItemTitleChanged:function(item){var el=this.getTabEl(item);if(el){Ext.fly(el).child('span.x-tab-strip-text',true).innerHTML=item.title;}},onItemIconChanged:function(item,iconCls,oldCls){var el=this.getTabEl(item);if(el){Ext.fly(el).child('span.x-tab-strip-text').replaceClass(oldCls,iconCls);}},getTabEl:function(item){var itemId=(typeof item==='number')?this.items.items[item].getItemId():item.getItemId();return document.getElementById(this.id+this.idDelimiter+itemId);},onResize:function(){Ext.TabPanel.superclass.onResize.apply(this,arguments);this.delegateUpdates();},beginUpdate:function(){this.suspendUpdates=true;},endUpdate:function(){this.suspendUpdates=false;this.delegateUpdates();},hideTabStripItem:function(item){item=this.getComponent(item);var el=this.getTabEl(item);if(el){el.style.display='none';this.delegateUpdates();} +this.stack.remove(item);},unhideTabStripItem:function(item){item=this.getComponent(item);var el=this.getTabEl(item);if(el){el.style.display='';this.delegateUpdates();}},delegateUpdates:function(){if(this.suspendUpdates){return;} +if(this.resizeTabs&&this.rendered){this.autoSizeTabs();} +if(this.enableTabScroll&&this.rendered){this.autoScrollTabs();}},autoSizeTabs:function(){var count=this.items.length;var ce=this.tabPosition!='bottom'?'header':'footer';var ow=this[ce].dom.offsetWidth;var aw=this[ce].dom.clientWidth;if(!this.resizeTabs||count<1||!aw){return;} +var each=Math.max(Math.min(Math.floor((aw-4)/count)-this.tabMargin,this.tabWidth),this.minTabWidth);this.lastTabWidth=each;var lis=this.stripWrap.dom.getElementsByTagName('li');for(var i=0,len=lis.length-1;i20?tw:20);if(!this.scrolling){if(!this.scrollLeft){this.createScrollers();}else{this.scrollLeft.show();this.scrollRight.show();}} +this.scrolling=true;if(pos>(l-tw)){wd.scrollLeft=l-tw;}else{this.scrollToTab(this.activeTab,false);} +this.updateScrollButtons();}},createScrollers:function(){this.pos.addClass('x-tab-scrolling-'+this.tabPosition);var h=this.stripWrap.dom.offsetHeight;var sl=this.pos.insertFirst({cls:'x-tab-scroller-left'});sl.setHeight(h);sl.addClassOnOver('x-tab-scroller-left-over');this.leftRepeater=new Ext.util.ClickRepeater(sl,{interval:this.scrollRepeatInterval,handler:this.onScrollLeft,scope:this});this.scrollLeft=sl;var sr=this.pos.insertFirst({cls:'x-tab-scroller-right'});sr.setHeight(h);sr.addClassOnOver('x-tab-scroller-right-over');this.rightRepeater=new Ext.util.ClickRepeater(sr,{interval:this.scrollRepeatInterval,handler:this.onScrollRight,scope:this});this.scrollRight=sr;},getScrollWidth:function(){return this.edge.getOffsetsTo(this.stripWrap)[0]+this.getScrollPos();},getScrollPos:function(){return parseInt(this.stripWrap.dom.scrollLeft,10)||0;},getScrollArea:function(){return parseInt(this.stripWrap.dom.clientWidth,10)||0;},getScrollAnim:function(){return{duration:this.scrollDuration,callback:this.updateScrollButtons,scope:this};},getScrollIncrement:function(){return this.scrollIncrement||(this.resizeTabs?this.lastTabWidth+2:100);},scrollToTab:function(item,animate){if(!item){return;} +var el=this.getTabEl(item);var pos=this.getScrollPos(),area=this.getScrollArea();var left=Ext.fly(el).getOffsetsTo(this.stripWrap)[0]+pos;var right=left+el.offsetWidth;if(left(pos+area)){this.scrollTo(right-area,animate);}},scrollTo:function(pos,animate){this.stripWrap.scrollTo('left',pos,animate?this.getScrollAnim():false);if(!animate){this.updateScrollButtons();}},onWheel:function(e){var d=e.getWheelDelta()*this.wheelIncrement*-1;e.stopEvent();var pos=this.getScrollPos();var newpos=pos+d;var sw=this.getScrollWidth()-this.getScrollArea();var s=Math.max(0,Math.min(sw,newpos));if(s!=pos){this.scrollTo(s,false);}},onScrollRight:function(){var sw=this.getScrollWidth()-this.getScrollArea();var pos=this.getScrollPos();var s=Math.min(sw,pos+this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},onScrollLeft:function(){var pos=this.getScrollPos();var s=Math.max(0,pos-this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},updateScrollButtons:function(){var pos=this.getScrollPos();this.scrollLeft[pos==0?'addClass':'removeClass']('x-tab-scroller-left-disabled');this.scrollRight[pos>=(this.getScrollWidth()-this.getScrollArea())?'addClass':'removeClass']('x-tab-scroller-right-disabled');},beforeDestroy:function(){if(this.items){this.items.each(function(item){if(item&&item.tabEl){Ext.get(item.tabEl).removeAllListeners();item.tabEl=null;}},this);} +if(this.strip){this.strip.removeAllListeners();} +Ext.TabPanel.superclass.beforeDestroy.apply(this);}});Ext.reg('tabpanel',Ext.TabPanel);Ext.TabPanel.prototype.activate=Ext.TabPanel.prototype.setActiveTab;Ext.TabPanel.AccessStack=function(){var items=[];return{add:function(item){items.push(item);if(items.length>10){items.shift();}},remove:function(item){var s=[];for(var i=0,len=items.length;i','  ',"");} +this.template=Ext.Button.buttonTemplate;} +var btn,targs=[this.text||' ',this.type];if(position){btn=this.template.insertBefore(position,targs,true);}else{btn=this.template.append(ct,targs,true);} +var btnEl=this.btnEl=btn.child(this.buttonSelector);btnEl.on('focus',this.onFocus,this);btnEl.on('blur',this.onBlur,this);this.initButtonEl(btn,btnEl);if(this.menu){this.el.child(this.menuClassTarget).addClass("x-btn-with-menu");} +Ext.ButtonToggleMgr.register(this);},initButtonEl:function(btn,btnEl){this.el=btn;btn.addClass("x-btn");if(this.id){var d=this.el.dom,c=Ext.Element.cache;delete c[d.id];d.id=this.el.id=this.id;c[d.id]=this.el;} +if(this.icon){btnEl.setStyle('background-image','url('+this.icon+')');} +if(this.iconCls){btnEl.addClass(this.iconCls);if(!this.cls){btn.addClass(this.text?'x-btn-text-icon':'x-btn-icon');}} +if(this.tabIndex!==undefined){btnEl.dom.tabIndex=this.tabIndex;} +if(this.tooltip){if(typeof this.tooltip=='object'){Ext.QuickTips.register(Ext.apply({target:btnEl.id},this.tooltip));}else{btnEl.dom[this.tooltipType]=this.tooltip;}} +if(this.pressed){this.el.addClass("x-btn-pressed");} +if(this.handleMouseEvents){btn.on("mouseover",this.onMouseOver,this);btn.on("mousedown",this.onMouseDown,this);} +if(this.menu){this.menu.on("show",this.onMenuShow,this);this.menu.on("hide",this.onMenuHide,this);} +if(this.repeat){var repeater=new Ext.util.ClickRepeater(btn,typeof this.repeat=="object"?this.repeat:{});repeater.on("click",this.onClick,this);} +btn.on(this.clickEvent,this.onClick,this);},afterRender:function(){Ext.Button.superclass.afterRender.call(this);if(Ext.isIE6){this.autoWidth.defer(1,this);}else{this.autoWidth();}},setIconClass:function(cls){if(this.el){this.btnEl.replaceClass(this.iconCls,cls);} +this.iconCls=cls;},beforeDestroy:function(){if(this.rendered){if(this.btnEl){if(typeof this.tooltip=='object'){Ext.QuickTips.unregister(this.btnEl);} +Ext.destroy(this.btnEl);}} +Ext.destroy(this.menu,this.repeater);},onDestroy:function(){var doc=Ext.getDoc();doc.un('mouseover',this.monitorMouseOver,this);doc.un('mouseup',this.onMouseUp,this);if(this.rendered){Ext.ButtonToggleMgr.unregister(this);}},autoWidth:function(){if(this.el){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var ib=this.btnEl;if(ib&&ib.getWidth()>20){ib.clip();ib.setWidth(Ext.util.TextMetrics.measure(ib,this.text).width+ib.getFrameWidth('lr'));}} +if(this.minWidth){if(this.el.getWidth()','','',"
     
    ",'','',"
     
    ");var btn,targs=[this.text||' ',this.type];if(position){btn=tpl.insertBefore(position,targs,true);}else{btn=tpl.append(ct,targs,true);} +var btnEl=this.btnEl=btn.child(this.buttonSelector);this.initButtonEl(btn,btnEl);this.arrowBtnTable=btn.child("table:last");this.arrowEl=btn.child(this.arrowSelector);if(this.arrowTooltip){this.arrowEl.dom[this.tooltipType]=this.arrowTooltip;}},autoWidth:function(){if(this.el){var tbl=this.el.child("table:first");var tbl2=this.el.child("table:last");this.el.setWidth("auto");tbl.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var ib=this.btnEl;if(ib&&ib.getWidth()>20){ib.clip();ib.setWidth(Ext.util.TextMetrics.measure(ib,this.text).width+ib.getFrameWidth('lr'));}} +if(this.minWidth){if((tbl.getWidth()+tbl2.getWidth())'},onRender:function(ct,position){this.el=ct.createChild(Ext.apply({id:this.id},this.autoCreate),position);this.tr=this.el.child("tr",true);},afterRender:function(){T.superclass.afterRender.call(this);if(this.buttons){this.add.apply(this,this.buttons);delete this.buttons;}},add:function(){var a=arguments,l=a.length;for(var i=0;i"){this.addFill();}else{this.addText(el);}}else if(el.tagName){this.addElement(el);}else if(typeof el=="object"){if(el.xtype){this.addField(Ext.ComponentMgr.create(el,'button'));}else{this.addButton(el);}}}},addSeparator:function(){return this.addItem(new T.Separator());},addSpacer:function(){return this.addItem(new T.Spacer());},addFill:function(){return this.addItem(new T.Fill());},addElement:function(el){return this.addItem(new T.Item(el));},addItem:function(item){var td=this.nextBlock();this.initMenuTracking(item);item.render(td);this.items.add(item);return item;},addButton:function(config){if(Ext.isArray(config)){var buttons=[];for(var i=0,len=config.length;i=1&pageNum<=d.pages){this.field.dom.value=pageNum;}}}},beforeLoad:function(){if(this.rendered&&this.loading){this.loading.disable();}},doLoad:function(start){var o={},pn=this.paramNames;o[pn.start]=start;o[pn.limit]=this.pageSize;if(this.fireEvent('beforechange',this,o)!==false){this.store.load({params:o});}},changePage:function(page){this.doLoad(((page-1)*this.pageSize).constrain(0,this.store.getTotalCount()));},onClick:function(which){var store=this.store;switch(which){case"first":this.doLoad(0);break;case"prev":this.doLoad(Math.max(0,this.cursor-this.pageSize));break;case"next":this.doLoad(this.cursor+this.pageSize);break;case"last":var total=store.getTotalCount();var extra=total%this.pageSize;var lastStart=extra?(total-extra):total-this.pageSize;this.doLoad(lastStart);break;case"refresh":this.doLoad(this.cursor);break;}},unbind:function(store){store=Ext.StoreMgr.lookup(store);store.un("beforeload",this.beforeLoad,this);store.un("load",this.onLoad,this);store.un("loadexception",this.onLoadError,this);this.store=undefined;},bind:function(store){store=Ext.StoreMgr.lookup(store);store.on("beforeload",this.beforeLoad,this);store.on("load",this.onLoad,this);store.on("loadexception",this.onLoadError,this);this.store=store;if(store.getCount()>0){this.onLoad(store,null,{});}},onDestroy:function(){if(this.store){this.unbind(this.store);} +Ext.PagingToolbar.superclass.onDestroy.call(this);}});Ext.reg('paging',Ext.PagingToolbar); + +Ext.Resizable=function(el,config){this.el=Ext.get(el);if(config&&config.wrap){config.resizeChild=this.el;this.el=this.el.wrap(typeof config.wrap=="object"?config.wrap:{cls:"xresizable-wrap"});this.el.id=this.el.dom.id=config.resizeChild.id+"-rzwrap";this.el.setStyle("overflow","hidden");this.el.setPositioning(config.resizeChild.getPositioning());config.resizeChild.clearPositioning();if(!config.width||!config.height){var csize=config.resizeChild.getSize();this.el.setSize(csize.width,csize.height);} +if(config.pinned&&!config.adjustments){config.adjustments="auto";}} +this.proxy=this.el.createProxy({tag:"div",cls:"x-resizable-proxy",id:this.el.id+"-rzproxy"},Ext.getBody());this.proxy.unselectable();this.proxy.enableDisplayMode('block');Ext.apply(this,config);if(this.pinned){this.disableTrackOver=true;this.el.addClass("x-resizable-pinned");} +var position=this.el.getStyle("position");if(position!="absolute"&&position!="fixed"){this.el.setStyle("position","relative");} +if(!this.handles){this.handles='s,e,se';if(this.multiDirectional){this.handles+=',n,w';}} +if(this.handles=="all"){this.handles="n s e w ne nw se sw";} +var hs=this.handles.split(/\s*?[,;]\s*?| /);var ps=Ext.Resizable.positions;for(var i=0,len=hs.length;i0){if(m>(inc/2)){newValue=value+(inc-m);}else{newValue=value-m;}} +return Math.max(min,newValue);},resizeElement:function(){var box=this.proxy.getBox();if(this.updateBox){this.el.setBox(box,false,this.animate,this.duration,null,this.easing);}else{this.el.setSize(box.width,box.height,this.animate,this.duration,null,this.easing);} +this.updateChildSize();if(!this.dynamic){this.proxy.hide();} +return box;},constrain:function(v,diff,m,mx){if(v-diffmx){diff=v-mx;} +return diff;},onMouseMove:function(e){if(this.enabled&&this.activeHandle){try{if(this.resizeRegion&&!this.resizeRegion.contains(e.getPoint())){return;} +var curSize=this.curSize||this.startBox;var x=this.startBox.x,y=this.startBox.y;var ox=x,oy=y;var w=curSize.width,h=curSize.height;var ow=w,oh=h;var mw=this.minWidth,mh=this.minHeight;var mxw=this.maxWidth,mxh=this.maxHeight;var wi=this.widthIncrement;var hi=this.heightIncrement;var eventXY=e.getXY();var diffX=-(this.startPoint[0]-Math.max(this.minX,eventXY[0]));var diffY=-(this.startPoint[1]-Math.max(this.minY,eventXY[1]));var pos=this.activeHandle.position;switch(pos){case"east":w+=diffX;w=Math.min(Math.max(mw,w),mxw);break;case"south":h+=diffY;h=Math.min(Math.max(mh,h),mxh);break;case"southeast":w+=diffX;h+=diffY;w=Math.min(Math.max(mw,w),mxw);h=Math.min(Math.max(mh,h),mxh);break;case"north":diffY=this.constrain(h,diffY,mh,mxh);y+=diffY;h-=diffY;break;case"west":diffX=this.constrain(w,diffX,mw,mxw);x+=diffX;w-=diffX;break;case"northeast":w+=diffX;w=Math.min(Math.max(mw,w),mxw);diffY=this.constrain(h,diffY,mh,mxh);y+=diffY;h-=diffY;break;case"northwest":diffX=this.constrain(w,diffX,mw,mxw);diffY=this.constrain(h,diffY,mh,mxh);y+=diffY;h-=diffY;x+=diffX;w-=diffX;break;case"southwest":diffX=this.constrain(w,diffX,mw,mxw);h+=diffY;h=Math.min(Math.max(mh,h),mxh);x+=diffX;w-=diffX;break;} +var sw=this.snap(w,wi,mw);var sh=this.snap(h,hi,mh);if(sw!=w||sh!=h){switch(pos){case"northeast":y-=sh-h;break;case"north":y-=sh-h;break;case"southwest":x-=sw-w;break;case"west":x-=sw-w;break;case"northwest":x-=sw-w;y-=sh-h;break;} +w=sw;h=sh;} +if(this.preserveRatio){switch(pos){case"southeast":case"east":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);break;case"south":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"northeast":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"north":var tw=w;w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);x+=(tw-w)/2;break;case"southwest":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);var tw=w;w=ow*(h/oh);x+=tw-w;break;case"west":var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);y+=(th-h)/2;var tw=w;w=ow*(h/oh);x+=tw-w;break;case"northwest":var tw=w;var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);y+=th-h;x+=tw-w;break;}} +this.proxy.setBounds(x,y,w,h);if(this.dynamic){this.resizeElement();}}catch(e){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over");}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over");}},getEl:function(){return this.el;},getResizeChild:function(){return this.resizeChild;},destroy:function(removeEl){Ext.destroy(this.dd,this.overlay,this.proxy);this.overlay=null;this.proxy=null;var ps=Ext.Resizable.positions;for(var k in ps){if(typeof ps[k]!="function"&&this[ps[k]]){this[ps[k]].destroy();}} +if(removeEl){this.el.update("");Ext.destroy(this.el);this.el=null;} +this.purgeListeners();},syncHandleHeight:function(){var h=this.el.getHeight(true);if(this.west){this.west.el.setHeight(h);} +if(this.east){this.east.el.setHeight(h);}}});Ext.Resizable.positions={n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};Ext.Resizable.Handle=function(rz,pos,disableTrackOver,transparent){if(!this.tpl){var tpl=Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});tpl.compile();Ext.Resizable.Handle.prototype.tpl=tpl;} +this.position=pos;this.rz=rz;this.el=this.tpl.append(rz.el.dom,[this.position],true);this.el.unselectable();if(transparent){this.el.setOpacity(0);} +this.el.on("mousedown",this.onMouseDown,this);if(!disableTrackOver){this.el.on("mouseover",this.onMouseOver,this);this.el.on("mouseout",this.onMouseOut,this);}};Ext.Resizable.Handle.prototype={afterResize:function(rz){},onMouseDown:function(e){this.rz.onMouseDown(this,e);},onMouseOver:function(e){this.rz.handleOver(this,e);},onMouseOut:function(e){this.rz.handleOut(this,e);},destroy:function(){Ext.destroy(this.el);this.el=null;}}; + +Ext.Editor=function(field,config){this.field=field;Ext.Editor.superclass.constructor.call(this,config);};Ext.extend(Ext.Editor,Ext.Component,{value:"",alignment:"c-c?",shadow:"frame",constrain:false,swallowKeys:true,completeOnEnter:false,cancelOnEsc:false,updateEl:false,initComponent:function(){Ext.Editor.superclass.initComponent.call(this);this.addEvents("beforestartedit","startedit","beforecomplete","complete","canceledit","specialkey");},onRender:function(ct,position){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:ct,shim:this.shim,shadowOffset:4,id:this.id,constrain:this.constrain});this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!='title'){this.field.msgTarget='qtip';} +this.field.inEditor=true;this.field.render(this.el);if(Ext.isGecko){this.field.el.dom.setAttribute('autocomplete','off');} +this.field.on("specialkey",this.onSpecialKey,this);if(this.swallowKeys){this.field.el.swallowEvent(['keydown','keypress']);} +this.field.show();this.field.on("blur",this.onBlur,this);if(this.field.grow){this.field.on("autosize",this.el.sync,this.el,{delay:1});}},onSpecialKey:function(field,e){var key=e.getKey();if(this.completeOnEnter&&key==e.ENTER){e.stopEvent();this.completeEdit();}else if(this.cancelOnEsc&&key==e.ESC){this.cancelEdit();}else{this.fireEvent('specialkey',field,e);} +if(this.field.triggerBlur&&(key==e.ENTER||key==e.ESC||key==e.TAB)){this.field.triggerBlur();}},startEdit:function(el,value){if(this.editing){this.completeEdit();} +this.boundEl=Ext.get(el);var v=value!==undefined?value:this.boundEl.dom.innerHTML;if(!this.rendered){this.render(this.parentEl||document.body);} +if(this.fireEvent("beforestartedit",this,this.boundEl,v)===false){return;} +this.startValue=v;this.field.setValue(v);this.doAutoSize();this.el.alignTo(this.boundEl,this.alignment);this.editing=true;this.show();},doAutoSize:function(){if(this.autoSize){var sz=this.boundEl.getSize();switch(this.autoSize){case"width":this.setSize(sz.width,"");break;case"height":this.setSize("",sz.height);break;default:this.setSize(sz.width,sz.height);}}},setSize:function(w,h){delete this.field.lastSize;this.field.setSize(w,h);if(this.el){if(Ext.isGecko2||Ext.isOpera){this.el.setSize(w,h);} +this.el.sync();}},realign:function(){this.el.alignTo(this.boundEl,this.alignment);},completeEdit:function(remainVisible){if(!this.editing){return;} +var v=this.getValue();if(!this.field.isValid()){if(this.revertInvalid!==false){this.cancelEdit(remainVisible);} +return;} +if(String(v)===String(this.startValue)&&this.ignoreNoChange){this.hideEdit(remainVisible);return;} +if(this.fireEvent("beforecomplete",this,v,this.startValue)!==false){v=this.getValue();if(this.updateEl&&this.boundEl){this.boundEl.update(v);} +this.hideEdit(remainVisible);this.fireEvent("complete",this,v,this.startValue);}},onShow:function(){this.el.show();if(this.hideEl!==false){this.boundEl.hide();} +this.field.show();if(Ext.isIE&&!this.fixIEFocus){this.fixIEFocus=true;this.deferredFocus.defer(50,this);}else{this.field.focus();} +this.fireEvent("startedit",this.boundEl,this.startValue);},deferredFocus:function(){if(this.editing){this.field.focus();}},cancelEdit:function(remainVisible){if(this.editing){var v=this.getValue();this.setValue(this.startValue);this.hideEdit(remainVisible);this.fireEvent("canceledit",this,v,this.startValue);}},hideEdit:function(remainVisible){if(remainVisible!==true){this.editing=false;this.hide();}},onBlur:function(){if(this.allowBlur!==true&&this.editing){this.completeEdit();}},onHide:function(){if(this.editing){this.completeEdit();return;} +this.field.blur();if(this.field.collapse){this.field.collapse();} +this.el.hide();if(this.hideEl!==false){this.boundEl.show();}},setValue:function(v){this.field.setValue(v);},getValue:function(){return this.field.getValue();},beforeDestroy:function(){Ext.destroy(this.field);this.field=null;}});Ext.reg('editor',Ext.Editor); + +Ext.MessageBox=function(){var dlg,opt,mask,waitTimer;var bodyEl,msgEl,textboxEl,textareaEl,progressBar,pp,iconEl,spacerEl;var buttons,activeTextEl,bwidth,iconCls='';var handleButton=function(button){if(dlg.isVisible()){dlg.hide();handleHide();Ext.callback(opt.fn,opt.scope||window,[button,activeTextEl.dom.value,opt],1);}};var handleHide=function(){if(opt&&opt.cls){dlg.el.removeClass(opt.cls);} +progressBar.reset();};var handleEsc=function(d,k,e){if(opt&&opt.closable!==false){dlg.hide();handleHide();} +if(e){e.stopEvent();}};var updateButtons=function(b){var width=0;if(!b){buttons["ok"].hide();buttons["cancel"].hide();buttons["yes"].hide();buttons["no"].hide();return width;} +dlg.footer.dom.style.display='';for(var k in buttons){if(typeof buttons[k]!="function"){if(b[k]){buttons[k].show();buttons[k].setText(typeof b[k]=="string"?b[k]:Ext.MessageBox.buttonText[k]);width+=buttons[k].el.getWidth()+15;}else{buttons[k].hide();}}} +return width;};return{getDialog:function(titleText){if(!dlg){dlg=new Ext.Window({autoCreate:true,title:titleText,resizable:false,constrain:true,constrainHeader:true,minimizable:false,maximizable:false,stateful:false,modal:true,shim:true,buttonAlign:"center",width:400,height:100,minHeight:80,plain:true,footer:true,closable:true,close:function(){if(opt&&opt.buttons&&opt.buttons.no&&!opt.buttons.cancel){handleButton("no");}else{handleButton("cancel");}}});buttons={};var bt=this.buttonText;buttons["ok"]=dlg.addButton(bt["ok"],handleButton.createCallback("ok"));buttons["yes"]=dlg.addButton(bt["yes"],handleButton.createCallback("yes"));buttons["no"]=dlg.addButton(bt["no"],handleButton.createCallback("no"));buttons["cancel"]=dlg.addButton(bt["cancel"],handleButton.createCallback("cancel"));buttons["ok"].hideMode=buttons["yes"].hideMode=buttons["no"].hideMode=buttons["cancel"].hideMode='offsets';dlg.render(document.body);dlg.getEl().addClass('x-window-dlg');mask=dlg.mask;bodyEl=dlg.body.createChild({html:'

    '});iconEl=Ext.get(bodyEl.dom.firstChild);var contentEl=bodyEl.dom.childNodes[1];msgEl=Ext.get(contentEl.firstChild);textboxEl=Ext.get(contentEl.childNodes[2].firstChild);textboxEl.enableDisplayMode();textboxEl.addKeyListener([10,13],function(){if(dlg.isVisible()&&opt&&opt.buttons){if(opt.buttons.ok){handleButton("ok");}else if(opt.buttons.yes){handleButton("yes");}}});textareaEl=Ext.get(contentEl.childNodes[2].childNodes[1]);textareaEl.enableDisplayMode();progressBar=new Ext.ProgressBar({renderTo:bodyEl});bodyEl.createChild({cls:'x-clear'});} +return dlg;},updateText:function(text){if(!dlg.isVisible()&&!opt.width){dlg.setSize(this.maxWidth,100);} +msgEl.update(text||' ');var iw=iconCls!=''?(iconEl.getWidth()+iconEl.getMargins('lr')):0;var mw=msgEl.getWidth()+msgEl.getMargins('lr');var fw=dlg.getFrameWidth('lr');var bw=dlg.body.getFrameWidth('lr');if(Ext.isIE&&iw>0){iw+=3;} +var w=Math.max(Math.min(opt.width||iw+mw+fw+bw,this.maxWidth),Math.max(opt.minWidth||this.minWidth,bwidth||0));if(opt.prompt===true){activeTextEl.setWidth(w-iw-fw-bw);} +if(opt.progress===true||opt.wait===true){progressBar.setSize(w-iw-fw-bw);} +if(Ext.isIE&&w==bwidth){w+=4;} +dlg.setSize(w,'auto').center();return this;},updateProgress:function(value,progressText,msg){progressBar.updateProgress(value,progressText);if(msg){this.updateText(msg);} +return this;},isVisible:function(){return dlg&&dlg.isVisible();},hide:function(){var proxy=dlg?dlg.activeGhost:null;if(this.isVisible()||proxy){dlg.hide();handleHide();if(proxy){proxy.hide();}} +return this;},show:function(options){if(this.isVisible()){this.hide();} +opt=options;var d=this.getDialog(opt.title||" ");d.setTitle(opt.title||" ");var allowClose=(opt.closable!==false&&opt.progress!==true&&opt.wait!==true);d.tools.close.setDisplayed(allowClose);activeTextEl=textboxEl;opt.prompt=opt.prompt||(opt.multiline?true:false);if(opt.prompt){if(opt.multiline){textboxEl.hide();textareaEl.show();textareaEl.setHeight(typeof opt.multiline=="number"?opt.multiline:this.defaultTextHeight);activeTextEl=textareaEl;}else{textboxEl.show();textareaEl.hide();}}else{textboxEl.hide();textareaEl.hide();} +activeTextEl.dom.value=opt.value||"";if(opt.prompt){d.focusEl=activeTextEl;}else{var bs=opt.buttons;var db=null;if(bs&&bs.ok){db=buttons["ok"];}else if(bs&&bs.yes){db=buttons["yes"];} +if(db){d.focusEl=db;}} +if(opt.iconCls){d.setIconClass(opt.iconCls);} +this.setIcon(opt.icon);bwidth=updateButtons(opt.buttons);progressBar.setVisible(opt.progress===true||opt.wait===true);this.updateProgress(0,opt.progressText);this.updateText(opt.msg);if(opt.cls){d.el.addClass(opt.cls);} +d.proxyDrag=opt.proxyDrag===true;d.modal=opt.modal!==false;d.mask=opt.modal!==false?mask:false;if(!d.isVisible()){document.body.appendChild(dlg.el.dom);d.setAnimateTarget(opt.animEl);d.show(opt.animEl);} +d.on('show',function(){if(allowClose===true){d.keyMap.enable();}else{d.keyMap.disable();}},this,{single:true});if(opt.wait===true){progressBar.wait(opt.waitConfig);} +return this;},setIcon:function(icon){if(icon&&icon!=''){iconEl.removeClass('x-hidden');iconEl.replaceClass(iconCls,icon);bodyEl.addClass('x-dlg-icon');iconCls=icon;}else{iconEl.replaceClass(iconCls,'x-hidden');bodyEl.removeClass('x-dlg-icon') +iconCls='';} +return this;},progress:function(title,msg,progressText){this.show({title:title,msg:msg,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth,progressText:progressText});return this;},wait:function(msg,title,config){this.show({title:title,msg:msg,buttons:false,closable:false,wait:true,modal:true,minWidth:this.minProgressWidth,waitConfig:config});return this;},alert:function(title,msg,fn,scope){this.show({title:title,msg:msg,buttons:this.OK,fn:fn,scope:scope});return this;},confirm:function(title,msg,fn,scope){this.show({title:title,msg:msg,buttons:this.YESNO,fn:fn,scope:scope,icon:this.QUESTION});return this;},prompt:function(title,msg,fn,scope,multiline,value){this.show({title:title,msg:msg,buttons:this.OKCANCEL,fn:fn,minWidth:250,scope:scope,prompt:true,multiline:multiline,value:value});return this;},OK:{ok:true},CANCEL:{cancel:true},OKCANCEL:{ok:true,cancel:true},YESNO:{yes:true,no:true},YESNOCANCEL:{yes:true,no:true,cancel:true},INFO:'ext-mb-info',WARNING:'ext-mb-warning',QUESTION:'ext-mb-question',ERROR:'ext-mb-error',defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}};}();Ext.Msg=Ext.MessageBox; + +Ext.Tip=Ext.extend(Ext.Panel,{minWidth:40,maxWidth:300,shadow:"sides",defaultAlign:"tl-bl?",autoRender:true,quickShowInterval:250,frame:true,hidden:true,baseCls:'x-tip',floating:{shadow:true,shim:true,useDisplay:true,constrain:false},autoHeight:true,initComponent:function(){Ext.Tip.superclass.initComponent.call(this);if(this.closable&&!this.title){this.elements+=',header';}},afterRender:function(){Ext.Tip.superclass.afterRender.call(this);if(this.closable){this.addTool({id:'close',handler:this.hide,scope:this});}},showAt:function(xy){Ext.Tip.superclass.show.call(this);if(this.measureWidth!==false&&(!this.initialConfig||typeof this.initialConfig.width!='number')){this.doAutoWidth();} +if(this.constrainPosition){xy=this.el.adjustForConstraints(xy);} +this.setPagePosition(xy[0],xy[1]);},doAutoWidth:function(){var bw=this.body.getTextWidth();if(this.title){bw=Math.max(bw,this.header.child('span').getTextWidth(this.title));} +bw+=this.getFrameWidth()+(this.closable?20:0)+this.body.getPadding("lr");this.setWidth(bw.constrain(this.minWidth,this.maxWidth));if(Ext.isIE7&&!this.repainted){this.el.repaint();this.repainted=true;}},showBy:function(el,pos){if(!this.rendered){this.render(Ext.getBody());} +this.showAt(this.el.getAlignToXY(el,pos||this.defaultAlign));},initDraggable:function(){this.dd=new Ext.Tip.DD(this,typeof this.draggable=='boolean'?null:this.draggable);this.header.addClass('x-tip-draggable');}});Ext.Tip.DD=function(tip,config){Ext.apply(this,config);this.tip=tip;Ext.Tip.DD.superclass.constructor.call(this,tip.el.id,'WindowDD-'+tip.id);this.setHandleElId(tip.header.id);this.scroll=false;};Ext.extend(Ext.Tip.DD,Ext.dd.DD,{moveOnly:true,scroll:false,headerOffsets:[100,25],startDrag:function(){this.tip.el.disableShadow();},endDrag:function(e){this.tip.el.enableShadow(true);}}); + +Ext.ToolTip=Ext.extend(Ext.Tip,{showDelay:500,hideDelay:200,dismissDelay:5000,mouseOffset:[15,18],trackMouse:false,constrainPosition:true,initComponent:function(){Ext.ToolTip.superclass.initComponent.call(this);this.lastActive=new Date();this.initTarget();},initTarget:function(){if(this.target){this.target=Ext.get(this.target);this.target.on('mouseover',this.onTargetOver,this);this.target.on('mouseout',this.onTargetOut,this);this.target.on('mousemove',this.onMouseMove,this);}},onMouseMove:function(e){this.targetXY=e.getXY();if(!this.hidden&&this.trackMouse){this.setPagePosition(this.getTargetXY());}},getTargetXY:function(){return[this.targetXY[0]+this.mouseOffset[0],this.targetXY[1]+this.mouseOffset[1]];},onTargetOver:function(e){if(this.disabled||e.within(this.target.dom,true)){return;} +this.clearTimer('hide');this.targetXY=e.getXY();this.delayShow();},delayShow:function(){if(this.hidden&&!this.showTimer){if(this.lastActive.getElapsed()=ay){y=ay-h-5;} +return{x:x,y:y};},onDestroy:function(){Ext.ToolTip.superclass.onDestroy.call(this);Ext.getDoc().un('mousedown',this.onDocMouseDown,this);if(this.target){this.target.un('mouseover',this.onTargetOver,this);this.target.un('mouseout',this.onTargetOut,this);this.target.un('mousemove',this.onMouseMove,this);}}}); + +Ext.QuickTip=Ext.extend(Ext.ToolTip,{interceptTitles:false,tagConfig:{namespace:"ext",attribute:"qtip",width:"qwidth",target:"target",title:"qtitle",hide:"hide",cls:"qclass",align:"qalign"},initComponent:function(){this.target=this.target||Ext.getDoc();this.targets=this.targets||{};Ext.QuickTip.superclass.initComponent.call(this);},register:function(config){var cs=Ext.isArray(config)?config:arguments;for(var i=0,len=cs.length;i0){var f=function(success,node){if(success&&node){var n=node.findChild(attr,v);if(n){n.select();if(callback){callback(true,n);}}else if(callback){callback(false,n);}}else{if(callback){callback(false,n);}}};this.expandPath(keys.join(this.pathSeparator),attr,f);}else{this.root.select();if(callback){callback(true,this.root);}}},getTreeEl:function(){return this.body;},onRender:function(ct,position){Ext.tree.TreePanel.superclass.onRender.call(this,ct,position);this.el.addClass('x-tree');this.innerCt=this.body.createChild({tag:"ul",cls:"x-tree-root-ct "+ +(this.useArrows?'x-tree-arrows':this.lines?"x-tree-lines":"x-tree-no-lines")});},initEvents:function(){Ext.tree.TreePanel.superclass.initEvents.call(this);if(this.containerScroll){Ext.dd.ScrollManager.register(this.body);} +if((this.enableDD||this.enableDrop)&&!this.dropZone){this.dropZone=new Ext.tree.TreeDropZone(this,this.dropConfig||{ddGroup:this.ddGroup||"TreeDD",appendOnly:this.ddAppendOnly===true});} +if((this.enableDD||this.enableDrag)&&!this.dragZone){this.dragZone=new Ext.tree.TreeDragZone(this,this.dragConfig||{ddGroup:this.ddGroup||"TreeDD",scroll:this.ddScroll});} +this.getSelectionModel().init(this);},afterRender:function(){Ext.tree.TreePanel.superclass.afterRender.call(this);this.root.render();if(!this.rootVisible){this.root.renderChildren();}},onDestroy:function(){if(this.rendered){this.body.removeAllListeners();Ext.dd.ScrollManager.unregister(this.body);if(this.dropZone){this.dropZone.unreg();} +if(this.dragZone){this.dragZone.unreg();}} +this.root.destroy();this.nodeHash=null;Ext.tree.TreePanel.superclass.onDestroy.call(this);}});Ext.tree.TreePanel.nodeTypes={};Ext.reg('treepanel',Ext.tree.TreePanel); + +Ext.tree.TreeEventModel=function(tree){this.tree=tree;this.tree.on('render',this.initEvents,this);} +Ext.tree.TreeEventModel.prototype={initEvents:function(){var el=this.tree.getTreeEl();el.on('click',this.delegateClick,this);if(this.tree.trackMouseOver!==false){el.on('mouseover',this.delegateOver,this);el.on('mouseout',this.delegateOut,this);} +el.on('dblclick',this.delegateDblClick,this);el.on('contextmenu',this.delegateContextMenu,this);},getNode:function(e){var t;if(t=e.getTarget('.x-tree-node-el',10)){var id=Ext.fly(t,'_treeEvents').getAttributeNS('ext','tree-node-id');if(id){return this.tree.getNodeById(id);}} +return null;},getNodeTarget:function(e){var t=e.getTarget('.x-tree-node-icon',1);if(!t){t=e.getTarget('.x-tree-node-el',6);} +return t;},delegateOut:function(e,t){if(!this.beforeEvent(e)){return;} +if(e.getTarget('.x-tree-ec-icon',1)){var n=this.getNode(e);this.onIconOut(e,n);if(n==this.lastEcOver){delete this.lastEcOver;}} +if((t=this.getNodeTarget(e))&&!e.within(t,true)){this.onNodeOut(e,this.getNode(e));}},delegateOver:function(e,t){if(!this.beforeEvent(e)){return;} +if(this.lastEcOver){this.onIconOut(e,this.lastEcOver);delete this.lastEcOver;} +if(e.getTarget('.x-tree-ec-icon',1)){this.lastEcOver=this.getNode(e);this.onIconOver(e,this.lastEcOver);} +if(t=this.getNodeTarget(e)){this.onNodeOver(e,this.getNode(e));}},delegateClick:function(e,t){if(!this.beforeEvent(e)){return;} +if(e.getTarget('input[type=checkbox]',1)){this.onCheckboxClick(e,this.getNode(e));} +else if(e.getTarget('.x-tree-ec-icon',1)){this.onIconClick(e,this.getNode(e));} +else if(this.getNodeTarget(e)){this.onNodeClick(e,this.getNode(e));}},delegateDblClick:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeDblClick(e,this.getNode(e));}},delegateContextMenu:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeContextMenu(e,this.getNode(e));}},onNodeClick:function(e,node){node.ui.onClick(e);},onNodeOver:function(e,node){node.ui.onOver(e);},onNodeOut:function(e,node){node.ui.onOut(e);},onIconOver:function(e,node){node.ui.addClass('x-tree-ec-over');},onIconOut:function(e,node){node.ui.removeClass('x-tree-ec-over');},onIconClick:function(e,node){node.ui.ecClick(e);},onCheckboxClick:function(e,node){node.ui.onCheckChange(e);},onNodeDblClick:function(e,node){node.ui.onDblClick(e);},onNodeContextMenu:function(e,node){node.ui.onContextMenu(e);},beforeEvent:function(e){if(this.disabled){e.stopEvent();return false;} +return true;},disable:function(){this.disabled=true;},enable:function(){this.disabled=false;}}; + +Ext.tree.DefaultSelectionModel=function(config){this.selNode=null;this.addEvents("selectionchange","beforeselect");Ext.apply(this,config);Ext.tree.DefaultSelectionModel.superclass.constructor.call(this);};Ext.extend(Ext.tree.DefaultSelectionModel,Ext.util.Observable,{init:function(tree){this.tree=tree;tree.getTreeEl().on("keydown",this.onKeyDown,this);tree.on("click",this.onNodeClick,this);},onNodeClick:function(node,e){this.select(node);},select:function(node){var last=this.selNode;if(node==last){node.ui.onSelectedChange(true);}else if(this.fireEvent('beforeselect',this,node,last)!==false){if(last){last.ui.onSelectedChange(false);} +this.selNode=node;node.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,node,last);} +return node;},unselect:function(node){if(this.selNode==node){this.clearSelections();}},clearSelections:function(){var n=this.selNode;if(n){n.ui.onSelectedChange(false);this.selNode=null;this.fireEvent("selectionchange",this,null);} +return n;},getSelectedNode:function(){return this.selNode;},isSelected:function(node){return this.selNode==node;},selectPrevious:function(){var s=this.selNode||this.lastSelNode;if(!s){return null;} +var ps=s.previousSibling;if(ps){if(!ps.isExpanded()||ps.childNodes.length<1){return this.select(ps);}else{var lc=ps.lastChild;while(lc&&lc.isExpanded()&&lc.childNodes.length>0){lc=lc.lastChild;} +return this.select(lc);}}else if(s.parentNode&&(this.tree.rootVisible||!s.parentNode.isRoot)){return this.select(s.parentNode);} +return null;},selectNext:function(){var s=this.selNode||this.lastSelNode;if(!s){return null;} +if(s.firstChild&&s.isExpanded()){return this.select(s.firstChild);}else if(s.nextSibling){return this.select(s.nextSibling);}else if(s.parentNode){var newS=null;s.parentNode.bubble(function(){if(this.nextSibling){newS=this.getOwnerTree().selModel.select(this.nextSibling);return false;}});return newS;} +return null;},onKeyDown:function(e){var s=this.selNode||this.lastSelNode;var sm=this;if(!s){return;} +var k=e.getKey();switch(k){case e.DOWN:e.stopEvent();this.selectNext();break;case e.UP:e.stopEvent();this.selectPrevious();break;case e.RIGHT:e.preventDefault();if(s.hasChildNodes()){if(!s.isExpanded()){s.expand();}else if(s.firstChild){this.select(s.firstChild,e);}} +break;case e.LEFT:e.preventDefault();if(s.hasChildNodes()&&s.isExpanded()){s.collapse();}else if(s.parentNode&&(this.tree.rootVisible||s.parentNode!=this.tree.getRootNode())){this.select(s.parentNode,e);} +break;};}});Ext.tree.MultiSelectionModel=function(config){this.selNodes=[];this.selMap={};this.addEvents("selectionchange");Ext.apply(this,config);Ext.tree.MultiSelectionModel.superclass.constructor.call(this);};Ext.extend(Ext.tree.MultiSelectionModel,Ext.util.Observable,{init:function(tree){this.tree=tree;tree.getTreeEl().on("keydown",this.onKeyDown,this);tree.on("click",this.onNodeClick,this);},onNodeClick:function(node,e){if(e.ctrlKey&&this.isSelected(node)){this.unselect(node);}else{this.select(node,e,e.ctrlKey);}},select:function(node,e,keepExisting){if(keepExisting!==true){this.clearSelections(true);} +if(this.isSelected(node)){this.lastSelNode=node;return node;} +this.selNodes.push(node);this.selMap[node.id]=node;this.lastSelNode=node;node.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,this.selNodes);return node;},unselect:function(node){if(this.selMap[node.id]){node.ui.onSelectedChange(false);var sn=this.selNodes;var index=sn.indexOf(node);if(index!=-1){this.selNodes.splice(index,1);} +delete this.selMap[node.id];this.fireEvent("selectionchange",this,this.selNodes);}},clearSelections:function(suppressEvent){var sn=this.selNodes;if(sn.length>0){for(var i=0,len=sn.length;i
    ','',this.indentMarkup,"",'','',cb?('':'/>')):'','',n.text,"
    ",'',""].join('');var nel;if(bulkRender!==true&&n.nextSibling&&(nel=n.nextSibling.ui.getEl())){this.wrap=Ext.DomHelper.insertHtml("beforeBegin",nel,buf);}else{this.wrap=Ext.DomHelper.insertHtml("beforeEnd",targetNode,buf);} +this.elNode=this.wrap.childNodes[0];this.ctNode=this.wrap.childNodes[1];var cs=this.elNode.childNodes;this.indentNode=cs[0];this.ecNode=cs[1];this.iconNode=cs[2];var index=3;if(cb){this.checkbox=cs[3];this.checkbox.defaultChecked=this.checkbox.checked;index++;} +this.anchor=cs[index];this.textNode=cs[index].firstChild;},getAnchor:function(){return this.anchor;},getTextEl:function(){return this.textNode;},getIconEl:function(){return this.iconNode;},isChecked:function(){return this.checkbox?this.checkbox.checked:false;},updateExpandIcon:function(){if(this.rendered){var n=this.node,c1,c2;var cls=n.isLast()?"x-tree-elbow-end":"x-tree-elbow";if(n.isExpandable()){if(n.expanded){cls+="-minus";c1="x-tree-node-collapsed";c2="x-tree-node-expanded";}else{cls+="-plus";c1="x-tree-node-expanded";c2="x-tree-node-collapsed";} +if(this.wasLeaf){this.removeClass("x-tree-node-leaf");this.wasLeaf=false;} +if(this.c1!=c1||this.c2!=c2){Ext.fly(this.elNode).replaceClass(c1,c2);this.c1=c1;this.c2=c2;}}else{if(!this.wasLeaf){Ext.fly(this.elNode).replaceClass("x-tree-node-expanded","x-tree-node-leaf");delete this.c1;delete this.c2;this.wasLeaf=true;}} +var ecc="x-tree-ec-icon "+cls;if(this.ecc!=ecc){this.ecNode.className=ecc;this.ecc=ecc;}}},getChildIndent:function(){if(!this.childIndent){var buf=[];var p=this.node;while(p){if(!p.isRoot||(p.isRoot&&p.ownerTree.rootVisible)){if(!p.isLast()){buf.unshift('');}else{buf.unshift('');}} +p=p.parentNode;} +this.childIndent=buf.join("");} +return this.childIndent;},renderIndent:function(){if(this.rendered){var indent="";var p=this.node.parentNode;if(p){indent=p.ui.getChildIndent();} +if(this.indentMarkup!=indent){this.indentNode.innerHTML=indent;this.indentMarkup=indent;} +this.updateExpandIcon();}},destroy:function(){if(this.elNode){Ext.dd.Registry.unregister(this.elNode.id);} +delete this.elNode;delete this.ctNode;delete this.indentNode;delete this.ecNode;delete this.iconNode;delete this.checkbox;delete this.anchor;delete this.textNode;if(this.holder){delete this.wrap;Ext.removeNode(this.holder);delete this.holder;}else{Ext.removeNode(this.wrap);delete this.wrap;}}};Ext.tree.RootTreeNodeUI=Ext.extend(Ext.tree.TreeNodeUI,{render:function(){if(!this.rendered){var targetNode=this.node.ownerTree.innerCt.dom;this.node.expanded=true;targetNode.innerHTML='
    ';this.wrap=this.ctNode=targetNode.firstChild;}},collapse:Ext.emptyFn,expand:Ext.emptyFn}); + +Ext.tree.TreeLoader=function(config){this.baseParams={};Ext.apply(this,config);this.addEvents("beforeload","load","loadexception");Ext.tree.TreeLoader.superclass.constructor.call(this);};Ext.extend(Ext.tree.TreeLoader,Ext.util.Observable,{uiProviders:{},clearOnLoad:true,load:function(node,callback){if(this.clearOnLoad){while(node.firstChild){node.removeChild(node.firstChild);}} +if(this.doPreload(node)){if(typeof callback=="function"){callback();}}else if(this.dataUrl||this.url){this.requestData(node,callback);}},doPreload:function(node){if(node.attributes.children){if(node.childNodes.length<1){var cs=node.attributes.children;node.beginUpdate();for(var i=0,len=cs.length;iv2){return dsc?-1:+1;}else{return 0;}};};Ext.tree.TreeSorter.prototype={doSort:function(node){node.sort(this.sortFn);},compareNodes:function(n1,n2){return(n1.text.toUpperCase()>n2.text.toUpperCase()?1:-1);},updateSort:function(tree,node){if(node.childrenRendered){this.doSort.defer(1,this,[node]);}},updateSortParent:function(node){var p=node.parentNode;if(p&&p.childrenRendered){this.doSort.defer(1,this,[p]);}}}; + +if(Ext.dd.DropZone){Ext.tree.TreeDropZone=function(tree,config){this.allowParentInsert=config.allowParentInsert||false;this.allowContainerDrop=config.allowContainerDrop||false;this.appendOnly=config.appendOnly||false;Ext.tree.TreeDropZone.superclass.constructor.call(this,tree.getTreeEl(),config);this.tree=tree;this.dragOverData={};this.lastInsertClass="x-tree-no-status";};Ext.extend(Ext.tree.TreeDropZone,Ext.dd.DropZone,{ddGroup:"TreeDD",expandDelay:1000,expandNode:function(node){if(node.hasChildNodes()&&!node.isExpanded()){node.expand(false,null,this.triggerCacheRefresh.createDelegate(this));}},queueExpand:function(node){this.expandProcId=this.expandNode.defer(this.expandDelay,this,[node]);},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);this.expandProcId=false;}},isValidDropPoint:function(n,pt,dd,e,data){if(!n||!data){return false;} +var targetNode=n.node;var dropNode=data.node;if(!(targetNode&&targetNode.isTarget&&pt)){return false;} +if(pt=="append"&&targetNode.allowChildren===false){return false;} +if((pt=="above"||pt=="below")&&(targetNode.parentNode&&targetNode.parentNode.allowChildren===false)){return false;} +if(dropNode&&(targetNode==dropNode||dropNode.contains(targetNode))){return false;} +var overEvent=this.dragOverData;overEvent.tree=this.tree;overEvent.target=targetNode;overEvent.data=data;overEvent.point=pt;overEvent.source=dd;overEvent.rawEvent=e;overEvent.dropNode=dropNode;overEvent.cancel=false;var result=this.tree.fireEvent("nodedragover",overEvent);return overEvent.cancel===false&&result!==false;},getDropPoint:function(e,n,dd){var tn=n.node;if(tn.isRoot){return tn.allowChildren!==false?"append":false;} +var dragEl=n.ddel;var t=Ext.lib.Dom.getY(dragEl),b=t+dragEl.offsetHeight;var y=Ext.lib.Event.getPageY(e);var noAppend=tn.allowChildren===false||tn.isLeaf();if(this.appendOnly||tn.parentNode.allowChildren===false){return noAppend?false:"append";} +var noBelow=false;if(!this.allowParentInsert){noBelow=tn.hasChildNodes()&&tn.isExpanded();} +var q=(b-t)/(noAppend?2:3);if(y>=t&&y<(t+q)){return"above";}else if(!noBelow&&(noAppend||y>=b-q&&y<=b)){return"below";}else{return"append";}},onNodeEnter:function(n,dd,e,data){this.cancelExpand();},onContainerOver:function(dd,e,data){if(this.allowContainerDrop&&this.isValidDropPoint({ddel:this.tree.getRootNode().ui.elNode,node:this.tree.getRootNode()},"append",dd,e,data)){return this.dropAllowed;} +return this.dropNotAllowed;},onNodeOver:function(n,dd,e,data){var pt=this.getDropPoint(e,n,dd);var node=n.node;if(!this.expandProcId&&pt=="append"&&node.hasChildNodes()&&!n.node.isExpanded()){this.queueExpand(node);}else if(pt!="append"){this.cancelExpand();} +var returnCls=this.dropNotAllowed;if(this.isValidDropPoint(n,pt,dd,e,data)){if(pt){var el=n.ddel;var cls;if(pt=="above"){returnCls=n.node.isFirst()?"x-tree-drop-ok-above":"x-tree-drop-ok-between";cls="x-tree-drag-insert-above";}else if(pt=="below"){returnCls=n.node.isLast()?"x-tree-drop-ok-below":"x-tree-drop-ok-between";cls="x-tree-drag-insert-below";}else{returnCls="x-tree-drop-ok-append";cls="x-tree-drag-append";} +if(this.lastInsertClass!=cls){Ext.fly(el).replaceClass(this.lastInsertClass,cls);this.lastInsertClass=cls;}}} +return returnCls;},onNodeOut:function(n,dd,e,data){this.cancelExpand();this.removeDropIndicators(n);},onNodeDrop:function(n,dd,e,data){var point=this.getDropPoint(e,n,dd);var targetNode=n.node;targetNode.ui.startDrop();if(!this.isValidDropPoint(n,point,dd,e,data)){targetNode.ui.endDrop();return false;} +var dropNode=data.node||(dd.getTreeNode?dd.getTreeNode(data,targetNode,point,e):null);return this.processDrop(targetNode,data,point,dd,e,dropNode);},onContainerDrop:function(dd,e,data){if(this.allowContainerDrop&&this.isValidDropPoint({ddel:this.tree.getRootNode().ui.elNode,node:this.tree.getRootNode()},"append",dd,e,data)){var targetNode=this.tree.getRootNode();targetNode.ui.startDrop();var dropNode=data.node||(dd.getTreeNode?dd.getTreeNode(data,targetNode,'append',e):null);return this.processDrop(targetNode,data,'append',dd,e,dropNode);} +return false;},processDrop:function(target,data,point,dd,e,dropNode){var dropEvent={tree:this.tree,target:target,data:data,point:point,source:dd,rawEvent:e,dropNode:dropNode,cancel:!dropNode,dropStatus:false};var retval=this.tree.fireEvent("beforenodedrop",dropEvent);if(retval===false||dropEvent.cancel===true||!dropEvent.dropNode){target.ui.endDrop();return dropEvent.dropStatus;} +target=dropEvent.target;if(point=='append'&&!target.isExpanded()){target.expand(false,null,function(){this.completeDrop(dropEvent);}.createDelegate(this));}else{this.completeDrop(dropEvent);} +return true;},completeDrop:function(de){var ns=de.dropNode,p=de.point,t=de.target;if(!Ext.isArray(ns)){ns=[ns];} +var n;for(var i=0,len=ns.length;ind.offsetLeft){td.scrollLeft=nd.offsetLeft;} +var w=Math.min(this.maxWidth,(td.clientWidth>20?td.clientWidth:td.offsetWidth)-Math.max(0,nd.offsetLeft-td.scrollLeft)-5);this.setSize(w,'');},triggerEdit:function(node,defer){this.completeEdit();if(node.attributes.editable!==false){this.editNode=node;if(this.tree.autoScroll){Ext.fly(node.ui.getEl()).scrollIntoView(this.tree.body);} +var value=node.text||'';if(!Ext.isGecko&&Ext.isEmpty(node.text)){node.setText(' ');} +this.autoEditTimer=this.startEdit.defer(this.editDelay,this,[node.ui.textNode,value]);return false;}},bindScroll:function(){this.tree.getTreeEl().on('scroll',this.cancelEdit,this);},beforeNodeClick:function(node,e){clearTimeout(this.autoEditTimer);if(this.tree.getSelectionModel().isSelected(node)){e.stopEvent();return this.triggerEdit(node);}},onNodeDblClick:function(node,e){clearTimeout(this.autoEditTimer);},updateNode:function(ed,value){this.tree.getTreeEl().un('scroll',this.cancelEdit,this);this.editNode.setText(value);},onHide:function(){Ext.tree.TreeEditor.superclass.onHide.call(this);if(this.editNode){this.editNode.ui.focus.defer(50,this.editNode.ui);}},onSpecialKey:function(field,e){var k=e.getKey();if(k==e.ESC){e.stopEvent();this.cancelEdit();}else if(k==e.ENTER&&!e.hasModifier()){e.stopEvent();this.completeEdit();}}}); + +Ext.menu.Menu=function(config){if(Ext.isArray(config)){config={items:config};} +Ext.apply(this,config);this.id=this.id||Ext.id();this.addEvents('beforeshow','beforehide','show','hide','click','mouseover','mouseout','itemclick');Ext.menu.MenuMgr.register(this);Ext.menu.Menu.superclass.constructor.call(this);var mis=this.items;this.items=new Ext.util.MixedCollection();if(mis){this.add.apply(this,mis);}};Ext.extend(Ext.menu.Menu,Ext.util.Observable,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,ignoreParentClicks:false,hidden:true,createEl:function(){return new Ext.Layer({cls:"x-menu",shadow:this.shadow,constrain:false,parentEl:this.parentEl||document.body,zindex:15000});},render:function(){if(this.el){return;} +var el=this.el=this.createEl();if(!this.keyNav){this.keyNav=new Ext.menu.MenuNav(this);} +if(this.plain){el.addClass("x-menu-plain");} +if(this.cls){el.addClass(this.cls);} +this.focusEl=el.createChild({tag:"a",cls:"x-menu-focus",href:"#",onclick:"return false;",tabIndex:"-1"});var ul=el.createChild({tag:"ul",cls:"x-menu-list"});ul.on("click",this.onClick,this);ul.on("mouseover",this.onMouseOver,this);ul.on("mouseout",this.onMouseOut,this);this.items.each(function(item){var li=document.createElement("li");li.className="x-menu-list-item";ul.dom.appendChild(li);item.render(li,this);},this);this.ul=ul;this.autoWidth();},autoWidth:function(){var el=this.el,ul=this.ul;if(!el){return;} +var w=this.width;if(w){el.setWidth(w);}else if(Ext.isIE&&!Ext.isIE8){el.setWidth(this.minWidth);var t=el.dom.offsetWidth;el.setWidth(ul.getWidth()+el.getFrameWidth("lr"));}},delayAutoWidth:function(){if(this.el){if(!this.awTask){this.awTask=new Ext.util.DelayedTask(this.autoWidth,this);} +this.awTask.delay(20);}},findTargetItem:function(e){var t=e.getTarget(".x-menu-list-item",this.ul,true);if(t&&t.menuItemId){return this.items.get(t.menuItemId);}},onClick:function(e){var t;if(t=this.findTargetItem(e)){if(t.menu&&this.ignoreParentClicks){t.expandMenu();}else{t.onClick(e);this.fireEvent("click",this,t,e);}}},setActiveItem:function(item,autoExpand){if(item!=this.activeItem){if(this.activeItem){this.activeItem.deactivate();} +this.activeItem=item;item.activate(autoExpand);}else if(autoExpand){item.expandMenu();}},tryActivate:function(start,step){var items=this.items;for(var i=start,len=items.length;i>=0&&i0){hideAll();}});} +function hideAll(){if(active&&active.length>0){var c=active.clone();c.each(function(m){m.hide();});}} +function onHide(m){active.remove(m);if(active.length<1){Ext.getDoc().un("mousedown",onMouseDown);attached=false;}} +function onShow(m){var last=active.last();lastShow=new Date();active.add(m);if(!attached){Ext.getDoc().on("mousedown",onMouseDown);attached=true;} +if(m.parentMenu){m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"),10)+3);m.parentMenu.activeChild=m;}else if(last&&last.isVisible()){m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"),10)+3);}} +function onBeforeHide(m){if(m.activeChild){m.activeChild.hide();} +if(m.autoHideTimer){clearTimeout(m.autoHideTimer);delete m.autoHideTimer;}} +function onBeforeShow(m){var pm=m.parentMenu;if(!pm&&!m.allowOtherMenus){hideAll();}else if(pm&&pm.activeChild){pm.activeChild.hide();}} +function onMouseDown(e){if(lastShow.getElapsed()>50&&active.length>0&&!e.getTarget(".x-menu")){hideAll();}} +function onBeforeCheck(mi,state){if(state){var g=groups[mi.group];for(var i=0,l=g.length;i{1}',this.icon||Ext.BLANK_IMAGE_URL,this.itemText||this.text,this.iconCls||'');this.el=el;Ext.menu.Item.superclass.onRender.call(this,container,position);},setText:function(text){this.text=text;if(this.rendered){this.el.update(String.format('{1}',this.icon||Ext.BLANK_IMAGE_URL,this.text,this.iconCls||''));this.parentMenu.autoWidth();}},setIconClass:function(cls){var oldCls=this.iconCls;this.iconCls=cls;if(this.rendered){this.el.child('img.x-menu-item-icon').replaceClass(oldCls,this.iconCls);}},beforeDestroy:function(){if(this.menu){this.menu.destroy();} +Ext.menu.Item.superclass.beforeDestroy.call(this);},handleClick:function(e){if(!this.href){e.stopEvent();} +Ext.menu.Item.superclass.handleClick.apply(this,arguments);},activate:function(autoExpand){if(Ext.menu.Item.superclass.activate.apply(this,arguments)){this.focus();if(autoExpand){this.expandMenu();}} +return true;},shouldDeactivate:function(e){if(Ext.menu.Item.superclass.shouldDeactivate.call(this,e)){if(this.menu&&this.menu.isVisible()){return!this.menu.getEl().getRegion().contains(e.getPoint());} +return true;} +return false;},deactivate:function(){Ext.menu.Item.superclass.deactivate.apply(this,arguments);this.hideMenu();},expandMenu:function(autoActivate){if(!this.disabled&&this.menu){clearTimeout(this.hideTimer);delete this.hideTimer;if(!this.menu.isVisible()&&!this.showTimer){this.showTimer=this.deferExpand.defer(this.showDelay,this,[autoActivate]);}else if(this.menu.isVisible()&&autoActivate){this.menu.tryActivate(0,1);}}},deferExpand:function(autoActivate){delete this.showTimer;this.menu.show(this.container,this.parentMenu.subMenuAlign||"tl-tr?",this.parentMenu);if(autoActivate){this.menu.tryActivate(0,1);}},hideMenu:function(){clearTimeout(this.showTimer);delete this.showTimer;if(!this.hideTimer&&this.menu&&this.menu.isVisible()){this.hideTimer=this.deferHide.defer(this.hideDelay,this);}},deferHide:function(){delete this.hideTimer;if(this.menu.over){this.parentMenu.setActiveItem(this,false);}else{this.menu.hide();}}}); + +Ext.menu.CheckItem=function(config){Ext.menu.CheckItem.superclass.constructor.call(this,config);this.addEvents("beforecheckchange","checkchange");if(this.checkHandler){this.on('checkchange',this.checkHandler,this.scope);} +Ext.menu.MenuMgr.registerCheckable(this);};Ext.extend(Ext.menu.CheckItem,Ext.menu.Item,{itemCls:"x-menu-item x-menu-check-item",groupClass:"x-menu-group-item",checked:false,ctype:"Ext.menu.CheckItem",onRender:function(c){Ext.menu.CheckItem.superclass.onRender.apply(this,arguments);if(this.group){this.el.addClass(this.groupClass);} +if(this.checked){this.checked=false;this.setChecked(true,true);}},destroy:function(){Ext.menu.MenuMgr.unregisterCheckable(this);Ext.menu.CheckItem.superclass.destroy.apply(this,arguments);},setChecked:function(state,suppressEvent){if(this.checked!=state&&this.fireEvent("beforecheckchange",this,state)!==false){if(this.container){this.container[state?"addClass":"removeClass"]("x-menu-item-checked");} +this.checked=state;if(suppressEvent!==true){this.fireEvent("checkchange",this,state);}}},handleClick:function(e){if(!this.disabled&&!(this.checked&&this.group)){this.setChecked(!this.checked);} +Ext.menu.CheckItem.superclass.handleClick.apply(this,arguments);}}); + +Ext.menu.Adapter=function(component,config){Ext.menu.Adapter.superclass.constructor.call(this,config);this.component=component;};Ext.extend(Ext.menu.Adapter,Ext.menu.BaseItem,{canActivate:true,onRender:function(container,position){this.component.render(container);this.el=this.component.getEl();},activate:function(){if(this.disabled){return false;} +this.component.focus();this.fireEvent("activate",this);return true;},deactivate:function(){this.fireEvent("deactivate",this);},disable:function(){this.component.disable();Ext.menu.Adapter.superclass.disable.call(this);},enable:function(){this.component.enable();Ext.menu.Adapter.superclass.enable.call(this);}}); + +Ext.menu.DateItem=function(config){Ext.menu.DateItem.superclass.constructor.call(this,new Ext.DatePicker(config),config);this.picker=this.component;this.picker.purgeListeners();this.addEvents('select');this.picker.on("render",function(picker){picker.getEl().swallowEvent("click");picker.container.addClass("x-menu-date-item");});this.picker.on("select",this.onSelect,this);};Ext.extend(Ext.menu.DateItem,Ext.menu.Adapter,{onSelect:function(picker,date){this.fireEvent("select",this,date,picker);Ext.menu.DateItem.superclass.handleClick.call(this);}}); + +Ext.menu.ColorItem=function(config){Ext.menu.ColorItem.superclass.constructor.call(this,new Ext.ColorPalette(config),config);this.palette=this.component;this.palette.purgeListeners();this.relayEvents(this.palette,["select"]);if(this.selectHandler){this.on('select',this.selectHandler,this.scope);}};Ext.extend(Ext.menu.ColorItem,Ext.menu.Adapter); + +Ext.menu.DateMenu=function(config){Ext.menu.DateMenu.superclass.constructor.call(this,config);this.plain=true;var di=new Ext.menu.DateItem(config);this.add(di);this.picker=di.picker;this.relayEvents(di,["select"]);this.on('beforeshow',function(){if(this.picker){this.picker.hideMonthPicker(true);}},this);};Ext.extend(Ext.menu.DateMenu,Ext.menu.Menu,{cls:'x-date-menu',beforeDestroy:function(){this.picker.destroy();}}); + +Ext.menu.ColorMenu=function(config){Ext.menu.ColorMenu.superclass.constructor.call(this,config);this.plain=true;var ci=new Ext.menu.ColorItem(config);this.add(ci);this.palette=ci.palette;this.relayEvents(ci,["select"]);};Ext.extend(Ext.menu.ColorMenu,Ext.menu.Menu,{beforeDestroy:function(){this.palette.destroy();}}); + +Ext.form.Field=Ext.extend(Ext.BoxComponent,{invalidClass:"x-form-invalid",invalidText:"The value in this field is invalid",focusClass:"x-form-focus",validationEvent:"keyup",validateOnBlur:true,validationDelay:250,defaultAutoCreate:{tag:"input",type:"text",size:"20",autocomplete:"off"},fieldClass:"x-form-field",msgTarget:'qtip',msgFx:'normal',readOnly:false,disabled:false,isFormField:true,hasFocus:false,initComponent:function(){Ext.form.Field.superclass.initComponent.call(this);this.addEvents('focus','blur','specialkey','change','invalid','valid');},getName:function(){return this.rendered&&this.el.dom.name?this.el.dom.name:this.name||this.id||'';},onRender:function(ct,position){Ext.form.Field.superclass.onRender.call(this,ct,position);if(!this.el){var cfg=this.getAutoCreate();if(!cfg.name){cfg.name=this.name||this.id;} +if(this.inputType){cfg.type=this.inputType;} +this.el=ct.createChild(cfg,position);} +var type=this.el.dom.type;if(type){if(type=='password'){type='text';} +this.el.addClass('x-form-'+type);} +if(this.readOnly){this.el.dom.readOnly=true;} +if(this.tabIndex!==undefined){this.el.dom.setAttribute('tabIndex',this.tabIndex);} +this.el.addClass([this.fieldClass,this.cls]);},initValue:function(){if(this.value!==undefined){this.setValue(this.value);}else if(!Ext.isEmpty(this.el.dom.value)&&this.el.dom.value!=this.emptyText){this.setValue(this.el.dom.value);} +this.originalValue=this.getValue();},isDirty:function(){if(this.disabled||!this.rendered){return false;} +return String(this.getValue())!==String(this.originalValue);},afterRender:function(){Ext.form.Field.superclass.afterRender.call(this);this.initEvents();this.initValue();},fireKey:function(e){if(e.isSpecialKey()){this.fireEvent("specialkey",this,e);}},reset:function(){this.setValue(this.originalValue);this.clearInvalid();},initEvents:function(){this.el.on(Ext.isIE||(Ext.isWebKit&&!Ext.isSafari2)?"keydown":"keypress",this.fireKey,this);this.el.on("focus",this.onFocus,this);var o=this.inEditor&&Ext.isWindows&&Ext.isGecko?{buffer:10}:null;this.el.on("blur",this.onBlur,this,o);},onFocus:function(){if(this.focusClass){this.el.addClass(this.focusClass);} +if(!this.hasFocus){this.hasFocus=true;this.startValue=this.getValue();this.fireEvent("focus",this);}},beforeBlur:Ext.emptyFn,onBlur:function(){this.beforeBlur();if(this.focusClass){this.el.removeClass(this.focusClass);} +this.hasFocus=false;if(this.validationEvent!==false&&this.validateOnBlur&&this.validationEvent!="blur"){this.validate();} +var v=this.getValue();if(String(v)!==String(this.startValue)){this.fireEvent('change',this,v,this.startValue);} +this.fireEvent("blur",this);},isValid:function(preventMark){if(this.disabled){return true;} +var restore=this.preventMark;this.preventMark=preventMark===true;var v=this.validateValue(this.processValue(this.getRawValue()));this.preventMark=restore;return v;},validate:function(){if(this.disabled||this.validateValue(this.processValue(this.getRawValue()))){this.clearInvalid();return true;} +return false;},processValue:function(value){return value;},validateValue:function(value){return true;},markInvalid:function(msg){if(!this.rendered||this.preventMark){return;} +this.el.addClass(this.invalidClass);msg=msg||this.invalidText;switch(this.msgTarget){case'qtip':this.el.dom.qtip=msg;this.el.dom.qclass='x-form-invalid-tip';if(Ext.QuickTips){Ext.QuickTips.enable();} +break;case'title':this.el.dom.title=msg;break;case'under':if(!this.errorEl){var elp=this.getErrorCt();if(!elp){this.el.dom.title=msg;break;} +this.errorEl=elp.createChild({cls:'x-form-invalid-msg'});this.errorEl.setWidth(elp.getWidth(true)-20);} +this.errorEl.update(msg);Ext.form.Field.msgFx[this.msgFx].show(this.errorEl,this);break;case'side':if(!this.errorIcon){var elp=this.getErrorCt();if(!elp){this.el.dom.title=msg;break;} +this.errorIcon=elp.createChild({cls:'x-form-invalid-icon'});} +this.alignErrorIcon();this.errorIcon.dom.qtip=msg;this.errorIcon.dom.qclass='x-form-invalid-tip';this.errorIcon.show();this.on('resize',this.alignErrorIcon,this);break;default:var t=Ext.getDom(this.msgTarget);t.innerHTML=msg;t.style.display=this.msgDisplay;break;} +this.fireEvent('invalid',this,msg);},getErrorCt:function(){return this.el.findParent('.x-form-element',5,true)||this.el.findParent('.x-form-field-wrap',5,true);},alignErrorIcon:function(){this.errorIcon.alignTo(this.el,'tl-tr',[2,0]);},clearInvalid:function(){if(!this.rendered||this.preventMark){return;} +this.el.removeClass(this.invalidClass);switch(this.msgTarget){case'qtip':this.el.dom.qtip='';break;case'title':this.el.dom.title='';break;case'under':if(this.errorEl){Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl,this);} +break;case'side':if(this.errorIcon){this.errorIcon.dom.qtip='';this.errorIcon.hide();this.un('resize',this.alignErrorIcon,this);} +break;default:var t=Ext.getDom(this.msgTarget);t.innerHTML='';t.style.display='none';break;} +this.fireEvent('valid',this);},getRawValue:function(){var v=this.rendered?this.el.getValue():Ext.value(this.value,'');if(v===this.emptyText){v='';} +return v;},getValue:function(){if(!this.rendered){return this.value;} +var v=this.el.getValue();if(v===this.emptyText||v===undefined){v='';} +return v;},setRawValue:function(v){return this.el.dom.value=(v===null||v===undefined?'':v);},setValue:function(v){this.value=v;if(this.rendered){this.el.dom.value=(v===null||v===undefined?'':v);this.validate();}},adjustSize:function(w,h){var s=Ext.form.Field.superclass.adjustSize.call(this,w,h);s.width=this.adjustWidth(this.el.dom.tagName,s.width);return s;},adjustWidth:function(tag,w){tag=tag.toLowerCase();if(typeof w=='number'&&!Ext.isWebKit){if(Ext.isIE&&(tag=='input'||tag=='textarea')){if(tag=='input'&&!Ext.isStrict){return this.inEditor?w:w-3;} +if(tag=='input'&&Ext.isStrict){return w-(Ext.isIE6?4:1);} +if(tag=='textarea'&&Ext.isStrict){return w-2;}}else if(Ext.isOpera&&Ext.isStrict){if(tag=='input'){return w+2;} +if(tag=='textarea'){return w-2;}}} +return w;}});Ext.form.MessageTargets={'qtip':{mark:function(f){this.el.dom.qtip=msg;this.el.dom.qclass='x-form-invalid-tip';if(Ext.QuickTips){Ext.QuickTips.enable();}},clear:function(f){this.el.dom.qtip='';}},'title':{mark:function(f){this.el.dom.title=msg;},clear:function(f){this.el.dom.title='';}},'under':{mark:function(f){if(!this.errorEl){var elp=this.getErrorCt();if(!elp){this.el.dom.title=msg;return;} +this.errorEl=elp.createChild({cls:'x-form-invalid-msg'});this.errorEl.setWidth(elp.getWidth(true)-20);} +this.errorEl.update(msg);Ext.form.Field.msgFx[this.msgFx].show(this.errorEl,this);},clear:function(f){if(this.errorEl){Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl,this);}else{this.el.dom.title='';}}},'side':{mark:function(f){if(!this.errorIcon){var elp=this.getErrorCt();if(!elp){this.el.dom.title=msg;return;} +this.errorIcon=elp.createChild({cls:'x-form-invalid-icon'});} +this.alignErrorIcon();this.errorIcon.dom.qtip=msg;this.errorIcon.dom.qclass='x-form-invalid-tip';this.errorIcon.show();this.on('resize',this.alignErrorIcon,this);},clear:function(f){if(this.errorIcon){this.errorIcon.dom.qtip='';this.errorIcon.hide();this.un('resize',this.alignErrorIcon,this);}else{this.el.dom.title='';}}},'around':{mark:function(f){},clear:function(f){}}};Ext.form.Field.msgFx={normal:{show:function(msgEl,f){msgEl.setDisplayed('block');},hide:function(msgEl,f){msgEl.setDisplayed(false).update('');}},slide:{show:function(msgEl,f){msgEl.slideIn('t',{stopFx:true});},hide:function(msgEl,f){msgEl.slideOut('t',{stopFx:true,useDisplay:true});}},slideRight:{show:function(msgEl,f){msgEl.fixDisplay();msgEl.alignTo(f.el,'tl-tr');msgEl.slideIn('l',{stopFx:true});},hide:function(msgEl,f){msgEl.slideOut('l',{stopFx:true,useDisplay:true});}}};Ext.reg('field',Ext.form.Field); + +Ext.form.TextField=Ext.extend(Ext.form.Field,{grow:false,growMin:30,growMax:800,vtype:null,maskRe:null,disableKeyFilter:false,allowBlank:true,minLength:0,maxLength:Number.MAX_VALUE,minLengthText:"The minimum length for this field is {0}",maxLengthText:"The maximum length for this field is {0}",selectOnFocus:false,blankText:"This field is required",validator:null,regex:null,regexText:"",emptyText:null,emptyClass:'x-form-empty-field',initComponent:function(){Ext.form.TextField.superclass.initComponent.call(this);this.addEvents('autosize','keydown','keyup','keypress');},initEvents:function(){Ext.form.TextField.superclass.initEvents.call(this);if(this.validationEvent=='keyup'){this.validationTask=new Ext.util.DelayedTask(this.validate,this);this.el.on('keyup',this.filterValidation,this);} +else if(this.validationEvent!==false){this.el.on(this.validationEvent,this.validate,this,{buffer:this.validationDelay});} +if(this.selectOnFocus||this.emptyText){this.on("focus",this.preFocus,this);this.el.on('mousedown',function(){if(!this.hasFocus){this.el.on('mouseup',function(e){e.preventDefault();},this,{single:true});}},this);if(this.emptyText){this.on('blur',this.postBlur,this);this.applyEmptyText();}} +if(this.maskRe||(this.vtype&&this.disableKeyFilter!==true&&(this.maskRe=Ext.form.VTypes[this.vtype+'Mask']))){this.el.on("keypress",this.filterKeys,this);} +if(this.grow){this.el.on("keyup",this.onKeyUpBuffered,this,{buffer:50});this.el.on("click",this.autoSize,this);} +if(this.enableKeyEvents){this.el.on("keyup",this.onKeyUp,this);this.el.on("keydown",this.onKeyDown,this);this.el.on("keypress",this.onKeyPress,this);}},processValue:function(value){if(this.stripCharsRe){var newValue=value.replace(this.stripCharsRe,'');if(newValue!==value){this.setRawValue(newValue);return newValue;}} +return value;},filterValidation:function(e){if(!e.isNavKeyPress()){this.validationTask.delay(this.validationDelay);}},onDisable:function(){Ext.form.TextField.superclass.onDisable.call(this);if(Ext.isIE){this.el.dom.unselectable='on';}},onEnable:function(){Ext.form.TextField.superclass.onEnable.call(this);if(Ext.isIE){this.el.dom.unselectable='';}},onKeyUpBuffered:function(e){if(!e.isNavKeyPress()){this.autoSize();}},onKeyUp:function(e){this.fireEvent('keyup',this,e);},onKeyDown:function(e){this.fireEvent('keydown',this,e);},onKeyPress:function(e){this.fireEvent('keypress',this,e);},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText();},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1&&!this.hasFocus){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass);}},preFocus:function(){var el=this.el;if(this.emptyText){if(el.dom.value==this.emptyText){this.setRawValue('');} +el.removeClass(this.emptyClass);} +if(this.selectOnFocus){(function(){el.dom.select();}).defer(this.inEditor&&Ext.isIE?50:0);}},postBlur:function(){this.applyEmptyText();},filterKeys:function(e){if(e.ctrlKey||e.isSpecialKey()){return;} +if(!this.maskRe.test(String.fromCharCode(e.getCharCode()))){e.stopEvent();}},setValue:function(v){if(this.emptyText&&this.el&&!Ext.isEmpty(v)){this.el.removeClass(this.emptyClass);} +Ext.form.TextField.superclass.setValue.apply(this,arguments);this.applyEmptyText();this.autoSize();},validateValue:function(value){if(value.length<1||value===this.emptyText){if(this.allowBlank){this.clearInvalid();return true;}else{this.markInvalid(this.blankText);return false;}} +if(value.lengththis.maxLength){this.markInvalid(String.format(this.maxLengthText,this.maxLength));return false;} +if(this.vtype){var vt=Ext.form.VTypes;if(!vt[this.vtype](value,this)){this.markInvalid(this.vtypeText||vt[this.vtype+'Text']);return false;}} +if(typeof this.validator=="function"){var msg=this.validator(value);if(msg!==true){this.markInvalid(msg);return false;}} +if(this.regex&&!this.regex.test(value)){this.markInvalid(this.regexText);return false;} +return true;},selectText:function(start,end){var v=this.getRawValue();var doFocus=false;if(v.length>0){start=start===undefined?0:start;end=end===undefined?v.length:end;var d=this.el.dom;if(d.setSelectionRange){d.setSelectionRange(start,end);}else if(d.createTextRange){var range=d.createTextRange();range.moveStart("character",start);range.moveEnd("character",end-v.length);range.select();} +doFocus=Ext.isGecko||Ext.isOpera;}else{doFocus=true;} +if(doFocus){this.focus();}},autoSize:function(){if(!this.grow||!this.rendered){return;} +if(!this.metrics){this.metrics=Ext.util.TextMetrics.createInstance(this.el);} +var el=this.el;var v=el.dom.value;var d=document.createElement('div');d.appendChild(document.createTextNode(v));v=d.innerHTML;Ext.removeNode(d);d=null;v+=" ";var w=Math.min(this.growMax,Math.max(this.metrics.getWidth(v)+10,this.growMin));this.el.setWidth(w);this.fireEvent("autosize",this,w);}});Ext.reg('textfield',Ext.form.TextField); + +Ext.form.TriggerField=Ext.extend(Ext.form.TextField,{defaultAutoCreate:{tag:"input",type:"text",size:"16",autocomplete:"off"},hideTrigger:false,autoSize:Ext.emptyFn,monitorTab:true,deferHeight:true,mimicing:false,actionMode:'wrap',onResize:function(w,h){Ext.form.TriggerField.superclass.onResize.call(this,w,h);if(typeof w=='number'){this.el.setWidth(this.adjustWidth('input',w-this.trigger.getWidth()));} +this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());},adjustSize:Ext.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},alignErrorIcon:function(){if(this.wrap){this.errorIcon.alignTo(this.wrap,'tl-tr',[2,0]);}},onRender:function(ct,position){Ext.form.TriggerField.superclass.onRender.call(this,ct,position);this.wrap=this.el.wrap({cls:"x-form-field-wrap"});this.trigger=this.wrap.createChild(this.triggerConfig||{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.triggerClass});if(this.hideTrigger){this.trigger.setDisplayed(false);} +this.initTrigger();if(!this.width){this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());}},afterRender:function(){Ext.form.TriggerField.superclass.afterRender.call(this);var y;if(Ext.isIE&&!this.hideTrigger&&this.el.getY()!=(y=this.trigger.getY())){this.el.position();this.el.setY(y);}},initTrigger:function(){this.trigger.on("click",this.onTriggerClick,this,{preventDefault:true});this.trigger.addClassOnOver('x-form-trigger-over');this.trigger.addClassOnClick('x-form-trigger-click');},onDestroy:function(){if(this.trigger){this.trigger.removeAllListeners();this.trigger.remove();} +if(this.wrap){this.wrap.remove();} +if(this.mimicing){Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);} +Ext.form.TriggerField.superclass.onDestroy.call(this);},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass('x-trigger-wrap-focus');this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this,{delay:10});if(this.monitorTab){this.el.on("keydown",this.checkTab,this);}}},checkTab:function(e){if(e.getKey()==e.TAB){this.triggerBlur();}},onBlur:function(){},mimicBlur:function(e){if(!this.wrap.contains(e.target)&&this.validateBlur(e)){this.triggerBlur();}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);if(this.monitorTab&&this.el){this.el.un("keydown",this.checkTab,this);} +Ext.form.TriggerField.superclass.onBlur.call(this);if(this.wrap){this.wrap.removeClass('x-trigger-wrap-focus');}},beforeBlur:Ext.emptyFn,validateBlur:function(e){return true;},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:'span',cls:'x-form-twin-triggers',cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger2Class}]};},getTrigger:function(index){return this.triggers[index];},initTrigger:function(){var ts=this.trigger.select('.x-form-trigger',true);this.wrap.setStyle('overflow','hidden');var triggerField=this;ts.each(function(t,all,index){t.hide=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='none';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};t.show=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};var triggerIndex='Trigger'+(index+1);if(this['hide'+triggerIndex]){t.dom.style.display='none';} +t.on("click",this['on'+triggerIndex+'Click'],this,{preventDefault:true});t.addClassOnOver('x-form-trigger-over');t.addClassOnClick('x-form-trigger-click');},this);this.triggers=ts.elements;},onDestroy:function(){Ext.destroy.apply(this,this.triggers);Ext.form.TwinTriggerField.superclass.onDestroy.call(this);},onTrigger1Click:Ext.emptyFn,onTrigger2Click:Ext.emptyFn});Ext.reg('trigger',Ext.form.TriggerField); + +Ext.form.TextArea=Ext.extend(Ext.form.TextField,{growMin:60,growMax:1000,growAppend:' \n ',growPad:Ext.isWebKit?-6:0,enterIsSpecial:false,preventScrollbars:false,onRender:function(ct,position){if(!this.el){this.defaultAutoCreate={tag:"textarea",style:"width:100px;height:60px;",autocomplete:"off"};} +Ext.form.TextArea.superclass.onRender.call(this,ct,position);if(this.grow){this.textSizeEl=Ext.DomHelper.append(document.body,{tag:"pre",cls:"x-form-grow-sizer"});if(this.preventScrollbars){this.el.setStyle("overflow","hidden");} +this.el.setHeight(this.growMin);}},onDestroy:function(){if(this.textSizeEl){Ext.removeNode(this.textSizeEl);} +Ext.form.TextArea.superclass.onDestroy.call(this);},fireKey:function(e){if(e.isSpecialKey()&&(this.enterIsSpecial||(e.getKey()!=e.ENTER||e.hasModifier()))){this.fireEvent("specialkey",this,e);}},onKeyUp:function(e){if(!e.isNavKeyPress()||e.getKey()==e.ENTER){this.autoSize();} +Ext.form.TextArea.superclass.onKeyUp.call(this,e);},autoSize:function(){if(!this.grow||!this.textSizeEl){return;} +var el=this.el;var v=el.dom.value;var ts=this.textSizeEl;ts.innerHTML='';ts.appendChild(document.createTextNode(v));v=ts.innerHTML;Ext.fly(ts).setWidth(this.el.getWidth());if(v.length<1){v="  ";}else{v+=this.growAppend;if(Ext.isIE){v=v.replace(/\n/g,'
    ');}} +ts.innerHTML=v;var h=Math.min(this.growMax,Math.max(ts.offsetHeight,this.growMin)+this.growPad);if(h!=this.lastHeight){this.lastHeight=h;this.el.setHeight(h);this.fireEvent("autosize",this,h);}}});Ext.reg('textarea',Ext.form.TextArea); + +Ext.form.NumberField=Ext.extend(Ext.form.TextField,{fieldClass:"x-form-field x-form-num-field",allowDecimals:true,decimalSeparator:".",decimalPrecision:2,allowNegative:true,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.MAX_VALUE,minText:"The minimum value for this field is {0}",maxText:"The maximum value for this field is {0}",nanText:"{0} is not a valid number",baseChars:"0123456789",initEvents:function(){var allowed=this.baseChars+'';if(this.allowDecimals){allowed+=this.decimalSeparator;} +if(this.allowNegative){allowed+='-';} +this.maskRe=new RegExp('['+Ext.escapeRe(allowed)+']');Ext.form.NumberField.superclass.initEvents.call(this);},validateValue:function(value){if(!Ext.form.NumberField.superclass.validateValue.call(this,value)){return false;} +if(value.length<1){return true;} +value=String(value).replace(this.decimalSeparator,".");if(isNaN(value)){this.markInvalid(String.format(this.nanText,value));return false;} +var num=this.parseValue(value);if(numthis.maxValue){this.markInvalid(String.format(this.maxText,this.maxValue));return false;} +return true;},getValue:function(){return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this)));},setValue:function(v){v=typeof v=='number'?v:parseFloat(String(v).replace(this.decimalSeparator,"."));v=isNaN(v)?'':String(v).replace(".",this.decimalSeparator);Ext.form.NumberField.superclass.setValue.call(this,v);},parseValue:function(value){value=parseFloat(String(value).replace(this.decimalSeparator,"."));return isNaN(value)?'':value;},fixPrecision:function(value){var nan=isNaN(value);if(!this.allowDecimals||this.decimalPrecision==-1||nan||!value){return nan?'':value;} +return parseFloat(parseFloat(value).toFixed(this.decimalPrecision));},beforeBlur:function(){var v=this.parseValue(this.getRawValue());if(!Ext.isEmpty(v)){this.setValue(this.fixPrecision(v));}}});Ext.reg('numberfield',Ext.form.NumberField); + +Ext.form.DateField=Ext.extend(Ext.form.TriggerField,{format:"m/d/Y",altFormats:"m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d",disabledDaysText:"Disabled",disabledDatesText:"Disabled",minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:'x-form-date-trigger',showToday:true,defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"},initComponent:function(){Ext.form.DateField.superclass.initComponent.call(this);this.addEvents('select');if(typeof this.minValue=="string"){this.minValue=this.parseDate(this.minValue);} +if(typeof this.maxValue=="string"){this.maxValue=this.parseDate(this.maxValue);} +this.disabledDatesRE=null;this.initDisabledDays();},initDisabledDays:function(){if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;ithis.maxValue.getTime()){this.markInvalid(String.format(this.maxText,this.formatDate(this.maxValue)));return false;} +if(this.disabledDays){var day=value.getDay();for(var i=0;i{'+this.displayField+'}
    ';} +this.view=new Ext.DataView({applyTo:this.innerList,tpl:this.tpl,singleSelect:true,selectedClass:this.selectedClass,itemSelector:this.itemSelector||'.'+cls+'-item'});this.view.on('click',this.onViewClick,this);this.bindStore(this.store,true);if(this.resizable){this.resizer=new Ext.Resizable(this.list,{pinned:true,handles:'se'});this.resizer.on('resize',function(r,w,h){this.maxHeight=h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight;this.listWidth=w;this.innerList.setWidth(w-this.list.getFrameWidth('lr'));this.restrictHeight();},this);this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom',this.handleHeight+'px');}}},getStore:function(){return this.store;},bindStore:function(store,initial){if(this.store&&!initial){this.store.un('beforeload',this.onBeforeLoad,this);this.store.un('load',this.onLoad,this);this.store.un('loadexception',this.collapse,this);if(!store){this.store=null;if(this.view){this.view.setStore(null);}}} +if(store){this.store=Ext.StoreMgr.lookup(store);this.store.on('beforeload',this.onBeforeLoad,this);this.store.on('load',this.onLoad,this);this.store.on('loadexception',this.collapse,this);if(this.view){this.view.setStore(store);}}},initEvents:function(){Ext.form.ComboBox.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{"up":function(e){this.inKeyMode=true;this.selectPrev();},"down":function(e){if(!this.isExpanded()){this.onTriggerClick();}else{this.inKeyMode=true;this.selectNext();}},"enter":function(e){this.onViewClick();this.delayedCheck=true;this.unsetDelayCheck.defer(10,this);},"esc":function(e){this.collapse();},"tab":function(e){this.onViewClick(false);return true;},scope:this,doRelay:function(foo,bar,hname){if(hname=='down'||this.scope.isExpanded()){return Ext.KeyNav.prototype.doRelay.apply(this,arguments);} +return true;},forceKeyDown:true});this.queryDelay=Math.max(this.queryDelay||10,this.mode=='local'?10:250);this.dqTask=new Ext.util.DelayedTask(this.initQuery,this);if(this.typeAhead){this.taTask=new Ext.util.DelayedTask(this.onTypeAhead,this);} +if(this.editable!==false&&!this.enableKeyEvents){this.el.on("keyup",this.onKeyUp,this);}},onDestroy:function(){if(this.dqTask){this.dqTask.cancel();this.dqTask=null;} +this.bindStore(null);Ext.destroy(this.resizer,this.view,this.pageTb,this.innerList,this.list);Ext.form.ComboBox.superclass.onDestroy.call(this);},unsetDelayCheck:function(){delete this.delayedCheck;},fireKey:function(e){var fn=function(ev){if(ev.isNavKeyPress()&&!this.isExpanded()&&!this.delayedCheck){this.fireEvent("specialkey",this,ev);}};if(this.inEditor&&Ext.isWebKit&&e.getKey()==e.TAB){fn.defer(10,this,[new Ext.EventObjectImpl(e)]);}else{fn.call(this,e);}},onResize:function(w,h){Ext.form.ComboBox.superclass.onResize.apply(this,arguments);if(this.list&&this.listWidth===undefined){var lw=Math.max(w,this.minListWidth);this.list.setWidth(lw);this.innerList.setWidth(lw-this.list.getFrameWidth('lr'));}},onEnable:function(){Ext.form.ComboBox.superclass.onEnable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=false;}},onDisable:function(){Ext.form.ComboBox.superclass.onDisable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=true;}},setEditable:function(value){if(value==this.editable){return;} +this.editable=value;if(!value){this.el.dom.setAttribute('readOnly',true);this.el.on('mousedown',this.onTriggerClick,this);this.el.addClass('x-combo-noedit');}else{this.el.dom.removeAttribute('readOnly');this.el.un('mousedown',this.onTriggerClick,this);this.el.removeClass('x-combo-noedit');}},onBeforeLoad:function(){if(!this.hasFocus){return;} +this.innerList.update(this.loadingText?'
    '+this.loadingText+'
    ':'');this.restrictHeight();this.selectedIndex=-1;},onLoad:function(){if(!this.hasFocus){return;} +if(this.store.getCount()>0){this.expand();this.restrictHeight();if(this.lastQuery==this.allQuery){if(this.editable){this.el.dom.select();} +if(!this.selectByValue(this.value,true)){this.select(0,true);}}else{this.selectNext();if(this.typeAhead&&this.lastKey!=Ext.EventObject.BACKSPACE&&this.lastKey!=Ext.EventObject.DELETE){this.taTask.delay(this.typeAheadDelay);}}}else{this.onEmptyResults();}},onTypeAhead:function(){if(this.store.getCount()>0){var r=this.store.getAt(0);var newValue=r.data[this.displayField];var len=newValue.length;var selStart=this.getRawValue().length;if(selStart!=len){this.setRawValue(newValue);this.selectText(selStart,newValue.length);}}},onSelect:function(record,index){if(this.fireEvent('beforeselect',this,record,index)!==false){this.setValue(record.data[this.valueField||this.displayField]);this.collapse();this.fireEvent('select',this,record,index);}},getName:function(){var hf=this.hiddenField;return hf&&hf.name?hf.name:this.hiddenName||Ext.form.ComboBox.superclass.getName.call(this);},getValue:function(){if(this.valueField){return typeof this.value!='undefined'?this.value:'';}else{return Ext.form.ComboBox.superclass.getValue.call(this);}},clearValue:function(){if(this.hiddenField){this.hiddenField.value='';} +this.setRawValue('');this.lastSelectionText='';this.applyEmptyText();this.value='';},setValue:function(v){var text=v;if(this.valueField){var r=this.findRecord(this.valueField,v);if(r){text=r.data[this.displayField];}else if(this.valueNotFoundText!==undefined){text=this.valueNotFoundText;}} +this.lastSelectionText=text;if(this.hiddenField){this.hiddenField.value=v;} +Ext.form.ComboBox.superclass.setValue.call(this,text);this.value=v;},findRecord:function(prop,value){var record;if(this.store.getCount()>0){this.store.each(function(r){if(r.data[prop]==value){record=r;return false;}});} +return record;},onViewMove:function(e,t){this.inKeyMode=false;},onViewOver:function(e,t){if(this.inKeyMode){return;} +var item=this.view.findItemFromChild(t);if(item){var index=this.view.indexOf(item);this.select(index,false);}},onViewClick:function(doFocus){var index=this.view.getSelectedIndexes()[0];var r=this.store.getAt(index);if(r){this.onSelect(r,index);} +if(doFocus!==false){this.el.focus();}},restrictHeight:function(){this.innerList.dom.style.height='';var inner=this.innerList.dom;var pad=this.list.getFrameWidth('tb')+(this.resizable?this.handleHeight:0)+this.assetHeight;var h=Math.max(inner.clientHeight,inner.offsetHeight,inner.scrollHeight);var ha=this.getPosition()[1]-Ext.getBody().getScroll().top;var hb=Ext.lib.Dom.getViewHeight()-ha-this.getSize().height;var space=Math.max(ha,hb,this.minHeight||0)-this.list.shadowOffset-pad-5;h=Math.min(h,space,this.maxHeight);this.innerList.setHeight(h);this.list.beginUpdate();this.list.setHeight(h+pad);this.list.alignTo(this.wrap,this.listAlign);this.list.endUpdate();},onEmptyResults:function(){this.collapse();},isExpanded:function(){return this.list&&this.list.isVisible();},selectByValue:function(v,scrollIntoView){if(v!==undefined&&v!==null){var r=this.findRecord(this.valueField||this.displayField,v);if(r){this.select(this.store.indexOf(r),scrollIntoView);return true;}} +return false;},select:function(index,scrollIntoView){this.selectedIndex=index;this.view.select(index);if(scrollIntoView!==false){var el=this.view.getNode(index);if(el){this.innerList.scrollChildIntoView(el,false);}}},selectNext:function(){var ct=this.store.getCount();if(ct>0){if(this.selectedIndex==-1){this.select(0);}else if(this.selectedIndex0){if(this.selectedIndex==-1){this.select(0);}else if(this.selectedIndex!=0){this.select(this.selectedIndex-1);}}},onKeyUp:function(e){var k=e.getKey();if(this.editable!==false&&(k==e.BACKSPACE||!e.isSpecialKey())){this.lastKey=k;this.dqTask.delay(this.queryDelay);} +Ext.form.ComboBox.superclass.onKeyUp.call(this,e);},validateBlur:function(){return!this.list||!this.list.isVisible();},initQuery:function(){this.doQuery(this.getRawValue());},beforeBlur:function(){var val=this.getRawValue();if(this.forceSelection){if(val.length>0&&val!=this.emptyText){this.el.dom.value=this.lastSelectionText===undefined?'':this.lastSelectionText;this.applyEmptyText();}else{this.clearValue();}}else{var rec=this.findRecord(this.displayField,val);if(rec){val=rec.get(this.valueField||this.displayField);} +this.setValue(val);}},doQuery:function(q,forceAll){if(q===undefined||q===null){q='';} +var qe={query:q,forceAll:forceAll,combo:this,cancel:false};if(this.fireEvent('beforequery',qe)===false||qe.cancel){return false;} +q=qe.query;forceAll=qe.forceAll;if(forceAll===true||(q.length>=this.minChars)){if(this.lastQuery!==q){this.lastQuery=q;if(this.mode=='local'){this.selectedIndex=-1;if(forceAll){this.store.clearFilter();}else{this.store.filter(this.displayField,q);} +this.onLoad();}else{this.store.baseParams[this.queryParam]=q;this.store.load({params:this.getParams(q)});this.expand();}}else{this.selectedIndex=-1;this.onLoad();}}},getParams:function(q){var p={};if(this.pageSize){p.start=0;p.limit=this.pageSize;} +return p;},collapse:function(){if(!this.isExpanded()){return;} +this.list.hide();Ext.getDoc().un('mousewheel',this.collapseIf,this);Ext.getDoc().un('mousedown',this.collapseIf,this);this.fireEvent('collapse',this);},collapseIf:function(e){if(!e.within(this.wrap)&&!e.within(this.list)){this.collapse();}},expand:function(){if(this.isExpanded()||!this.hasFocus){return;} +this.list.alignTo(this.wrap,this.listAlign);this.list.show();if(Ext.isGecko2){this.innerList.setOverflow('auto');} +Ext.getDoc().on('mousewheel',this.collapseIf,this);Ext.getDoc().on('mousedown',this.collapseIf,this);this.fireEvent('expand',this);},onTriggerClick:function(){if(this.disabled){return;} +if(this.isExpanded()){this.collapse();this.el.focus();}else{this.onFocus({});if(this.triggerAction=='all'){this.doQuery(this.allQuery,true);}else{this.doQuery(this.getRawValue());} +this.el.focus();}}});Ext.reg('combo',Ext.form.ComboBox); + +Ext.form.Checkbox=Ext.extend(Ext.form.Field,{checkedCls:'x-form-check-checked',focusCls:'x-form-check-focus',overCls:'x-form-check-over',mouseDownCls:'x-form-check-down',tabIndex:0,checked:false,defaultAutoCreate:{tag:'input',type:'checkbox',autocomplete:'off'},actionMode:'wrap',baseCls:'x-form-check',initComponent:function(){Ext.form.Checkbox.superclass.initComponent.call(this);this.addEvents('check');},initEvents:function(){Ext.form.Checkbox.superclass.initEvents.call(this);this.initCheckEvents();},initCheckEvents:function(){this.innerWrap.removeAllListeners();this.innerWrap.addClassOnOver(this.overCls);this.innerWrap.addClassOnClick(this.mouseDownCls);this.innerWrap.on('click',this.onClick,this);this.innerWrap.on('keyup',this.onKeyUp,this);},onRender:function(ct,position){Ext.form.Checkbox.superclass.onRender.call(this,ct,position);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue;} +this.el.addClass('x-hidden');this.innerWrap=this.el.wrap({tabIndex:this.tabIndex,cls:this.baseCls+'-wrap-inner'});this.wrap=this.innerWrap.wrap({cls:this.baseCls+'-wrap'});if(this.boxLabel){this.labelEl=this.innerWrap.createChild({tag:'label',htmlFor:this.el.id,cls:'x-form-cb-label',html:this.boxLabel});} +this.imageEl=this.innerWrap.createChild({tag:'img',src:Ext.BLANK_IMAGE_URL,cls:this.baseCls},this.el);if(this.checked){this.setValue(true);}else{this.checked=this.el.dom.checked;} +this.originalValue=this.checked;},afterRender:function(){Ext.form.Checkbox.superclass.afterRender.call(this);this.wrap[this.checked?'addClass':'removeClass'](this.checkedCls);},onDestroy:function(){if(this.rendered){Ext.destroy(this.imageEl,this.labelEl,this.innerWrap,this.wrap);} +Ext.form.Checkbox.superclass.onDestroy.call(this);},onFocus:function(e){Ext.form.Checkbox.superclass.onFocus.call(this,e);this.el.addClass(this.focusCls);},onBlur:function(e){Ext.form.Checkbox.superclass.onBlur.call(this,e);this.el.removeClass(this.focusCls);},onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel&&!this.fieldLabel){this.el.alignTo(this.wrap,'c-c');}},onKeyUp:function(e){if(e.getKey()==Ext.EventObject.SPACE){this.onClick(e);}},onClick:function(e){if(!this.disabled&&!this.readOnly){this.toggleValue();} +e.stopEvent();},onEnable:function(){Ext.form.Checkbox.superclass.onEnable.call(this);this.initCheckEvents();},onDisable:function(){Ext.form.Checkbox.superclass.onDisable.call(this);this.innerWrap.removeAllListeners();},toggleValue:function(){this.setValue(!this.checked);},getResizeEl:function(){if(!this.resizeEl){this.resizeEl=Ext.isWebKit?this.wrap:(this.wrap.up('.x-form-element',5)||this.wrap);} +return this.resizeEl;},getPositionEl:function(){return this.wrap;},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,initValue:function(){this.originalValue=this.getValue();},getValue:function(){if(this.rendered){return this.el.dom.checked;} +return this.checked;},setValue:function(v){var checked=this.checked;this.checked=(v===true||v==='true'||v=='1'||String(v).toLowerCase()=='on');if(this.rendered){this.el.dom.checked=this.checked;this.el.dom.defaultChecked=this.checked;this.wrap[this.checked?'addClass':'removeClass'](this.checkedCls);} +if(checked!=this.checked){this.fireEvent("check",this,this.checked);if(this.handler){this.handler.call(this.scope||this,this,this.checked);}}}});Ext.reg('checkbox',Ext.form.Checkbox); + +Ext.form.CheckboxGroup=Ext.extend(Ext.form.Field,{columns:'auto',vertical:false,allowBlank:true,blankText:"You must select at least one item in this group",defaultType:'checkbox',groupCls:'x-form-check-group',initComponent:function(){this.addEvents('change');Ext.form.CheckboxGroup.superclass.initComponent.call(this);},onRender:function(ct,position){if(!this.el){var panelCfg={cls:this.groupCls,layout:'column',border:false,renderTo:ct};var colCfg={defaultType:this.defaultType,layout:'form',border:false,defaults:{hideLabel:true,anchor:'100%'}} +if(this.items[0].items){Ext.apply(panelCfg,{layoutConfig:{columns:this.items.length},defaults:this.defaults,items:this.items}) +for(var i=0,len=this.items.length;i0&&i%rows==0){ri++;} +if(this.items[i].fieldLabel){this.items[i].hideLabel=false;} +cols[ri].items.push(this.items[i]);};}else{for(var i=0,len=this.items.length;i':'>'),ff,'');} +return buf.join('');},createToolbar:function(editor){var tipsEnabled=Ext.QuickTips&&Ext.QuickTips.isEnabled();function btn(id,toggle,handler){return{itemId:id,cls:'x-btn-icon x-edit-'+id,enableToggle:toggle!==false,scope:editor,handler:handler||editor.relayBtnCmd,clickEvent:'mousedown',tooltip:tipsEnabled?editor.buttonTips[id]||undefined:undefined,tabIndex:-1};} +var tb=new Ext.Toolbar({renderTo:this.wrap.dom.firstChild});tb.el.on('click',function(e){e.preventDefault();});if(this.enableFont&&!Ext.isSafari2){this.fontSelect=tb.el.createChild({tag:'select',cls:'x-font-select',html:this.createFontOptions()});this.fontSelect.on('change',function(){var font=this.fontSelect.dom.value;this.relayCmd('fontname',font);this.deferFocus();},this);tb.add(this.fontSelect.dom,'-');} +if(this.enableFormat){tb.add(btn('bold'),btn('italic'),btn('underline'));} +if(this.enableFontSize){tb.add('-',btn('increasefontsize',false,this.adjustFont),btn('decreasefontsize',false,this.adjustFont));} +if(this.enableColors){tb.add('-',{itemId:'forecolor',cls:'x-btn-icon x-edit-forecolor',clickEvent:'mousedown',tooltip:tipsEnabled?editor.buttonTips.forecolor||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({allowReselect:true,focus:Ext.emptyFn,value:'000000',plain:true,selectHandler:function(cp,color){this.execCmd('forecolor',Ext.isWebKit||Ext.isIE?'#'+color:color);this.deferFocus();},scope:this,clickEvent:'mousedown'})},{itemId:'backcolor',cls:'x-btn-icon x-edit-backcolor',clickEvent:'mousedown',tooltip:tipsEnabled?editor.buttonTips.backcolor||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({focus:Ext.emptyFn,value:'FFFFFF',plain:true,allowReselect:true,selectHandler:function(cp,color){if(Ext.isGecko){this.execCmd('useCSS',false);this.execCmd('hilitecolor',color);this.execCmd('useCSS',true);this.deferFocus();}else{this.execCmd(Ext.isOpera?'hilitecolor':'backcolor',Ext.isWebKit||Ext.isIE?'#'+color:color);this.deferFocus();}},scope:this,clickEvent:'mousedown'})});} +if(this.enableAlignments){tb.add('-',btn('justifyleft'),btn('justifycenter'),btn('justifyright'));} +if(!Ext.isSafari2){if(this.enableLinks){tb.add('-',btn('createlink',false,this.createLink));} +if(this.enableLists){tb.add('-',btn('insertorderedlist'),btn('insertunorderedlist'));} +if(this.enableSourceEdit){tb.add('-',btn('sourceedit',true,function(btn){this.toggleSourceEdit(btn.pressed);}));}} +this.tb=tb;},getDocMarkup:function(){return'';},getEditorBody:function(){return this.doc.body||this.doc.documentElement;},getDoc:function(){return Ext.isIE?this.getWin().document:(this.iframe.contentDocument||this.getWin().document);},getWin:function(){return Ext.isIE?this.iframe.contentWindow:window.frames[this.iframe.name];},onRender:function(ct,position){Ext.form.HtmlEditor.superclass.onRender.call(this,ct,position);this.el.dom.style.border='0 none';this.el.dom.setAttribute('tabIndex',-1);this.el.addClass('x-hidden');if(Ext.isIE){this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')} +this.wrap=this.el.wrap({cls:'x-html-editor-wrap',cn:{cls:'x-html-editor-tb'}});this.createToolbar(this);this.tb.items.each(function(item){if(item.itemId!='sourceedit'){item.disable();}});var iframe=document.createElement('iframe');iframe.name=Ext.id();iframe.frameBorder='0';iframe.src=Ext.isIE?Ext.SSL_SECURE_URL:"javascript:;";this.wrap.dom.appendChild(iframe);this.iframe=iframe;this.monitorTask=Ext.TaskMgr.start({run:this.checkDesignMode,scope:this,interval:100});if(!this.width){var sz=this.el.getSize();this.setSize(sz.width,this.height||sz.height);}},initFrame:function(){Ext.TaskMgr.stop(this.monitorTask);this.doc=this.getDoc();this.win=this.getWin();this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var task={run:function(){if(this.doc.body||this.doc.readyState=='complete'){Ext.TaskMgr.stop(task);this.doc.designMode="on";this.initEditor.defer(10,this);}},interval:10,duration:10000,scope:this};Ext.TaskMgr.start(task);},checkDesignMode:function(){if(this.wrap&&this.wrap.dom.offsetWidth){var doc=this.getDoc();if(!doc){return;} +if(!doc.editorInitialized||String(doc.designMode).toLowerCase()!='on'){this.initFrame();}}},onResize:function(w,h){Ext.form.HtmlEditor.superclass.onResize.apply(this,arguments);if(this.el&&this.iframe){if(typeof w=='number'){var aw=w-this.wrap.getFrameWidth('lr');this.el.setWidth(this.adjustWidth('textarea',aw));this.iframe.style.width=Math.max(aw,0)+'px';} +if(typeof h=='number'){var ah=h-this.wrap.getFrameWidth('tb')-this.tb.el.getHeight();this.el.setHeight(this.adjustWidth('textarea',ah));this.iframe.style.height=Math.max(ah,0)+'px';if(this.doc){this.getEditorBody().style.height=Math.max((ah-(this.iframePad*2)),0)+'px';}}}},toggleSourceEdit:function(sourceEditMode){if(sourceEditMode===undefined){sourceEditMode=!this.sourceEditMode;} +this.sourceEditMode=sourceEditMode===true;var btn=this.tb.items.get('sourceedit');if(btn.pressed!==this.sourceEditMode){btn.toggle(this.sourceEditMode);return;} +if(this.sourceEditMode){this.tb.items.each(function(item){if(item.itemId!='sourceedit'){item.disable();}});this.syncValue();this.iframe.className='x-hidden';this.el.removeClass('x-hidden');this.el.dom.removeAttribute('tabIndex');this.el.focus();}else{if(this.initialized){this.tb.items.each(function(item){item.enable();});} +this.pushValue();this.iframe.className='';this.el.addClass('x-hidden');this.el.dom.setAttribute('tabIndex',-1);this.deferFocus();} +var lastSize=this.lastSize;if(lastSize){delete this.lastSize;this.setSize(lastSize);} +this.fireEvent('editmodechange',this,this.sourceEditMode);},createLink:function(){var url=prompt(this.createLinkText,this.defaultLinkValue);if(url&&url!='http:/'+'/'){this.relayCmd('createlink',url);}},adjustSize:Ext.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},initEvents:function(){this.originalValue=this.getValue();},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,setValue:function(v){Ext.form.HtmlEditor.superclass.setValue.call(this,v);this.pushValue();},cleanHtml:function(html){html=String(html);if(html.length>5){if(Ext.isWebKit){html=html.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,'');}} +if(html==this.defaultValue){html='';} +return html;},syncValue:function(){if(this.initialized){var bd=this.getEditorBody();var html=bd.innerHTML;if(Ext.isWebKit){var bs=bd.getAttribute('style');var m=bs.match(/text-align:(.*?);/i);if(m&&m[1]){html='
    '+html+'
    ';}} +html=this.cleanHtml(html);if(this.fireEvent('beforesync',this,html)!==false){this.el.dom.value=html;this.fireEvent('sync',this,html);}}},getValue:function(){this[this.sourceEditMode?'pushValue':'syncValue']();return Ext.form.HtmlEditor.superclass.getValue.call(this);},pushValue:function(){if(this.initialized){var v=this.el.dom.value;if(!this.activated&&v.length<1){v=this.defaultValue;} +if(this.fireEvent('beforepush',this,v)!==false){this.getEditorBody().innerHTML=v;if(Ext.isGecko){var d=this.doc,mode=d.designMode.toLowerCase();d.designMode=mode.toggle('on','off');d.designMode=mode;} +this.fireEvent('push',this,v);}}},deferFocus:function(){this.focus.defer(10,this);},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus();}else{this.el.focus();}},initEditor:function(){try{var dbody=this.getEditorBody();var ss=this.el.getStyles('font-size','font-family','background-image','background-repeat');ss['background-attachment']='fixed';dbody.bgProperties='fixed';Ext.DomHelper.applyStyles(dbody,ss);if(this.doc){try{Ext.EventManager.removeAll(this.doc);}catch(e){}} +this.doc=this.getDoc();Ext.EventManager.on(this.doc,{'mousedown':this.onEditorEvent,'dblclick':this.onEditorEvent,'click':this.onEditorEvent,'keyup':this.onEditorEvent,buffer:100,scope:this});if(Ext.isGecko){Ext.EventManager.on(this.doc,'keypress',this.applyCommand,this);} +if(Ext.isIE||Ext.isWebKit||Ext.isOpera){Ext.EventManager.on(this.doc,'keydown',this.fixKeys,this);} +this.initialized=true;this.fireEvent('initialize',this);this.doc.editorInitialized=true;this.pushValue();}catch(e){}},onDestroy:function(){if(this.monitorTask){Ext.TaskMgr.stop(this.monitorTask);} +if(this.rendered){Ext.destroy(this.tb);if(this.wrap){this.wrap.dom.innerHTML='';this.wrap.remove();}} +if(this.el){this.el.removeAllListeners();this.el.remove();} +if(this.doc){try{Ext.EventManager.removeAll(this.doc);for(var prop in this.doc){delete this.doc[prop];}}catch(e){}} +this.purgeListeners();},onFirstFocus:function(){this.activated=true;this.tb.items.each(function(item){item.enable();});if(Ext.isGecko){this.win.focus();var s=this.win.getSelection();if(!s.focusNode||s.focusNode.nodeType!=3){var r=s.getRangeAt(0);r.selectNodeContents(this.getEditorBody());r.collapse(true);this.deferFocus();} +try{this.execCmd('useCSS',true);this.execCmd('styleWithCSS',false);}catch(e){}} +this.fireEvent('activate',this);},adjustFont:function(btn){var adjust=btn.itemId=='increasefontsize'?1:-1;var v=parseInt(this.doc.queryCommandValue('FontSize')||2,10);if((Ext.isWebKit&&!Ext.isSafari2)||Ext.isAir){if(v<=10){v=1+adjust;}else if(v<=13){v=2+adjust;}else if(v<=16){v=3+adjust;}else if(v<=18){v=4+adjust;}else if(v<=24){v=5+adjust;}else{v=6+adjust;} +v=v.constrain(1,6);}else{if(Ext.isSafari){adjust*=2;} +v=Math.max(1,v+adjust)+(Ext.isSafari?'px':0);} +this.execCmd('FontSize',v);},onEditorEvent:function(e){this.updateToolbar();},updateToolbar:function(){if(!this.activated){this.onFirstFocus();return;} +var btns=this.tb.items.map,doc=this.doc;if(this.enableFont&&!Ext.isSafari2){var name=(this.doc.queryCommandValue('FontName')||this.defaultFont).toLowerCase();if(name!=this.fontSelect.dom.value){this.fontSelect.dom.value=name;}} +if(this.enableFormat){btns.bold.toggle(doc.queryCommandState('bold'));btns.italic.toggle(doc.queryCommandState('italic'));btns.underline.toggle(doc.queryCommandState('underline'));} +if(this.enableAlignments){btns.justifyleft.toggle(doc.queryCommandState('justifyleft'));btns.justifycenter.toggle(doc.queryCommandState('justifycenter'));btns.justifyright.toggle(doc.queryCommandState('justifyright'));} +if(!Ext.isSafari2&&this.enableLists){btns.insertorderedlist.toggle(doc.queryCommandState('insertorderedlist'));btns.insertunorderedlist.toggle(doc.queryCommandState('insertunorderedlist'));} +Ext.menu.MenuMgr.hideAll();this.syncValue();},relayBtnCmd:function(btn){this.relayCmd(btn.itemId);},relayCmd:function(cmd,value){(function(){this.focus();this.execCmd(cmd,value);this.updateToolbar();}).defer(10,this);},execCmd:function(cmd,value){this.doc.execCommand(cmd,false,value===undefined?null:value);this.syncValue();},applyCommand:function(e){if(e.ctrlKey){var c=e.getCharCode(),cmd;if(c>0){c=String.fromCharCode(c);switch(c){case'b':cmd='bold';break;case'i':cmd='italic';break;case'u':cmd='underline';break;} +if(cmd){this.win.focus();this.execCmd(cmd);this.deferFocus();e.preventDefault();}}}},insertAtCursor:function(text){if(!this.activated){return;} +if(Ext.isIE){this.win.focus();var r=this.doc.selection.createRange();if(r){r.collapse(true);r.pasteHTML(text);this.syncValue();this.deferFocus();}}else if(Ext.isGecko||Ext.isOpera){this.win.focus();this.execCmd('InsertHTML',text);this.deferFocus();}else if(Ext.isWebKit){this.execCmd('InsertText',text);this.deferFocus();}},fixKeys:function(){if(Ext.isIE){return function(e){var k=e.getKey(),r;if(k==e.TAB){e.stopEvent();r=this.doc.selection.createRange();if(r){r.collapse(true);r.pasteHTML('    ');this.deferFocus();}}else if(k==e.ENTER){r=this.doc.selection.createRange();if(r){var target=r.parentElement();if(!target||target.tagName.toLowerCase()!='li'){e.stopEvent();r.pasteHTML('
    ');r.collapse(false);r.select();}}}};}else if(Ext.isOpera){return function(e){var k=e.getKey();if(k==e.TAB){e.stopEvent();this.win.focus();this.execCmd('InsertHTML','    ');this.deferFocus();}};}else if(Ext.isWebKit){return function(e){var k=e.getKey();if(k==e.TAB){e.stopEvent();this.execCmd('InsertText','\t');this.deferFocus();}};}}(),getToolbar:function(){return this.tb;},buttonTips:{bold:{title:'Bold (Ctrl+B)',text:'Make the selected text bold.',cls:'x-html-editor-tip'},italic:{title:'Italic (Ctrl+I)',text:'Make the selected text italic.',cls:'x-html-editor-tip'},underline:{title:'Underline (Ctrl+U)',text:'Underline the selected text.',cls:'x-html-editor-tip'},increasefontsize:{title:'Grow Text',text:'Increase the font size.',cls:'x-html-editor-tip'},decreasefontsize:{title:'Shrink Text',text:'Decrease the font size.',cls:'x-html-editor-tip'},backcolor:{title:'Text Highlight Color',text:'Change the background color of the selected text.',cls:'x-html-editor-tip'},forecolor:{title:'Font Color',text:'Change the color of the selected text.',cls:'x-html-editor-tip'},justifyleft:{title:'Align Text Left',text:'Align text to the left.',cls:'x-html-editor-tip'},justifycenter:{title:'Center Text',text:'Center text in the editor.',cls:'x-html-editor-tip'},justifyright:{title:'Align Text Right',text:'Align text to the right.',cls:'x-html-editor-tip'},insertunorderedlist:{title:'Bullet List',text:'Start a bulleted list.',cls:'x-html-editor-tip'},insertorderedlist:{title:'Numbered List',text:'Start a numbered list.',cls:'x-html-editor-tip'},createlink:{title:'Hyperlink',text:'Make the selected text a hyperlink.',cls:'x-html-editor-tip'},sourceedit:{title:'Source Edit',text:'Switch to source editing mode.',cls:'x-html-editor-tip'}}});Ext.reg('htmleditor',Ext.form.HtmlEditor); + +Ext.form.TimeField=Ext.extend(Ext.form.ComboBox,{minValue:null,maxValue:null,minText:"The time in this field must be equal to or after {0}",maxText:"The time in this field must be equal to or before {0}",invalidText:"{0} is not a valid time",format:"g:i A",altFormats:"g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H",increment:15,mode:'local',triggerAction:'all',typeAhead:false,initDate:'1/1/2008',initComponent:function(){Ext.form.TimeField.superclass.initComponent.call(this);if(typeof this.minValue=="string"){this.minValue=this.parseDate(this.minValue);} +if(typeof this.maxValue=="string"){this.maxValue=this.parseDate(this.maxValue);} +if(!this.store){var min=this.parseDate(this.minValue);if(!min){min=new Date(this.initDate).clearTime();} +var max=this.parseDate(this.maxValue);if(!max){max=new Date(this.initDate).clearTime().add('mi',(24*60)-1);} +var times=[];while(min<=max){times.push([min.dateFormat(this.format)]);min=min.add('mi',this.increment);} +this.store=new Ext.data.SimpleStore({fields:['text'],data:times});this.displayField='text';}},getValue:function(){var v=Ext.form.TimeField.superclass.getValue.call(this);return this.formatDate(this.parseDate(v))||'';},setValue:function(value){Ext.form.TimeField.superclass.setValue.call(this,this.formatDate(this.parseDate(value)));},validateValue:Ext.form.DateField.prototype.validateValue,parseDate:Ext.form.DateField.prototype.parseDate,formatDate:Ext.form.DateField.prototype.formatDate,beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v.dateFormat(this.format));} +Ext.form.TimeField.superclass.beforeBlur.call(this);}});Ext.reg('timefield',Ext.form.TimeField); + +Ext.form.Label=Ext.extend(Ext.BoxComponent,{onRender:function(ct,position){if(!this.el){this.el=document.createElement('label');this.el.id=this.getId();this.el.innerHTML=this.text?Ext.util.Format.htmlEncode(this.text):(this.html||'');if(this.forId){this.el.setAttribute('for',this.forId);}} +Ext.form.Label.superclass.onRender.call(this,ct,position);},setText:function(t,encode){var e=encode===false;this[!e?'text':'html']=t;delete this[e?'text':'html'];if(this.rendered){this.el.dom.innerHTML=encode!==false?Ext.util.Format.htmlEncode(t):t;} +return this;}});Ext.reg('label',Ext.form.Label); + +Ext.form.Action=function(form,options){this.form=form;this.options=options||{};};Ext.form.Action.CLIENT_INVALID='client';Ext.form.Action.SERVER_INVALID='server';Ext.form.Action.CONNECT_FAILURE='connect';Ext.form.Action.LOAD_FAILURE='load';Ext.form.Action.prototype={type:'default',run:function(options){},success:function(response){},handleResponse:function(response){},failure:function(response){this.response=response;this.failureType=Ext.form.Action.CONNECT_FAILURE;this.form.afterAction(this,false);},processResponse:function(response){this.response=response;if(!response.responseText&&!response.responseXML){return true;} +this.result=this.handleResponse(response);return this.result;},getUrl:function(appendParams){var url=this.options.url||this.form.url||this.form.el.dom.action;if(appendParams){var p=this.getParams();if(p){url+=(url.indexOf('?')!=-1?'&':'?')+p;}} +return url;},getMethod:function(){return(this.options.method||this.form.method||this.form.el.dom.method||'POST').toUpperCase();},getParams:function(){var bp=this.form.baseParams;var p=this.options.params;if(p){if(typeof p=="object"){p=Ext.urlEncode(Ext.applyIf(p,bp));}else if(typeof p=='string'&&bp){p+='&'+Ext.urlEncode(bp);}}else if(bp){p=Ext.urlEncode(bp);} +return p;},createCallback:function(opts){var opts=opts||{};return{success:this.success,failure:this.failure,scope:this,timeout:(opts.timeout*1000)||(this.form.timeout*1000),upload:this.form.fileUpload?this.success:undefined};}};Ext.form.Action.Submit=function(form,options){Ext.form.Action.Submit.superclass.constructor.call(this,form,options);};Ext.extend(Ext.form.Action.Submit,Ext.form.Action,{type:'submit',run:function(){var o=this.options;var method=this.getMethod();var isGet=method=='GET';if(o.clientValidation===false||this.form.isValid()){Ext.Ajax.request(Ext.apply(this.createCallback(o),{form:this.form.el.dom,url:this.getUrl(isGet),method:method,headers:o.headers,params:!isGet?this.getParams():null,isUpload:this.form.fileUpload}));}else if(o.clientValidation!==false){this.failureType=Ext.form.Action.CLIENT_INVALID;this.form.afterAction(this,false);}},success:function(response){var result=this.processResponse(response);if(result===true||result.success){this.form.afterAction(this,true);return;} +if(result.errors){this.form.markInvalid(result.errors);this.failureType=Ext.form.Action.SERVER_INVALID;} +this.form.afterAction(this,false);},handleResponse:function(response){if(this.form.errorReader){var rs=this.form.errorReader.read(response);var errors=[];if(rs.records){for(var i=0,len=rs.records.length;i=0){if(!first){col=clen-1;} +first=false;while(col>=0){if(fn.call(scope||this,row,col,cm)===true){return[row,col];} +col--;} +row--;}}else{if(col>=clen){row++;first=false;} +while(row','
    ','
    {header}
    ','
    {body}
    ','
    ','
     
    ','
     
    ','');} +if(!ts.header){ts.header=new Ext.Template('','{cells}','
    ');} +if(!ts.hcell){ts.hcell=new Ext.Template('
    ',this.grid.enableHdMenu?'':'','{value}','
    ');} +if(!ts.body){ts.body=new Ext.Template('{rows}');} +if(!ts.row){ts.row=new Ext.Template('
    ','{cells}',(this.enableRowBody?'':''),'
    {body}
    ');} +if(!ts.cell){ts.cell=new Ext.Template('','
    {value}
    ','');} +for(var k in ts){var t=ts[k];if(t&&typeof t.compile=='function'&&!t.compiled){t.disableFormats=true;t.compile();}} +this.templates=ts;this.colRe=new RegExp("x-grid3-td-([^\\s]+)","");},fly:function(el){if(!this._flyweight){this._flyweight=new Ext.Element.Flyweight(document.body);} +this._flyweight.dom=el;return this._flyweight;},getEditorParent:function(){return this.scroller.dom;},initElements:function(){var E=Ext.Element;var el=this.grid.getGridEl().dom.firstChild;var cs=el.childNodes;this.el=new E(el);this.mainWrap=new E(cs[0]);this.mainHd=new E(this.mainWrap.dom.firstChild);if(this.grid.hideHeaders){this.mainHd.setDisplayed(false);} +this.innerHd=this.mainHd.dom.firstChild;this.scroller=new E(this.mainWrap.dom.childNodes[1]);if(this.forceFit){this.scroller.setStyle('overflow-x','hidden');} +this.mainBody=new E(this.scroller.dom.firstChild);this.focusEl=new E(this.scroller.dom.childNodes[1]);this.focusEl.swallowEvent("click",true);this.resizeMarker=new E(cs[1]);this.resizeProxy=new E(cs[2]);},getRows:function(){return this.hasRows()?this.mainBody.dom.childNodes:[];},findCell:function(el){if(!el){return false;} +return this.fly(el).findParent(this.cellSelector,this.cellSelectorDepth);},findCellIndex:function(el,requiredCls){var cell=this.findCell(el);if(cell&&(!requiredCls||this.fly(cell).hasClass(requiredCls))){return this.getCellIndex(cell);} +return false;},getCellIndex:function(el){if(el){var m=el.className.match(this.colRe);if(m&&m[1]){return this.cm.getIndexById(m[1]);}} +return false;},findHeaderCell:function(el){var cell=this.findCell(el);return cell&&this.fly(cell).hasClass(this.hdCls)?cell:null;},findHeaderIndex:function(el){return this.findCellIndex(el,this.hdCls);},findRow:function(el){if(!el){return false;} +return this.fly(el).findParent(this.rowSelector,this.rowSelectorDepth);},findRowIndex:function(el){var r=this.findRow(el);return r?r.rowIndex:false;},getRow:function(row){return this.getRows()[row];},getCell:function(row,col){return this.getRow(row).getElementsByTagName('td')[col];},getHeaderCell:function(index){return this.mainHd.dom.getElementsByTagName('td')[index];},addRowClass:function(row,cls){var r=this.getRow(row);if(r){this.fly(r).addClass(cls);}},removeRowClass:function(row,cls){var r=this.getRow(row);if(r){this.fly(r).removeClass(cls);}},removeRow:function(row){Ext.removeNode(this.getRow(row));this.syncFocusEl(row);},removeRows:function(firstRow,lastRow){var bd=this.mainBody.dom;for(var rowIndex=firstRow;rowIndex<=lastRow;rowIndex++){Ext.removeNode(bd.childNodes[firstRow]);} +this.syncFocusEl(firstRow);},getScrollState:function(){var sb=this.scroller.dom;return{left:sb.scrollLeft,top:sb.scrollTop};},restoreScroll:function(state){var sb=this.scroller.dom;sb.scrollLeft=state.left;sb.scrollTop=state.top;},scrollToTop:function(){this.scroller.dom.scrollTop=0;this.scroller.dom.scrollLeft=0;},syncScroll:function(){this.syncHeaderScroll();var mb=this.scroller.dom;this.grid.fireEvent("bodyscroll",mb.scrollLeft,mb.scrollTop);},syncHeaderScroll:function(){var mb=this.scroller.dom;this.innerHd.scrollLeft=mb.scrollLeft;this.innerHd.scrollLeft=mb.scrollLeft;},updateSortIcon:function(col,dir){var sc=this.sortClasses;var hds=this.mainHd.select('td').removeClass(sc);hds.item(col).addClass(sc[dir=="DESC"?1:0]);},updateAllColumnWidths:function(){var tw=this.getTotalWidth();var clen=this.cm.getColumnCount();var ws=[];for(var i=0;i=this.ds.getCount()){return null;} +col=(col!==undefined?col:0);var rowEl=this.getRow(row),cm=this.cm,colCount=cm.getColumnCount(),cellEl;if(!(hscroll===false&&col===0)){while(colsbot){c.scrollTop=cbot-ch;} +if(hscroll!==false){var cleft=parseInt(cellEl.offsetLeft,10);var cright=cleft+cellEl.offsetWidth;var sleft=parseInt(c.scrollLeft,10);var sright=sleft+c.clientWidth;if(cleftsright){c.scrollLeft=cright-c.clientWidth;}} +return this.getResolvedXY(resolved);},insertRows:function(dm,firstRow,lastRow,isUpdate){var last=dm.getCount()-1;if(!isUpdate&&firstRow===0&&lastRow>=last){this.refresh();}else{if(!isUpdate){this.fireEvent("beforerowsinserted",this,firstRow,lastRow);} +var html=this.renderRows(firstRow,lastRow);var before=this.getRow(firstRow);if(before){if(firstRow===0){Ext.fly(this.getRow(0)).removeClass(this.firstRowCls);} +Ext.DomHelper.insertHtml('beforeBegin',before,html);}else{var r=this.getRow(last-1);if(r){Ext.fly(r).removeClass(this.lastRowCls);} +Ext.DomHelper.insertHtml('beforeEnd',this.mainBody.dom,html);} +if(!isUpdate){this.fireEvent("rowsinserted",this,firstRow,lastRow);this.processRows(firstRow);}else if(firstRow===0||firstRow>=last){Ext.fly(this.getRow(firstRow)).addClass(firstRow===0?this.firstRowCls:this.lastRowCls);}} +this.syncFocusEl(firstRow);},deleteRows:function(dm,firstRow,lastRow){if(dm.getRowCount()<1){this.refresh();}else{this.fireEvent("beforerowsdeleted",this,firstRow,lastRow);this.removeRows(firstRow,lastRow);this.processRows(firstRow);this.fireEvent("rowsdeleted",this,firstRow,lastRow);}},getColumnStyle:function(col,isHeader){var style=!isHeader?(this.cm.config[col].css||''):'';style+='width:'+this.getColumnWidth(col)+';';if(this.cm.isHidden(col)){style+='display:none;';} +var align=this.cm.config[col].align;if(align){style+='text-align:'+align+';';} +return style;},getColumnWidth:function(col){var w=this.cm.getColumnWidth(col);if(typeof w=='number'){return(Ext.isBorderBox||(Ext.isWebKit&&!Ext.isSafari2)?w:(w-this.borderWidth>0?w-this.borderWidth:0))+'px';} +return w;},getTotalWidth:function(){return this.cm.getTotalWidth()+'px';},fitColumns:function(preventRefresh,onlyExpand,omitColumn){var cm=this.cm,leftOver,dist,i;var tw=cm.getTotalWidth(false);var aw=this.grid.getGridEl().getWidth(true)-this.scrollOffset;if(aw<20){return;} +var extra=aw-tw;if(extra===0){return false;} +var vc=cm.getColumnCount(true);var ac=vc-(typeof omitColumn=='number'?1:0);if(ac===0){ac=1;omitColumn=undefined;} +var colCount=cm.getColumnCount();var cols=[];var extraCol=0;var width=0;var w;for(i=0;iaw){var adjustCol=ac!=vc?omitColumn:extraCol;cm.setColumnWidth(adjustCol,Math.max(1,cm.getColumnWidth(adjustCol)-(tw-aw)),true);} +if(preventRefresh!==true){this.updateAllColumnWidths();} +return true;},autoExpand:function(preventUpdate){var g=this.grid,cm=this.cm;if(!this.userResized&&g.autoExpandColumn){var tw=cm.getTotalWidth(false);var aw=this.grid.getGridEl().getWidth(true)-this.scrollOffset;if(tw!=aw){var ci=cm.getIndexById(g.autoExpandColumn);var currentWidth=cm.getColumnWidth(ci);var cw=Math.min(Math.max(((aw-tw)+currentWidth),g.autoExpandMin),g.autoExpandMax);if(cw!=currentWidth){cm.setColumnWidth(ci,cw,true);if(preventUpdate!==true){this.updateColumnWidth(ci,cw);}}}}},getColumnData:function(){var cs=[],cm=this.cm,colCount=cm.getColumnCount();for(var i=0;i'+this.emptyText+'');}},updateHeaderSortState:function(){var state=this.ds.getSortState();if(!state){return;} +if(!this.sortState||(this.sortState.field!=state.field||this.sortState.direction!=state.direction)){this.grid.fireEvent('sortchange',this.grid,state);} +this.sortState=state;var sortColumn=this.cm.findColumnIndex(state.field);if(sortColumn!=-1){var sortDir=state.direction;this.updateSortIcon(sortColumn,sortDir);}},destroy:function(){if(this.colMenu){Ext.menu.MenuMgr.unregister(this.colMenu);this.colMenu.destroy();delete this.colMenu;} +if(this.hmenu){Ext.menu.MenuMgr.unregister(this.hmenu);this.hmenu.destroy();delete this.hmenu;} +if(this.grid.enableColumnMove){var dds=Ext.dd.DDM.ids['gridHeader'+this.grid.getGridEl().id];if(dds){for(var dd in dds){if(!dds[dd].config.isTarget&&dds[dd].dragElId){var elid=dds[dd].dragElId;dds[dd].unreg();Ext.get(elid).remove();}else if(dds[dd].config.isTarget){dds[dd].proxyTop.remove();dds[dd].proxyBottom.remove();dds[dd].unreg();} +if(Ext.dd.DDM.locationCache[dd]){delete Ext.dd.DDM.locationCache[dd];}} +delete Ext.dd.DDM.ids['gridHeader'+this.grid.getGridEl().id];}} +if(this.dragZone){this.dragZone.unreg();} +Ext.fly(this.innerHd).removeAllListeners();Ext.removeNode(this.innerHd);Ext.destroy(this.resizeMarker,this.resizeProxy,this.focusEl,this.mainBody,this.scroller,this.mainHd,this.mainWrap,this.dragZone,this.splitZone,this.columnDrag,this.columnDrop);this.initData(null,null);Ext.EventManager.removeResizeListener(this.onWindowResize,this);this.purgeListeners();},onDenyColumnHide:function(){},render:function(){if(this.autoFill){var ct=this.grid.ownerCt;if(ct&&ct.getLayout()){ct.on('afterlayout',function(){this.fitColumns(true,true);this.updateHeaders();},this,{single:true});}else{this.fitColumns(true,true);}}else if(this.forceFit){this.fitColumns(true,false);}else if(this.grid.autoExpandColumn){this.autoExpand(true);} +this.renderUI();},initData:function(ds,cm){if(this.ds){this.ds.un("load",this.onLoad,this);this.ds.un("datachanged",this.onDataChange,this);this.ds.un("add",this.onAdd,this);this.ds.un("remove",this.onRemove,this);this.ds.un("update",this.onUpdate,this);this.ds.un("clear",this.onClear,this);} +if(ds){ds.on("load",this.onLoad,this);ds.on("datachanged",this.onDataChange,this);ds.on("add",this.onAdd,this);ds.on("remove",this.onRemove,this);ds.on("update",this.onUpdate,this);ds.on("clear",this.onClear,this);} +this.ds=ds;if(this.cm){this.cm.un("configchange",this.onColConfigChange,this);this.cm.un("widthchange",this.onColWidthChange,this);this.cm.un("headerchange",this.onHeaderChange,this);this.cm.un("hiddenchange",this.onHiddenChange,this);this.cm.un("columnmoved",this.onColumnMove,this);this.cm.un("columnlockchange",this.onColumnLock,this);} +if(cm){delete this.lastViewWidth;cm.on("configchange",this.onColConfigChange,this);cm.on("widthchange",this.onColWidthChange,this);cm.on("headerchange",this.onHeaderChange,this);cm.on("hiddenchange",this.onHiddenChange,this);cm.on("columnmoved",this.onColumnMove,this);cm.on("columnlockchange",this.onColumnLock,this);} +this.cm=cm;},onDataChange:function(){this.refresh();this.updateHeaderSortState();this.syncFocusEl(0);},onClear:function(){this.refresh();this.syncFocusEl(0);},onUpdate:function(ds,record){this.refreshRow(record);},onAdd:function(ds,records,index){this.insertRows(ds,index,index+(records.length-1));},onRemove:function(ds,record,index,isUpdate){if(isUpdate!==true){this.fireEvent("beforerowremoved",this,index,record);} +this.removeRow(index);if(isUpdate!==true){this.processRows(index);this.applyEmptyText();this.fireEvent("rowremoved",this,index,record);}},onLoad:function(){this.scrollToTop();},onColWidthChange:function(cm,col,width){this.updateColumnWidth(col,width);},onHeaderChange:function(cm,col,text){this.updateHeaders();},onHiddenChange:function(cm,col,hidden){this.updateColumnHidden(col,hidden);},onColumnMove:function(cm,oldIndex,newIndex){this.indexMap=null;var s=this.getScrollState();this.refresh(true);this.restoreScroll(s);this.afterMove(newIndex);this.grid.fireEvent('columnmove',oldIndex,newIndex);},onColConfigChange:function(){delete this.lastViewWidth;this.indexMap=null;this.refresh(true);},initUI:function(grid){grid.on("headerclick",this.onHeaderClick,this);},initEvents:function(){},onHeaderClick:function(g,index){if(this.headersDisabled||!this.cm.isSortable(index)){return;} +g.stopEditing(true);g.store.sort(this.cm.getDataIndex(index));},onRowOver:function(e,t){var row;if((row=this.findRowIndex(t))!==false){this.addRowClass(row,"x-grid3-row-over");}},onRowOut:function(e,t){var row;if((row=this.findRowIndex(t))!==false&&!e.within(this.getRow(row),true)){this.removeRowClass(row,"x-grid3-row-over");}},handleWheel:function(e){e.stopPropagation();},onRowSelect:function(row){this.addRowClass(row,"x-grid3-row-selected");},onRowDeselect:function(row){this.removeRowClass(row,"x-grid3-row-selected");},onCellSelect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).addClass("x-grid3-cell-selected");}},onCellDeselect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).removeClass("x-grid3-cell-selected");}},onColumnSplitterMoved:function(i,w){this.userResized=true;var cm=this.grid.colModel;cm.setColumnWidth(i,w,true);if(this.forceFit){this.fitColumns(true,false,i);this.updateAllColumnWidths();}else{this.updateColumnWidth(i,w);this.syncHeaderScroll();} +this.grid.fireEvent("columnresize",i,w);},handleHdMenuClick:function(item){var index=this.hdCtxIndex;var cm=this.cm,ds=this.ds;switch(item.id){case"asc":ds.sort(cm.getDataIndex(index),"ASC");break;case"desc":ds.sort(cm.getDataIndex(index),"DESC");break;default:index=cm.getIndexById(item.id.substr(4));if(index!=-1){if(item.checked&&cm.getColumnsBy(this.isHideableColumn,this).length<=1){this.onDenyColumnHide();return false;} +cm.setHidden(index,item.checked);}} +return true;},isHideableColumn:function(c){return!c.hidden&&!c.fixed;},beforeColMenuShow:function(){var cm=this.cm,colCount=cm.getColumnCount();this.colMenu.removeAll();for(var i=0;i','
    ',this.groupTextTpl,'
    ','
    ');} +this.startGroup.compile();this.endGroup='
    ';},findGroup:function(el){return Ext.fly(el).up('.x-grid-group',this.mainBody.dom);},getGroups:function(){return this.hasRows()?this.mainBody.dom.childNodes:[];},onAdd:function(){if(this.enableGrouping&&!this.ignoreAdd){var ss=this.getScrollState();this.refresh();this.restoreScroll(ss);}else if(!this.enableGrouping){Ext.grid.GroupingView.superclass.onAdd.apply(this,arguments);}},onRemove:function(ds,record,index,isUpdate){Ext.grid.GroupingView.superclass.onRemove.apply(this,arguments);var g=document.getElementById(record._groupId);if(g&&g.childNodes[1].childNodes.length<1){Ext.removeNode(g);} +this.applyEmptyText();},refreshRow:function(record){if(this.ds.getCount()==1){this.refresh();}else{this.isUpdating=true;Ext.grid.GroupingView.superclass.refreshRow.apply(this,arguments);this.isUpdating=false;}},beforeMenuShow:function(){var field=this.getGroupField();var g=this.hmenu.items.get('groupBy');if(g){g.setDisabled(this.cm.config[this.hdCtxIndex].groupable===false);} +var s=this.hmenu.items.get('showGroups');if(s){s.setDisabled(!field&&this.cm.config[this.hdCtxIndex].groupable===false);s.setChecked(!!field,true);}},renderUI:function(){Ext.grid.GroupingView.superclass.renderUI.call(this);this.mainBody.on('mousedown',this.interceptMouse,this);if(this.enableGroupingMenu&&this.hmenu){this.hmenu.add('-',{id:'groupBy',text:this.groupByText,handler:this.onGroupByClick,scope:this,iconCls:'x-group-by-icon'});if(this.enableNoGroups){this.hmenu.add({id:'showGroups',text:this.showGroupsText,checked:true,checkHandler:this.onShowGroupsClick,scope:this});} +this.hmenu.on('beforeshow',this.beforeMenuShow,this);}},onGroupByClick:function(){this.grid.store.groupBy(this.cm.getDataIndex(this.hdCtxIndex));this.beforeMenuShow();},onShowGroupsClick:function(mi,checked){if(checked){this.onGroupByClick();}else{this.grid.store.clearGrouping();}},toggleGroup:function(group,expanded){this.grid.stopEditing(true);group=Ext.getDom(group);var gel=Ext.fly(group);expanded=expanded!==undefined?expanded:gel.hasClass('x-grid-group-collapsed');this.state[gel.dom.id]=expanded;gel[expanded?'removeClass':'addClass']('x-grid-group-collapsed');},toggleAllGroups:function(expanded){var groups=this.getGroups();for(var i=0,len=groups.length;i=0&&this.config[colIndex].resizable!==false&&this.config[colIndex].fixed!==true;},setHidden:function(colIndex,hidden){var c=this.config[colIndex];if(c.hidden!==hidden){c.hidden=hidden;this.totalWidth=null;this.fireEvent("hiddenchange",this,colIndex,hidden);}},setEditor:function(col,editor){Ext.destroy(this.config[col].editor);this.config[col].editor=editor;},destroy:function(){var c=this.config;for(var i=0,c=this.config,len=c.length;i0;},isSelected:function(index){var r=typeof index=="number"?this.grid.store.getAt(index):index;return(r&&this.selections.key(r.id)?true:false);},isIdSelected:function(id){return(this.selections.key(id)?true:false);},handleMouseDown:function(g,rowIndex,e){if(e.button!==0||this.isLocked()){return;};var view=this.grid.getView();if(e.shiftKey&&!this.singleSelect&&this.last!==false){var last=this.last;this.selectRange(last,rowIndex,e.ctrlKey);this.last=last;view.focusRow(rowIndex);}else{var isSelected=this.isSelected(rowIndex);if(e.ctrlKey&&isSelected){this.deselectRow(rowIndex);}else if(!isSelected||this.getCount()>1){this.selectRow(rowIndex,e.ctrlKey||e.shiftKey);view.focusRow(rowIndex);}}},selectRows:function(rows,keepExisting){if(!keepExisting){this.clearSelections();} +for(var i=0,len=rows.length;i=endRow;i--){this.selectRow(i,true);}}},deselectRange:function(startRow,endRow,preventViewNotify){if(this.isLocked())return;for(var i=startRow;i<=endRow;i++){this.deselectRow(i,preventViewNotify);}},selectRow:function(index,keepExisting,preventViewNotify){if(this.isLocked()||(index<0||index>=this.grid.store.getCount())||(keepExisting&&this.isSelected(index))){return;} +var r=this.grid.store.getAt(index);if(r&&this.fireEvent("beforerowselect",this,index,keepExisting,r)!==false){if(!keepExisting||this.singleSelect){this.clearSelections();} +this.selections.add(r);this.last=this.lastActive=index;if(!preventViewNotify){this.grid.getView().onRowSelect(index);} +this.fireEvent("rowselect",this,index,r);this.fireEvent("selectionchange",this);}},deselectRow:function(index,preventViewNotify){if(this.isLocked())return;if(this.last==index){this.last=false;} +if(this.lastActive==index){this.lastActive=false;} +var r=this.grid.store.getAt(index);if(r){this.selections.remove(r);if(!preventViewNotify){this.grid.getView().onRowDeselect(index);} +this.fireEvent("rowdeselect",this,index,r);this.fireEvent("selectionchange",this);}},restoreLast:function(){if(this._last){this.last=this._last;}},acceptsNav:function(row,col,cm){return!cm.isHidden(col)&&cm.isCellEditable(col,row);},onEditorKey:function(field,e){var k=e.getKey(),newCell,g=this.grid,ed=g.activeEditor;var shift=e.shiftKey;if(k==e.TAB){e.stopEvent();ed.completeEdit();if(shift){newCell=g.walkCells(ed.row,ed.col-1,-1,this.acceptsNav,this);}else{newCell=g.walkCells(ed.row,ed.col+1,1,this.acceptsNav,this);}}else if(k==e.ENTER){e.stopEvent();ed.completeEdit();if(this.moveEditorOnEnter!==false){if(shift){newCell=g.walkCells(ed.row-1,ed.col,-1,this.acceptsNav,this);}else{newCell=g.walkCells(ed.row+1,ed.col,1,this.acceptsNav,this);}}}else if(k==e.ESC){ed.cancelEdit();} +if(newCell){g.startEditing(newCell[0],newCell[1]);}},destroy:function(){if(this.rowNav){this.rowNav.disable();this.rowNav=null;} +Ext.grid.RowSelectionModel.superclass.destroy.call(this);}}); + +Ext.grid.CellSelectionModel=function(config){Ext.apply(this,config);this.selection=null;this.addEvents("beforecellselect","cellselect","selectionchange");Ext.grid.CellSelectionModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.CellSelectionModel,Ext.grid.AbstractSelectionModel,{initEvents:function(){this.grid.on("cellmousedown",this.handleMouseDown,this);this.grid.getGridEl().on(Ext.isIE||(Ext.isWebKit&&!Ext.isSafari2)?"keydown":"keypress",this.handleKeyDown,this);var view=this.grid.view;view.on("refresh",this.onViewChange,this);view.on("rowupdated",this.onRowUpdated,this);view.on("beforerowremoved",this.clearSelections,this);view.on("beforerowsinserted",this.clearSelections,this);if(this.grid.isEditor){this.grid.on("beforeedit",this.beforeEdit,this);}},beforeEdit:function(e){this.select(e.row,e.column,false,true,e.record);},onRowUpdated:function(v,index,r){if(this.selection&&this.selection.record==r){v.onCellSelect(index,this.selection.cell[1]);}},onViewChange:function(){this.clearSelections(true);},getSelectedCell:function(){return this.selection?this.selection.cell:null;},clearSelections:function(preventNotify){var s=this.selection;if(s){if(preventNotify!==true){this.grid.view.onCellDeselect(s.cell[0],s.cell[1]);} +this.selection=null;this.fireEvent("selectionchange",this,null);}},hasSelection:function(){return this.selection?true:false;},handleMouseDown:function(g,row,cell,e){if(e.button!==0||this.isLocked()){return;};this.select(row,cell);},select:function(rowIndex,colIndex,preventViewNotify,preventFocus,r){if(this.fireEvent("beforecellselect",this,rowIndex,colIndex)!==false){this.clearSelections();r=r||this.grid.store.getAt(rowIndex);this.selection={record:r,cell:[rowIndex,colIndex]};if(!preventViewNotify){var v=this.grid.getView();v.onCellSelect(rowIndex,colIndex);if(preventFocus!==true){v.focusCell(rowIndex,colIndex);}} +this.fireEvent("cellselect",this,rowIndex,colIndex);this.fireEvent("selectionchange",this,this.selection);}},isSelectable:function(rowIndex,colIndex,cm){return!cm.isHidden(colIndex);},handleKeyDown:function(e){if(!e.isNavKeyPress()){return;} +var g=this.grid,s=this.selection;if(!s){e.stopEvent();var cell=g.walkCells(0,0,1,this.isSelectable,this);if(cell){this.select(cell[0],cell[1]);} +return;} +var sm=this;var walk=function(row,col,step){return g.walkCells(row,col,step,sm.isSelectable,sm);};var k=e.getKey(),r=s.cell[0],c=s.cell[1];var newCell;switch(k){case e.TAB:if(e.shiftKey){newCell=walk(r,c-1,-1);}else{newCell=walk(r,c+1,1);} +break;case e.DOWN:newCell=walk(r+1,c,1);break;case e.UP:newCell=walk(r-1,c,-1);break;case e.RIGHT:newCell=walk(r,c+1,1);break;case e.LEFT:newCell=walk(r,c-1,-1);break;case e.ENTER:if(g.isEditor&&!g.editing){g.startEditing(r,c);e.stopEvent();return;} +break;};if(newCell){this.select(newCell[0],newCell[1]);e.stopEvent();}},acceptsNav:function(row,col,cm){return!cm.isHidden(col)&&cm.isCellEditable(col,row);},onEditorKey:function(field,e){var k=e.getKey(),newCell,g=this.grid,ed=g.activeEditor;if(k==e.TAB){if(e.shiftKey){newCell=g.walkCells(ed.row,ed.col-1,-1,this.acceptsNav,this);}else{newCell=g.walkCells(ed.row,ed.col+1,1,this.acceptsNav,this);} +e.stopEvent();}else if(k==e.ENTER){ed.completeEdit();e.stopEvent();}else if(k==e.ESC){e.stopEvent();ed.cancelEdit();} +if(newCell){g.startEditing(newCell[0],newCell[1]);}}}); + +Ext.grid.EditorGridPanel=Ext.extend(Ext.grid.GridPanel,{clicksToEdit:2,isEditor:true,detectEdit:false,autoEncode:false,trackMouseOver:false,initComponent:function(){Ext.grid.EditorGridPanel.superclass.initComponent.call(this);if(!this.selModel){this.selModel=new Ext.grid.CellSelectionModel();} +this.activeEditor=null;this.addEvents("beforeedit","afteredit","validateedit");},initEvents:function(){Ext.grid.EditorGridPanel.superclass.initEvents.call(this);this.on("bodyscroll",this.stopEditing,this,[true]);this.on("columnresize",this.stopEditing,this,[true]);if(this.clicksToEdit==1){this.on("cellclick",this.onCellDblClick,this);}else{if(this.clicksToEdit=='auto'&&this.view.mainBody){this.view.mainBody.on("mousedown",this.onAutoEditClick,this);} +this.on("celldblclick",this.onCellDblClick,this);}},onCellDblClick:function(g,row,col){this.startEditing(row,col);},onAutoEditClick:function(e,t){if(e.button!==0){return;} +var row=this.view.findRowIndex(t);var col=this.view.findCellIndex(t);if(row!==false&&col!==false){this.stopEditing();if(this.selModel.getSelectedCell){var sc=this.selModel.getSelectedCell();if(sc&&sc[0]===row&&sc[1]===col){this.startEditing(row,col);}}else{if(this.selModel.isSelected(row)){this.startEditing(row,col);}}}},onEditComplete:function(ed,value,startValue){this.editing=false;this.activeEditor=null;ed.un("specialkey",this.selModel.onEditorKey,this.selModel);var r=ed.record;var field=this.colModel.getDataIndex(ed.col);value=this.postEditValue(value,startValue,r,field);if(String(value)!==String(startValue)){var e={grid:this,record:r,field:field,originalValue:startValue,value:value,row:ed.row,column:ed.col,cancel:false};if(this.fireEvent("validateedit",e)!==false&&!e.cancel){r.set(field,e.value);delete e.cancel;this.fireEvent("afteredit",e);}} +this.view.focusCell(ed.row,ed.col);},startEditing:function(row,col){this.stopEditing();if(this.colModel.isCellEditable(col,row)){this.view.ensureVisible(row,col,true);var r=this.store.getAt(row);var field=this.colModel.getDataIndex(col);var e={grid:this,record:r,field:field,value:r.data[field],row:row,column:col,cancel:false};if(this.fireEvent("beforeedit",e)!==false&&!e.cancel){this.editing=true;var ed=this.colModel.getCellEditor(col,row);if(!ed.rendered){ed.render(this.view.getEditorParent(ed));} +(function(){ed.row=row;ed.col=col;ed.record=r;ed.on("complete",this.onEditComplete,this,{single:true});ed.on("specialkey",this.selModel.onEditorKey,this.selModel);this.activeEditor=ed;var v=this.preEditValue(r,field);ed.startEdit(this.view.getCell(row,col).firstChild,v===undefined?'':v);}).defer(50,this);}}},preEditValue:function(r,field){var value=r.data[field];return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlDecode(value):value;},postEditValue:function(value,originalValue,r,field){return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlEncode(value):value;},stopEditing:function(cancel){if(this.activeEditor){this.activeEditor[cancel===true?'cancelEdit':'completeEdit']();} +this.activeEditor=null;}});Ext.reg('editorgrid',Ext.grid.EditorGridPanel); + +Ext.grid.GridEditor=function(field,config){Ext.grid.GridEditor.superclass.constructor.call(this,field,config);field.monitorTab=false;};Ext.extend(Ext.grid.GridEditor,Ext.Editor,{alignment:"tl-tl",autoSize:"width",hideEl:false,cls:"x-small-editor x-grid-editor",shim:false,shadow:false}); + +Ext.grid.PropertyRecord=Ext.data.Record.create([{name:'name',type:'string'},'value']);Ext.grid.PropertyStore=function(grid,source){this.grid=grid;this.store=new Ext.data.Store({recordType:Ext.grid.PropertyRecord});this.store.on('update',this.onUpdate,this);if(source){this.setSource(source);} +Ext.grid.PropertyStore.superclass.constructor.call(this);};Ext.extend(Ext.grid.PropertyStore,Ext.util.Observable,{setSource:function(o){this.source=o;this.store.removeAll();var data=[];for(var k in o){if(this.isEditableValue(o[k])){data.push(new Ext.grid.PropertyRecord({name:k,value:o[k]},k));}} +this.store.loadRecords({records:data},{},true);},onUpdate:function(ds,record,type){if(type==Ext.data.Record.EDIT){var v=record.data['value'];var oldValue=record.modified['value'];if(this.grid.fireEvent('beforepropertychange',this.source,record.id,v,oldValue)!==false){this.source[record.id]=v;record.commit();this.grid.fireEvent('propertychange',this.source,record.id,v,oldValue);}else{record.reject();}}},getProperty:function(row){return this.store.getAt(row);},isEditableValue:function(val){if(Ext.isDate(val)){return true;}else if(typeof val=='object'||typeof val=='function'){return false;} +return true;},setValue:function(prop,value){this.source[prop]=value;this.store.getById(prop).set('value',value);},getSource:function(){return this.source;}});Ext.grid.PropertyColumnModel=function(grid,store){this.grid=grid;var g=Ext.grid;g.PropertyColumnModel.superclass.constructor.call(this,[{header:this.nameText,width:50,sortable:true,dataIndex:'name',id:'name',menuDisabled:true},{header:this.valueText,width:50,resizable:false,dataIndex:'value',id:'value',menuDisabled:true}]);this.store=store;var f=Ext.form;var bfield=new f.Field({autoCreate:{tag:'select',children:[{tag:'option',value:'true',html:'true'},{tag:'option',value:'false',html:'false'}]},getValue:function(){return this.el.value=='true';}});this.editors={'date':new g.GridEditor(new f.DateField({selectOnFocus:true})),'string':new g.GridEditor(new f.TextField({selectOnFocus:true})),'number':new g.GridEditor(new f.NumberField({selectOnFocus:true,style:'text-align:left;'})),'boolean':new g.GridEditor(bfield)};this.renderCellDelegate=this.renderCell.createDelegate(this);this.renderPropDelegate=this.renderProp.createDelegate(this);};Ext.extend(Ext.grid.PropertyColumnModel,Ext.grid.ColumnModel,{nameText:'Name',valueText:'Value',dateFormat:'m/j/Y',renderDate:function(dateVal){return dateVal.dateFormat(this.dateFormat);},renderBool:function(bVal){return bVal?'true':'false';},isCellEditable:function(colIndex,rowIndex){return colIndex==1;},getRenderer:function(col){return col==1?this.renderCellDelegate:this.renderPropDelegate;},renderProp:function(v){return this.getPropertyName(v);},renderCell:function(val){var rv=val;if(Ext.isDate(val)){rv=this.renderDate(val);}else if(typeof val=='boolean'){rv=this.renderBool(val);} +return Ext.util.Format.htmlEncode(rv);},getPropertyName:function(name){var pn=this.grid.propertyNames;return pn&&pn[name]?pn[name]:name;},getCellEditor:function(colIndex,rowIndex){var p=this.store.getProperty(rowIndex);var n=p.data['name'],val=p.data['value'];if(this.grid.customEditors[n]){return this.grid.customEditors[n];} +if(Ext.isDate(val)){return this.editors['date'];}else if(typeof val=='number'){return this.editors['number'];}else if(typeof val=='boolean'){return this.editors['boolean'];}else{return this.editors['string'];}},destroy:function(){Ext.grid.PropertyColumnModel.superclass.destroy.call(this);for(var ed in this.editors){Ext.destroy(ed);}}});Ext.grid.PropertyGrid=Ext.extend(Ext.grid.EditorGridPanel,{enableColumnMove:false,stripeRows:false,trackMouseOver:false,clicksToEdit:1,enableHdMenu:false,viewConfig:{forceFit:true},initComponent:function(){this.customEditors=this.customEditors||{};this.lastEditRow=null;var store=new Ext.grid.PropertyStore(this);this.propStore=store;var cm=new Ext.grid.PropertyColumnModel(this,store);store.store.sort('name','ASC');this.addEvents('beforepropertychange','propertychange');this.cm=cm;this.ds=store.store;Ext.grid.PropertyGrid.superclass.initComponent.call(this);this.selModel.on('beforecellselect',function(sm,rowIndex,colIndex){if(colIndex===0){this.startEditing.defer(200,this,[rowIndex,1]);return false;}},this);},onRender:function(){Ext.grid.PropertyGrid.superclass.onRender.apply(this,arguments);this.getGridEl().addClass('x-props-grid');},afterRender:function(){Ext.grid.PropertyGrid.superclass.afterRender.apply(this,arguments);if(this.source){this.setSource(this.source);}},setSource:function(source){this.propStore.setSource(source);},getSource:function(){return this.propStore.getSource();}});Ext.reg("propertygrid",Ext.grid.PropertyGrid); + +Ext.grid.RowNumberer=function(config){Ext.apply(this,config);if(this.rowspan){this.renderer=this.renderer.createDelegate(this);}};Ext.grid.RowNumberer.prototype={header:"",width:23,sortable:false,fixed:true,menuDisabled:true,dataIndex:'',id:'numberer',rowspan:undefined,renderer:function(v,p,record,rowIndex){if(this.rowspan){p.cellAttr='rowspan="'+this.rowspan+'"';} +return rowIndex+1;}}; + +Ext.grid.CheckboxSelectionModel=Ext.extend(Ext.grid.RowSelectionModel,{header:'
     
    ',width:20,sortable:false,menuDisabled:true,fixed:true,dataIndex:'',id:'checker',initEvents:function(){Ext.grid.CheckboxSelectionModel.superclass.initEvents.call(this);this.grid.on('render',function(){var view=this.grid.getView();view.mainBody.on('mousedown',this.onMouseDown,this);Ext.fly(view.innerHd).on('mousedown',this.onHdMouseDown,this);},this);},onMouseDown:function(e,t){if(e.button===0&&t.className=='x-grid3-row-checker'){e.stopEvent();var row=e.getTarget('.x-grid3-row');if(row){var index=row.rowIndex;if(this.isSelected(index)){this.deselectRow(index);}else{this.selectRow(index,true);}}}},onHdMouseDown:function(e,t){if(t.className=='x-grid3-hd-checker'){e.stopEvent();var hd=Ext.fly(t.parentNode);var isChecked=hd.hasClass('x-grid3-hd-checker-on');if(isChecked){hd.removeClass('x-grid3-hd-checker-on');this.clearSelections();}else{hd.addClass('x-grid3-hd-checker-on');this.selectAll();}}},renderer:function(v,p,record){return'
     
    ';}}); + +Ext.LoadMask=function(el,config){this.el=Ext.get(el);Ext.apply(this,config);if(this.store){this.store.on('beforeload',this.onBeforeLoad,this);this.store.on('load',this.onLoad,this);this.store.on('loadexception',this.onLoad,this);this.removeMask=Ext.value(this.removeMask,false);}else{var um=this.el.getUpdater();um.showLoadIndicator=false;um.on('beforeupdate',this.onBeforeLoad,this);um.on('update',this.onLoad,this);um.on('failure',this.onLoad,this);this.removeMask=Ext.value(this.removeMask,true);}};Ext.LoadMask.prototype={msg:'Loading...',msgCls:'x-mask-loading',disabled:false,disable:function(){this.disabled=true;},enable:function(){this.disabled=false;},onLoad:function(){this.el.unmask(this.removeMask);},onBeforeLoad:function(){if(!this.disabled){this.el.mask(this.msg,this.msgCls);}},show:function(){this.onBeforeLoad();},hide:function(){this.onLoad();},destroy:function(){if(this.store){this.store.un('beforeload',this.onBeforeLoad,this);this.store.un('load',this.onLoad,this);this.store.un('loadexception',this.onLoad,this);}else{var um=this.el.getUpdater();um.un('beforeupdate',this.onBeforeLoad,this);um.un('update',this.onLoad,this);um.un('failure',this.onLoad,this);}}}; + +Ext.ProgressBar=Ext.extend(Ext.BoxComponent,{baseCls:'x-progress',animate:false,waitTimer:null,initComponent:function(){Ext.ProgressBar.superclass.initComponent.call(this);this.addEvents("update");},onRender:function(ct,position){Ext.ProgressBar.superclass.onRender.call(this,ct,position);var tpl=new Ext.Template('
    ','
    ','
    ','
    ','
     
    ','
    ','
    ','
    ','
     
    ','
    ','
    ','
    ');if(position){this.el=tpl.insertBefore(position,{cls:this.baseCls},true);}else{this.el=tpl.append(ct,{cls:this.baseCls},true);} +if(this.id){this.el.dom.id=this.id;} +var inner=this.el.dom.firstChild;this.progressBar=Ext.get(inner.firstChild);if(this.textEl){this.textEl=Ext.get(this.textEl);delete this.textTopEl;}else{this.textTopEl=Ext.get(this.progressBar.dom.firstChild);var textBackEl=Ext.get(inner.childNodes[1]);this.textTopEl.setStyle("z-index",99).addClass('x-hidden');this.textEl=new Ext.CompositeElement([this.textTopEl.dom.firstChild,textBackEl.dom.firstChild]);this.textEl.setWidth(inner.offsetWidth);} +this.progressBar.setHeight(inner.offsetHeight);},afterRender:function(){Ext.ProgressBar.superclass.afterRender.call(this);if(this.value){this.updateProgress(this.value,this.text);}else{this.updateText(this.text);}},updateProgress:function(value,text,animate){this.value=value||0;if(text){this.updateText(text);} +if(this.rendered){var w=Math.floor(value*this.el.dom.firstChild.offsetWidth);this.progressBar.setWidth(w,animate===true||(animate!==false&&this.animate));if(this.textTopEl){this.textTopEl.removeClass('x-hidden').setWidth(w);}} +this.fireEvent('update',this,value,text);return this;},wait:function(o){if(!this.waitTimer){var scope=this;o=o||{};this.updateText(o.text);this.waitTimer=Ext.TaskMgr.start({run:function(i){var inc=o.increment||10;this.updateProgress(((((i+inc)%inc)+1)*(100/inc))*.01,null,o.animate);},interval:o.interval||1000,duration:o.duration,onStop:function(){if(o.fn){o.fn.apply(o.scope||this);} +this.reset();},scope:scope});} +return this;},isWaiting:function(){return this.waitTimer!=null;},updateText:function(text){this.text=text||' ';if(this.rendered){this.textEl.update(this.text);} +return this;},syncProgressBar:function(){if(this.value){this.updateProgress(this.value,this.text);} +return this;},setSize:function(w,h){Ext.ProgressBar.superclass.setSize.call(this,w,h);if(this.textTopEl){var inner=this.el.dom.firstChild;this.textEl.setSize(inner.offsetWidth,inner.offsetHeight);} +this.syncProgressBar();return this;},reset:function(hide){this.updateProgress(0);if(this.textTopEl){this.textTopEl.addClass('x-hidden');} +if(this.waitTimer){this.waitTimer.onStop=null;Ext.TaskMgr.stop(this.waitTimer);this.waitTimer=null;} +if(hide===true){this.hide();} +return this;}});Ext.reg('progress',Ext.ProgressBar); + +Ext.Slider=Ext.extend(Ext.BoxComponent,{vertical:false,minValue:0,maxValue:100,keyIncrement:1,increment:0,clickRange:[5,15],clickToChange:true,animate:true,dragging:false,initComponent:function(){if(this.value===undefined){this.value=this.minValue;} +Ext.Slider.superclass.initComponent.call(this);this.keyIncrement=Math.max(this.increment,this.keyIncrement);this.addEvents('beforechange','change','changecomplete','dragstart','drag','dragend');if(this.vertical){Ext.apply(this,Ext.Slider.Vertical);}},onRender:function(){this.autoEl={cls:'x-slider '+(this.vertical?'x-slider-vert':'x-slider-horz'),cn:{cls:'x-slider-end',cn:{cls:'x-slider-inner',cn:[{cls:'x-slider-thumb'},{tag:'a',cls:'x-slider-focus',href:"#",tabIndex:'-1',hidefocus:'on'}]}}};Ext.Slider.superclass.onRender.apply(this,arguments);this.endEl=this.el.first();this.innerEl=this.endEl.first();this.thumb=this.innerEl.first();this.halfThumb=(this.vertical?this.thumb.getHeight():this.thumb.getWidth())/2;this.focusEl=this.thumb.next();this.initEvents();},initEvents:function(){this.thumb.addClassOnOver('x-slider-thumb-over');this.el.on('mousedown',this.onMouseDown,this);this.el.on('keydown',this.onKeyDown,this);this.focusEl.swallowEvent("click",true);this.tracker=new Ext.dd.DragTracker({onBeforeStart:this.onBeforeDragStart.createDelegate(this),onStart:this.onDragStart.createDelegate(this),onDrag:this.onDrag.createDelegate(this),onEnd:this.onDragEnd.createDelegate(this),tolerance:3,autoStart:300});this.tracker.initEl(this.thumb);this.on('beforedestroy',this.tracker.destroy,this.tracker);},onMouseDown:function(e){if(this.disabled){return;} +if(this.clickToChange&&e.target!=this.thumb.dom){var local=this.innerEl.translatePoints(e.getXY());this.onClickChange(local);} +this.focus();},onClickChange:function(local){if(local.top>this.clickRange[0]&&local.topinc){newValue+=inc;}else if(m*2<-inc){newValue-=inc;}} +return newValue.constrain(this.minValue,this.maxValue);},afterRender:function(){Ext.Slider.superclass.afterRender.apply(this,arguments);if(this.value!==undefined){var v=this.normalizeValue(this.value);if(v!==this.value){delete this.value;this.setValue(v,false);}else{this.moveThumb(this.translateValue(v),false);}}},getRatio:function(){var w=this.innerEl.getWidth();var v=this.maxValue-this.minValue;return v==0?w:(w/v);},normalizeValue:function(v){if(typeof v!='number'){v=parseInt(v);} +v=Math.round(v);v=this.doSnap(v);v=v.constrain(this.minValue,this.maxValue);return v;},setValue:function(v,animate,changeComplete){v=this.normalizeValue(v);if(v!==this.value&&this.fireEvent('beforechange',this,v,this.value)!==false){this.value=v;this.moveThumb(this.translateValue(v),animate!==false);this.fireEvent('change',this,v);if(changeComplete){this.fireEvent('changecomplete',this,v);}}},translateValue:function(v){var ratio=this.getRatio();return(v*ratio)-(this.minValue*ratio)-this.halfThumb;},reverseValue:function(pos){var ratio=this.getRatio();return(pos+this.halfThumb+(this.minValue*ratio))/ratio;},moveThumb:function(v,animate){if(!animate||this.animate===false){this.thumb.setLeft(v);}else{this.thumb.shift({left:v,stopFx:true,duration:.35});}},focus:function(){this.focusEl.focus(10);},onBeforeDragStart:function(e){return!this.disabled;},onDragStart:function(e){this.thumb.addClass('x-slider-thumb-drag');this.dragging=true;this.dragStartValue=this.value;this.fireEvent('dragstart',this,e);},onDrag:function(e){var pos=this.innerEl.translatePoints(this.tracker.getXY());this.setValue(Math.round(this.reverseValue(pos.left)),false);this.fireEvent('drag',this,e);},onDragEnd:function(e){this.thumb.removeClass('x-slider-thumb-drag');this.dragging=false;this.fireEvent('dragend',this,e);if(this.dragStartValue!=this.value){this.fireEvent('changecomplete',this,this.value);}},onDisable:function(){Ext.Slider.superclass.onDisable.call(this);this.thumb.addClass(this.disabledClass);if(Ext.isIE){var xy=this.thumb.getXY();this.thumb.hide();this.innerEl.addClass(this.disabledClass).dom.disabled=true;if(!this.thumbHolder){this.thumbHolder=this.endEl.createChild({cls:'x-slider-thumb '+this.disabledClass});} +this.thumbHolder.show().setXY(xy);}},onEnable:function(){Ext.Slider.superclass.onEnable.call(this);this.thumb.removeClass(this.disabledClass);if(Ext.isIE){this.innerEl.removeClass(this.disabledClass).dom.disabled=false;if(this.thumbHolder){this.thumbHolder.hide();} +this.thumb.show();this.syncThumb();}},onResize:function(w,h){this.innerEl.setWidth(w-(this.el.getPadding('l')+this.endEl.getPadding('r')));this.syncThumb();},syncThumb:function(){if(this.rendered){this.moveThumb(this.translateValue(this.value));}},getValue:function(){return this.value;}});Ext.reg('slider',Ext.Slider);Ext.Slider.Vertical={onResize:function(w,h){this.innerEl.setHeight(h-(this.el.getPadding('t')+this.endEl.getPadding('b')));this.syncThumb();},getRatio:function(){var h=this.innerEl.getHeight();var v=this.maxValue-this.minValue;return h/v;},moveThumb:function(v,animate){if(!animate||this.animate===false){this.thumb.setBottom(v);}else{this.thumb.shift({bottom:v,stopFx:true,duration:.35});}},onDrag:function(e){var pos=this.innerEl.translatePoints(this.tracker.getXY());var bottom=this.innerEl.getHeight()-pos.top;this.setValue(this.minValue+Math.round(bottom/this.getRatio()),false);this.fireEvent('drag',this,e);},onClickChange:function(local){if(local.left>this.clickRange[0]&&local.left0){this.statusEl.addClass(cls);this.currIconCls=cls;}}else{this.currIconCls=cls;} +return this;},showBusy:function(o){if(typeof o=='string'){o={text:o};} +o=Ext.applyIf(o||{},{text:this.busyText,iconCls:this.busyIconCls});return this.setStatus(o);}});Ext.reg('statusbar',Ext.StatusBar); + +Ext.History=(function(){var iframe,hiddenField;var ready=false;var currentToken;function getHash(){var href=top.location.href,i=href.indexOf("#");return i>=0?href.substr(i+1):null;} +function doSave(){hiddenField.value=currentToken;} +function handleStateChange(token){currentToken=token;Ext.History.fireEvent('change',token);} +function updateIFrame(token){var html=['
    ',token,'
    '].join('');try{var doc=iframe.contentWindow.document;doc.open();doc.write(html);doc.close();return true;}catch(e){return false;}} +function checkIFrame(){if(!iframe.contentWindow||!iframe.contentWindow.document){setTimeout(checkIFrame,10);return;} +var doc=iframe.contentWindow.document;var elem=doc.getElementById("state");var token=elem?elem.innerText:null;var hash=getHash();setInterval(function(){doc=iframe.contentWindow.document;elem=doc.getElementById("state");var newtoken=elem?elem.innerText:null;var newHash=getHash();if(newtoken!==token){token=newtoken;handleStateChange(token);top.location.hash=token;hash=token;doSave();}else if(newHash!==hash){hash=newHash;updateIFrame(newHash);}},50);ready=true;Ext.History.fireEvent('ready',Ext.History);} +function startUp(){currentToken=hiddenField.value?hiddenField.value:getHash();if(Ext.isIE){checkIFrame();}else{var hash=getHash();setInterval(function(){var newHash=getHash();if(newHash!==hash){hash=newHash;handleStateChange(hash);doSave();}},50);ready=true;Ext.History.fireEvent('ready',Ext.History);}} +return{fieldId:'x-history-field',iframeId:'x-history-frame',events:{},init:function(onReady,scope){if(ready){Ext.callback(onReady,scope,[this]);return;} +if(!Ext.isReady){Ext.onReady(function(){Ext.History.init(onReady,scope);});return;} +hiddenField=Ext.getDom(Ext.History.fieldId);if(Ext.isIE){iframe=Ext.getDom(Ext.History.iframeId);} +this.addEvents('ready','change');if(onReady){this.on('ready',onReady,scope,{single:true});} +startUp();},add:function(token,preventDup){if(preventDup!==false){if(this.getToken()==token){return true;}} +if(Ext.isIE){return updateIFrame(token);}else{top.location.hash=token;return true;}},back:function(){history.go(-1);},forward:function(){history.go(1);},getToken:function(){return ready?currentToken:getHash();}};})();Ext.apply(Ext.History,new Ext.util.Observable()); + +Ext.debug={};(function(){var cp;function createConsole(){var scriptPanel=new Ext.debug.ScriptsPanel();var logView=new Ext.debug.LogPanel();var tree=new Ext.debug.DomTree();var tabs=new Ext.TabPanel({activeTab:0,border:false,tabPosition:'bottom',items:[{title:'Debug Console',layout:'border',items:[logView,scriptPanel]},{title:'DOM Inspector',layout:'border',items:[tree]}]});cp=new Ext.Panel({id:'x-debug-browser',title:'Console',collapsible:true,animCollapse:false,style:'position:absolute;left:0;bottom:0;',height:200,logView:logView,layout:'fit',tools:[{id:'close',handler:function(){cp.destroy();cp=null;Ext.EventManager.removeResizeListener(handleResize);}}],items:tabs});cp.render(document.body);cp.resizer=new Ext.Resizable(cp.el,{minHeight:50,handles:"n",pinned:true,transparent:true,resizeElement:function(){var box=this.proxy.getBox();this.proxy.hide();cp.setHeight(box.height);return box;}});function handleResize(){cp.setWidth(Ext.getBody().getViewSize().width);} +Ext.EventManager.onWindowResize(handleResize);handleResize();} +Ext.apply(Ext,{log:function(){if(!cp){createConsole();} +cp.logView.log.apply(cp.logView,arguments);},logf:function(format,arg1,arg2,etc){Ext.log(String.format.apply(String,arguments));},dump:function(o){if(typeof o=='string'||typeof o=='number'||typeof o=='undefined'||Ext.isDate(o)){Ext.log(o);}else if(!o){Ext.log("null");}else if(typeof o!="object"){Ext.log('Unknown return type');}else if(Ext.isArray(o)){Ext.log('['+o.join(',')+']');}else{var b=["{\n"];for(var key in o){var to=typeof o[key];if(to!="function"&&to!="object"){b.push(String.format(" {0}: {1},\n",key,o[key]));}} +var s=b.join("");if(s.length>3){s=s.substr(0,s.length-2);} +Ext.log(s+"\n}");}},_timers:{},time:function(name){name=name||"def";Ext._timers[name]=new Date().getTime();},timeEnd:function(name,printResults){var t=new Date().getTime();name=name||"def";var v=String.format("{0} ms",t-Ext._timers[name]);Ext._timers[name]=new Date().getTime();if(printResults!==false){Ext.log('Timer '+(name=="def"?v:name+": "+v));} +return v;}});})();Ext.debug.ScriptsPanel=Ext.extend(Ext.Panel,{id:'x-debug-scripts',region:'east',minWidth:200,split:true,width:350,border:false,layout:'anchor',style:'border-width:0 0 0 1px;',initComponent:function(){this.scriptField=new Ext.form.TextArea({anchor:'100% -26',style:'border-width:0;'});this.trapBox=new Ext.form.Checkbox({id:'console-trap',boxLabel:'Trap Errors',checked:true});this.toolbar=new Ext.Toolbar([{text:'Run',scope:this,handler:this.evalScript},{text:'Clear',scope:this,handler:this.clear},'->',this.trapBox,' ',' ']);this.items=[this.toolbar,this.scriptField];Ext.debug.ScriptsPanel.superclass.initComponent.call(this);},evalScript:function(){var s=this.scriptField.getValue();if(this.trapBox.getValue()){try{var rt=eval(s);Ext.dump(rt===undefined?'(no return)':rt);}catch(e){Ext.log(e.message||e.descript);}}else{var rt=eval(s);Ext.dump(rt===undefined?'(no return)':rt);}},clear:function(){this.scriptField.setValue('');this.scriptField.focus();}});Ext.debug.LogPanel=Ext.extend(Ext.Panel,{autoScroll:true,region:'center',border:false,style:'border-width:0 1px 0 0',log:function(){var markup=['
    ',Ext.util.Format.htmlEncode(Array.prototype.join.call(arguments,', ')).replace(/\n/g,'
    ').replace(/\s/g,' '),'
    '].join('');this.body.insertHtml('beforeend',markup);this.body.scrollTo('top',100000);},clear:function(){this.body.update('');this.body.dom.scrollTop=0;}});Ext.debug.DomTree=Ext.extend(Ext.tree.TreePanel,{enableDD:false,lines:false,rootVisible:false,animate:false,hlColor:'ffff9c',autoScroll:true,region:'center',border:false,initComponent:function(){Ext.debug.DomTree.superclass.initComponent.call(this);var styles=false,hnode;var nonSpace=/^\s*$/;var html=Ext.util.Format.htmlEncode;var ellipsis=Ext.util.Format.ellipsis;var styleRe=/\s?([a-z\-]*)\:([^;]*)(?:[;\s\n\r]*)/gi;function findNode(n){if(!n||n.nodeType!=1||n==document.body||n==document){return false;} +var pn=[n],p=n;while((p=p.parentNode)&&p.nodeType==1&&p.tagName.toUpperCase()!='HTML'){pn.unshift(p);} +var cn=hnode;for(var i=0,len=pn.length;i'+ellipsis(html(String(c.nodeValue)),35)+'',cls:'x-tree-noicon'}));}} +cb();};this.root=this.setRootNode(new Ext.tree.TreeNode('Ext'));hnode=this.root.appendChild(new Ext.debug.HtmlNode(document.getElementsByTagName('html')[0]));}});Ext.debug.HtmlNode=function(){var html=Ext.util.Format.htmlEncode;var ellipsis=Ext.util.Format.ellipsis;var nonSpace=/^\s*$/;var attrs=[{n:'id',v:'id'},{n:'className',v:'class'},{n:'name',v:'name'},{n:'type',v:'type'},{n:'src',v:'src'},{n:'href',v:'href'}];function hasChild(n){for(var i=0,c;c=n.childNodes[i];i++){if(c.nodeType==1){return true;}} +return false;} +function renderNode(n,leaf){var tag=n.tagName.toLowerCase();var s='<'+tag;for(var i=0,len=attrs.length;i'+html(v)+'"';}} +var style=n.style?n.style.cssText:'';if(style){s+=' style="'+html(style.toLowerCase())+'"';} +if(leaf&&n.childNodes.length>0){s+='>'+ellipsis(html(String(n.innerHTML)),35)+'</'+tag+'>';}else if(leaf){s+=' />';}else{s+='>';} +return s;} +var HtmlNode=function(n){var leaf=!hasChild(n);this.htmlNode=n;this.tagName=n.tagName.toLowerCase();var attr={text:renderNode(n,leaf),leaf:leaf,cls:'x-tree-noicon'};HtmlNode.superclass.constructor.call(this,attr);this.attributes.htmlNode=n;if(!leaf){this.on('expand',this.onExpand,this);this.on('collapse',this.onCollapse,this);}};Ext.extend(HtmlNode,Ext.tree.AsyncTreeNode,{cls:'x-tree-noicon',preventHScroll:true,refresh:function(highlight){var leaf=!hasChild(this.htmlNode);this.setText(renderNode(this.htmlNode,leaf));if(highlight){Ext.fly(this.ui.textNode).highlight();}},onExpand:function(){if(!this.closeNode&&this.parentNode){this.closeNode=this.parentNode.insertBefore(new Ext.tree.TreeNode({text:'</'+this.tagName+'>',cls:'x-tree-noicon'}),this.nextSibling);}else if(this.closeNode){this.closeNode.ui.show();}},onCollapse:function(){if(this.closeNode){this.closeNode.ui.hide();}},render:function(bulkRender){HtmlNode.superclass.render.call(this,bulkRender);},highlightNode:function(){},highlight:function(){},frame:function(){this.htmlNode.style.border='1px solid #0000ff';},unframe:function(){this.htmlNode.style.border='';}});return HtmlNode;}(); diff --git a/tests/javascript/frameworks/ext/ext-all-3.3.1.js b/tests/javascript/frameworks/ext/ext-all-3.3.1.js new file mode 100644 index 0000000000000000000000000000000000000000..51a87b99028a855d552e06a36e5502964ad7e05f --- /dev/null +++ b/tests/javascript/frameworks/ext/ext-all-3.3.1.js @@ -0,0 +1,11 @@ +/* + * Ext JS Library 3.3.1 + * Copyright(c) 2006-2010 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +(function(){var h=Ext.util,k=Ext.each,g=true,i=false;h.Observable=function(){var l=this,m=l.events;if(l.listeners){l.on(l.listeners);delete l.listeners}l.events=m||{}};h.Observable.prototype={filterOptRe:/^(?:scope|delay|buffer|single)$/,fireEvent:function(){var l=Array.prototype.slice.call(arguments,0),n=l[0].toLowerCase(),o=this,m=g,r=o.events[n],t,p,s;if(o.eventsSuspended===g){if(p=o.eventQueue){p.push(l)}}else{if(typeof r=="object"){if(r.bubble){if(r.fire.apply(r,l.slice(1))===i){return i}s=o.getBubbleTarget&&o.getBubbleTarget();if(s&&s.enableBubble){t=s.events[n];if(!t||typeof t!="object"||!t.bubble){s.enableBubble(n)}return s.fireEvent.apply(s,l)}}else{l.shift();m=r.fire.apply(r,l)}}}return m},addListener:function(l,n,m,s){var p=this,r,t,q;if(typeof l=="object"){s=l;for(r in s){t=s[r];if(!p.filterOptRe.test(r)){p.addListener(r,t.fn||t,t.scope||s.scope,t.fn?t:s)}}}else{l=l.toLowerCase();q=p.events[l]||g;if(typeof q=="boolean"){p.events[l]=q=new h.Event(p,l)}q.addListener(n,m,typeof s=="object"?s:{})}},removeListener:function(l,n,m){var o=this.events[l.toLowerCase()];if(typeof o=="object"){o.removeListener(n,m)}},purgeListeners:function(){var n=this.events,l,m;for(m in n){l=n[m];if(typeof l=="object"){l.clearListeners()}}},addEvents:function(p){var n=this;n.events=n.events||{};if(typeof p=="string"){var l=arguments,m=l.length;while(m--){n.events[l[m]]=n.events[l[m]]||g}}else{Ext.applyIf(n.events,p)}},hasListener:function(l){var m=this.events[l.toLowerCase()];return typeof m=="object"&&m.listeners.length>0},suspendEvents:function(l){this.eventsSuspended=g;if(l&&!this.eventQueue){this.eventQueue=[]}},resumeEvents:function(){var l=this,m=l.eventQueue||[];l.eventsSuspended=i;delete l.eventQueue;k(m,function(n){l.fireEvent.apply(l,n)})}};var d=h.Observable.prototype;d.on=d.addListener;d.un=d.removeListener;h.Observable.releaseCapture=function(l){l.fireEvent=d.fireEvent};function e(m,n,l){return function(){if(n.target==arguments[0]){m.apply(l,Array.prototype.slice.call(arguments,0))}}}function b(p,q,m,n){m.task=new h.DelayedTask();return function(){m.task.delay(q.buffer,p,n,Array.prototype.slice.call(arguments,0))}}function c(n,o,m,l){return function(){o.removeListener(m,l);return n.apply(l,arguments)}}function a(p,q,m,n){return function(){var l=new h.DelayedTask(),o=Array.prototype.slice.call(arguments,0);if(!m.tasks){m.tasks=[]}m.tasks.push(l);l.delay(q.delay||10,function(){m.tasks.remove(l);p.apply(n,o)},n)}}h.Event=function(m,l){this.name=l;this.obj=m;this.listeners=[]};h.Event.prototype={addListener:function(p,o,n){var q=this,m;o=o||q.obj;if(!q.isListening(p,o)){m=q.createListener(p,o,n);if(q.firing){q.listeners=q.listeners.slice(0)}q.listeners.push(m)}},createListener:function(q,p,r){r=r||{};p=p||this.obj;var m={fn:q,scope:p,options:r},n=q;if(r.target){n=e(n,r,p)}if(r.delay){n=a(n,r,m,p)}if(r.single){n=c(n,this,q,p)}if(r.buffer){n=b(n,r,m,p)}m.fireFn=n;return m},findListener:function(p,o){var q=this.listeners,n=q.length,m;o=o||this.obj;while(n--){m=q[n];if(m){if(m.fn==p&&m.scope==o){return n}}}return -1},isListening:function(m,l){return this.findListener(m,l)!=-1},removeListener:function(r,q){var p,m,n,s=this,o=i;if((p=s.findListener(r,q))!=-1){if(s.firing){s.listeners=s.listeners.slice(0)}m=s.listeners[p];if(m.task){m.task.cancel();delete m.task}n=m.tasks&&m.tasks.length;if(n){while(n--){m.tasks[n].cancel()}delete m.tasks}s.listeners.splice(p,1);o=g}return o},clearListeners:function(){var o=this,m=o.listeners,n=m.length;while(n--){o.removeListener(m[n].fn,m[n].scope)}},fire:function(){var r=this,q=r.listeners,m=q.length,p=0,n;if(m>0){r.firing=g;var o=Array.prototype.slice.call(arguments,0);for(;p",i="",b=a+"",k=""+i,m=b+"",w=""+k;function h(B,D,C,E,A,y){var z=s.insertHtml(E,Ext.getDom(B),u(D));return C?Ext.get(z,true):z}function u(D){var z="",y,C,B,E;if(typeof D=="string"){z=D}else{if(Ext.isArray(D)){for(var A=0;A"}}}return z}function g(F,C,B,D){x.innerHTML=[C,B,D].join("");var y=-1,A=x,z;while(++y "'+D+'"'},insertBefore:function(y,A,z){return h(y,A,z,c)},insertAfter:function(y,A,z){return h(y,A,z,q,"nextSibling")},insertFirst:function(y,A,z){return h(y,A,z,o,"firstChild")},append:function(y,A,z){return h(y,A,z,r,"",true)},overwrite:function(y,A,z){y=Ext.getDom(y);y.innerHTML=u(A);return z?Ext.get(y.firstChild):y.firstChild},createHtml:u};return s}();Ext.Template=function(h){var k=this,c=arguments,e=[],d;if(Ext.isArray(h)){h=h.join("")}else{if(c.length>1){for(var g=0,b=c.length;g+~]\s?|\s|$)/,tagTokenRe=/^(#)?([\w-\*]+)/,nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/,isIE=window.ActiveXObject?true:false,key=30803;eval("var batch = 30803;");function child(parent,index){var i=0,n=parent.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n}}n=n.nextSibling}return null}function next(n){while((n=n.nextSibling)&&n.nodeType!=1){}return n}function prev(n){while((n=n.previousSibling)&&n.nodeType!=1){}return n}function children(parent){var n=parent.firstChild,nodeIndex=-1,nextNode;while(n){nextNode=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){parent.removeChild(n)}else{n.nodeIndex=++nodeIndex}n=nextNode}return this}function byClassName(nodeSet,cls){if(!cls){return nodeSet}var result=[],ri=-1;for(var i=0,ci;ci=nodeSet[i];i++){if((" "+ci.className+" ").indexOf(cls)!=-1){result[++ri]=ci}}return result}function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0]}if(!n){return null}if(attr=="for"){return n.htmlFor}if(attr=="class"||attr=="className"){return n.className}return n.getAttribute(attr)||n[attr]}function getNodes(ns,mode,tagName){var result=[],ri=-1,cs;if(!ns){return result}tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns]}if(!mode){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[++ri]=ci}}}else{if(mode=="/"||mode==">"){var utag=tagName.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=ni.childNodes;for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){result[++ri]=cj}}}}else{if(mode=="+"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){result[++ri]=n}}}else{if(mode=="~"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)){if(n.nodeName==utag||n.nodeName==tagName||tagName=="*"){result[++ri]=n}}}}}}}return result}function concat(a,b){if(b.slice){return a.concat(b)}for(var i=0,l=b.length;i1){return nodup(results)}return results},isXml:function(el){var docEl=(el?el.ownerDocument||el:0).documentElement;return docEl?docEl.nodeName!=="HTML":false},select:document.querySelectorAll?function(path,root,type){root=root||document;if(!Ext.DomQuery.isXml(root)){try{var cs=root.querySelectorAll(path);return Ext.toArray(cs)}catch(ex){}}return Ext.DomQuery.jsSelect.call(this,path,root,type)}:function(path,root,type){return Ext.DomQuery.jsSelect.call(this,path,root,type)},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0]},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select")}var n=valueCache[path](root),v;n=n[0]?n[0]:n;if(typeof n.normalize=="function"){n.normalize()}v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==="")?defaultValue:v)},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v)},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el)}var isArray=Ext.isArray(el),result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0)},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple")}var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result},matchers:[{re:/^\.([\w-]+)/,select:'n = byClassName(n, " {1} ");'},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w-]+)/,select:'n = byId(n, "{1}");'},{re:/^@([\w-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v},"!=":function(a,v){return a!=v},"^=":function(a,v){return a&&a.substr(0,v.length)==v},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v},"*=":function(a,v){return a&&a.indexOf(v)!==-1},"%=":function(a,v){return(a%v)==0},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+"-")},"~=":function(a,v){return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"nth-child":function(c,a){var r=[],ri=-1,m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a),f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j}}pn._batch=batch}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n}}else{if((n.nodeIndex+l)%f==0){r[++ri]=n}}}return r},"only-child":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci}}return r},empty:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break}}if(empty){r[++ri]=ci}}return r},contains:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||"").indexOf(v)!=-1){r[++ri]=ci}}return r},nodeValue:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci}}return r},checked:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci}}return r},not:function(c,ss){return Ext.DomQuery.filter(c,ss,true)},any:function(c,selectors){var ss=selectors.split("|"),r=[],ri=-1,s;for(var i=0,ci;ci=c[i];i++){for(var j=0;s=ss[j];j++){if(Ext.DomQuery.is(ci,s)){r[++ri]=ci;break}}}return r},odd:function(c){return this["nth-child"](c,"odd")},even:function(c){return this["nth-child"](c,"even")},nth:function(c,a){return c[a-1]||[]},first:function(c){return c[0]||[]},last:function(c){return c[c.length-1]||[]},has:function(c,ss){var s=Ext.DomQuery.select,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci}}return r},next:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},prev:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r}}}}();Ext.query=Ext.DomQuery.select;Ext.util.DelayedTask=function(d,c,a){var e=this,g,b=function(){clearInterval(g);g=null;d.apply(c,a||[])};e.delay=function(i,l,k,h){e.cancel();d=l||d;c=k||c;a=h||a;g=setInterval(b,i)};e.cancel=function(){if(g){clearInterval(g);g=null}}};(function(){var h=document;Ext.Element=function(m,n){var o=typeof m=="string"?h.getElementById(m):m,p;if(!o){return null}p=o.id;if(!n&&p&&Ext.elCache[p]){return Ext.elCache[p].el}this.dom=o;this.id=p||Ext.id(o)};var d=Ext.DomHelper,e=Ext.Element,a=Ext.elCache;e.prototype={set:function(r,n){var p=this.dom,m,q,n=(n!==false)&&!!p.setAttribute;for(m in r){if(r.hasOwnProperty(m)){q=r[m];if(m=="style"){d.applyStyles(p,q)}else{if(m=="cls"){p.className=q}else{if(n){p.setAttribute(m,q)}else{p[m]=q}}}}}return this},defaultUnit:"px",is:function(m){return Ext.DomQuery.is(this.dom,m)},focus:function(p,o){var m=this,o=o||m.dom;try{if(Number(p)){m.focus.defer(p,null,[null,o])}else{o.focus()}}catch(n){}return m},blur:function(){try{this.dom.blur()}catch(m){}return this},getValue:function(m){var n=this.dom.value;return m?parseInt(n,10):n},addListener:function(m,p,o,n){Ext.EventManager.on(this.dom,m,p,o||this,n);return this},removeListener:function(m,o,n){Ext.EventManager.removeListener(this.dom,m,o,n||this);return this},removeAllListeners:function(){Ext.EventManager.removeAll(this.dom);return this},purgeAllListeners:function(){Ext.EventManager.purgeElement(this,true);return this},addUnits:function(m){if(m===""||m=="auto"||m===undefined){m=m||""}else{if(!isNaN(m)||!i.test(m)){m=m+(this.defaultUnit||"px")}}return m},load:function(n,o,m){Ext.Ajax.request(Ext.apply({params:o,url:n.url||n,callback:m,el:this.dom,indicatorText:n.indicatorText||""},Ext.isObject(n)?n:{}));return this},isBorderBox:function(){return Ext.isBorderBox||Ext.isForcedBorderBox||g[(this.dom.tagName||"").toLowerCase()]},remove:function(){var m=this,n=m.dom;if(n){delete m.dom;Ext.removeNode(n)}},hover:function(n,m,p,o){var q=this;q.on("mouseenter",n,p||q.dom,o);q.on("mouseleave",m,p||q.dom,o);return q},contains:function(m){return !m?false:Ext.lib.Dom.isAncestor(this.dom,m.dom?m.dom:m)},getAttributeNS:function(n,m){return this.getAttribute(m,n)},getAttribute:Ext.isIE?function(m,o){var p=this.dom,n=typeof p[o+":"+m];if(["undefined","unknown"].indexOf(n)==-1){return p[o+":"+m]}return p[m]}:function(m,n){var o=this.dom;return o.getAttributeNS(n,m)||o.getAttribute(n+":"+m)||o.getAttribute(m)||o[m]},update:function(m){if(this.dom){this.dom.innerHTML=m}return this}};var l=e.prototype;e.addMethods=function(m){Ext.apply(l,m)};l.on=l.addListener;l.un=l.removeListener;l.autoBoxAdjust=true;var i=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i,c;e.get=function(n){var m,q,p;if(!n){return null}if(typeof n=="string"){if(!(q=h.getElementById(n))){return null}if(a[n]&&a[n].el){m=a[n].el;m.dom=q}else{m=e.addToCache(new e(q))}return m}else{if(n.tagName){if(!(p=n.id)){p=Ext.id(n)}if(a[p]&&a[p].el){m=a[p].el;m.dom=n}else{m=e.addToCache(new e(n))}return m}else{if(n instanceof e){if(n!=c){if(Ext.isIE&&(n.id==undefined||n.id=="")){n.dom=n.dom}else{n.dom=h.getElementById(n.id)||n.dom}}return n}else{if(n.isComposite){return n}else{if(Ext.isArray(n)){return e.select(n)}else{if(n==h){if(!c){var o=function(){};o.prototype=e.prototype;c=new o();c.dom=h}return c}}}}}}return null};e.addToCache=function(m,n){n=n||m.id;a[n]={el:m,data:{},events:{}};return m};e.data=function(n,m,o){n=e.get(n);if(!n){return null}var p=a[n.id].data;if(arguments.length==2){return p[m]}else{return(p[m]=o)}};function k(){if(!Ext.enableGarbageCollector){clearInterval(e.collectorThreadId)}else{var m,p,r,q;for(m in a){q=a[m];if(q.skipGC){continue}p=q.el;r=p.dom;if(!r||!r.parentNode||(!r.offsetParent&&!h.getElementById(m))){if(Ext.enableListenerCollection){Ext.EventManager.removeAll(r)}delete a[m]}}if(Ext.isIE){var n={};for(m in a){n[m]=a[m]}a=Ext.elCache=n}}}e.collectorThreadId=setInterval(k,30000);var b=function(){};b.prototype=e.prototype;e.Flyweight=function(m){this.dom=m};e.Flyweight.prototype=new b();e.Flyweight.prototype.isFlyweight=true;e._flyweights={};e.fly=function(o,m){var n=null;m=m||"_global";if(o=Ext.getDom(o)){(e._flyweights[m]=e._flyweights[m]||new e.Flyweight()).dom=o;n=e._flyweights[m]}return n};Ext.get=e.get;Ext.fly=e.fly;var g=Ext.isStrict?{select:1}:{input:1,select:1,textarea:1};if(Ext.isIE||Ext.isGecko){g.button=1}})();Ext.Element.addMethods(function(){var d="parentNode",b="nextSibling",c="previousSibling",e=Ext.DomQuery,a=Ext.get;return{findParent:function(n,m,h){var k=this.dom,g=document.body,l=0,i;if(Ext.isGecko&&Object.prototype.toString.call(k)=="[object XULElement]"){return null}m=m||50;if(isNaN(m)){i=Ext.getDom(m);m=Number.MAX_VALUE}while(k&&k.nodeType==1&&l "+g,this.dom);return h?i:a(i)},parent:function(g,h){return this.matchNode(d,d,g,h)},next:function(g,h){return this.matchNode(b,b,g,h)},prev:function(g,h){return this.matchNode(c,c,g,h)},first:function(g,h){return this.matchNode(b,"firstChild",g,h)},last:function(g,h){return this.matchNode(c,"lastChild",g,h)},matchNode:function(h,l,g,i){var k=this.dom[l];while(k){if(k.nodeType==1&&(!g||e.is(k,g))){return !i?a(k):k}k=k[h]}return null}}}());Ext.Element.addMethods(function(){var c=Ext.getDom,a=Ext.get,b=Ext.DomHelper;return{appendChild:function(d){return a(d).appendTo(this)},appendTo:function(d){c(d).appendChild(this.dom);return this},insertBefore:function(d){(d=c(d)).parentNode.insertBefore(this.dom,d);return this},insertAfter:function(d){(d=c(d)).parentNode.insertBefore(this.dom,d.nextSibling);return this},insertFirst:function(e,d){e=e||{};if(e.nodeType||e.dom||typeof e=="string"){e=c(e);this.dom.insertBefore(e,this.dom.firstChild);return !d?a(e):e}else{return this.createChild(e,this.dom.firstChild,d)}},replace:function(d){d=a(d);this.insertBefore(d);d.remove();return this},replaceWith:function(d){var e=this;if(d.nodeType||d.dom||typeof d=="string"){d=c(d);e.dom.parentNode.insertBefore(d,e.dom)}else{d=b.insertBefore(e.dom,d)}delete Ext.elCache[e.id];Ext.removeNode(e.dom);e.id=Ext.id(e.dom=d);Ext.Element.addToCache(e.isFlyweight?new Ext.Element(e.dom):e);return e},createChild:function(e,d,g){e=e||{tag:"div"};return d?b.insertBefore(d,e,g!==true):b[!this.dom.firstChild?"overwrite":"append"](this.dom,e,g!==true)},wrap:function(d,e){var g=b.insertBefore(this.dom,d||{tag:"div"},!e);g.dom?g.dom.appendChild(this.dom):g.appendChild(this.dom);return g},insertHtml:function(e,g,d){var h=b.insertHtml(e,this.dom,g);return d?Ext.get(h):h}}}());Ext.Element.addMethods(function(){var B=Ext.supports,h={},y=/(-[a-z])/gi,t=document.defaultView,E=/alpha\(opacity=(.*)\)/i,m=/^\s+|\s+$/g,C=Ext.Element,v=/\s+/,b=/\w/g,d="padding",c="margin",z="border",u="-left",r="-right",x="-top",p="-bottom",k="-width",s=Math,A="hidden",e="isClipped",l="overflow",o="overflow-x",n="overflow-y",D="originalClip",i={l:z+u+k,r:z+r+k,t:z+x+k,b:z+p+k},g={l:d+u,r:d+r,t:d+x,b:d+p},a={l:c+u,r:c+r,t:c+x,b:c+p},F=Ext.Element.data;function q(G,H){return H.charAt(1).toUpperCase()}function w(G){return h[G]||(h[G]=G=="float"?(B.cssFloat?"cssFloat":"styleFloat"):G.replace(y,q))}return{adjustWidth:function(G){var H=this;var I=(typeof G=="number");if(I&&H.autoBoxAdjust&&!H.isBorderBox()){G-=(H.getBorderWidth("lr")+H.getPadding("lr"))}return(I&&G<0)?0:G},adjustHeight:function(G){var H=this;var I=(typeof G=="number");if(I&&H.autoBoxAdjust&&!H.isBorderBox()){G-=(H.getBorderWidth("tb")+H.getPadding("tb"))}return(I&&G<0)?0:G},addClass:function(K){var L=this,J,G,I,H=[];if(!Ext.isArray(K)){if(typeof K=="string"&&!this.hasClass(K)){L.dom.className+=" "+K}}else{for(J=0,G=K.length;J5?I.toLowerCase():H)},setStyle:function(J,I){var G,H;if(typeof J!="object"){G={};G[J]=I;J=G}for(H in J){I=J[H];H=="opacity"?this.setOpacity(I):this.dom.style[w(H)]=I}return this},setOpacity:function(H,G){var K=this,I=K.dom.style;if(!G||!K.anim){if(Ext.isIE){var J=H<1?"alpha(opacity="+H*100+")":"",L=I.filter.replace(E,"").replace(m,"");I.zoom=1;I.filter=L+(L.length>0?" ":"")+J}else{I.opacity=H}}else{K.anim({opacity:{to:H}},K.preanim(arguments,1),null,0.35,"easeIn")}return K},clearOpacity:function(){var G=this.dom.style;if(Ext.isIE){if(!Ext.isEmpty(G.filter)){G.filter=G.filter.replace(E,"").replace(m,"")}}else{G.opacity=G["-moz-opacity"]=G["-khtml-opacity"]=""}return this},getHeight:function(I){var H=this,K=H.dom,J=Ext.isIE&&H.isStyle("display","none"),G=s.max(K.offsetHeight,J?0:K.clientHeight)||0;G=!I?G:G-H.getBorderWidth("tb")-H.getPadding("tb");return G<0?0:G},getWidth:function(H){var I=this,K=I.dom,J=Ext.isIE&&I.isStyle("display","none"),G=s.max(K.offsetWidth,J?0:K.clientWidth)||0;G=!H?G:G-I.getBorderWidth("lr")-I.getPadding("lr");return G<0?0:G},setWidth:function(H,G){var I=this;H=I.adjustWidth(H);!G||!I.anim?I.dom.style.width=I.addUnits(H):I.anim({width:{to:H}},I.preanim(arguments,1));return I},setHeight:function(G,H){var I=this;G=I.adjustHeight(G);!H||!I.anim?I.dom.style.height=I.addUnits(G):I.anim({height:{to:G}},I.preanim(arguments,1));return I},getBorderWidth:function(G){return this.addStyles(G,i)},getPadding:function(G){return this.addStyles(G,g)},clip:function(){var G=this,H=G.dom;if(!F(H,e)){F(H,e,true);F(H,D,{o:G.getStyle(l),x:G.getStyle(o),y:G.getStyle(n)});G.setStyle(l,A);G.setStyle(o,A);G.setStyle(n,A)}return G},unclip:function(){var G=this,I=G.dom;if(F(I,e)){F(I,e,false);var H=F(I,D);if(H.o){G.setStyle(l,H.o)}if(H.x){G.setStyle(o,H.x)}if(H.y){G.setStyle(n,H.y)}}return G},addStyles:function(N,M){var K=0,L=N.match(b),J,I,H,G=L.length;for(H=0;Ha.clientHeight||a.scrollWidth>a.clientWidth},scrollTo:function(a,b){this.dom["scroll"+(/top/i.test(a)?"Top":"Left")]=b;return this},getScroll:function(){var i=this.dom,h=document,a=h.body,c=h.documentElement,b,g,e;if(i==h||i==a){if(Ext.isIE&&Ext.isStrict){b=c.scrollLeft;g=c.scrollTop}else{b=window.pageXOffset;g=window.pageYOffset}e={left:b||(a?a.scrollLeft:0),top:g||(a?a.scrollTop:0)}}else{e={left:i.scrollLeft,top:i.scrollTop}}return e}});Ext.Element.VISIBILITY=1;Ext.Element.DISPLAY=2;Ext.Element.OFFSETS=3;Ext.Element.ASCLASS=4;Ext.Element.visibilityCls="x-hide-nosize";Ext.Element.addMethods(function(){var e=Ext.Element,q="opacity",k="visibility",g="display",d="hidden",o="offsets",l="asclass",n="none",a="nosize",b="originalDisplay",c="visibilityMode",h="isVisible",i=e.data,m=function(s){var r=i(s,b);if(r===undefined){i(s,b,r="")}return r},p=function(s){var r=i(s,c);if(r===undefined){i(s,c,r=1)}return r};return{originalDisplay:"",visibilityMode:1,setVisibilityMode:function(r){i(this.dom,c,r);return this},animate:function(s,u,t,v,r){this.anim(s,{duration:u,callback:t,easing:v},r);return this},anim:function(u,v,s,x,t,r){s=s||"run";v=v||{};var w=this,y=Ext.lib.Anim[s](w.dom,u,(v.duration||x)||0.35,(v.easing||t)||"easeOut",function(){if(r){r.call(w)}if(v.callback){v.callback.call(v.scope||w,w,v)}},w);v.anim=y;return y},preanim:function(r,s){return !r[s]?false:(typeof r[s]=="object"?r[s]:{duration:r[s+1],callback:r[s+2],easing:r[s+3]})},isVisible:function(){var r=this,t=r.dom,s=i(t,h);if(typeof s=="boolean"){return s}s=!r.isStyle(k,d)&&!r.isStyle(g,n)&&!((p(t)==e.ASCLASS)&&r.hasClass(r.visibilityCls||e.visibilityCls));i(t,h,s);return s},setVisible:function(u,r){var x=this,s,z,y,w,v=x.dom,t=p(v);if(typeof r=="string"){switch(r){case g:t=e.DISPLAY;break;case k:t=e.VISIBILITY;break;case o:t=e.OFFSETS;break;case a:case l:t=e.ASCLASS;break}x.setVisibilityMode(t);r=false}if(!r||!x.anim){if(t==e.ASCLASS){x[u?"removeClass":"addClass"](x.visibilityCls||e.visibilityCls)}else{if(t==e.DISPLAY){return x.setDisplayed(u)}else{if(t==e.OFFSETS){if(!u){x.hideModeStyles={position:x.getStyle("position"),top:x.getStyle("top"),left:x.getStyle("left")};x.applyStyles({position:"absolute",top:"-10000px",left:"-10000px"})}else{x.applyStyles(x.hideModeStyles||{position:"",top:"",left:""});delete x.hideModeStyles}}else{x.fixDisplay();v.style.visibility=u?"visible":d}}}}else{if(u){x.setOpacity(0.01);x.setVisible(true)}x.anim({opacity:{to:(u?1:0)}},x.preanim(arguments,1),null,0.35,"easeIn",function(){u||x.setVisible(false).setOpacity(1)})}i(v,h,u);return x},hasMetrics:function(){var r=this.dom;return this.isVisible()||(p(r)==e.VISIBILITY)},toggle:function(r){var s=this;s.setVisible(!s.isVisible(),s.preanim(arguments,0));return s},setDisplayed:function(r){if(typeof r=="boolean"){r=r?m(this.dom):n}this.setStyle(g,r);return this},fixDisplay:function(){var r=this;if(r.isStyle(g,n)){r.setStyle(k,d);r.setStyle(g,m(this.dom));if(r.isStyle(g,n)){r.setStyle(g,"block")}}},hide:function(r){if(typeof r=="string"){this.setVisible(false,r);return this}this.setVisible(false,this.preanim(arguments,0));return this},show:function(r){if(typeof r=="string"){this.setVisible(true,r);return this}this.setVisible(true,this.preanim(arguments,0));return this}}}());(function(){var z=null,B=undefined,l=true,u=false,k="setX",h="setY",a="setXY",o="left",m="bottom",t="top",n="right",r="height",g="width",i="points",x="hidden",A="absolute",v="visible",e="motion",p="position",s="easeOut",d=new Ext.Element.Flyweight(),w={},y=function(C){return C||{}},q=function(C){d.dom=C;d.id=Ext.id(C);return d},c=function(C){if(!w[C]){w[C]=[]}return w[C]},b=function(D,C){w[D]=C};Ext.enableFx=l;Ext.Fx={switchStatements:function(D,E,C){return E.apply(this,C[D])},slideIn:function(I,F){F=y(F);var K=this,H=K.dom,N=H.style,P,C,M,E,D,N,J,O,L,G;I=I||"t";K.queueFx(F,function(){P=q(H).getXY();q(H).fixDisplay();C=q(H).getFxRestore();M={x:P[0],y:P[1],0:P[0],1:P[1],width:H.offsetWidth,height:H.offsetHeight};M.right=M.x+M.width;M.bottom=M.y+M.height;q(H).setWidth(M.width).setHeight(M.height);E=q(H).fxWrap(C.pos,F,x);N.visibility=v;N.position=A;function Q(){q(H).fxUnwrap(E,C.pos,F);N.width=C.width;N.height=C.height;q(H).afterFx(F)}O={to:[M.x,M.y]};L={to:M.width};G={to:M.height};function R(V,S,W,T,Y,aa,ad,ac,ab,X,U){var Z={};q(V).setWidth(W).setHeight(T);if(q(V)[Y]){q(V)[Y](aa)}S[ad]=S[ac]="0";if(ab){Z.width=ab}if(X){Z.height=X}if(U){Z.points=U}return Z}J=q(H).switchStatements(I.toLowerCase(),R,{t:[E,N,M.width,0,z,z,o,m,z,G,z],l:[E,N,0,M.height,z,z,n,t,L,z,z],r:[E,N,M.width,M.height,k,M.right,o,t,z,z,O],b:[E,N,M.width,M.height,h,M.bottom,o,t,z,G,O],tl:[E,N,0,0,z,z,n,m,L,G,O],bl:[E,N,0,0,h,M.y+M.height,n,t,L,G,O],br:[E,N,0,0,a,[M.right,M.bottom],o,t,L,G,O],tr:[E,N,0,0,k,M.x+M.width,o,m,L,G,O]});N.visibility=v;q(E).show();arguments.callee.anim=q(E).fxanim(J,F,e,0.5,s,Q)});return K},slideOut:function(G,E){E=y(E);var I=this,F=I.dom,L=F.style,M=I.getXY(),D,C,J,K,H={to:0};G=G||"t";I.queueFx(E,function(){C=q(F).getFxRestore();J={x:M[0],y:M[1],0:M[0],1:M[1],width:F.offsetWidth,height:F.offsetHeight};J.right=J.x+J.width;J.bottom=J.y+J.height;q(F).setWidth(J.width).setHeight(J.height);D=q(F).fxWrap(C.pos,E,v);L.visibility=v;L.position=A;q(D).setWidth(J.width).setHeight(J.height);function N(){E.useDisplay?q(F).setDisplayed(u):q(F).hide();q(F).fxUnwrap(D,C.pos,E);L.width=C.width;L.height=C.height;q(F).afterFx(E)}function O(P,X,V,Y,T,W,S,U,R){var Q={};P[X]=P[V]="0";Q[Y]=T;if(W){Q[W]=S}if(U){Q[U]=R}return Q}K=q(F).switchStatements(G.toLowerCase(),O,{t:[L,o,m,r,H],l:[L,n,t,g,H],r:[L,o,t,g,H,i,{to:[J.right,J.y]}],b:[L,o,t,r,H,i,{to:[J.x,J.bottom]}],tl:[L,n,m,g,H,r,H],bl:[L,n,t,g,H,r,H,i,{to:[J.x,J.bottom]}],br:[L,o,t,g,H,r,H,i,{to:[J.x+J.width,J.bottom]}],tr:[L,o,m,g,H,r,H,i,{to:[J.right,J.y]}]});arguments.callee.anim=q(D).fxanim(K,E,e,0.5,s,N)});return I},puff:function(I){I=y(I);var G=this,H=G.dom,D=H.style,E,C,F;G.queueFx(I,function(){E=q(H).getWidth();C=q(H).getHeight();q(H).clearOpacity();q(H).show();F=q(H).getFxRestore();function J(){I.useDisplay?q(H).setDisplayed(u):q(H).hide();q(H).clearOpacity();q(H).setPositioning(F.pos);D.width=F.width;D.height=F.height;D.fontSize="";q(H).afterFx(I)}arguments.callee.anim=q(H).fxanim({width:{to:q(H).adjustWidth(E*2)},height:{to:q(H).adjustHeight(C*2)},points:{by:[-E*0.5,-C*0.5]},opacity:{to:0},fontSize:{to:200,unit:"%"}},I,e,0.5,s,J)});return G},switchOff:function(G){G=y(G);var E=this,F=E.dom,C=F.style,D;E.queueFx(G,function(){q(F).clearOpacity();q(F).clip();D=q(F).getFxRestore();function H(){G.useDisplay?q(F).setDisplayed(u):q(F).hide();q(F).clearOpacity();q(F).setPositioning(D.pos);C.width=D.width;C.height=D.height;q(F).afterFx(G)}q(F).fxanim({opacity:{to:0.3}},z,z,0.1,z,function(){q(F).clearOpacity();(function(){q(F).fxanim({height:{to:1},points:{by:[0,q(F).getHeight()*0.5]}},G,e,0.3,"easeIn",H)}).defer(100)})});return E},highlight:function(E,I){I=y(I);var G=this,H=G.dom,C=I.attr||"backgroundColor",D={},F;G.queueFx(I,function(){q(H).clearOpacity();q(H).show();function J(){H.style[C]=F;q(H).afterFx(I)}F=H.style[C];D[C]={from:E||"ffff9c",to:I.endColor||q(H).getColor(C)||"ffffff"};arguments.callee.anim=q(H).fxanim(D,I,"color",1,"easeIn",J)});return G},frame:function(C,F,I){I=y(I);var E=this,H=E.dom,D,G;E.queueFx(I,function(){C=C||"#C3DAF9";if(C.length==6){C="#"+C}F=F||1;q(H).show();var M=q(H).getXY(),K={x:M[0],y:M[1],0:M[0],1:M[1],width:H.offsetWidth,height:H.offsetHeight},J=function(){D=q(document.body||document.documentElement).createChild({style:{position:A,"z-index":35000,border:"0px solid "+C}});return D.queueFx({},L)};arguments.callee.anim={isAnimated:true,stop:function(){F=0;D.stopFx()}};function L(){var N=Ext.isBorderBox?2:1;G=D.anim({top:{from:K.y,to:K.y-20},left:{from:K.x,to:K.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:K.height,to:K.height+20*N},width:{from:K.width,to:K.width+20*N}},{duration:I.duration||1,callback:function(){D.remove();--F>0?J():q(H).afterFx(I)}});arguments.callee.anim={isAnimated:true,stop:function(){G.stop()}}}J()});return E},pause:function(E){var D=this.dom,C;this.queueFx({},function(){C=setTimeout(function(){q(D).afterFx({})},E*1000);arguments.callee.anim={isAnimated:true,stop:function(){clearTimeout(C);q(D).afterFx({})}}});return this},fadeIn:function(E){E=y(E);var C=this,D=C.dom,F=E.endOpacity||1;C.queueFx(E,function(){q(D).setOpacity(0);q(D).fixDisplay();D.style.visibility=v;arguments.callee.anim=q(D).fxanim({opacity:{to:F}},E,z,0.5,s,function(){if(F==1){q(D).clearOpacity()}q(D).afterFx(E)})});return C},fadeOut:function(F){F=y(F);var D=this,E=D.dom,C=E.style,G=F.endOpacity||0;D.queueFx(F,function(){arguments.callee.anim=q(E).fxanim({opacity:{to:G}},F,z,0.5,s,function(){if(G==0){Ext.Element.data(E,"visibilityMode")==Ext.Element.DISPLAY||F.useDisplay?C.display="none":C.visibility=x;q(E).clearOpacity()}q(E).afterFx(F)})});return D},scale:function(C,D,E){this.shift(Ext.apply({},E,{width:C,height:D}));return this},shift:function(E){E=y(E);var D=this.dom,C={};this.queueFx(E,function(){for(var F in E){if(E[F]!=B){C[F]={to:E[F]}}}C.width?C.width.to=q(D).adjustWidth(E.width):C;C.height?C.height.to=q(D).adjustWidth(E.height):C;if(C.x||C.y||C.xy){C.points=C.xy||{to:[C.x?C.x.to:q(D).getX(),C.y?C.y.to:q(D).getY()]}}arguments.callee.anim=q(D).fxanim(C,E,e,0.35,s,function(){q(D).afterFx(E)})});return this},ghost:function(F,D){D=y(D);var H=this,E=H.dom,K=E.style,I={opacity:{to:0},points:{}},L=I.points,C,J,G;F=F||"b";H.queueFx(D,function(){C=q(E).getFxRestore();J=q(E).getWidth();G=q(E).getHeight();function M(){D.useDisplay?q(E).setDisplayed(u):q(E).hide();q(E).clearOpacity();q(E).setPositioning(C.pos);K.width=C.width;K.height=C.height;q(E).afterFx(D)}L.by=q(E).switchStatements(F.toLowerCase(),function(O,N){return[O,N]},{t:[0,-G],l:[-J,0],r:[J,0],b:[0,G],tl:[-J,-G],bl:[-J,G],br:[J,G],tr:[J,-G]});arguments.callee.anim=q(E).fxanim(I,D,e,0.5,s,M)});return H},syncFx:function(){var C=this;C.fxDefaults=Ext.apply(C.fxDefaults||{},{block:u,concurrent:l,stopFx:u});return C},sequenceFx:function(){var C=this;C.fxDefaults=Ext.apply(C.fxDefaults||{},{block:u,concurrent:u,stopFx:u});return C},nextFx:function(){var C=c(this.dom.id)[0];if(C){C.call(this)}},hasActiveFx:function(){return c(this.dom.id)[0]},stopFx:function(C){var D=this,F=D.dom.id;if(D.hasActiveFx()){var E=c(F)[0];if(E&&E.anim){if(E.anim.isAnimated){b(F,[E]);E.anim.stop(C!==undefined?C:l)}else{b(F,[])}}}return D},beforeFx:function(C){if(this.hasActiveFx()&&!C.concurrent){if(C.stopFx){this.stopFx();return l}return u}return l},hasFxBlock:function(){var C=c(this.dom.id);return C&&C[0]&&C[0].block},queueFx:function(F,C){var D=q(this.dom);if(!D.hasFxBlock()){Ext.applyIf(F,D.fxDefaults);if(!F.concurrent){var E=D.beforeFx(F);C.block=F.block;c(D.dom.id).push(C);if(E){D.nextFx()}}else{C.call(D)}}return D},fxWrap:function(I,G,E){var F=this.dom,D,C;if(!G.wrap||!(D=Ext.getDom(G.wrap))){if(G.fixPosition){C=q(F).getXY()}var H=document.createElement("div");H.style.visibility=E;D=F.parentNode.insertBefore(H,F);q(D).setPositioning(I);if(q(D).isStyle(p,"static")){q(D).position("relative")}q(F).clearPositioning("auto");q(D).clip();D.appendChild(F);if(C){q(D).setXY(C)}}return D},fxUnwrap:function(D,G,F){var E=this.dom;q(E).clearPositioning();q(E).setPositioning(G);if(!F.wrap){var C=q(D).dom.parentNode;C.insertBefore(E,D);q(D).remove()}},getFxRestore:function(){var C=this.dom.style;return{pos:this.getPositioning(),width:C.width,height:C.height}},afterFx:function(D){var C=this.dom,E=C.id;if(D.afterStyle){q(C).setStyle(D.afterStyle)}if(D.afterCls){q(C).addClass(D.afterCls)}if(D.remove==l){q(C).remove()}if(D.callback){D.callback.call(D.scope,q(C))}if(!D.concurrent){c(E).shift();q(C).nextFx()}},fxanim:function(F,G,D,H,E,C){D=D||"run";G=G||{};var I=Ext.lib.Anim[D](this.dom,F,(G.duration||H)||0.35,(G.easing||E)||s,C,this);G.anim=I;return I}};Ext.Fx.resize=Ext.Fx.scale;Ext.Element.addMethods(Ext.Fx)})();Ext.CompositeElementLite=function(b,a){this.elements=[];this.add(b,a);this.el=new Ext.Element.Flyweight()};Ext.CompositeElementLite.prototype={isComposite:true,getElement:function(a){var b=this.el;b.dom=a;b.id=a.id;return b},transformElement:function(a){return Ext.getDom(a)},getCount:function(){return this.elements.length},add:function(d,b){var e=this,g=e.elements;if(!d){return this}if(typeof d=="string"){d=Ext.Element.selectorFunction(d,b)}else{if(d.isComposite){d=d.elements}else{if(!Ext.isIterable(d)){d=[d]}}}for(var c=0,a=d.length;c-1){c=Ext.getDom(c);if(a){g=this.elements[b];g.parentNode.insertBefore(c,g);Ext.removeNode(g)}this.elements.splice(b,1,c)}return this},clear:function(){this.elements=[]}};Ext.CompositeElementLite.prototype.on=Ext.CompositeElementLite.prototype.addListener;Ext.CompositeElementLite.importElementMethods=function(){var c,b=Ext.Element.prototype,a=Ext.CompositeElementLite.prototype;for(c in b){if(typeof b[c]=="function"){(function(d){a[d]=a[d]||function(){return this.invoke(d,arguments)}}).call(a,c)}}};Ext.CompositeElementLite.importElementMethods();if(Ext.DomQuery){Ext.Element.selectorFunction=Ext.DomQuery.select}Ext.Element.select=function(a,b){var c;if(typeof a=="string"){c=Ext.Element.selectorFunction(a,b)}else{if(a.length!==undefined){c=a}else{throw"Invalid selector"}}return new Ext.CompositeElementLite(c)};Ext.select=Ext.Element.select;(function(){var b="beforerequest",e="requestcomplete",d="requestexception",h=undefined,c="load",i="POST",a="GET",g=window;Ext.data.Connection=function(k){Ext.apply(this,k);this.addEvents(b,e,d);Ext.data.Connection.superclass.constructor.call(this)};Ext.extend(Ext.data.Connection,Ext.util.Observable,{timeout:30000,autoAbort:false,disableCaching:true,disableCachingParam:"_dc",request:function(q){var t=this;if(t.fireEvent(b,t,q)){if(q.el){if(!Ext.isEmpty(q.indicatorText)){t.indicatorText='
    '+q.indicatorText+"
    "}if(t.indicatorText){Ext.getDom(q.el).innerHTML=t.indicatorText}q.success=(Ext.isFunction(q.success)?q.success:function(){}).createInterceptor(function(o){Ext.getDom(q.el).innerHTML=o.responseText})}var m=q.params,l=q.url||t.url,k,r={success:t.handleResponse,failure:t.handleFailure,scope:t,argument:{options:q},timeout:Ext.num(q.timeout,t.timeout)},n,u;if(Ext.isFunction(m)){m=m.call(q.scope||g,q)}m=Ext.urlEncode(t.extraParams,Ext.isObject(m)?Ext.urlEncode(m):m);if(Ext.isFunction(l)){l=l.call(q.scope||g,q)}if((n=Ext.getDom(q.form))){l=l||n.action;if(q.isUpload||(/multipart\/form-data/i.test(n.getAttribute("enctype")))){return t.doFormUpload.call(t,q,m,l)}u=Ext.lib.Ajax.serializeForm(n);m=m?(m+"&"+u):u}k=q.method||t.method||((m||q.xmlData||q.jsonData)?i:a);if(k===a&&(t.disableCaching&&q.disableCaching!==false)||q.disableCaching===true){var s=q.disableCachingParam||t.disableCachingParam;l=Ext.urlAppend(l,s+"="+(new Date().getTime()))}q.headers=Ext.apply(q.headers||{},t.defaultHeaders||{});if(q.autoAbort===true||t.autoAbort){t.abort()}if((k==a||q.xmlData||q.jsonData)&&m){l=Ext.urlAppend(l,m);m=""}return(t.transId=Ext.lib.Ajax.request(k,l,r,m,q))}else{return q.callback?q.callback.apply(q.scope,[q,h,h]):null}},isLoading:function(k){return k?Ext.lib.Ajax.isCallInProgress(k):!!this.transId},abort:function(k){if(k||this.isLoading()){Ext.lib.Ajax.abort(k||this.transId)}},handleResponse:function(k){this.transId=false;var l=k.argument.options;k.argument=l?l.argument:null;this.fireEvent(e,this,k,l);if(l.success){l.success.call(l.scope,k,l)}if(l.callback){l.callback.call(l.scope,l,true,k)}},handleFailure:function(k,m){this.transId=false;var l=k.argument.options;k.argument=l?l.argument:null;this.fireEvent(d,this,k,l,m);if(l.failure){l.failure.call(l.scope,k,l)}if(l.callback){l.callback.call(l.scope,l,false,k)}},doFormUpload:function(r,k,l){var m=Ext.id(),w=document,s=w.createElement("iframe"),n=Ext.getDom(r.form),v=[],u,q="multipart/form-data",p={target:n.target,method:n.method,encoding:n.encoding,enctype:n.enctype,action:n.action};Ext.fly(s).set({id:m,name:m,cls:"x-hidden",src:Ext.SSL_SECURE_URL});w.body.appendChild(s);if(Ext.isIE){document.frames[m].name=m}Ext.fly(n).set({target:m,method:i,enctype:q,encoding:q,action:l||p.action});Ext.iterate(Ext.urlDecode(k,false),function(x,o){u=w.createElement("input");Ext.fly(u).set({type:"hidden",value:o,name:x});n.appendChild(u);v.push(u)});function t(){var y=this,x={responseText:"",responseXML:null,argument:r.argument},B,A;try{B=s.contentWindow.document||s.contentDocument||g.frames[m].document;if(B){if(B.body){if(/textarea/i.test((A=B.body.firstChild||{}).tagName)){x.responseText=A.value}else{x.responseText=B.body.innerHTML}}x.responseXML=B.XMLDocument||B}}catch(z){}Ext.EventManager.removeListener(s,c,t,y);y.fireEvent(e,y,x,r);function o(E,D,C){if(Ext.isFunction(E)){E.apply(D,C)}}o(r.success,r.scope,[x,r]);o(r.callback,r.scope,[r,true,x]);if(!y.debugUploads){setTimeout(function(){Ext.removeNode(s)},100)}}Ext.EventManager.on(s,c,t,this);n.submit();Ext.fly(n).set(p);Ext.each(v,function(o){Ext.removeNode(o)})}})})();Ext.Ajax=new Ext.data.Connection({autoAbort:false,serializeForm:function(a){return Ext.lib.Ajax.serializeForm(a)}});Ext.util.JSON=new (function(){var useHasOwn=!!{}.hasOwnProperty,isNative=function(){var useNative=null;return function(){if(useNative===null){useNative=Ext.USE_NATIVE_JSON&&window.JSON&&JSON.toString()=="[object JSON]"}return useNative}}(),pad=function(n){return n<10?"0"+n:n},doDecode=function(json){return eval("("+json+")")},doEncode=function(o){if(!Ext.isDefined(o)||o===null){return"null"}else{if(Ext.isArray(o)){return encodeArray(o)}else{if(Ext.isDate(o)){return Ext.util.JSON.encodeDate(o)}else{if(Ext.isString(o)){return encodeString(o)}else{if(typeof o=="number"){return isFinite(o)?String(o):"null"}else{if(Ext.isBoolean(o)){return String(o)}else{var a=["{"],b,i,v;for(i in o){if(!o.getElementsByTagName){if(!useHasOwn||o.hasOwnProperty(i)){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(",")}a.push(doEncode(i),":",v===null?"null":doEncode(v));b=true}}}}a.push("}");return a.join("")}}}}}}},m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},encodeString=function(s){if(/["\\\x00-\x1f]/.test(s)){return'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c}c=b.charCodeAt();return"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16)})+'"'}return'"'+s+'"'},encodeArray=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i
    ';e.body.appendChild(g);d=g.lastChild;if((c=e.defaultView)){if(c.getComputedStyle(g.firstChild.firstChild,null).marginRight!="0px"){b.correctRightMargin=false}if(c.getComputedStyle(d,null).backgroundColor!="transparent"){b.correctTransparentColor=false}}b.cssFloat=!!d.style.cssFloat;e.body.removeChild(g)};if(Ext.isReady){a()}else{Ext.onReady(a)}})();Ext.EventObject=function(){var b=Ext.lib.Event,c=/(dbl)?click/,a={3:13,63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35},d=Ext.isIE?{1:0,4:1,2:2}:{0:0,1:1,2:2};Ext.EventObjectImpl=function(g){if(g){this.setEvent(g.browserEvent||g)}};Ext.EventObjectImpl.prototype={setEvent:function(h){var g=this;if(h==g||(h&&h.browserEvent)){return h}g.browserEvent=h;if(h){g.button=h.button?d[h.button]:(h.which?h.which-1:-1);if(c.test(h.type)&&g.button==-1){g.button=0}g.type=h.type;g.shiftKey=h.shiftKey;g.ctrlKey=h.ctrlKey||h.metaKey||false;g.altKey=h.altKey;g.keyCode=h.keyCode;g.charCode=h.charCode;g.target=b.getTarget(h);g.xy=b.getXY(h)}else{g.button=-1;g.shiftKey=false;g.ctrlKey=false;g.altKey=false;g.keyCode=0;g.charCode=0;g.target=null;g.xy=[0,0]}return g},stopEvent:function(){var e=this;if(e.browserEvent){if(e.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(e)}b.stopEvent(e.browserEvent)}},preventDefault:function(){if(this.browserEvent){b.preventDefault(this.browserEvent)}},stopPropagation:function(){var e=this;if(e.browserEvent){if(e.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(e)}b.stopPropagation(e.browserEvent)}},getCharCode:function(){return this.charCode||this.keyCode},getKey:function(){return this.normalizeKey(this.keyCode||this.charCode)},normalizeKey:function(e){return Ext.isSafari?(a[e]||e):e},getPageX:function(){return this.xy[0]},getPageY:function(){return this.xy[1]},getXY:function(){return this.xy},getTarget:function(g,h,e){return g?Ext.fly(this.target).findParent(g,h,e):(e?Ext.get(this.target):this.target)},getRelatedTarget:function(){return this.browserEvent?b.getRelatedTarget(this.browserEvent):null},getWheelDelta:function(){var g=this.browserEvent;var h=0;if(g.wheelDelta){h=g.wheelDelta/120}else{if(g.detail){h=-g.detail/3}}return h},within:function(h,i,e){if(h){var g=this[i?"getRelatedTarget":"getTarget"]();return g&&((e?(g==Ext.getDom(h)):false)||Ext.fly(h).contains(g))}return false}};return new Ext.EventObjectImpl()}();Ext.Loader=Ext.apply({},{load:function(k,i,l,c){var l=l||this,g=document.getElementsByTagName("head")[0],b=document.createDocumentFragment(),a=k.length,h=0,e=this;var m=function(n){g.appendChild(e.buildScriptTag(k[n],d))};var d=function(){h++;if(a==h&&typeof i=="function"){i.call(l)}else{if(c===true){m(h)}}};if(c===true){m.call(this,0)}else{Ext.each(k,function(o,n){b.appendChild(this.buildScriptTag(o,d))},this);g.appendChild(b)}},buildScriptTag:function(b,c){var a=document.createElement("script");a.type="text/javascript";a.src=b;if(a.readyState){a.onreadystatechange=function(){if(a.readyState=="loaded"||a.readyState=="complete"){a.onreadystatechange=null;c()}}}else{a.onload=c}return a}});Ext.ns("Ext.grid","Ext.list","Ext.dd","Ext.tree","Ext.form","Ext.menu","Ext.state","Ext.layout","Ext.app","Ext.ux","Ext.chart","Ext.direct");Ext.apply(Ext,function(){var c=Ext,a=0,b=null;return{emptyFn:function(){},BLANK_IMAGE_URL:Ext.isIE6||Ext.isIE7||Ext.isAir?"http://www.extjs.com/s.gif":"data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==",extendX:function(d,e){return Ext.extend(d,e(d.prototype))},getDoc:function(){return Ext.get(document)},num:function(e,d){e=Number(Ext.isEmpty(e)||Ext.isArray(e)||typeof e=="boolean"||(typeof e=="string"&&e.trim().length==0)?NaN:e);return isNaN(e)?d:e},value:function(g,d,e){return Ext.isEmpty(g,e)?d:g},escapeRe:function(d){return d.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1")},sequence:function(h,d,g,e){h[d]=h[d].createSequence(g,e)},addBehaviors:function(i){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(i)})}else{var e={},h,d,g;for(d in i){if((h=d.split("@"))[1]){g=h[0];if(!e[g]){e[g]=Ext.select(g)}e[g].on(h[1],i[d])}}e=null}},getScrollBarWidth:function(g){if(!Ext.isReady){return 0}if(g===true||b===null){var i=Ext.getBody().createChild('
    '),h=i.child("div",true);var e=h.offsetWidth;i.setStyle("overflow",(Ext.isWebKit||Ext.isGecko)?"auto":"scroll");var d=h.offsetWidth;i.remove();b=e-d+2}return b},combine:function(){var g=arguments,e=g.length,k=[];for(var h=0;hh?1:-1};Ext.each(d,function(h){g=e(g,h)==1?g:h});return g},mean:function(d){return d.length>0?Ext.sum(d)/d.length:undefined},sum:function(d){var e=0;Ext.each(d,function(g){e+=g});return e},partition:function(d,e){var g=[[],[]];Ext.each(d,function(k,l,h){g[(e&&e(k,l,h))||(!e&&k)?0:1].push(k)});return g},invoke:function(d,e){var h=[],g=Array.prototype.slice.call(arguments,2);Ext.each(d,function(k,l){if(k&&typeof k[e]=="function"){h.push(k[e].apply(k,g))}else{h.push(undefined)}});return h},pluck:function(d,g){var e=[];Ext.each(d,function(h){e.push(h[g])});return e},zip:function(){var n=Ext.partition(arguments,function(i){return typeof i!="function"}),k=n[0],m=n[1][0],d=Ext.max(Ext.pluck(k,"length")),h=[];for(var l=0;l=a.left&&b.right<=a.right&&b.top>=a.top&&b.bottom<=a.bottom)},getArea:function(){var a=this;return((a.bottom-a.top)*(a.right-a.left))},intersect:function(h){var g=this,d=Math.max(g.top,h.top),e=Math.min(g.right,h.right),a=Math.min(g.bottom,h.bottom),c=Math.max(g.left,h.left);if(a>=d&&e>=c){return new Ext.lib.Region(d,e,a,c)}},union:function(h){var g=this,d=Math.min(g.top,h.top),e=Math.max(g.right,h.right),a=Math.max(g.bottom,h.bottom),c=Math.min(g.left,h.left);return new Ext.lib.Region(d,e,a,c)},constrainTo:function(b){var a=this;a.top=a.top.constrain(b.top,b.bottom);a.bottom=a.bottom.constrain(b.top,b.bottom);a.left=a.left.constrain(b.left,b.right);a.right=a.right.constrain(b.left,b.right);return a},adjust:function(d,c,a,g){var e=this;e.top+=d;e.left+=c;e.right+=g;e.bottom+=a;return e}};Ext.lib.Region.getRegion=function(e){var h=Ext.lib.Dom.getXY(e),d=h[1],g=h[0]+e.offsetWidth,a=h[1]+e.offsetHeight,c=h[0];return new Ext.lib.Region(d,g,a,c)};Ext.lib.Point=function(a,c){if(Ext.isArray(a)){c=a[1];a=a[0]}var b=this;b.x=b.right=b.left=b[0]=a;b.y=b.top=b.bottom=b[1]=c};Ext.lib.Point.prototype=new Ext.lib.Region();Ext.apply(Ext.DomHelper,function(){var e,a="afterbegin",h="afterend",i="beforebegin",d="beforeend",b=/tag|children|cn|html$/i;function g(n,q,p,r,m,k){n=Ext.getDom(n);var l;if(e.useDom){l=c(q,null);if(k){n.appendChild(l)}else{(m=="firstChild"?n:n.parentNode).insertBefore(l,n[m]||n)}}else{l=Ext.DomHelper.insertHtml(r,n,Ext.DomHelper.createHtml(q))}return p?Ext.get(l,true):l}function c(k,s){var m,v=document,q,t,n,u;if(Ext.isArray(k)){m=v.createDocumentFragment();for(var r=0,p=k.length;r0){return setTimeout(d,c)}d();return 0},createSequence:function(c,b,a){if(!Ext.isFunction(b)){return c}else{return function(){var d=c.apply(this||window,arguments);b.apply(a||this||window,arguments);return d}}}};Ext.defer=Ext.util.Functions.defer;Ext.createInterceptor=Ext.util.Functions.createInterceptor;Ext.createSequence=Ext.util.Functions.createSequence;Ext.createDelegate=Ext.util.Functions.createDelegate;Ext.apply(Ext.util.Observable.prototype,function(){function a(k){var i=(this.methodEvents=this.methodEvents||{})[k],d,c,g,h=this;if(!i){this.methodEvents[k]=i={};i.originalFn=this[k];i.methodName=k;i.before=[];i.after=[];var b=function(m,l,e){if((c=m.apply(l||h,e))!==undefined){if(typeof c=="object"){if(c.returnValue!==undefined){d=c.returnValue}else{d=c}g=!!c.cancel}else{if(c===false){g=true}else{d=c}}}};this[k]=function(){var m=Array.prototype.slice.call(arguments,0),l;d=c=undefined;g=false;for(var n=0,e=i.before.length;n=525:!((Ext.isGecko&&!Ext.isWindows)||Ext.isOpera);return{doResizeEvent:function(){var m=a.getViewHeight(),l=a.getViewWidth();if(g!=m||h!=l){c.fire(h=l,g=m)}},onWindowResize:function(n,m,l){if(!c){c=new Ext.util.Event();k=new Ext.util.DelayedTask(this.doResizeEvent);Ext.EventManager.on(window,"resize",this.fireWindowResize,this)}c.addListener(n,m,l)},fireWindowResize:function(){if(c){k.delay(100)}},onTextResize:function(o,n,l){if(!e){e=new Ext.util.Event();var m=new Ext.Element(document.createElement("div"));m.dom.className="x-text-resize";m.dom.innerHTML="X";m.appendTo(document.body);b=m.dom.offsetHeight;setInterval(function(){if(m.dom.offsetHeight!=b){e.fire(b,b=m.dom.offsetHeight)}},this.textResizeInterval)}e.addListener(o,n,l)},removeResizeListener:function(m,l){if(c){c.removeListener(m,l)}},fireResize:function(){if(c){c.fire(a.getViewWidth(),a.getViewHeight())}},textResizeInterval:50,ieDeferSrc:false,getKeyEvent:function(){return d?"keydown":"keypress"},useKeydown:d}}());Ext.EventManager.on=Ext.EventManager.addListener;Ext.apply(Ext.EventObjectImpl.prototype,{BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,RETURN:13,SHIFT:16,CTRL:17,CONTROL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGEUP:33,PAGE_DOWN:34,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,isNavKeyPress:function(){var b=this,a=this.normalizeKey(b.keyCode);return(a>=33&&a<=40)||a==b.RETURN||a==b.TAB||a==b.ESC},isSpecialKey:function(){var a=this.normalizeKey(this.keyCode);return(this.type=="keypress"&&this.ctrlKey)||this.isNavKeyPress()||(a==this.BACKSPACE)||(a>=16&&a<=20)||(a>=44&&a<=46)},getPoint:function(){return new Ext.lib.Point(this.xy[0],this.xy[1])},hasModifier:function(){return((this.ctrlKey||this.altKey)||this.shiftKey)}});Ext.Element.addMethods({swallowEvent:function(a,b){var d=this;function c(g){g.stopPropagation();if(b){g.preventDefault()}}if(Ext.isArray(a)){Ext.each(a,function(g){d.on(g,c)});return d}d.on(a,c);return d},relayEvent:function(a,b){this.on(a,function(c){b.fireEvent(a,c)})},clean:function(b){var d=this,e=d.dom,g=e.firstChild,c=-1;if(Ext.Element.data(e,"isCleaned")&&b!==true){return d}while(g){var a=g.nextSibling;if(g.nodeType==3&&!(/\S/.test(g.nodeValue))){e.removeChild(g)}else{g.nodeIndex=++c}g=a}Ext.Element.data(e,"isCleaned",true);return d},load:function(){var a=this.getUpdater();a.update.apply(a,arguments);return this},getUpdater:function(){return this.updateManager||(this.updateManager=new Ext.Updater(this))},update:function(html,loadScripts,callback){if(!this.dom){return this}html=html||"";if(loadScripts!==true){this.dom.innerHTML=html;if(typeof callback=="function"){callback()}return this}var id=Ext.id(),dom=this.dom;html+='';Ext.lib.Event.onAvailable(id,function(){var DOC=document,hd=DOC.getElementsByTagName("head")[0],re=/(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig,srcRe=/\ssrc=([\'\"])(.*?)\1/i,typeRe=/\stype=([\'\"])(.*?)\1/i,match,attrs,srcMatch,typeMatch,el,s;while((match=re.exec(html))){attrs=match[1];srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){s=DOC.createElement("script");s.src=srcMatch[2];typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2]}hd.appendChild(s)}else{if(match[2]&&match[2].length>0){if(window.execScript){window.execScript(match[2])}else{window.eval(match[2])}}}}el=DOC.getElementById(id);if(el){Ext.removeNode(el)}if(typeof callback=="function"){callback()}});dom.innerHTML=html.replace(/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this},removeAllListeners:function(){this.removeAnchor();Ext.EventManager.removeAll(this.dom);return this},createProxy:function(a,e,d){a=(typeof a=="object")?a:{tag:"div",cls:a};var c=this,b=e?Ext.DomHelper.append(e,a,true):Ext.DomHelper.insertBefore(c.dom,a,true);if(d&&c.setBox&&c.getBox){b.setBox(c.getBox())}return b}});Ext.Element.prototype.getUpdateManager=Ext.Element.prototype.getUpdater;Ext.Element.addMethods({getAnchorXY:function(e,m,t){e=(e||"tl").toLowerCase();t=t||{};var l=this,b=l.dom==document.body||l.dom==document,p=t.width||b?Ext.lib.Dom.getViewWidth():l.getWidth(),i=t.height||b?Ext.lib.Dom.getViewHeight():l.getHeight(),q,a=Math.round,c=l.getXY(),n=l.getScroll(),k=b?n.left:!m?c[0]:0,g=b?n.top:!m?c[1]:0,d={c:[a(p*0.5),a(i*0.5)],t:[a(p*0.5),0],l:[0,a(i*0.5)],r:[p,a(i*0.5)],b:[a(p*0.5),i],tl:[0,0],bl:[0,i],br:[p,i],tr:[p,0]};q=d[e];return[q[0]+k,q[1]+g]},anchorTo:function(b,h,c,a,l,m){var i=this,e=i.dom,k=!Ext.isEmpty(l),d=function(){Ext.fly(e).alignTo(b,h,c,a);Ext.callback(m,Ext.fly(e))},g=this.getAnchor();this.removeAnchor();Ext.apply(g,{fn:d,scroll:k});Ext.EventManager.onWindowResize(d,null);if(k){Ext.EventManager.on(window,"scroll",d,null,{buffer:!isNaN(l)?l:50})}d.call(i);return i},removeAnchor:function(){var b=this,a=this.getAnchor();if(a&&a.fn){Ext.EventManager.removeResizeListener(a.fn);if(a.scroll){Ext.EventManager.un(window,"scroll",a.fn)}delete a.fn}return b},getAnchor:function(){var b=Ext.Element.data,c=this.dom;if(!c){return}var a=b(c,"_anchor");if(!a){a=b(c,"_anchor",{})}return a},getAlignToXY:function(g,B,C){g=Ext.get(g);if(!g||!g.dom){throw"Element.alignToXY with an element that doesn't exist"}C=C||[0,0];B=(!B||B=="?"?"tl-bl?":(!(/-/).test(B)&&B!==""?"tl-"+B:B||"tl-bl")).toLowerCase();var L=this,I=L.dom,N,M,q,n,t,G,z,u=Ext.lib.Dom.getViewWidth()-10,H=Ext.lib.Dom.getViewHeight()-10,b,i,k,l,v,A,O=document,K=O.documentElement,s=O.body,F=(K.scrollLeft||s.scrollLeft||0)+5,E=(K.scrollTop||s.scrollTop||0)+5,J=false,e="",a="",D=B.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!D){throw"Element.alignTo with an invalid alignment "+B}e=D[1];a=D[2];J=!!D[3];N=L.getAnchorXY(e,true);M=g.getAnchorXY(a,false);q=M[0]-N[0]+C[0];n=M[1]-N[1]+C[1];if(J){t=L.getWidth();G=L.getHeight();z=g.getRegion();b=e.charAt(0);i=e.charAt(e.length-1);k=a.charAt(0);l=a.charAt(a.length-1);v=((b=="t"&&k=="b")||(b=="b"&&k=="t"));A=((i=="r"&&l=="l")||(i=="l"&&l=="r"));if(q+t>u+F){q=A?z.left-t:u+F-t}if(qH+E){n=v?z.top-G:H+E-G}if(nC){q=C-r;n=true}if((p+D)>g){p=g-D;n=true}if(q"+String.format(Ext.Element.boxMarkup,c)+"
    "));Ext.DomQuery.selectNode("."+c+"-mc",d.dom).appendChild(this.dom);return d},setSize:function(e,c,d){var g=this;if(typeof e=="object"){c=e.height;e=e.width}e=g.adjustWidth(e);c=g.adjustHeight(c);if(!d||!g.anim){g.dom.style.width=g.addUnits(e);g.dom.style.height=g.addUnits(c)}else{g.anim({width:{to:e},height:{to:c}},g.preanim(arguments,2))}return g},getComputedHeight:function(){var d=this,c=Math.max(d.dom.offsetHeight,d.dom.clientHeight);if(!c){c=parseFloat(d.getStyle("height"))||0;if(!d.isBorderBox()){c+=d.getFrameWidth("tb")}}return c},getComputedWidth:function(){var c=Math.max(this.dom.offsetWidth,this.dom.clientWidth);if(!c){c=parseFloat(this.getStyle("width"))||0;if(!this.isBorderBox()){c+=this.getFrameWidth("lr")}}return c},getFrameWidth:function(d,c){return c&&this.isBorderBox()?0:(this.getPadding(d)+this.getBorderWidth(d))},addClassOnOver:function(c){this.hover(function(){Ext.fly(this,a).addClass(c)},function(){Ext.fly(this,a).removeClass(c)});return this},addClassOnFocus:function(c){this.on("focus",function(){Ext.fly(this,a).addClass(c)},this.dom);this.on("blur",function(){Ext.fly(this,a).removeClass(c)},this.dom);return this},addClassOnClick:function(c){var d=this.dom;this.on("mousedown",function(){Ext.fly(d,a).addClass(c);var g=Ext.getDoc(),e=function(){Ext.fly(d,a).removeClass(c);g.removeListener("mouseup",e)};g.on("mouseup",e)});return this},getViewSize:function(){var g=document,h=this.dom,c=(h==g||h==g.body);if(c){var e=Ext.lib.Dom;return{width:e.getViewWidth(),height:e.getViewHeight()}}else{return{width:h.clientWidth,height:h.clientHeight}}},getStyleSize:function(){var k=this,c,i,m=document,n=this.dom,e=(n==m||n==m.body),g=n.style;if(e){var l=Ext.lib.Dom;return{width:l.getViewWidth(),height:l.getViewHeight()}}if(g.width&&g.width!="auto"){c=parseFloat(g.width);if(k.isBorderBox()){c-=k.getFrameWidth("lr")}}if(g.height&&g.height!="auto"){i=parseFloat(g.height);if(k.isBorderBox()){i-=k.getFrameWidth("tb")}}return{width:c||k.getWidth(true),height:i||k.getHeight(true)}},getSize:function(c){return{width:this.getWidth(c),height:this.getHeight(c)}},repaint:function(){var c=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.fly(c).removeClass("x-repaint")},1);return this},unselectable:function(){this.dom.unselectable="on";return this.swallowEvent("selectstart",true).applyStyles("-moz-user-select:none;-khtml-user-select:none;").addClass("x-unselectable")},getMargins:function(d){var e=this,c,g={t:"top",l:"left",r:"right",b:"bottom"},h={};if(!d){for(c in e.margins){h[g[c]]=parseFloat(e.getStyle(e.margins[c]))||0}return h}else{return e.addStyles.call(e,d,e.margins)}}}}());Ext.Element.addMethods({setBox:function(e,g,b){var d=this,a=e.width,c=e.height;if((g&&!d.autoBoxAdjust)&&!d.isBorderBox()){a-=(d.getBorderWidth("lr")+d.getPadding("lr"));c-=(d.getBorderWidth("tb")+d.getPadding("tb"))}d.setBounds(e.x,e.y,a,c,d.animTest.call(d,arguments,b,2));return d},getBox:function(k,q){var n=this,x,e,p,d=n.getBorderWidth,s=n.getPadding,g,a,v,o;if(!q){x=n.getXY()}else{e=parseInt(n.getStyle("left"),10)||0;p=parseInt(n.getStyle("top"),10)||0;x=[e,p]}var c=n.dom,u=c.offsetWidth,i=c.offsetHeight,m;if(!k){m={x:x[0],y:x[1],0:x[0],1:x[1],width:u,height:i}}else{g=d.call(n,"l")+s.call(n,"l");a=d.call(n,"r")+s.call(n,"r");v=d.call(n,"t")+s.call(n,"t");o=d.call(n,"b")+s.call(n,"b");m={x:x[0]+g,y:x[1]+v,0:x[0]+g,1:x[1]+v,width:u-(g+a),height:i-(v+o)}}m.right=m.x+m.width;m.bottom=m.y+m.height;return m},move:function(k,b,c){var g=this,n=g.getXY(),l=n[0],i=n[1],d=[l-b,i],m=[l+b,i],h=[l,i-b],a=[l,i+b],e={l:d,left:d,r:m,right:m,t:h,top:h,up:h,b:a,bottom:a,down:a};k=k.toLowerCase();g.moveTo(e[k][0],e[k][1],g.animTest.call(g,arguments,c,2))},setLeftTop:function(d,c){var b=this,a=b.dom.style;a.left=b.addUnits(d);a.top=b.addUnits(c);return b},getRegion:function(){return Ext.lib.Dom.getRegion(this.dom)},setBounds:function(b,g,d,a,c){var e=this;if(!c||!e.anim){e.setSize(d,a);e.setLocation(b,g)}else{e.anim({points:{to:[b,g]},width:{to:e.adjustWidth(d)},height:{to:e.adjustHeight(a)}},e.preanim(arguments,4),"motion")}return e},setRegion:function(b,a){return this.setBounds(b.left,b.top,b.right-b.left,b.bottom-b.top,this.animTest.call(this,arguments,a,1))}});Ext.Element.addMethods({scrollTo:function(b,d,a){var e=/top/i.test(b),c=this,g=c.dom,h;if(!a||!c.anim){h="scroll"+(e?"Top":"Left");g[h]=d}else{h="scroll"+(e?"Left":"Top");c.anim({scroll:{to:e?[g[h],d]:[d,g[h]]}},c.preanim(arguments,2),"scroll")}return c},scrollIntoView:function(e,i){var q=Ext.getDom(e)||Ext.getBody().dom,h=this.dom,g=this.getOffsetsTo(q),m=g[0]+q.scrollLeft,v=g[1]+q.scrollTop,s=v+h.offsetHeight,d=m+h.offsetWidth,a=q.clientHeight,n=parseInt(q.scrollTop,10),u=parseInt(q.scrollLeft,10),k=n+a,p=u+q.clientWidth;if(h.offsetHeight>a||vk){q.scrollTop=s-a}}q.scrollTop=q.scrollTop;if(i!==false){if(h.offsetWidth>q.clientWidth||mp){q.scrollLeft=d-q.clientWidth}}q.scrollLeft=q.scrollLeft}return this},scrollChildIntoView:function(b,a){Ext.fly(b,"_scrollChildIntoView").scrollIntoView(this,a)},scroll:function(n,b,d){if(!this.isScrollable()){return false}var e=this.dom,g=e.scrollLeft,q=e.scrollTop,o=e.scrollWidth,m=e.scrollHeight,i=e.clientWidth,a=e.clientHeight,c=false,p,k={l:Math.min(g+b,o-i),r:p=Math.max(g-b,0),t:Math.max(q-b,0),b:Math.min(q+b,m-a)};k.d=k.b;k.u=k.t;n=n.substr(0,1);if((p=k[n])>-1){c=true;this.scrollTo(n=="l"||n=="r"?"left":"top",p,this.preanim(arguments,2))}return c}});Ext.Element.addMethods(function(){var d="visibility",b="display",a="hidden",h="none",c="x-masked",g="x-masked-relative",e=Ext.Element.data;return{isVisible:function(i){var k=!this.isStyle(d,a)&&!this.isStyle(b,h),l=this.dom.parentNode;if(i!==true||!k){return k}while(l&&!(/^body/i.test(l.tagName))){if(!Ext.fly(l,"_isVisible").isVisible()){return false}l=l.parentNode}return true},isDisplayed:function(){return !this.isStyle(b,h)},enableDisplayMode:function(i){this.setVisibilityMode(Ext.Element.DISPLAY);if(!Ext.isEmpty(i)){e(this.dom,"originalDisplay",i)}return this},mask:function(k,o){var q=this,m=q.dom,p=Ext.DomHelper,n="ext-el-mask-msg",i,r;if(!(/^body/i.test(m.tagName)&&q.getStyle("position")=="static")){q.addClass(g)}if(i=e(m,"maskMsg")){i.remove()}if(i=e(m,"mask")){i.remove()}r=p.append(m,{cls:"ext-el-mask"},true);e(m,"mask",r);q.addClass(c);r.setDisplayed(true);if(typeof k=="string"){var l=p.append(m,{cls:n,cn:{tag:"div"}},true);e(m,"maskMsg",l);l.dom.className=o?n+" "+o:n;l.dom.firstChild.innerHTML=k;l.setDisplayed(true);l.center(q)}if(Ext.isIE&&!(Ext.isIE7&&Ext.isStrict)&&q.getStyle("height")=="auto"){r.setSize(undefined,q.getHeight())}return r},unmask:function(){var l=this,m=l.dom,i=e(m,"mask"),k=e(m,"maskMsg");if(i){if(k){k.remove();e(m,"maskMsg",undefined)}i.remove();e(m,"mask",undefined);l.removeClass([c,g])}},isMasked:function(){var i=e(this.dom,"mask");return i&&i.isVisible()},createShim:function(){var i=document.createElement("iframe"),k;i.frameBorder="0";i.className="ext-shim";i.src=Ext.SSL_SECURE_URL;k=Ext.get(this.dom.parentNode.insertBefore(i,this.dom));k.autoBoxAdjust=false;return k}}}());Ext.Element.addMethods({addKeyListener:function(b,d,c){var a;if(typeof b!="object"||Ext.isArray(b)){a={key:b,fn:d,scope:c}}else{a={key:b.key,shift:b.shift,ctrl:b.ctrl,alt:b.alt,fn:d,scope:c}}return new Ext.KeyMap(this,a)},addKeyMap:function(a){return new Ext.KeyMap(this,a)}});Ext.CompositeElementLite.importElementMethods();Ext.apply(Ext.CompositeElementLite.prototype,{addElements:function(c,a){if(!c){return this}if(typeof c=="string"){c=Ext.Element.selectorFunction(c,a)}var b=this.elements;Ext.each(c,function(d){b.push(Ext.get(d))});return this},first:function(){return this.item(0)},last:function(){return this.item(this.getCount()-1)},contains:function(a){return this.indexOf(a)!=-1},removeElement:function(d,e){var c=this,a=this.elements,b;Ext.each(d,function(g){if((b=(a[g]||a[g=c.indexOf(g)]))){if(e){if(b.dom){b.remove()}else{Ext.removeNode(b)}}a.splice(g,1)}});return this}});Ext.CompositeElement=Ext.extend(Ext.CompositeElementLite,{constructor:function(b,a){this.elements=[];this.add(b,a)},getElement:function(a){return a},transformElement:function(a){return Ext.get(a)}});Ext.Element.select=function(a,d,b){var c;if(typeof a=="string"){c=Ext.Element.selectorFunction(a,b)}else{if(a.length!==undefined){c=a}else{throw"Invalid selector"}}return(d===true)?new Ext.CompositeElement(c):new Ext.CompositeElementLite(c)};Ext.select=Ext.Element.select;Ext.UpdateManager=Ext.Updater=Ext.extend(Ext.util.Observable,function(){var b="beforeupdate",d="update",c="failure";function a(h){var i=this;i.transaction=null;if(h.argument.form&&h.argument.reset){try{h.argument.form.reset()}catch(k){}}if(i.loadScripts){i.renderer.render(i.el,h,i,g.createDelegate(i,[h]))}else{i.renderer.render(i.el,h,i);g.call(i,h)}}function g(h,i,k){this.fireEvent(i||d,this.el,h);if(Ext.isFunction(h.argument.callback)){h.argument.callback.call(h.argument.scope,this.el,Ext.isEmpty(k)?true:false,h,h.argument.options)}}function e(h){g.call(this,h,c,!!(this.transaction=null))}return{constructor:function(i,h){var k=this;i=Ext.get(i);if(!h&&i.updateManager){return i.updateManager}k.el=i;k.defaultUrl=null;k.addEvents(b,d,c);Ext.apply(k,Ext.Updater.defaults);k.transaction=null;k.refreshDelegate=k.refresh.createDelegate(k);k.updateDelegate=k.update.createDelegate(k);k.formUpdateDelegate=(k.formUpdate||function(){}).createDelegate(k);k.renderer=k.renderer||k.getDefaultRenderer();Ext.Updater.superclass.constructor.call(k)},setRenderer:function(h){this.renderer=h},getRenderer:function(){return this.renderer},getDefaultRenderer:function(){return new Ext.Updater.BasicRenderer()},setDefaultUrl:function(h){this.defaultUrl=h},getEl:function(){return this.el},update:function(i,p,q,m){var l=this,h,k;if(l.fireEvent(b,l.el,i,p)!==false){if(Ext.isObject(i)){h=i;i=h.url;p=p||h.params;q=q||h.callback;m=m||h.discardUrl;k=h.scope;if(!Ext.isEmpty(h.nocache)){l.disableCaching=h.nocache}if(!Ext.isEmpty(h.text)){l.indicatorText='
    '+h.text+"
    "}if(!Ext.isEmpty(h.scripts)){l.loadScripts=h.scripts}if(!Ext.isEmpty(h.timeout)){l.timeout=h.timeout}}l.showLoading();if(!m){l.defaultUrl=i}if(Ext.isFunction(i)){i=i.call(l)}var n=Ext.apply({},{url:i,params:(Ext.isFunction(p)&&k)?p.createDelegate(k):p,success:a,failure:e,scope:l,callback:undefined,timeout:(l.timeout*1000),disableCaching:l.disableCaching,argument:{options:h,url:i,form:null,callback:q,scope:k||window,params:p}},h);l.transaction=Ext.Ajax.request(n)}},formUpdate:function(l,h,k,m){var i=this;if(i.fireEvent(b,i.el,l,h)!==false){if(Ext.isFunction(h)){h=h.call(i)}l=Ext.getDom(l);i.transaction=Ext.Ajax.request({form:l,url:h,success:a,failure:e,scope:i,timeout:(i.timeout*1000),argument:{url:h,form:l,callback:m,reset:k}});i.showLoading.defer(1,i)}},startAutoRefresh:function(i,k,m,n,h){var l=this;if(h){l.update(k||l.defaultUrl,m,n,true)}if(l.autoRefreshProcId){clearInterval(l.autoRefreshProcId)}l.autoRefreshProcId=setInterval(l.update.createDelegate(l,[k||l.defaultUrl,m,n,true]),i*1000)},stopAutoRefresh:function(){if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);delete this.autoRefreshProcId}},isAutoRefreshing:function(){return !!this.autoRefreshProcId},showLoading:function(){if(this.showLoadIndicator){this.el.dom.innerHTML=this.indicatorText}},abort:function(){if(this.transaction){Ext.Ajax.abort(this.transaction)}},isUpdating:function(){return this.transaction?Ext.Ajax.isLoading(this.transaction):false},refresh:function(h){if(this.defaultUrl){this.update(this.defaultUrl,null,h,true)}}}}());Ext.Updater.defaults={timeout:30,disableCaching:false,showLoadIndicator:true,indicatorText:'
    Loading...
    ',loadScripts:false,sslBlankUrl:Ext.SSL_SECURE_URL};Ext.Updater.updateElement=function(d,c,e,b){var a=Ext.get(d).getUpdater();Ext.apply(a,b);a.update(c,e,b?b.callback:null)};Ext.Updater.BasicRenderer=function(){};Ext.Updater.BasicRenderer.prototype={render:function(c,a,b,d){c.update(a.responseText,b.loadScripts,d)}};(function(){Date.useStrict=false;function b(d){var c=Array.prototype.slice.call(arguments,1);return d.replace(/\{(\d+)\}/g,function(e,g){return c[g]})}Date.formatCodeToRegex=function(d,c){var e=Date.parseCodes[d];if(e){e=typeof e=="function"?e():e;Date.parseCodes[d]=e}return e?Ext.applyIf({c:e.c?b(e.c,c||"{0}"):e.c},e):{g:0,c:null,s:Ext.escapeRe(d)}};var a=Date.formatCodeToRegex;Ext.apply(Date,{parseFunctions:{"M$":function(d,c){var e=new RegExp("\\/Date\\(([-+])?(\\d+)(?:[+-]\\d{4})?\\)\\/");var g=(d||"").match(e);return g?new Date(((g[1]||"")+g[2])*1):null}},parseRegexes:[],formatFunctions:{"M$":function(){return"\\/Date("+this.getTime()+")\\/"}},y2kYear:50,MILLI:"ms",SECOND:"s",MINUTE:"mi",HOUR:"h",DAY:"d",MONTH:"mo",YEAR:"y",defaults:{},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNumbers:{Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11},getShortMonthName:function(c){return Date.monthNames[c].substring(0,3)},getShortDayName:function(c){return Date.dayNames[c].substring(0,3)},getMonthNumber:function(c){return Date.monthNumbers[c.substring(0,1).toUpperCase()+c.substring(1,3).toLowerCase()]},formatCodes:{d:"String.leftPad(this.getDate(), 2, '0')",D:"Date.getShortDayName(this.getDay())",j:"this.getDate()",l:"Date.dayNames[this.getDay()]",N:"(this.getDay() ? this.getDay() : 7)",S:"this.getSuffix()",w:"this.getDay()",z:"this.getDayOfYear()",W:"String.leftPad(this.getWeekOfYear(), 2, '0')",F:"Date.monthNames[this.getMonth()]",m:"String.leftPad(this.getMonth() + 1, 2, '0')",M:"Date.getShortMonthName(this.getMonth())",n:"(this.getMonth() + 1)",t:"this.getDaysInMonth()",L:"(this.isLeapYear() ? 1 : 0)",o:"(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",Y:"String.leftPad(this.getFullYear(), 4, '0')",y:"('' + this.getFullYear()).substring(2, 4)",a:"(this.getHours() < 12 ? 'am' : 'pm')",A:"(this.getHours() < 12 ? 'AM' : 'PM')",g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",G:"this.getHours()",h:"String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",H:"String.leftPad(this.getHours(), 2, '0')",i:"String.leftPad(this.getMinutes(), 2, '0')",s:"String.leftPad(this.getSeconds(), 2, '0')",u:"String.leftPad(this.getMilliseconds(), 3, '0')",O:"this.getGMTOffset()",P:"this.getGMTOffset(true)",T:"this.getTimezone()",Z:"(this.getTimezoneOffset() * -60)",c:function(){for(var m="Y-m-dTH:i:sP",h=[],g=0,d=m.length;g= 0 && y >= 0){","v = new Date(y < 100 ? 100 : y, 0, 1, h, i, s, ms).add(Date.YEAR, y < 100 ? y - 100 : 0);","v = !strict? v : (strict === true && (z <= 364 || (v.isLeapYear() && z <= 365))? v.add(Date.DAY, z) : null);","}else if(strict === true && !Date.isValid(y, m + 1, d, h, i, s, ms)){","v = null;","}else{","v = new Date(y < 100 ? 100 : y, m, d, h, i, s, ms).add(Date.YEAR, y < 100 ? y - 100 : 0);","}","}","}","if(v){","if(zz != null){","v = v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - zz);","}else if(o){","v = v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));","}","}","return v;"].join("\n");return function(n){var e=Date.parseRegexes.length,p=1,g=[],m=[],l=false,d="",k=0,h,o;for(;k Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"},a:function(){return a("A")},A:{calcLast:true,g:1,c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",s:"(AM|PM|am|pm)"},g:function(){return a("G")},G:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},h:function(){return a("H")},H:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},i:{g:1,c:"i = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},s:{g:1,c:"s = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},u:{g:1,c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",s:"(\\d+)"},O:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),","mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{4})"},P:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),","mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{2}:\\d{2})"},T:{g:0,c:null,s:"[A-Z]{1,4}"},Z:{g:1,c:"zz = results[{0}] * 1;\nzz = (-43200 <= zz && zz <= 50400)? zz : null;\n",s:"([+-]?\\d{1,5})"},c:function(){var e=[],c=[a("Y",1),a("m",2),a("d",3),a("h",4),a("i",5),a("s",6),{c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:["if(results[8]) {","if(results[8] == 'Z'){","zz = 0;","}else if (results[8].indexOf(':') > -1){",a("P",8).c,"}else{",a("O",8).c,"}","}"].join("\n")}];for(var g=0,d=c.length;g0?"-":"+")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0")+(a?":":"")+String.leftPad(Math.abs(this.getTimezoneOffset()%60),2,"0")},getDayOfYear:function(){var b=0,e=this.clone(),a=this.getMonth(),c;for(c=0,e.setDate(1),e.setMonth(0);c28){a=Math.min(a,this.getFirstDateOfMonth().add("mo",c).getLastDateOfMonth().getDate())}e.setDate(a);e.setMonth(this.getMonth()+c);break;case Date.YEAR:e.setFullYear(this.getFullYear()+c);break}return e},between:function(c,a){var b=this.getTime();return c.getTime()<=b&&b<=a.getTime()}});Date.prototype.format=Date.prototype.dateFormat;if(Ext.isSafari&&(navigator.userAgent.match(/WebKit\/(\d+)/)[1]||NaN)<420){Ext.apply(Date.prototype,{_xMonth:Date.prototype.setMonth,_xDate:Date.prototype.setDate,setMonth:function(a){if(a<=-1){var d=Math.ceil(-a),c=Math.ceil(d/12),b=(d%12)?12-d%12:0;this.setFullYear(this.getFullYear()-c);return this._xMonth(b)}else{return this._xMonth(a)}},setDate:function(a){return this.setTime(this.getTime()-(this.getDate()-a)*86400000)}})}Ext.util.MixedCollection=function(b,a){this.items=[];this.map={};this.keys=[];this.length=0;this.addEvents("clear","add","replace","remove","sort");this.allowFunctions=b===true;if(a){this.getKey=a}Ext.util.MixedCollection.superclass.constructor.call(this)};Ext.extend(Ext.util.MixedCollection,Ext.util.Observable,{allowFunctions:false,add:function(b,c){if(arguments.length==1){c=arguments[0];b=this.getKey(c)}if(typeof b!="undefined"&&b!==null){var a=this.map[b];if(typeof a!="undefined"){return this.replace(b,c)}this.map[b]=c}this.length++;this.items.push(c);this.keys.push(b);this.fireEvent("add",this.length-1,c,b);return c},getKey:function(a){return a.id},replace:function(c,d){if(arguments.length==1){d=arguments[0];c=this.getKey(d)}var a=this.map[c];if(typeof c=="undefined"||c===null||typeof a=="undefined"){return this.add(c,d)}var b=this.indexOfKey(c);this.items[b]=d;this.map[c]=d;this.fireEvent("replace",c,a,d);return d},addAll:function(e){if(arguments.length>1||Ext.isArray(e)){var b=arguments.length>1?arguments:e;for(var d=0,a=b.length;d=this.length){return this.add(b,c)}this.length++;this.items.splice(a,0,c);if(typeof b!="undefined"&&b!==null){this.map[b]=c}this.keys.splice(a,0,b);this.fireEvent("add",a,c,b);return c},remove:function(a){return this.removeAt(this.indexOf(a))},removeAt:function(a){if(a=0){this.length--;var c=this.items[a];this.items.splice(a,1);var b=this.keys[a];if(typeof b!="undefined"){delete this.map[b]}this.keys.splice(a,1);this.fireEvent("remove",c,b);return c}return false},removeKey:function(a){return this.removeAt(this.indexOfKey(a))},getCount:function(){return this.length},indexOf:function(a){return this.items.indexOf(a)},indexOfKey:function(a){return this.keys.indexOf(a)},item:function(b){var a=this.map[b],c=a!==undefined?a:(typeof b=="number")?this.items[b]:undefined;return typeof c!="function"||this.allowFunctions?c:null},itemAt:function(a){return this.items[a]},key:function(a){return this.map[a]},contains:function(a){return this.indexOf(a)!=-1},containsKey:function(a){return typeof this.map[a]!="undefined"},clear:function(){this.length=0;this.items=[];this.keys=[];this.map={};this.fireEvent("clear")},first:function(){return this.items[0]},last:function(){return this.items[this.length-1]},_sort:function(l,a,k){var d,e,b=String(a).toUpperCase()=="DESC"?-1:1,h=[],m=this.keys,g=this.items;k=k||function(i,c){return i-c};for(d=0,e=g.length;de?1:(g=a;c--){d[d.length]=b[c]}}return d},filter:function(c,b,d,a){if(Ext.isEmpty(b,false)){return this.clone()}b=this.createValueMatcher(b,d,a);return this.filterBy(function(e){return e&&b.test(e[c])})},filterBy:function(g,e){var h=new Ext.util.MixedCollection();h.getKey=this.getKey;var b=this.keys,d=this.items;for(var c=0,a=d.length;c]+>/gi,stripScriptsRe=/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,nl2brRe=/\r?\n/g;return{ellipsis:function(value,len,word){if(value&&value.length>len){if(word){var vs=value.substr(0,len-2),index=Math.max(vs.lastIndexOf(" "),vs.lastIndexOf("."),vs.lastIndexOf("!"),vs.lastIndexOf("?"));if(index==-1||index<(len-15)){return value.substr(0,len-3)+"..."}else{return vs.substr(0,index)+"..."}}else{return value.substr(0,len-3)+"..."}}return value},undef:function(value){return value!==undefined?value:""},defaultValue:function(value,defaultValue){return value!==undefined&&value!==""?value:defaultValue},htmlEncode:function(value){return !value?value:String(value).replace(/&/g,"&").replace(/>/g,">").replace(/").replace(/</g,"<").replace(/"/g,'"').replace(/&/g,"&")},trim:function(value){return String(value).replace(trimRe,"")},substr:function(value,start,length){return String(value).substr(start,length)},lowercase:function(value){return String(value).toLowerCase()},uppercase:function(value){return String(value).toUpperCase()},capitalize:function(value){return !value?value:value.charAt(0).toUpperCase()+value.substr(1).toLowerCase()},call:function(value,fn){if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);args.unshift(value);return eval(fn).apply(window,args)}else{return eval(fn).call(window,value)}},usMoney:function(v){v=(Math.round((v-0)*100))/100;v=(v==Math.floor(v))?v+".00":((v*10==Math.floor(v*10))?v+"0":v);v=String(v);var ps=v.split("."),whole=ps[0],sub=ps[1]?"."+ps[1]:".00",r=/(\d+)(\d{3})/;while(r.test(whole)){whole=whole.replace(r,"$1,$2")}v=whole+sub;if(v.charAt(0)=="-"){return"-$"+v.substr(1)}return"$"+v},date:function(v,format){if(!v){return""}if(!Ext.isDate(v)){v=new Date(Date.parse(v))}return v.dateFormat(format||"m/d/Y")},dateRenderer:function(format){return function(v){return Ext.util.Format.date(v,format)}},stripTags:function(v){return !v?v:String(v).replace(stripTagsRE,"")},stripScripts:function(v){return !v?v:String(v).replace(stripScriptsRe,"")},fileSize:function(size){if(size<1024){return size+" bytes"}else{if(size<1048576){return(Math.round(((size*10)/1024))/10)+" KB"}else{return(Math.round(((size*10)/1048576))/10)+" MB"}}},math:function(){var fns={};return function(v,a){if(!fns[a]){fns[a]=new Function("v","return v "+a+";")}return fns[a](v)}}(),round:function(value,precision){var result=Number(value);if(typeof precision=="number"){precision=Math.pow(10,precision);result=Math.round(value*precision)/precision}return result},number:function(v,format){if(!format){return v}v=Ext.num(v,NaN);if(isNaN(v)){return""}var comma=",",dec=".",i18n=false,neg=v<0;v=Math.abs(v);if(format.substr(format.length-2)=="/i"){format=format.substr(0,format.length-2);i18n=true;comma=".";dec=","}var hasComma=format.indexOf(comma)!=-1,psplit=(i18n?format.replace(/[^\d\,]/g,""):format.replace(/[^\d\.]/g,"")).split(dec);if(1")}}}();Ext.XTemplate=function(){Ext.XTemplate.superclass.constructor.apply(this,arguments);var z=this,k=z.html,r=/]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/,d=/^]*?for="(.*?)"/,w=/^]*?if="(.*?)"/,y=/^]*?exec="(.*?)"/,t,q=0,l=[],p="values",x="parent",n="xindex",o="xcount",e="return ",c="with(values){ ";k=["",k,""].join("");while((t=k.match(r))){var b=t[0].match(d),a=t[0].match(w),B=t[0].match(y),g=null,h=null,u=null,A=b&&b[1]?b[1]:"";if(a){g=a&&a[1]?a[1]:null;if(g){h=new Function(p,x,n,o,c+e+(Ext.util.Format.htmlDecode(g))+"; }")}}if(B){g=B&&B[1]?B[1]:null;if(g){u=new Function(p,x,n,o,c+(Ext.util.Format.htmlDecode(g))+"; }")}}if(A){switch(A){case".":A=new Function(p,x,c+e+p+"; }");break;case"..":A=new Function(p,x,c+e+x+"; }");break;default:A=new Function(p,x,c+e+A+"; }")}}l.push({id:q,target:A,exec:u,test:h,body:t[1]||""});k=k.replace(t[0],"{xtpl"+q+"}");++q}for(var v=l.length-1;v>=0;--v){z.compileTpl(l[v])}z.master=l[l.length-1];z.tpls=l};Ext.extend(Ext.XTemplate,Ext.Template,{re:/\{([\w-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g,codeRe:/\{\[((?:\\\]|.|\n)*?)\]\}/g,applySubTemplate:function(a,l,k,d,c){var h=this,g,n=h.tpls[a],m,b=[];if((n.test&&!n.test.call(h,l,k,d,c))||(n.exec&&n.exec.call(h,l,k,d,c))){return""}m=n.target?n.target.call(h,l,k):l;g=m.length;k=n.target?l:k;if(n.target&&Ext.isArray(m)){for(var e=0,g=m.length;e=0;--g){d[k[g].selectorText.toLowerCase()]=k[g]}}catch(i){}},getRules:function(h){if(d===null||h){d={};var l=c.styleSheets;for(var k=0,g=l.length;k=37&&a<=40){b.stopEvent()}},destroy:function(){this.disable()},enable:function(){if(this.disabled){if(Ext.isSafari2){this.el.on("keyup",this.stopKeyUp,this)}this.el.on(this.isKeydown()?"keydown":"keypress",this.relay,this);this.disabled=false}},disable:function(){if(!this.disabled){if(Ext.isSafari2){this.el.un("keyup",this.stopKeyUp,this)}this.el.un(this.isKeydown()?"keydown":"keypress",this.relay,this);this.disabled=true}},setDisabled:function(a){this[a?"disable":"enable"]()},isKeydown:function(){return this.forceKeyDown||Ext.EventManager.useKeydown}};Ext.KeyMap=function(c,b,a){this.el=Ext.get(c);this.eventName=a||"keydown";this.bindings=[];if(b){this.addBinding(b)}this.enable()};Ext.KeyMap.prototype={stopEvent:false,addBinding:function(b){if(Ext.isArray(b)){Ext.each(b,function(m){this.addBinding(m)},this);return}var k=b.key,g=b.fn||b.handler,l=b.scope;if(b.stopEvent){this.stopEvent=b.stopEvent}if(typeof k=="string"){var h=[];var e=k.toUpperCase();for(var c=0,d=e.length;c2)?a[2]:null;var h=(i>3)?a[3]:"/";var d=(i>4)?a[4]:null;var g=(i>5)?a[5]:false;document.cookie=c+"="+escape(e)+((b===null)?"":("; expires="+b.toGMTString()))+((h===null)?"":("; path="+h))+((d===null)?"":("; domain="+d))+((g===true)?"; secure":"")},get:function(d){var b=d+"=";var g=b.length;var a=document.cookie.length;var e=0;var c=0;while(e0){return this.ownerCt.items.itemAt(a-1)}}return null},getBubbleTarget:function(){return this.ownerCt}});Ext.reg("component",Ext.Component);Ext.Action=Ext.extend(Object,{constructor:function(a){this.initialConfig=a;this.itemId=a.itemId=(a.itemId||a.id||Ext.id());this.items=[]},isAction:true,setText:function(a){this.initialConfig.text=a;this.callEach("setText",[a])},getText:function(){return this.initialConfig.text},setIconClass:function(a){this.initialConfig.iconCls=a;this.callEach("setIconClass",[a])},getIconClass:function(){return this.initialConfig.iconCls},setDisabled:function(a){this.initialConfig.disabled=a;this.callEach("setDisabled",[a])},enable:function(){this.setDisabled(false)},disable:function(){this.setDisabled(true)},isDisabled:function(){return this.initialConfig.disabled},setHidden:function(a){this.initialConfig.hidden=a;this.callEach("setVisible",[!a])},show:function(){this.setHidden(false)},hide:function(){this.setHidden(true)},isHidden:function(){return this.initialConfig.hidden},setHandler:function(b,a){this.initialConfig.handler=b;this.initialConfig.scope=a;this.callEach("setHandler",[b,a])},each:function(b,a){Ext.each(this.items,b,a)},callEach:function(e,b){var d=this.items;for(var c=0,a=d.length;ck+p.left){l=k-m-c;g=true}if((i+e)>d+p.top){i=d-e-c;g=true}if(l=n){i=n-e-5}}o=[l,i];this.storeXY(o);a.setXY.call(this,o);this.sync()}}return this},getConstrainOffset:function(){return this.shadowOffset},isVisible:function(){return this.visible},showAction:function(){this.visible=true;if(this.useDisplay===true){this.setDisplayed("")}else{if(this.lastXY){a.setXY.call(this,this.lastXY)}else{if(this.lastLT){a.setLeftTop.call(this,this.lastLT[0],this.lastLT[1])}}}},hideAction:function(){this.visible=false;if(this.useDisplay===true){this.setDisplayed(false)}else{this.setLeftTop(-10000,-10000)}},setVisible:function(i,h,l,m,k){if(i){this.showAction()}if(h&&i){var g=function(){this.sync(true);if(m){m()}}.createDelegate(this);a.setVisible.call(this,true,true,l,g,k)}else{if(!i){this.hideUnders(true)}var g=m;if(h){g=function(){this.hideAction();if(m){m()}}.createDelegate(this)}a.setVisible.call(this,i,h,l,g,k);if(i){this.sync(true)}else{if(!h){this.hideAction()}}}return this},storeXY:function(c){delete this.lastLT;this.lastXY=c},storeLeftTop:function(d,c){delete this.lastXY;this.lastLT=[d,c]},beforeFx:function(){this.beforeAction();return Ext.Layer.superclass.beforeFx.apply(this,arguments)},afterFx:function(){Ext.Layer.superclass.afterFx.apply(this,arguments);this.sync(this.isVisible())},beforeAction:function(){if(!this.updating&&this.shadow){this.shadow.hide()}},setLeft:function(c){this.storeLeftTop(c,this.getTop(true));a.setLeft.apply(this,arguments);this.sync();return this},setTop:function(c){this.storeLeftTop(this.getLeft(true),c);a.setTop.apply(this,arguments);this.sync();return this},setLeftTop:function(d,c){this.storeLeftTop(d,c);a.setLeftTop.apply(this,arguments);this.sync();return this},setXY:function(k,h,l,m,i){this.fixDisplay();this.beforeAction();this.storeXY(k);var g=this.createCB(m);a.setXY.call(this,k,h,l,g,i);if(!h){g()}return this},createCB:function(e){var d=this;return function(){d.constrainXY();d.sync(true);if(e){e()}}},setX:function(g,h,k,l,i){this.setXY([g,this.getY()],h,k,l,i);return this},setY:function(l,g,i,k,h){this.setXY([this.getX(),l],g,i,k,h);return this},setSize:function(k,l,i,n,o,m){this.beforeAction();var g=this.createCB(o);a.setSize.call(this,k,l,i,n,g,m);if(!i){g()}return this},setWidth:function(i,h,l,m,k){this.beforeAction();var g=this.createCB(m);a.setWidth.call(this,i,h,l,g,k);if(!h){g()}return this},setHeight:function(k,i,m,n,l){this.beforeAction();var g=this.createCB(n);a.setHeight.call(this,k,i,m,g,l);if(!i){g()}return this},setBounds:function(p,n,q,i,o,l,m,k){this.beforeAction();var g=this.createCB(m);if(!o){this.storeXY([p,n]);a.setXY.call(this,[p,n]);a.setSize.call(this,q,i,o,l,g,k);g()}else{a.setBounds.call(this,p,n,q,i,o,l,g,k)}return this},setZIndex:function(c){this.zindex=c;this.setStyle("z-index",c+2);if(this.shadow){this.shadow.setZIndex(c+1)}if(this.shim){this.shim.setStyle("z-index",c)}return this}})})();Ext.Shadow=function(d){Ext.apply(this,d);if(typeof this.mode!="string"){this.mode=this.defaultMode}var e=this.offset,c={h:0},b=Math.floor(this.offset/2);switch(this.mode.toLowerCase()){case"drop":c.w=0;c.l=c.t=e;c.t-=1;if(Ext.isIE){c.l-=this.offset+b;c.t-=this.offset+b;c.w-=b;c.h-=b;c.t+=1}break;case"sides":c.w=(e*2);c.l=-e;c.t=e-1;if(Ext.isIE){c.l-=(this.offset-b);c.t-=this.offset+b;c.l+=1;c.w-=(this.offset-b)*2;c.w-=b+1;c.h-=1}break;case"frame":c.w=c.h=(e*2);c.l=c.t=-e;c.t+=1;c.h-=2;if(Ext.isIE){c.l-=(this.offset-b);c.t-=(this.offset-b);c.l+=1;c.w-=(this.offset+b+1);c.h-=(this.offset+b);c.h+=1}break}this.adjusts=c};Ext.Shadow.prototype={offset:4,defaultMode:"drop",show:function(a){a=Ext.get(a);if(!this.el){this.el=Ext.Shadow.Pool.pull();if(this.el.dom.nextSibling!=a.dom){this.el.insertBefore(a)}}this.el.setStyle("z-index",this.zIndex||parseInt(a.getStyle("z-index"),10)-1);if(Ext.isIE){this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")"}this.realign(a.getLeft(true),a.getTop(true),a.getWidth(),a.getHeight());this.el.dom.style.display="block"},isVisible:function(){return this.el?true:false},realign:function(b,u,r,g){if(!this.el){return}var o=this.adjusts,m=this.el.dom,v=m.style,i=0,q=(r+o.w),e=(g+o.h),k=q+"px",p=e+"px",n,c;v.left=(b+o.l)+"px";v.top=(u+o.t)+"px";if(v.width!=k||v.height!=p){v.width=k;v.height=p;if(!Ext.isIE){n=m.childNodes;c=Math.max(0,(q-12))+"px";n[0].childNodes[1].style.width=c;n[1].childNodes[1].style.width=c;n[2].childNodes[1].style.width=c;n[1].style.height=Math.max(0,(e-12))+"px"}}},hide:function(){if(this.el){this.el.dom.style.display="none";Ext.Shadow.Pool.push(this.el);delete this.el}},setZIndex:function(a){this.zIndex=a;if(this.el){this.el.setStyle("z-index",a)}}};Ext.Shadow.Pool=function(){var b=[],a=Ext.isIE?'
    ':'
    ';return{pull:function(){var c=b.shift();if(!c){c=Ext.get(Ext.DomHelper.insertHtml("beforeBegin",document.body.firstChild,a));c.autoBoxAdjust=false}return c},push:function(c){b.push(c)}}}();Ext.BoxComponent=Ext.extend(Ext.Component,{initComponent:function(){Ext.BoxComponent.superclass.initComponent.call(this);this.addEvents("resize","move")},boxReady:false,deferHeight:false,setSize:function(b,d){if(typeof b=="object"){d=b.height;b=b.width}if(Ext.isDefined(b)&&Ext.isDefined(this.boxMinWidth)&&(bthis.boxMaxWidth)){b=this.boxMaxWidth}if(Ext.isDefined(d)&&Ext.isDefined(this.boxMaxHeight)&&(d>this.boxMaxHeight)){d=this.boxMaxHeight}if(!this.boxReady){this.width=b;this.height=d;return this}if(this.cacheSizes!==false&&this.lastSize&&this.lastSize.width==b&&this.lastSize.height==d){return this}this.lastSize={width:b,height:d};var c=this.adjustSize(b,d),g=c.width,a=c.height,e;if(g!==undefined||a!==undefined){e=this.getResizeEl();if(!this.deferHeight&&g!==undefined&&a!==undefined){e.setSize(g,a)}else{if(!this.deferHeight&&a!==undefined){e.setHeight(a)}else{if(g!==undefined){e.setWidth(g)}}}this.onResize(g,a,b,d);this.fireEvent("resize",this,g,a,b,d)}return this},setWidth:function(a){return this.setSize(a)},setHeight:function(a){return this.setSize(undefined,a)},getSize:function(){return this.getResizeEl().getSize()},getWidth:function(){return this.getResizeEl().getWidth()},getHeight:function(){return this.getResizeEl().getHeight()},getOuterSize:function(){var a=this.getResizeEl();return{width:a.getWidth()+a.getMargins("lr"),height:a.getHeight()+a.getMargins("tb")}},getPosition:function(a){var b=this.getPositionEl();if(a===true){return[b.getLeft(true),b.getTop(true)]}return this.xy||b.getXY()},getBox:function(a){var c=this.getPosition(a);var b=this.getSize();b.x=c[0];b.y=c[1];return b},updateBox:function(a){this.setSize(a.width,a.height);this.setPagePosition(a.x,a.y);return this},getResizeEl:function(){return this.resizeEl||this.el},setAutoScroll:function(a){if(this.rendered){this.getContentTarget().setOverflow(a?"auto":"")}this.autoScroll=a;return this},setPosition:function(a,g){if(a&&typeof a[1]=="number"){g=a[1];a=a[0]}this.x=a;this.y=g;if(!this.boxReady){return this}var b=this.adjustPosition(a,g);var e=b.x,d=b.y;var c=this.getPositionEl();if(e!==undefined||d!==undefined){if(e!==undefined&&d!==undefined){c.setLeftTop(e,d)}else{if(e!==undefined){c.setLeft(e)}else{if(d!==undefined){c.setTop(d)}}}this.onPosition(e,d);this.fireEvent("move",this,e,d)}return this},setPagePosition:function(a,c){if(a&&typeof a[1]=="number"){c=a[1];a=a[0]}this.pageX=a;this.pageY=c;if(!this.boxReady){return}if(a===undefined||c===undefined){return}var b=this.getPositionEl().translatePoints(a,c);this.setPosition(b.left,b.top);return this},afterRender:function(){Ext.BoxComponent.superclass.afterRender.call(this);if(this.resizeEl){this.resizeEl=Ext.get(this.resizeEl)}if(this.positionEl){this.positionEl=Ext.get(this.positionEl)}this.boxReady=true;Ext.isDefined(this.autoScroll)&&this.setAutoScroll(this.autoScroll);this.setSize(this.width,this.height);if(this.x||this.y){this.setPosition(this.x,this.y)}else{if(this.pageX||this.pageY){this.setPagePosition(this.pageX,this.pageY)}}},syncSize:function(){delete this.lastSize;this.setSize(this.autoWidth?undefined:this.getResizeEl().getWidth(),this.autoHeight?undefined:this.getResizeEl().getHeight());return this},onResize:function(d,b,a,c){},onPosition:function(a,b){},adjustSize:function(a,b){if(this.autoWidth){a="auto"}if(this.autoHeight){b="auto"}return{width:a,height:b}},adjustPosition:function(a,b){return{x:a,y:b}}});Ext.reg("box",Ext.BoxComponent);Ext.Spacer=Ext.extend(Ext.BoxComponent,{autoEl:"div"});Ext.reg("spacer",Ext.Spacer);Ext.SplitBar=function(c,e,b,d,a){this.el=Ext.get(c,true);this.el.dom.unselectable="on";this.resizingEl=Ext.get(e,true);this.orientation=b||Ext.SplitBar.HORIZONTAL;this.minSize=0;this.maxSize=2000;this.animate=false;this.useShim=false;this.shim=null;if(!a){this.proxy=Ext.SplitBar.createProxy(this.orientation)}else{this.proxy=Ext.get(a).dom}this.dd=new Ext.dd.DDProxy(this.el.dom.id,"XSplitBars",{dragElId:this.proxy.id});this.dd.b4StartDrag=this.onStartProxyDrag.createDelegate(this);this.dd.endDrag=this.onEndProxyDrag.createDelegate(this);this.dragSpecs={};this.adapter=new Ext.SplitBar.BasicLayoutAdapter();this.adapter.init(this);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.placement=d||(this.el.getX()>this.resizingEl.getX()?Ext.SplitBar.LEFT:Ext.SplitBar.RIGHT);this.el.addClass("x-splitbar-h")}else{this.placement=d||(this.el.getY()>this.resizingEl.getY()?Ext.SplitBar.TOP:Ext.SplitBar.BOTTOM);this.el.addClass("x-splitbar-v")}this.addEvents("resize","moved","beforeresize","beforeapply");Ext.SplitBar.superclass.constructor.call(this)};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(a,e){this.fireEvent("beforeresize",this);this.overlay=Ext.DomHelper.append(document.body,{cls:"x-drag-overlay",html:" "},true);this.overlay.unselectable();this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var c=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();this.activeMaxSize=this.getMaximumSize();var d=c-this.activeMinSize;var b=Math.max(this.activeMaxSize-c,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?d:b,this.placement==Ext.SplitBar.LEFT?b:d,this.tickSize);this.dd.setYConstraint(0,0)}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?d:b,this.placement==Ext.SplitBar.TOP?b:d,this.tickSize)}this.dragSpecs.startSize=c;this.dragSpecs.startPoint=[a,e];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,a,e)},onEndProxyDrag:function(c){Ext.get(this.proxy).setDisplayed(false);var b=Ext.lib.Event.getXY(c);if(this.overlay){Ext.destroy(this.overlay);delete this.overlay}var a;if(this.orientation==Ext.SplitBar.HORIZONTAL){a=this.dragSpecs.startSize+(this.placement==Ext.SplitBar.LEFT?b[0]-this.dragSpecs.startPoint[0]:this.dragSpecs.startPoint[0]-b[0])}else{a=this.dragSpecs.startSize+(this.placement==Ext.SplitBar.TOP?b[1]-this.dragSpecs.startPoint[1]:this.dragSpecs.startPoint[1]-b[1])}a=Math.min(Math.max(a,this.activeMinSize),this.activeMaxSize);if(a!=this.dragSpecs.startSize){if(this.fireEvent("beforeapply",this,a)!==false){this.adapter.setElementSize(this,a);this.fireEvent("moved",this,a);this.fireEvent("resize",this,a)}}},getAdapter:function(){return this.adapter},setAdapter:function(a){this.adapter=a;this.adapter.init(this)},getMinimumSize:function(){return this.minSize},setMinimumSize:function(a){this.minSize=a},getMaximumSize:function(){return this.maxSize},setMaximumSize:function(a){this.maxSize=a},setCurrentSize:function(b){var a=this.animate;this.animate=false;this.adapter.setElementSize(this,b);this.animate=a},destroy:function(a){Ext.destroy(this.shim,Ext.get(this.proxy));this.dd.unreg();if(a){this.el.remove()}this.purgeListeners()}});Ext.SplitBar.createProxy=function(b){var c=new Ext.Element(document.createElement("div"));document.body.appendChild(c.dom);c.unselectable();var a="x-splitbar-proxy";c.addClass(a+" "+(b==Ext.SplitBar.HORIZONTAL?a+"-h":a+"-v"));return c.dom};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(a){},getElementSize:function(a){if(a.orientation==Ext.SplitBar.HORIZONTAL){return a.resizingEl.getWidth()}else{return a.resizingEl.getHeight()}},setElementSize:function(b,a,c){if(b.orientation==Ext.SplitBar.HORIZONTAL){if(!b.animate){b.resizingEl.setWidth(a);if(c){c(b,a)}}else{b.resizingEl.setWidth(a,true,0.1,c,"easeOut")}}else{if(!b.animate){b.resizingEl.setHeight(a);if(c){c(b,a)}}else{b.resizingEl.setHeight(a,true,0.1,c,"easeOut")}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(a){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(a)};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(a){this.basic.init(a)},getElementSize:function(a){return this.basic.getElementSize(a)},setElementSize:function(b,a,c){this.basic.setElementSize(b,a,this.moveSplitter.createDelegate(this,[b]))},moveSplitter:function(a){var b=Ext.SplitBar;switch(a.placement){case b.LEFT:a.el.setX(a.resizingEl.getRight());break;case b.RIGHT:a.el.setStyle("right",(this.container.getWidth()-a.resizingEl.getLeft())+"px");break;case b.TOP:a.el.setY(a.resizingEl.getBottom());break;case b.BOTTOM:a.el.setY(a.resizingEl.getTop()-a.el.getHeight());break}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4;Ext.Container=Ext.extend(Ext.BoxComponent,{bufferResize:50,autoDestroy:true,forceLayout:false,defaultType:"panel",resizeEvent:"resize",bubbleEvents:["add","remove"],initComponent:function(){Ext.Container.superclass.initComponent.call(this);this.addEvents("afterlayout","beforeadd","beforeremove","add","remove");var a=this.items;if(a){delete this.items;this.add(a)}},initItems:function(){if(!this.items){this.items=new Ext.util.MixedCollection(false,this.getComponentId);this.getLayout()}},setLayout:function(a){if(this.layout&&this.layout!=a){this.layout.setContainer(null)}this.layout=a;this.initItems();a.setContainer(this)},afterRender:function(){Ext.Container.superclass.afterRender.call(this);if(!this.layout){this.layout="auto"}if(Ext.isObject(this.layout)&&!this.layout.layout){this.layoutConfig=this.layout;this.layout=this.layoutConfig.type}if(Ext.isString(this.layout)){this.layout=new Ext.Container.LAYOUTS[this.layout.toLowerCase()](this.layoutConfig)}this.setLayout(this.layout);if(this.activeItem!==undefined&&this.layout.setActiveItem){var a=this.activeItem;delete this.activeItem;this.layout.setActiveItem(a)}if(!this.ownerCt){this.doLayout(false,true)}if(this.monitorResize===true){Ext.EventManager.onWindowResize(this.doLayout,this,[false])}},getLayoutTarget:function(){return this.el},getComponentId:function(a){return a.getItemId()},add:function(b){this.initItems();var e=arguments.length>1;if(e||Ext.isArray(b)){var a=[];Ext.each(e?arguments:b,function(h){a.push(this.add(h))},this);return a}var g=this.lookupComponent(this.applyDefaults(b));var d=this.items.length;if(this.fireEvent("beforeadd",this,g,d)!==false&&this.onBeforeAdd(g)!==false){this.items.add(g);g.onAdded(this,d);this.onAdd(g);this.fireEvent("add",this,g,d)}return g},onAdd:function(a){},onAdded:function(a,b){this.ownerCt=a;this.initRef();this.cascade(function(d){d.initRef()});this.fireEvent("added",this,a,b)},insert:function(e,b){var d=arguments,h=d.length,a=[],g,k;this.initItems();if(h>2){for(g=h-1;g>=1;--g){a.push(this.insert(e,d[g]))}return a}k=this.lookupComponent(this.applyDefaults(b));e=Math.min(e,this.items.length);if(this.fireEvent("beforeadd",this,k,e)!==false&&this.onBeforeAdd(k)!==false){if(k.ownerCt==this){this.items.remove(k)}this.items.insert(e,k);k.onAdded(this,e);this.onAdd(k);this.fireEvent("add",this,k,e)}return k},applyDefaults:function(b){var a=this.defaults;if(a){if(Ext.isFunction(a)){a=a.call(this,b)}if(Ext.isString(b)){b=Ext.ComponentMgr.get(b);Ext.apply(b,a)}else{if(!b.events){Ext.applyIf(b.isAction?b.initialConfig:b,a)}else{Ext.apply(b,a)}}}return b},onBeforeAdd:function(a){if(a.ownerCt){a.ownerCt.remove(a,false)}if(this.hideBorders===true){a.border=(a.border===true)}},remove:function(a,b){this.initItems();var d=this.getComponent(a);if(d&&this.fireEvent("beforeremove",this,d)!==false){this.doRemove(d,b);this.fireEvent("remove",this,d)}return d},onRemove:function(a){},doRemove:function(e,d){var b=this.layout,a=b&&this.rendered;if(a){b.onRemove(e)}this.items.remove(e);e.onRemoved();this.onRemove(e);if(d===true||(d!==false&&this.autoDestroy)){e.destroy()}if(a){b.afterRemove(e)}},removeAll:function(c){this.initItems();var e,g=[],b=[];this.items.each(function(h){g.push(h)});for(var d=0,a=g.length;d','','
    ','
    ',"");a.disableFormats=true;return a.compile()})(),destroy:function(){if(this.resizeTask&&this.resizeTask.cancel){this.resizeTask.cancel()}if(this.container){this.container.un(this.container.resizeEvent,this.onResize,this)}if(!Ext.isEmpty(this.targetCls)){var a=this.container.getLayoutTarget();if(a){a.removeClass(this.targetCls)}}}});Ext.layout.AutoLayout=Ext.extend(Ext.layout.ContainerLayout,{type:"auto",monitorResize:true,onLayout:function(d,g){Ext.layout.AutoLayout.superclass.onLayout.call(this,d,g);var e=this.getRenderedItems(d),a=e.length,b,h;for(b=0;b0){b.setSize(a)}}});Ext.Container.LAYOUTS.fit=Ext.layout.FitLayout;Ext.layout.CardLayout=Ext.extend(Ext.layout.FitLayout,{deferredRender:false,layoutOnCardChange:false,renderHidden:true,type:"card",setActiveItem:function(d){var a=this.activeItem,b=this.container;d=b.getComponent(d);if(d&&a!=d){if(a){a.hide();if(a.hidden!==true){return false}a.fireEvent("deactivate",a)}var c=d.doLayout&&(this.layoutOnCardChange||!d.rendered);this.activeItem=d;delete d.deferLayout;d.show();this.layout();if(c){d.doLayout()}d.fireEvent("activate",d)}},renderAll:function(a,b){if(this.deferredRender){this.renderItem(this.activeItem,undefined,b)}else{Ext.layout.CardLayout.superclass.renderAll.call(this,a,b)}}});Ext.Container.LAYOUTS.card=Ext.layout.CardLayout;Ext.layout.AnchorLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,type:"anchor",defaultAnchor:"100%",parseAnchorRE:/^(r|right|b|bottom)$/i,getLayoutTargetSize:function(){var b=this.container.getLayoutTarget(),a={};if(b){a=b.getViewSize();if(Ext.isIE&&Ext.isStrict&&a.width==0){a=b.getStyleSize()}a.width-=b.getPadding("lr");a.height-=b.getPadding("tb")}return a},onLayout:function(n,x){Ext.layout.AnchorLayout.superclass.onLayout.call(this,n,x);var q=this.getLayoutTargetSize(),l=q.width,p=q.height,r=x.getStyle("overflow"),o=this.getRenderedItems(n),u=o.length,g=[],k,a,w,m,h,c,e,d,v=0,t,b;if(l<20&&p<20){return}if(n.anchorSize){if(typeof n.anchorSize=="number"){a=n.anchorSize}else{a=n.anchorSize.width;w=n.anchorSize.height}}else{a=n.initialConfig.width;w=n.initialConfig.height}for(t=0;t ');b.disableFormats=true;b.compile();Ext.layout.BorderLayout.Region.prototype.toolTemplate=b}this.collapsedEl=this.targetEl.createChild({cls:"x-layout-collapsed x-layout-collapsed-"+this.position,id:this.panel.id+"-xcollapsed"});this.collapsedEl.enableDisplayMode("block");if(this.collapseMode=="mini"){this.collapsedEl.addClass("x-layout-cmini-"+this.position);this.miniCollapsedEl=this.collapsedEl.createChild({cls:"x-layout-mini x-layout-mini-"+this.position,html:" "});this.miniCollapsedEl.addClassOnOver("x-layout-mini-over");this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this.onExpandClick,this,{stopEvent:true})}else{if(this.collapsible!==false&&!this.hideCollapseTool){var a=this.expandToolEl=this.toolTemplate.append(this.collapsedEl.dom,{id:"expand-"+this.position},true);a.addClassOnOver("x-tool-expand-"+this.position+"-over");a.on("click",this.onExpandClick,this,{stopEvent:true})}if(this.floatable!==false||this.titleCollapse){this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this[this.floatable?"collapseClick":"onExpandClick"],this)}}}return this.collapsedEl},onExpandClick:function(a){if(this.isSlid){this.panel.expand(false)}else{this.panel.expand()}},onCollapseClick:function(a){this.panel.collapse()},beforeCollapse:function(c,a){this.lastAnim=a;if(this.splitEl){this.splitEl.hide()}this.getCollapsedEl().show();var b=this.panel.getEl();this.originalZIndex=b.getStyle("z-index");b.setStyle("z-index",100);this.isCollapsed=true;this.layout.layout()},onCollapse:function(a){this.panel.el.setStyle("z-index",1);if(this.lastAnim===false||this.panel.animCollapse===false){this.getCollapsedEl().dom.style.visibility="visible"}else{this.getCollapsedEl().slideIn(this.panel.slideAnchor,{duration:0.2})}this.state.collapsed=true;this.panel.saveState()},beforeExpand:function(a){if(this.isSlid){this.afterSlideIn()}var b=this.getCollapsedEl();this.el.show();if(this.position=="east"||this.position=="west"){this.panel.setSize(undefined,b.getHeight())}else{this.panel.setSize(b.getWidth(),undefined)}b.hide();b.dom.style.visibility="hidden";this.panel.el.setStyle("z-index",this.floatingZIndex)},onExpand:function(){this.isCollapsed=false;if(this.splitEl){this.splitEl.show()}this.layout.layout();this.panel.el.setStyle("z-index",this.originalZIndex);this.state.collapsed=false;this.panel.saveState()},collapseClick:function(a){if(this.isSlid){a.stopPropagation();this.slideIn()}else{a.stopPropagation();this.slideOut()}},onHide:function(){if(this.isCollapsed){this.getCollapsedEl().hide()}else{if(this.splitEl){this.splitEl.hide()}}},onShow:function(){if(this.isCollapsed){this.getCollapsedEl().show()}else{if(this.splitEl){this.splitEl.show()}}},isVisible:function(){return !this.panel.hidden},getMargins:function(){return this.isCollapsed&&this.cmargins?this.cmargins:this.margins},getSize:function(){return this.isCollapsed?this.getCollapsedEl().getSize():this.panel.getSize()},setPanel:function(a){this.panel=a},getMinWidth:function(){return this.minWidth},getMinHeight:function(){return this.minHeight},applyLayoutCollapsed:function(a){var b=this.getCollapsedEl();b.setLeftTop(a.x,a.y);b.setSize(a.width,a.height)},applyLayout:function(a){if(this.isCollapsed){this.applyLayoutCollapsed(a)}else{this.panel.setPosition(a.x,a.y);this.panel.setSize(a.width,a.height)}},beforeSlide:function(){this.panel.beforeEffect()},afterSlide:function(){this.panel.afterEffect()},initAutoHide:function(){if(this.autoHide!==false){if(!this.autoHideHd){this.autoHideSlideTask=new Ext.util.DelayedTask(this.slideIn,this);this.autoHideHd={mouseout:function(a){if(!a.within(this.el,true)){this.autoHideSlideTask.delay(500)}},mouseover:function(a){this.autoHideSlideTask.cancel()},scope:this}}this.el.on(this.autoHideHd);this.collapsedEl.on(this.autoHideHd)}},clearAutoHide:function(){if(this.autoHide!==false){this.el.un("mouseout",this.autoHideHd.mouseout);this.el.un("mouseover",this.autoHideHd.mouseover);this.collapsedEl.un("mouseout",this.autoHideHd.mouseout);this.collapsedEl.un("mouseover",this.autoHideHd.mouseover)}},clearMonitor:function(){Ext.getDoc().un("click",this.slideInIf,this)},slideOut:function(){if(this.isSlid||this.el.hasActiveFx()){return}this.isSlid=true;var b=this.panel.tools,c,a;if(b&&b.toggle){b.toggle.hide()}this.el.show();a=this.panel.collapsed;this.panel.collapsed=false;if(this.position=="east"||this.position=="west"){c=this.panel.deferHeight;this.panel.deferHeight=false;this.panel.setSize(undefined,this.collapsedEl.getHeight());this.panel.deferHeight=c}else{this.panel.setSize(this.collapsedEl.getWidth(),undefined)}this.panel.collapsed=a;this.restoreLT=[this.el.dom.style.left,this.el.dom.style.top];this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());this.el.setStyle("z-index",this.floatingZIndex+2);this.panel.el.replaceClass("x-panel-collapsed","x-panel-floating");if(this.animFloat!==false){this.beforeSlide();this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.afterSlide();this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this)},scope:this,block:true})}else{this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this)}},afterSlideIn:function(){this.clearAutoHide();this.isSlid=false;this.clearMonitor();this.el.setStyle("z-index","");this.panel.el.replaceClass("x-panel-floating","x-panel-collapsed");this.el.dom.style.left=this.restoreLT[0];this.el.dom.style.top=this.restoreLT[1];var a=this.panel.tools;if(a&&a.toggle){a.toggle.show()}},slideIn:function(a){if(!this.isSlid||this.el.hasActiveFx()){Ext.callback(a);return}this.isSlid=false;if(this.animFloat!==false){this.beforeSlide();this.el.slideOut(this.getSlideAnchor(),{callback:function(){this.el.hide();this.afterSlide();this.afterSlideIn();Ext.callback(a)},scope:this,block:true})}else{this.el.hide();this.afterSlideIn()}},slideInIf:function(a){if(!a.within(this.el)){this.slideIn()}},anchors:{west:"left",east:"right",north:"top",south:"bottom"},sanchors:{west:"l",east:"r",north:"t",south:"b"},canchors:{west:"tl-tr",east:"tr-tl",north:"tl-bl",south:"bl-tl"},getAnchor:function(){return this.anchors[this.position]},getCollapseAnchor:function(){return this.canchors[this.position]},getSlideAnchor:function(){return this.sanchors[this.position]},getAlignAdj:function(){var a=this.cmargins;switch(this.position){case"west":return[0,0];break;case"east":return[0,0];break;case"north":return[0,0];break;case"south":return[0,0];break}},getExpandAdj:function(){var b=this.collapsedEl,a=this.cmargins;switch(this.position){case"west":return[-(a.right+b.getWidth()+a.left),0];break;case"east":return[a.right+b.getWidth()+a.left,0];break;case"north":return[0,-(a.top+a.bottom+b.getHeight())];break;case"south":return[0,a.top+a.bottom+b.getHeight()];break}},destroy:function(){if(this.autoHideSlideTask&&this.autoHideSlideTask.cancel){this.autoHideSlideTask.cancel()}Ext.destroyMembers(this,"miniCollapsedEl","collapsedEl","expandToolEl")}};Ext.layout.BorderLayout.SplitRegion=function(b,a,c){Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this,b,a,c);this.applyLayout=this.applyFns[c]};Ext.extend(Ext.layout.BorderLayout.SplitRegion,Ext.layout.BorderLayout.Region,{splitTip:"Drag to resize.",collapsibleSplitTip:"Drag to resize. Double click to hide.",useSplitTips:false,splitSettings:{north:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.TOP,maxFn:"getVMaxSize",minProp:"minHeight",maxProp:"maxHeight"},south:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.BOTTOM,maxFn:"getVMaxSize",minProp:"minHeight",maxProp:"maxHeight"},east:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.RIGHT,maxFn:"getHMaxSize",minProp:"minWidth",maxProp:"maxWidth"},west:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.LEFT,maxFn:"getHMaxSize",minProp:"minWidth",maxProp:"maxWidth"}},applyFns:{west:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;this.panel.setPosition(c.x,c.y);var a=d.offsetWidth;b.left=(c.x+c.width-a)+"px";b.top=(c.y)+"px";b.height=Math.max(0,c.height)+"px";this.panel.setSize(c.width-a,c.height)},east:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;var a=d.offsetWidth;this.panel.setPosition(c.x+a,c.y);b.left=(c.x)+"px";b.top=(c.y)+"px";b.height=Math.max(0,c.height)+"px";this.panel.setSize(c.width-a,c.height)},north:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;var a=d.offsetHeight;this.panel.setPosition(c.x,c.y);b.left=(c.x)+"px";b.top=(c.y+c.height-a)+"px";b.width=Math.max(0,c.width)+"px";this.panel.setSize(c.width,c.height-a)},south:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;var a=d.offsetHeight;this.panel.setPosition(c.x,c.y+a);b.left=(c.x)+"px";b.top=(c.y)+"px";b.width=Math.max(0,c.width)+"px";this.panel.setSize(c.width,c.height-a)}},render:function(a,c){Ext.layout.BorderLayout.SplitRegion.superclass.render.call(this,a,c);var d=this.position;this.splitEl=a.createChild({cls:"x-layout-split x-layout-split-"+d,html:" ",id:this.panel.id+"-xsplit"});if(this.collapseMode=="mini"){this.miniSplitEl=this.splitEl.createChild({cls:"x-layout-mini x-layout-mini-"+d,html:" "});this.miniSplitEl.addClassOnOver("x-layout-mini-over");this.miniSplitEl.on("click",this.onCollapseClick,this,{stopEvent:true})}var b=this.splitSettings[d];this.split=new Ext.SplitBar(this.splitEl.dom,c.el,b.orientation);this.split.tickSize=this.tickSize;this.split.placement=b.placement;this.split.getMaximumSize=this[b.maxFn].createDelegate(this);this.split.minSize=this.minSize||this[b.minProp];this.split.on("beforeapply",this.onSplitMove,this);this.split.useShim=this.useShim===true;this.maxSize=this.maxSize||this[b.maxProp];if(c.hidden){this.splitEl.hide()}if(this.useSplitTips){this.splitEl.dom.title=this.collapsible?this.collapsibleSplitTip:this.splitTip}if(this.collapsible){this.splitEl.on("dblclick",this.onCollapseClick,this)}},getSize:function(){if(this.isCollapsed){return this.collapsedEl.getSize()}var a=this.panel.getSize();if(this.position=="north"||this.position=="south"){a.height+=this.splitEl.dom.offsetHeight}else{a.width+=this.splitEl.dom.offsetWidth}return a},getHMaxSize:function(){var b=this.maxSize||10000;var a=this.layout.center;return Math.min(b,(this.el.getWidth()+a.el.getWidth())-a.getMinWidth())},getVMaxSize:function(){var b=this.maxSize||10000;var a=this.layout.center;return Math.min(b,(this.el.getHeight()+a.el.getHeight())-a.getMinHeight())},onSplitMove:function(b,a){var c=this.panel.getSize();this.lastSplitSize=a;if(this.position=="north"||this.position=="south"){this.panel.setSize(c.width,a);this.state.height=a}else{this.panel.setSize(a,c.height);this.state.width=a}this.layout.layout();this.panel.saveState();return false},getSplitBar:function(){return this.split},destroy:function(){Ext.destroy(this.miniSplitEl,this.split,this.splitEl);Ext.layout.BorderLayout.SplitRegion.superclass.destroy.call(this)}});Ext.Container.LAYOUTS.border=Ext.layout.BorderLayout;Ext.layout.FormLayout=Ext.extend(Ext.layout.AnchorLayout,{labelSeparator:":",trackLabels:true,type:"form",onRemove:function(d){Ext.layout.FormLayout.superclass.onRemove.call(this,d);if(this.trackLabels){d.un("show",this.onFieldShow,this);d.un("hide",this.onFieldHide,this)}var b=d.getPositionEl(),a=d.getItemCt&&d.getItemCt();if(d.rendered&&a){if(b&&b.dom){b.insertAfter(a)}Ext.destroy(a);Ext.destroyMembers(d,"label","itemCt");if(d.customItemCt){Ext.destroyMembers(d,"getItemCt","customItemCt")}}},setContainer:function(a){Ext.layout.FormLayout.superclass.setContainer.call(this,a);if(a.labelAlign){a.addClass("x-form-label-"+a.labelAlign)}if(a.hideLabels){Ext.apply(this,{labelStyle:"display:none",elementStyle:"padding-left:0;",labelAdjust:0})}else{this.labelSeparator=Ext.isDefined(a.labelSeparator)?a.labelSeparator:this.labelSeparator;a.labelWidth=a.labelWidth||100;if(Ext.isNumber(a.labelWidth)){var b=Ext.isNumber(a.labelPad)?a.labelPad:5;Ext.apply(this,{labelAdjust:a.labelWidth+b,labelStyle:"width:"+a.labelWidth+"px;",elementStyle:"padding-left:"+(a.labelWidth+b)+"px"})}if(a.labelAlign=="top"){Ext.apply(this,{labelStyle:"width:auto;",labelAdjust:0,elementStyle:"padding-left:0;"})}}},isHide:function(a){return a.hideLabel||this.container.hideLabels},onFieldShow:function(a){a.getItemCt().removeClass("x-hide-"+a.hideMode);if(a.isComposite){a.doLayout()}},onFieldHide:function(a){a.getItemCt().addClass("x-hide-"+a.hideMode)},getLabelStyle:function(e){var b="",c=[this.labelStyle,e];for(var d=0,a=c.length;d=b)||(this.cells[c]&&this.cells[c][a])){if(b&&a>=b){c++;a=0}else{a++}}return[a,c]},renderItem:function(e,a,d){if(!this.table){this.table=d.createChild(Ext.apply({tag:"table",cls:"x-table-layout",cellspacing:0,cn:{tag:"tbody"}},this.tableAttrs),null,true)}if(e&&!e.rendered){e.render(this.getNextCell(e));this.configureItem(e)}else{if(e&&!this.isValidParent(e,d)){var b=this.getNextCell(e);b.insertBefore(e.getPositionEl().dom,null);e.container=Ext.get(b);this.configureItem(e)}}},isValidParent:function(b,a){return b.getPositionEl().up("table",5).dom.parentNode===(a.dom||a)},destroy:function(){delete this.table;Ext.layout.TableLayout.superclass.destroy.call(this)}});Ext.Container.LAYOUTS.table=Ext.layout.TableLayout;Ext.layout.AbsoluteLayout=Ext.extend(Ext.layout.AnchorLayout,{extraCls:"x-abs-layout-item",type:"absolute",onLayout:function(a,b){b.position();this.paddingLeft=b.getPadding("l");this.paddingTop=b.getPadding("t");Ext.layout.AbsoluteLayout.superclass.onLayout.call(this,a,b)},adjustWidthAnchor:function(b,a){return b?b-a.getPosition(true)[0]+this.paddingLeft:b},adjustHeightAnchor:function(b,a){return b?b-a.getPosition(true)[1]+this.paddingTop:b}});Ext.Container.LAYOUTS.absolute=Ext.layout.AbsoluteLayout;Ext.layout.BoxLayout=Ext.extend(Ext.layout.ContainerLayout,{defaultMargins:{left:0,top:0,right:0,bottom:0},padding:"0",pack:"start",monitorResize:true,type:"box",scrollOffset:0,extraCls:"x-box-item",targetCls:"x-box-layout-ct",innerCls:"x-box-inner",constructor:function(a){Ext.layout.BoxLayout.superclass.constructor.call(this,a);if(Ext.isString(this.defaultMargins)){this.defaultMargins=this.parseMargins(this.defaultMargins)}var d=this.overflowHandler;if(typeof d=="string"){d={type:d}}var c="none";if(d&&d.type!=undefined){c=d.type}var b=Ext.layout.boxOverflow[c];if(b[this.type]){b=b[this.type]}this.overflowHandler=new b(this,d)},onLayout:function(b,h){Ext.layout.BoxLayout.superclass.onLayout.call(this,b,h);var d=this.getLayoutTargetSize(),i=this.getVisibleItems(b),c=this.calculateChildBoxes(i,d),g=c.boxes,k=c.meta;if(d.width>0){var l=this.overflowHandler,a=k.tooNarrow?"handleOverflow":"clearOverflow";var e=l[a](c,d);if(e){if(e.targetSize){d=e.targetSize}if(e.recalculate){i=this.getVisibleItems(b);c=this.calculateChildBoxes(i,d);g=c.boxes}}}this.layoutTargetLastSize=d;this.childBoxCache=c;this.updateInnerCtSize(d,c);this.updateChildBoxes(g);this.handleTargetOverflow(d,b,h)},updateChildBoxes:function(c){for(var b=0,e=c.length;b(None)',constructor:function(a){Ext.layout.boxOverflow.Menu.superclass.constructor.apply(this,arguments);this.menuItems=[]},createInnerElements:function(){if(!this.afterCt){this.afterCt=this.layout.innerCt.insertSibling({cls:this.afterCls},"before")}},clearOverflow:function(a,g){var e=g.width+(this.afterCt?this.afterCt.getWidth():0),b=this.menuItems;this.hideTrigger();for(var c=0,d=b.length;ci.width;return m}},handleOverflow:function(d,h){this.showTrigger();var l=h.width-this.afterCt.getWidth(),m=d.boxes,e=0,s=false;for(var p=0,c=m.length;p=0;k--){var r=m[k].component,q=m[k].left+m[k].width;if(q>=l){this.menuItems.unshift({component:r,width:m[k].width});r.hide()}else{break}}}if(this.menuItems.length==0){this.hideTrigger()}return{targetSize:{height:h.height,width:l},recalculate:s}}});Ext.layout.boxOverflow.menu.hbox=Ext.layout.boxOverflow.HorizontalMenu;Ext.layout.boxOverflow.Scroller=Ext.extend(Ext.layout.boxOverflow.None,{animateScroll:true,scrollIncrement:100,wheelIncrement:3,scrollRepeatInterval:400,scrollDuration:0.4,beforeCls:"x-strip-left",afterCls:"x-strip-right",scrollerCls:"x-strip-scroller",beforeScrollerCls:"x-strip-scroller-left",afterScrollerCls:"x-strip-scroller-right",createWheelListener:function(){this.layout.innerCt.on({scope:this,mousewheel:function(a){a.stopEvent();this.scrollBy(a.getWheelDelta()*this.wheelIncrement*-1,false)}})},handleOverflow:function(a,b){this.createInnerElements();this.showScrollers()},clearOverflow:function(){this.hideScrollers()},showScrollers:function(){this.createScrollers();this.beforeScroller.show();this.afterScroller.show();this.updateScrollButtons()},hideScrollers:function(){if(this.beforeScroller!=undefined){this.beforeScroller.hide();this.afterScroller.hide()}},createScrollers:function(){if(!this.beforeScroller&&!this.afterScroller){var a=this.beforeCt.createChild({cls:String.format("{0} {1} ",this.scrollerCls,this.beforeScrollerCls)});var b=this.afterCt.createChild({cls:String.format("{0} {1}",this.scrollerCls,this.afterScrollerCls)});a.addClassOnOver(this.beforeScrollerCls+"-hover");b.addClassOnOver(this.afterScrollerCls+"-hover");a.setVisibilityMode(Ext.Element.DISPLAY);b.setVisibilityMode(Ext.Element.DISPLAY);this.beforeRepeater=new Ext.util.ClickRepeater(a,{interval:this.scrollRepeatInterval,handler:this.scrollLeft,scope:this});this.afterRepeater=new Ext.util.ClickRepeater(b,{interval:this.scrollRepeatInterval,handler:this.scrollRight,scope:this});this.beforeScroller=a;this.afterScroller=b}},destroy:function(){Ext.destroy(this.beforeScroller,this.afterScroller,this.beforeRepeater,this.afterRepeater,this.beforeCt,this.afterCt)},scrollBy:function(b,a){this.scrollTo(this.getScrollPosition()+b,a)},getItem:function(a){if(Ext.isString(a)){a=Ext.getCmp(a)}else{if(Ext.isNumber(a)){a=this.items[a]}}return a},getScrollAnim:function(){return{duration:this.scrollDuration,callback:this.updateScrollButtons,scope:this}},updateScrollButtons:function(){if(this.beforeScroller==undefined||this.afterScroller==undefined){return}var d=this.atExtremeBefore()?"addClass":"removeClass",c=this.atExtremeAfter()?"addClass":"removeClass",a=this.beforeScrollerCls+"-disabled",b=this.afterScrollerCls+"-disabled";this.beforeScroller[d](a);this.afterScroller[c](b);this.scrolling=false},atExtremeBefore:function(){return this.getScrollPosition()===0},scrollLeft:function(a){this.scrollBy(-this.scrollIncrement,a)},scrollRight:function(a){this.scrollBy(this.scrollIncrement,a)},scrollToItem:function(d,b){d=this.getItem(d);if(d!=undefined){var a=this.getItemVisibility(d);if(!a.fullyVisible){var c=d.getBox(true,true),e=c.x;if(a.hiddenRight){e-=(this.layout.innerCt.getWidth()-c.width)}this.scrollTo(e,b)}}},getItemVisibility:function(e){var d=this.getItem(e).getBox(true,true),a=d.x,c=d.x+d.width,g=this.getScrollPosition(),b=this.layout.innerCt.getWidth()+g;return{hiddenLeft:ab,fullyVisible:a>g&&c=this.getMaxScrollBottom()}});Ext.layout.boxOverflow.scroller.vbox=Ext.layout.boxOverflow.VerticalScroller;Ext.layout.boxOverflow.HorizontalScroller=Ext.extend(Ext.layout.boxOverflow.Scroller,{handleOverflow:function(a,b){Ext.layout.boxOverflow.HorizontalScroller.superclass.handleOverflow.apply(this,arguments);return{targetSize:{height:b.height,width:b.width-(this.beforeCt.getWidth()+this.afterCt.getWidth())}}},createInnerElements:function(){var a=this.layout.innerCt;if(!this.beforeCt){this.afterCt=a.insertSibling({cls:this.afterCls},"before");this.beforeCt=a.insertSibling({cls:this.beforeCls},"before");this.createWheelListener()}},scrollTo:function(a,b){var d=this.getScrollPosition(),c=a.constrain(0,this.getMaxScrollRight());if(c!=d&&!this.scrolling){if(b==undefined){b=this.animateScroll}this.layout.innerCt.scrollTo("left",c,b?this.getScrollAnim():false);if(b){this.scrolling=true}else{this.scrolling=false;this.updateScrollButtons()}}},getScrollPosition:function(){return parseInt(this.layout.innerCt.dom.scrollLeft,10)||0},getMaxScrollRight:function(){return this.layout.innerCt.dom.scrollWidth-this.layout.innerCt.getWidth()},atExtremeAfter:function(){return this.getScrollPosition()>=this.getMaxScrollRight()}});Ext.layout.boxOverflow.scroller.hbox=Ext.layout.boxOverflow.HorizontalScroller;Ext.layout.HBoxLayout=Ext.extend(Ext.layout.BoxLayout,{align:"top",type:"hbox",calculateChildBoxes:function(s,b){var G=s.length,S=this.padding,E=S.top,V=S.left,z=E+S.bottom,P=V+S.right,a=b.width-this.scrollOffset,e=b.height,p=Math.max(0,e-z),Q=this.pack=="start",X=this.pack=="center",B=this.pack=="end",M=0,R=0,U=0,m=0,Y=0,I=[],l,K,N,W,x,k,T,J,c,y,r,O;for(T=0;Ta;var o=Math.max(0,a-M-P);if(q){for(T=0;T0){var D=[];for(var F=0,w=G;Fi.available?1:-1});for(var T=0,w=D.length;T0){J.top=E+r+(A/2)}}V+=J.width+x.right}return{boxes:I,meta:{maxHeight:R,nonFlexWidth:M,desiredWidth:m,minimumWidth:Y,shortfall:m-a,tooNarrow:q}}}});Ext.Container.LAYOUTS.hbox=Ext.layout.HBoxLayout;Ext.layout.VBoxLayout=Ext.extend(Ext.layout.BoxLayout,{align:"left",type:"vbox",calculateChildBoxes:function(q,b){var G=q.length,T=this.padding,E=T.top,W=T.left,z=E+T.bottom,Q=W+T.right,a=b.width-this.scrollOffset,d=b.height,M=Math.max(0,a-Q),R=this.pack=="start",Y=this.pack=="center",B=this.pack=="end",m=0,w=0,V=0,N=0,o=0,I=[],k,K,P,X,v,h,U,J,c,y,p,e;for(U=0;Ud;var s=Math.max(0,(d-m-z));if(n){for(U=0,t=G;U0){var L=[];for(var F=0,t=G;Fi.available?1:-1});for(var U=0,t=L.length;U0){J.left=W+y+(A/2)}}E+=J.height+v.bottom}return{boxes:I,meta:{maxWidth:w,nonFlexHeight:m,desiredHeight:N,minimumHeight:o,shortfall:N-d,tooNarrow:n}}}});Ext.Container.LAYOUTS.vbox=Ext.layout.VBoxLayout;Ext.layout.ToolbarLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,type:"toolbar",triggerWidth:18,noItemsMenuText:'
    (None)
    ',lastOverflow:false,tableHTML:['',"","",'",'","","","
    ','',"",'',"","
    ","
    ','',"","","","","","","
    ",'',"",'',"","
    ","
    ",'',"",'',"","
    ","
    ","
    "].join(""),onLayout:function(e,k){if(!this.leftTr){var h=e.buttonAlign=="center"?"center":"left";k.addClass("x-toolbar-layout-ct");k.insertHtml("beforeEnd",String.format(this.tableHTML,h));this.leftTr=k.child("tr.x-toolbar-left-row",true);this.rightTr=k.child("tr.x-toolbar-right-row",true);this.extrasTr=k.child("tr.x-toolbar-extras-row",true);if(this.hiddenItem==undefined){this.hiddenItems=[]}}var l=e.buttonAlign=="right"?this.rightTr:this.leftTr,m=e.items.items,d=0;for(var b=0,g=m.length,n;b=0&&(d=e[a]);a--){if(!d.firstChild){b.removeChild(d)}}},insertCell:function(e,b,a){var d=document.createElement("td");d.className="x-toolbar-cell";b.insertBefore(d,b.childNodes[a]||null);return d},hideItem:function(a){this.hiddenItems.push(a);a.xtbHidden=true;a.xtbWidth=a.getPositionEl().dom.parentNode.offsetWidth;a.hide()},unhideItem:function(a){a.show();a.xtbHidden=false;this.hiddenItems.remove(a)},getItemWidth:function(a){return a.hidden?(a.xtbWidth||0):a.getPositionEl().dom.parentNode.offsetWidth},fitToSize:function(l){if(this.container.enableOverflow===false){return}var b=l.dom.clientWidth,k=l.dom.firstChild.offsetWidth,n=b-this.triggerWidth,a=this.lastWidth||0,c=this.hiddenItems,e=c.length!=0,o=b>=a;this.lastWidth=b;if(k>b||(e&&o)){var m=this.container.items.items,h=m.length,d=0,p;for(var g=0;gn){if(!(p.hidden||p.xtbHidden)){this.hideItem(p)}}else{if(p.xtbHidden){this.unhideItem(p)}}}}}e=c.length!=0;if(e){this.initMore();if(!this.lastOverflow){this.container.fireEvent("overflowchange",this.container,true);this.lastOverflow=true}}else{if(this.more){this.clearMenu();this.more.destroy();delete this.more;if(this.lastOverflow){this.container.fireEvent("overflowchange",this.container,false);this.lastOverflow=false}}}},createMenuConfig:function(c,a){var b=Ext.apply({},c.initialConfig),d=c.toggleGroup;Ext.copyTo(b,c,["iconCls","icon","itemId","disabled","handler","scope","menu"]);Ext.apply(b,{text:c.overflowText||c.text,hideOnClick:a});if(d||c.enableToggle){Ext.apply(b,{group:d,checked:c.pressed,listeners:{checkchange:function(g,e){c.toggle(e)}}})}delete b.ownerCt;delete b.xtype;delete b.id;return b},addComponentToMenu:function(b,a){if(a instanceof Ext.Toolbar.Separator){b.add("-")}else{if(Ext.isFunction(a.isXType)){if(a.isXType("splitbutton")){b.add(this.createMenuConfig(a,true))}else{if(a.isXType("button")){b.add(this.createMenuConfig(a,!a.menu))}else{if(a.isXType("buttongroup")){a.items.each(function(c){this.addComponentToMenu(b,c)},this)}}}}}},clearMenu:function(){var a=this.moreMenu;if(a&&a.items){a.items.each(function(b){delete b.menu})}},beforeMoreShow:function(h){var b=this.container.items.items,a=b.length,g,e;var c=function(k,i){return k.isXType("buttongroup")&&!(i instanceof Ext.Toolbar.Separator)};this.clearMenu();h.removeAll();for(var d=0;d','','{altText}',"","")}if(g&&!g.rendered){if(Ext.isNumber(b)){b=e.dom.childNodes[b]}var d=this.getItemArgs(g);g.render(g.positionEl=b?this.itemTpl.insertBefore(b,d,true):this.itemTpl.append(e,d,true));g.positionEl.menuItemId=g.getItemId();if(!d.isMenuItem&&d.needsIcon){g.positionEl.addClass("x-menu-list-item-indent")}this.configureItem(g)}else{if(g&&!this.isValidParent(g,e)){if(Ext.isNumber(b)){b=e.dom.childNodes[b]}e.dom.insertBefore(g.getActionEl().dom,b||null)}}},getItemArgs:function(d){var a=d instanceof Ext.menu.Item,b=!(a||d instanceof Ext.menu.Separator);return{isMenuItem:a,needsIcon:b&&(d.icon||d.iconCls),icon:d.icon||Ext.BLANK_IMAGE_URL,iconCls:"x-menu-item-icon "+(d.iconCls||""),itemId:"x-menu-el-"+d.id,itemCls:"x-menu-list-item ",altText:d.altText||""}},isValidParent:function(b,a){return b.el.up("li.x-menu-list-item",5).dom.parentNode===(a.dom||a)},onLayout:function(a,b){Ext.layout.MenuLayout.superclass.onLayout.call(this,a,b);this.doAutoSize()},doAutoSize:function(){var c=this.container,a=c.width;if(c.floating){if(a){c.setWidth(a)}else{if(Ext.isIE){c.setWidth(Ext.isStrict&&(Ext.isIE7||Ext.isIE8)?"auto":c.minWidth);var d=c.getEl(),b=d.dom.offsetWidth;c.setWidth(c.getLayoutTarget().getWidth()+d.getFrameWidth("lr"))}}}}});Ext.Container.LAYOUTS.menu=Ext.layout.MenuLayout;Ext.Viewport=Ext.extend(Ext.Container,{initComponent:function(){Ext.Viewport.superclass.initComponent.call(this);document.getElementsByTagName("html")[0].className+=" x-viewport";this.el=Ext.getBody();this.el.setHeight=Ext.emptyFn;this.el.setWidth=Ext.emptyFn;this.el.setSize=Ext.emptyFn;this.el.dom.scroll="no";this.allowDomMove=false;this.autoWidth=true;this.autoHeight=true;Ext.EventManager.onWindowResize(this.fireResize,this);this.renderTo=this.el},fireResize:function(a,b){this.fireEvent("resize",this,a,b,a,b)}});Ext.reg("viewport",Ext.Viewport);Ext.Panel=Ext.extend(Ext.Container,{baseCls:"x-panel",collapsedCls:"x-panel-collapsed",maskDisabled:true,animCollapse:Ext.enableFx,headerAsText:true,buttonAlign:"right",collapsed:false,collapseFirst:true,minButtonWidth:75,elements:"body",preventBodyReset:false,padding:undefined,resizeEvent:"bodyresize",toolTarget:"header",collapseEl:"bwrap",slideAnchor:"t",disabledClass:"",deferHeight:true,expandDefaults:{duration:0.25},collapseDefaults:{duration:0.25},initComponent:function(){Ext.Panel.superclass.initComponent.call(this);this.addEvents("bodyresize","titlechange","iconchange","collapse","expand","beforecollapse","beforeexpand","beforeclose","close","activate","deactivate");if(this.unstyled){this.baseCls="x-plain"}this.toolbars=[];if(this.tbar){this.elements+=",tbar";this.topToolbar=this.createToolbar(this.tbar);this.tbar=null}if(this.bbar){this.elements+=",bbar";this.bottomToolbar=this.createToolbar(this.bbar);this.bbar=null}if(this.header===true){this.elements+=",header";this.header=null}else{if(this.headerCfg||(this.title&&this.header!==false)){this.elements+=",header"}}if(this.footerCfg||this.footer===true){this.elements+=",footer";this.footer=null}if(this.buttons){this.fbar=this.buttons;this.buttons=null}if(this.fbar){this.createFbar(this.fbar)}if(this.autoLoad){this.on("render",this.doAutoLoad,this,{delay:10})}},createFbar:function(b){var a=this.minButtonWidth;this.elements+=",footer";this.fbar=this.createToolbar(b,{buttonAlign:this.buttonAlign,toolbarCls:"x-panel-fbar",enableOverflow:false,defaults:function(d){return{minWidth:d.minWidth||a}}});this.fbar.items.each(function(d){d.minWidth=d.minWidth||this.minButtonWidth},this);this.buttons=this.fbar.items.items},createToolbar:function(b,c){var a;if(Ext.isArray(b)){b={items:b}}a=b.events?Ext.apply(b,c):this.createComponent(Ext.apply({},b,c),"toolbar");this.toolbars.push(a);return a},createElement:function(a,c){if(this[a]){c.appendChild(this[a].dom);return}if(a==="bwrap"||this.elements.indexOf(a)!=-1){if(this[a+"Cfg"]){this[a]=Ext.fly(c).createChild(this[a+"Cfg"])}else{var b=document.createElement("div");b.className=this[a+"Cls"];this[a]=Ext.get(c.appendChild(b))}if(this[a+"CssClass"]){this[a].addClass(this[a+"CssClass"])}if(this[a+"Style"]){this[a].applyStyles(this[a+"Style"])}}},onRender:function(g,e){Ext.Panel.superclass.onRender.call(this,g,e);this.createClasses();var a=this.el,h=a.dom,l,i;if(this.collapsible&&!this.hideCollapseTool){this.tools=this.tools?this.tools.slice(0):[];this.tools[this.collapseFirst?"unshift":"push"]({id:"toggle",handler:this.toggleCollapse,scope:this})}if(this.tools){i=this.tools;this.elements+=(this.header!==false)?",header":""}this.tools={};a.addClass(this.baseCls);if(h.firstChild){this.header=a.down("."+this.headerCls);this.bwrap=a.down("."+this.bwrapCls);var k=this.bwrap?this.bwrap:a;this.tbar=k.down("."+this.tbarCls);this.body=k.down("."+this.bodyCls);this.bbar=k.down("."+this.bbarCls);this.footer=k.down("."+this.footerCls);this.fromMarkup=true}if(this.preventBodyReset===true){a.addClass("x-panel-reset")}if(this.cls){a.addClass(this.cls)}if(this.buttons){this.elements+=",footer"}if(this.frame){a.insertHtml("afterBegin",String.format(Ext.Element.boxMarkup,this.baseCls));this.createElement("header",h.firstChild.firstChild.firstChild);this.createElement("bwrap",h);l=this.bwrap.dom;var c=h.childNodes[1],b=h.childNodes[2];l.appendChild(c);l.appendChild(b);var m=l.firstChild.firstChild.firstChild;this.createElement("tbar",m);this.createElement("body",m);this.createElement("bbar",m);this.createElement("footer",l.lastChild.firstChild.firstChild);if(!this.footer){this.bwrap.dom.lastChild.className+=" x-panel-nofooter"}this.ft=Ext.get(this.bwrap.dom.lastChild);this.mc=Ext.get(m)}else{this.createElement("header",h);this.createElement("bwrap",h);l=this.bwrap.dom;this.createElement("tbar",l);this.createElement("body",l);this.createElement("bbar",l);this.createElement("footer",l);if(!this.header){this.body.addClass(this.bodyCls+"-noheader");if(this.tbar){this.tbar.addClass(this.tbarCls+"-noheader")}}}if(Ext.isDefined(this.padding)){this.body.setStyle("padding",this.body.addUnits(this.padding))}if(this.border===false){this.el.addClass(this.baseCls+"-noborder");this.body.addClass(this.bodyCls+"-noborder");if(this.header){this.header.addClass(this.headerCls+"-noborder")}if(this.footer){this.footer.addClass(this.footerCls+"-noborder")}if(this.tbar){this.tbar.addClass(this.tbarCls+"-noborder")}if(this.bbar){this.bbar.addClass(this.bbarCls+"-noborder")}}if(this.bodyBorder===false){this.body.addClass(this.bodyCls+"-noborder")}this.bwrap.enableDisplayMode("block");if(this.header){this.header.unselectable();if(this.headerAsText){this.header.dom.innerHTML=''+this.header.dom.innerHTML+"";if(this.iconCls){this.setIconClass(this.iconCls)}}}if(this.floating){this.makeFloating(this.floating)}if(this.collapsible&&this.titleCollapse&&this.header){this.mon(this.header,"click",this.toggleCollapse,this);this.header.setStyle("cursor","pointer")}if(i){this.addTool.apply(this,i)}if(this.fbar){this.footer.addClass("x-panel-btns");this.fbar.ownerCt=this;this.fbar.render(this.footer);this.footer.createChild({cls:"x-clear"})}if(this.tbar&&this.topToolbar){this.topToolbar.ownerCt=this;this.topToolbar.render(this.tbar)}if(this.bbar&&this.bottomToolbar){this.bottomToolbar.ownerCt=this;this.bottomToolbar.render(this.bbar)}},setIconClass:function(b){var a=this.iconCls;this.iconCls=b;if(this.rendered&&this.header){if(this.frame){this.header.addClass("x-panel-icon");this.header.replaceClass(a,this.iconCls)}else{var e=this.header,c=e.child("img.x-panel-inline-icon");if(c){Ext.fly(c).replaceClass(a,this.iconCls)}else{var d=e.child("span."+this.headerTextCls);if(d){Ext.DomHelper.insertBefore(d.dom,{tag:"img",alt:"",src:Ext.BLANK_IMAGE_URL,cls:"x-panel-inline-icon "+this.iconCls})}}}}this.fireEvent("iconchange",this,b,a)},makeFloating:function(a){this.floating=true;this.el=new Ext.Layer(Ext.apply({},a,{shadow:Ext.isDefined(this.shadow)?this.shadow:"sides",shadowOffset:this.shadowOffset,constrain:false,shim:this.shim===false?false:undefined}),this.el)},getTopToolbar:function(){return this.topToolbar},getBottomToolbar:function(){return this.bottomToolbar},getFooterToolbar:function(){return this.fbar},addButton:function(a,c,b){if(!this.fbar){this.createFbar([])}if(c){if(Ext.isString(a)){a={text:a}}a=Ext.apply({handler:c,scope:b},a)}return this.fbar.add(a)},addTool:function(){if(!this.rendered){if(!this.tools){this.tools=[]}Ext.each(arguments,function(a){this.tools.push(a)},this);return}if(!this[this.toolTarget]){return}if(!this.toolTemplate){var h=new Ext.Template('
     
    ');h.disableFormats=true;h.compile();Ext.Panel.prototype.toolTemplate=h}for(var g=0,d=arguments,c=d.length;g0){Ext.each(this.toolbars,function(c){c.doLayout(undefined,a)});this.syncHeight()}},syncHeight:function(){var b=this.toolbarHeight,c=this.body,a=this.lastSize.height,d;if(this.autoHeight||!Ext.isDefined(a)||a=="auto"){return}if(b!=this.getToolbarHeight()){b=Math.max(0,a-this.getFrameHeight());c.setHeight(b);d=c.getSize();this.toolbarHeight=this.getToolbarHeight();this.onBodyResize(d.width,d.height)}},onShow:function(){if(this.floating){return this.el.show()}Ext.Panel.superclass.onShow.call(this)},onHide:function(){if(this.floating){return this.el.hide()}Ext.Panel.superclass.onHide.call(this)},createToolHandler:function(c,a,d,b){return function(g){c.removeClass(d);if(a.stopEvent!==false){g.stopEvent()}if(a.handler){a.handler.call(a.scope||c,g,c,b,a)}}},afterRender:function(){if(this.floating&&!this.hidden){this.el.show()}if(this.title){this.setTitle(this.title)}Ext.Panel.superclass.afterRender.call(this);if(this.collapsed){this.collapsed=false;this.collapse(false)}this.initEvents()},getKeyMap:function(){if(!this.keyMap){this.keyMap=new Ext.KeyMap(this.el,this.keys)}return this.keyMap},initEvents:function(){if(this.keys){this.getKeyMap()}if(this.draggable){this.initDraggable()}if(this.toolbars.length>0){Ext.each(this.toolbars,function(a){a.doLayout();a.on({scope:this,afterlayout:this.syncHeight,remove:this.syncHeight})},this);this.syncHeight()}},initDraggable:function(){this.dd=new Ext.Panel.DD(this,Ext.isBoolean(this.draggable)?null:this.draggable)},beforeEffect:function(a){if(this.floating){this.el.beforeAction()}if(a!==false){this.el.addClass("x-panel-animated")}},afterEffect:function(a){this.syncShadow();this.el.removeClass("x-panel-animated")},createEffect:function(c,b,d){var e={scope:d,block:true};if(c===true){e.callback=b;return e}else{if(!c.callback){e.callback=b}else{e.callback=function(){b.call(d);Ext.callback(c.callback,c.scope)}}}return Ext.applyIf(e,c)},collapse:function(b){if(this.collapsed||this.el.hasFxBlock()||this.fireEvent("beforecollapse",this,b)===false){return}var a=b===true||(b!==false&&this.animCollapse);this.beforeEffect(a);this.onCollapse(a,b);return this},onCollapse:function(a,b){if(a){this[this.collapseEl].slideOut(this.slideAnchor,Ext.apply(this.createEffect(b||true,this.afterCollapse,this),this.collapseDefaults))}else{this[this.collapseEl].hide(this.hideMode);this.afterCollapse(false)}},afterCollapse:function(a){this.collapsed=true;this.el.addClass(this.collapsedCls);if(a!==false){this[this.collapseEl].hide(this.hideMode)}this.afterEffect(a);this.cascade(function(b){if(b.lastSize){b.lastSize={width:undefined,height:undefined}}});this.fireEvent("collapse",this)},expand:function(b){if(!this.collapsed||this.el.hasFxBlock()||this.fireEvent("beforeexpand",this,b)===false){return}var a=b===true||(b!==false&&this.animCollapse);this.el.removeClass(this.collapsedCls);this.beforeEffect(a);this.onExpand(a,b);return this},onExpand:function(a,b){if(a){this[this.collapseEl].slideIn(this.slideAnchor,Ext.apply(this.createEffect(b||true,this.afterExpand,this),this.expandDefaults))}else{this[this.collapseEl].show(this.hideMode);this.afterExpand(false)}},afterExpand:function(a){this.collapsed=false;if(a!==false){this[this.collapseEl].show(this.hideMode)}this.afterEffect(a);if(this.deferLayout){delete this.deferLayout;this.doLayout(true)}this.fireEvent("expand",this)},toggleCollapse:function(a){this[this.collapsed?"expand":"collapse"](a);return this},onDisable:function(){if(this.rendered&&this.maskDisabled){this.el.mask()}Ext.Panel.superclass.onDisable.call(this)},onEnable:function(){if(this.rendered&&this.maskDisabled){this.el.unmask()}Ext.Panel.superclass.onEnable.call(this)},onResize:function(g,d,c,e){var a=g,b=d;if(Ext.isDefined(a)||Ext.isDefined(b)){if(!this.collapsed){if(Ext.isNumber(a)){this.body.setWidth(a=this.adjustBodyWidth(a-this.getFrameWidth()))}else{if(a=="auto"){a=this.body.setWidth("auto").dom.offsetWidth}else{a=this.body.dom.offsetWidth}}if(this.tbar){this.tbar.setWidth(a);if(this.topToolbar){this.topToolbar.setSize(a)}}if(this.bbar){this.bbar.setWidth(a);if(this.bottomToolbar){this.bottomToolbar.setSize(a);if(Ext.isIE){this.bbar.setStyle("position","static");this.bbar.setStyle("position","")}}}if(this.footer){this.footer.setWidth(a);if(this.fbar){this.fbar.setSize(Ext.isIE?(a-this.footer.getFrameWidth("lr")):"auto")}}if(Ext.isNumber(b)){b=Math.max(0,b-this.getFrameHeight());this.body.setHeight(b)}else{if(b=="auto"){this.body.setHeight(b)}}if(this.disabled&&this.el._mask){this.el._mask.setSize(this.el.dom.clientWidth,this.el.getHeight())}}else{this.queuedBodySize={width:a,height:b};if(!this.queuedExpand&&this.allowQueuedExpand!==false){this.queuedExpand=true;this.on("expand",function(){delete this.queuedExpand;this.onResize(this.queuedBodySize.width,this.queuedBodySize.height)},this,{single:true})}}this.onBodyResize(a,b)}this.syncShadow();Ext.Panel.superclass.onResize.call(this,g,d,c,e)},onBodyResize:function(a,b){this.fireEvent("bodyresize",this,a,b)},getToolbarHeight:function(){var a=0;if(this.rendered){Ext.each(this.toolbars,function(b){a+=b.getHeight()},this)}return a},adjustBodyHeight:function(a){return a},adjustBodyWidth:function(a){return a},onPosition:function(){this.syncShadow()},getFrameWidth:function(){var b=this.el.getFrameWidth("lr")+this.bwrap.getFrameWidth("lr");if(this.frame){var a=this.bwrap.dom.firstChild;b+=(Ext.fly(a).getFrameWidth("l")+Ext.fly(a.firstChild).getFrameWidth("r"));b+=this.mc.getFrameWidth("lr")}return b},getFrameHeight:function(){var a=this.el.getFrameWidth("tb")+this.bwrap.getFrameWidth("tb");a+=(this.tbar?this.tbar.getHeight():0)+(this.bbar?this.bbar.getHeight():0);if(this.frame){a+=this.el.dom.firstChild.offsetHeight+this.ft.dom.offsetHeight+this.mc.getFrameWidth("tb")}else{a+=(this.header?this.header.getHeight():0)+(this.footer?this.footer.getHeight():0)}return a},getInnerWidth:function(){return this.getSize().width-this.getFrameWidth()},getInnerHeight:function(){return this.body.getHeight()},syncShadow:function(){if(this.floating){this.el.sync(true)}},getLayoutTarget:function(){return this.body},getContentTarget:function(){return this.body},setTitle:function(b,a){this.title=b;if(this.header&&this.headerAsText){this.header.child("span").update(b)}if(a){this.setIconClass(a)}this.fireEvent("titlechange",this,b);return this},getUpdater:function(){return this.body.getUpdater()},load:function(){var a=this.body.getUpdater();a.update.apply(a,arguments);return this},beforeDestroy:function(){Ext.Panel.superclass.beforeDestroy.call(this);if(this.header){this.header.removeAllListeners()}if(this.tools){for(var a in this.tools){Ext.destroy(this.tools[a])}}if(this.toolbars.length>0){Ext.each(this.toolbars,function(b){b.un("afterlayout",this.syncHeight,this);b.un("remove",this.syncHeight,this)},this)}if(Ext.isArray(this.buttons)){while(this.buttons.length){Ext.destroy(this.buttons[0])}}if(this.rendered){Ext.destroy(this.ft,this.header,this.footer,this.tbar,this.bbar,this.body,this.mc,this.bwrap,this.dd);if(this.fbar){Ext.destroy(this.fbar,this.fbar.el)}}Ext.destroy(this.toolbars)},createClasses:function(){this.headerCls=this.baseCls+"-header";this.headerTextCls=this.baseCls+"-header-text";this.bwrapCls=this.baseCls+"-bwrap";this.tbarCls=this.baseCls+"-tbar";this.bodyCls=this.baseCls+"-body";this.bbarCls=this.baseCls+"-bbar";this.footerCls=this.baseCls+"-footer"},createGhost:function(a,e,b){var d=document.createElement("div");d.className="x-panel-ghost "+(a?a:"");if(this.header){d.appendChild(this.el.dom.firstChild.cloneNode(true))}Ext.fly(d.appendChild(document.createElement("ul"))).setHeight(this.bwrap.getHeight());d.style.width=this.el.dom.offsetWidth+"px";if(!b){this.container.dom.appendChild(d)}else{Ext.getDom(b).appendChild(d)}if(e!==false&&this.el.useShim!==false){var c=new Ext.Layer({shadow:false,useDisplay:true,constrain:false},d);c.show();return c}else{return new Ext.Element(d)}},doAutoLoad:function(){var a=this.body.getUpdater();if(this.renderer){a.setRenderer(this.renderer)}a.update(Ext.isObject(this.autoLoad)?this.autoLoad:{url:this.autoLoad})},getTool:function(a){return this.tools[a]}});Ext.reg("panel",Ext.Panel);Ext.Editor=function(b,a){if(b.field){this.field=Ext.create(b.field,"textfield");a=Ext.apply({},b);delete a.field}else{this.field=b}Ext.Editor.superclass.constructor.call(this,a)};Ext.extend(Ext.Editor,Ext.Component,{allowBlur:true,value:"",alignment:"c-c?",offsets:[0,0],shadow:"frame",constrain:false,swallowKeys:true,completeOnEnter:true,cancelOnEsc:true,updateEl:false,initComponent:function(){Ext.Editor.superclass.initComponent.call(this);this.addEvents("beforestartedit","startedit","beforecomplete","complete","canceledit","specialkey")},onRender:function(b,a){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:b,shim:this.shim,shadowOffset:this.shadowOffset||4,id:this.id,constrain:this.constrain});if(this.zIndex){this.el.setZIndex(this.zIndex)}this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!="title"){this.field.msgTarget="qtip"}this.field.inEditor=true;this.mon(this.field,{scope:this,blur:this.onBlur,specialkey:this.onSpecialKey});if(this.field.grow){this.mon(this.field,"autosize",this.el.sync,this.el,{delay:1})}this.field.render(this.el).show();this.field.getEl().dom.name="";if(this.swallowKeys){this.field.el.swallowEvent(["keypress","keydown"])}},onSpecialKey:function(g,d){var b=d.getKey(),a=this.completeOnEnter&&b==d.ENTER,c=this.cancelOnEsc&&b==d.ESC;if(a||c){d.stopEvent();if(a){this.completeEdit()}else{this.cancelEdit()}if(g.triggerBlur){g.triggerBlur()}}this.fireEvent("specialkey",g,d)},startEdit:function(b,c){if(this.editing){this.completeEdit()}this.boundEl=Ext.get(b);var a=c!==undefined?c:this.boundEl.dom.innerHTML;if(!this.rendered){this.render(this.parentEl||document.body)}if(this.fireEvent("beforestartedit",this,this.boundEl,a)!==false){this.startValue=a;this.field.reset();this.field.setValue(a);this.realign(true);this.editing=true;this.show()}},doAutoSize:function(){if(this.autoSize){var b=this.boundEl.getSize(),a=this.field.getSize();switch(this.autoSize){case"width":this.setSize(b.width,a.height);break;case"height":this.setSize(a.width,b.height);break;case"none":this.setSize(a.width,a.height);break;default:this.setSize(b.width,b.height)}}},setSize:function(a,b){delete this.field.lastSize;this.field.setSize(a,b);if(this.el){if(Ext.isGecko2||Ext.isOpera||(Ext.isIE7&&Ext.isStrict)){this.el.setSize(a,b)}this.el.sync()}},realign:function(a){if(a===true){this.doAutoSize()}this.el.alignTo(this.boundEl,this.alignment,this.offsets)},completeEdit:function(a){if(!this.editing){return}if(this.field.assertValue){this.field.assertValue()}var b=this.getValue();if(!this.field.isValid()){if(this.revertInvalid!==false){this.cancelEdit(a)}return}if(String(b)===String(this.startValue)&&this.ignoreNoChange){this.hideEdit(a);return}if(this.fireEvent("beforecomplete",this,b,this.startValue)!==false){b=this.getValue();if(this.updateEl&&this.boundEl){this.boundEl.update(b)}this.hideEdit(a);this.fireEvent("complete",this,b,this.startValue)}},onShow:function(){this.el.show();if(this.hideEl!==false){this.boundEl.hide()}this.field.show().focus(false,true);this.fireEvent("startedit",this.boundEl,this.startValue)},cancelEdit:function(a){if(this.editing){var b=this.getValue();this.setValue(this.startValue);this.hideEdit(a);this.fireEvent("canceledit",this,b,this.startValue)}},hideEdit:function(a){if(a!==true){this.editing=false;this.hide()}},onBlur:function(){if(this.allowBlur===true&&this.editing&&this.selectSameEditor!==true){this.completeEdit()}},onHide:function(){if(this.editing){this.completeEdit();return}this.field.blur();if(this.field.collapse){this.field.collapse()}this.el.hide();if(this.hideEl!==false){this.boundEl.show()}},setValue:function(a){this.field.setValue(a)},getValue:function(){return this.field.getValue()},beforeDestroy:function(){Ext.destroyMembers(this,"field");delete this.parentEl;delete this.boundEl}});Ext.reg("editor",Ext.Editor);Ext.ColorPalette=Ext.extend(Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:"click",ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],initComponent:function(){Ext.ColorPalette.superclass.initComponent.call(this);this.addEvents("select");if(this.handler){this.on("select",this.handler,this.scope,true)}},onRender:function(b,a){this.autoEl={tag:"div",cls:this.itemCls};Ext.ColorPalette.superclass.onRender.call(this,b,a);var c=this.tpl||new Ext.XTemplate(' ');c.overwrite(this.el,this.colors);this.mon(this.el,this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!="click"){this.mon(this.el,"click",Ext.emptyFn,this,{delegate:"a",preventDefault:true})}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var a=this.value;this.value=null;this.select(a,true)}},handleClick:function(b,a){b.preventDefault();if(!this.disabled){var d=a.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(d.toUpperCase())}},select:function(b,a){b=b.replace("#","");if(b!=this.value||this.allowReselect){var c=this.el;if(this.value){c.child("a.color-"+this.value).removeClass("x-color-palette-sel")}c.child("a.color-"+b).addClass("x-color-palette-sel");this.value=b;if(a!==true){this.fireEvent("select",this,b)}}}});Ext.reg("colorpalette",Ext.ColorPalette);Ext.DatePicker=Ext.extend(Ext.BoxComponent,{todayText:"Today",okText:" OK ",cancelText:"Cancel",todayTip:"{0} (Spacebar)",minText:"This date is before the minimum date",maxText:"This date is after the maximum date",format:"m/d/y",disabledDaysText:"Disabled",disabledDatesText:"Disabled",monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:"Next Month (Control+Right)",prevText:"Previous Month (Control+Left)",monthYearText:"Choose a month (Control+Up/Down to move years)",startDay:0,showToday:true,focusOnSelect:true,initHour:12,initComponent:function(){Ext.DatePicker.superclass.initComponent.call(this);this.value=this.value?this.value.clearTime(true):new Date().clearTime();this.addEvents("select");if(this.handler){this.on("select",this.handler,this.scope||this)}this.initDisabledDays()},initDisabledDays:function(){if(!this.disabledDatesRE&&this.disabledDates){var b=this.disabledDates,a=b.length-1,c="(?:";Ext.each(b,function(g,e){c+=Ext.isDate(g)?"^"+Ext.escapeRe(g.dateFormat(this.format))+"$":b[e];if(e!=a){c+="|"}},this);this.disabledDatesRE=new RegExp(c+")")}},setDisabledDates:function(a){if(Ext.isArray(a)){this.disabledDates=a;this.disabledDatesRE=null}else{this.disabledDatesRE=a}this.initDisabledDays();this.update(this.value,true)},setDisabledDays:function(a){this.disabledDays=a;this.update(this.value,true)},setMinDate:function(a){this.minDate=a;this.update(this.value,true)},setMaxDate:function(a){this.maxDate=a;this.update(this.value,true)},setValue:function(a){this.value=a.clearTime(true);this.update(this.value)},getValue:function(){return this.value},focus:function(){this.update(this.activeDate)},onEnable:function(a){Ext.DatePicker.superclass.onEnable.call(this);this.doDisabled(false);this.update(a?this.value:this.activeDate);if(Ext.isIE){this.el.repaint()}},onDisable:function(){Ext.DatePicker.superclass.onDisable.call(this);this.doDisabled(true);if(Ext.isIE&&!Ext.isIE8){Ext.each([].concat(this.textNodes,this.el.query("th span")),function(a){Ext.fly(a).repaint()})}},doDisabled:function(a){this.keyNav.setDisabled(a);this.prevRepeater.setDisabled(a);this.nextRepeater.setDisabled(a);if(this.showToday){this.todayKeyListener.setDisabled(a);this.todayBtn.setDisabled(a)}},onRender:function(e,b){var a=['','','",this.showToday?'':"",'
      
    '],c=this.dayNames,h;for(h=0;h<7;h++){var l=this.startDay+h;if(l>6){l=l-7}a.push("")}a[a.length]="";for(h=0;h<42;h++){if(h%7===0&&h!==0){a[a.length]=""}a[a.length]=''}a.push("
    ",c[l].substr(0,1),"
    ');var k=document.createElement("div");k.className="x-date-picker";k.innerHTML=a.join("");e.dom.insertBefore(k,b);this.el=Ext.get(k);this.eventEl=Ext.get(k.firstChild);this.prevRepeater=new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"),{handler:this.showPrevMonth,scope:this,preventDefault:true,stopDefault:true});this.nextRepeater=new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"),{handler:this.showNextMonth,scope:this,preventDefault:true,stopDefault:true});this.monthPicker=this.el.down("div.x-date-mp");this.monthPicker.enableDisplayMode("block");this.keyNav=new Ext.KeyNav(this.eventEl,{left:function(d){if(d.ctrlKey){this.showPrevMonth()}else{this.update(this.activeDate.add("d",-1))}},right:function(d){if(d.ctrlKey){this.showNextMonth()}else{this.update(this.activeDate.add("d",1))}},up:function(d){if(d.ctrlKey){this.showNextYear()}else{this.update(this.activeDate.add("d",-7))}},down:function(d){if(d.ctrlKey){this.showPrevYear()}else{this.update(this.activeDate.add("d",7))}},pageUp:function(d){this.showNextMonth()},pageDown:function(d){this.showPrevMonth()},enter:function(d){d.stopPropagation();return true},scope:this});this.el.unselectable();this.cells=this.el.select("table.x-date-inner tbody td");this.textNodes=this.el.query("table.x-date-inner tbody span");this.mbtn=new Ext.Button({text:" ",tooltip:this.monthYearText,renderTo:this.el.child("td.x-date-middle",true)});this.mbtn.el.child("em").addClass("x-btn-arrow");if(this.showToday){this.todayKeyListener=this.eventEl.addKeyListener(Ext.EventObject.SPACE,this.selectToday,this);var g=(new Date()).dateFormat(this.format);this.todayBtn=new Ext.Button({renderTo:this.el.child("td.x-date-bottom",true),text:String.format(this.todayText,g),tooltip:String.format(this.todayTip,g),handler:this.selectToday,scope:this})}this.mon(this.eventEl,"mousewheel",this.handleMouseWheel,this);this.mon(this.eventEl,"click",this.handleDateClick,this,{delegate:"a.x-date-date"});this.mon(this.mbtn,"click",this.showMonthPicker,this);this.onEnable(true)},createMonthPicker:function(){if(!this.monthPicker.dom.firstChild){var a=[''];for(var b=0;b<6;b++){a.push('",'",b===0?'':'')}a.push('","
    ',Date.getShortMonthName(b),"',Date.getShortMonthName(b+6),"
    ");this.monthPicker.update(a.join(""));this.mon(this.monthPicker,"click",this.onMonthClick,this);this.mon(this.monthPicker,"dblclick",this.onMonthDblClick,this);this.mpMonths=this.monthPicker.select("td.x-date-mp-month");this.mpYears=this.monthPicker.select("td.x-date-mp-year");this.mpMonths.each(function(c,d,e){e+=1;if((e%2)===0){c.dom.xmonth=5+Math.round(e*0.5)}else{c.dom.xmonth=Math.round((e-1)*0.5)}})}},showMonthPicker:function(){if(!this.disabled){this.createMonthPicker();var a=this.el.getSize();this.monthPicker.setSize(a);this.monthPicker.child("table").setSize(a);this.mpSelMonth=(this.activeDate||this.value).getMonth();this.updateMPMonth(this.mpSelMonth);this.mpSelYear=(this.activeDate||this.value).getFullYear();this.updateMPYear(this.mpSelYear);this.monthPicker.slideIn("t",{duration:0.2})}},updateMPYear:function(e){this.mpyear=e;var c=this.mpYears.elements;for(var b=1;b<=10;b++){var d=c[b-1],a;if((b%2)===0){a=e+Math.round(b*0.5);d.firstChild.innerHTML=a;d.xyear=a}else{a=e-(5-Math.round(b*0.5));d.firstChild.innerHTML=a;d.xyear=a}this.mpYears.item(b-1)[a==this.mpSelYear?"addClass":"removeClass"]("x-date-mp-sel")}},updateMPMonth:function(a){this.mpMonths.each(function(b,c,d){b[b.dom.xmonth==a?"addClass":"removeClass"]("x-date-mp-sel")})},selectMPMonth:function(a){},onMonthClick:function(g,b){g.stopEvent();var c=new Ext.Element(b),a;if(c.is("button.x-date-mp-cancel")){this.hideMonthPicker()}else{if(c.is("button.x-date-mp-ok")){var h=new Date(this.mpSelYear,this.mpSelMonth,(this.activeDate||this.value).getDate());if(h.getMonth()!=this.mpSelMonth){h=new Date(this.mpSelYear,this.mpSelMonth,1).getLastDateOfMonth()}this.update(h);this.hideMonthPicker()}else{if((a=c.up("td.x-date-mp-month",2))){this.mpMonths.removeClass("x-date-mp-sel");a.addClass("x-date-mp-sel");this.mpSelMonth=a.dom.xmonth}else{if((a=c.up("td.x-date-mp-year",2))){this.mpYears.removeClass("x-date-mp-sel");a.addClass("x-date-mp-sel");this.mpSelYear=a.dom.xyear}else{if(c.is("a.x-date-mp-prev")){this.updateMPYear(this.mpyear-10)}else{if(c.is("a.x-date-mp-next")){this.updateMPYear(this.mpyear+10)}}}}}}},onMonthDblClick:function(d,b){d.stopEvent();var c=new Ext.Element(b),a;if((a=c.up("td.x-date-mp-month",2))){this.update(new Date(this.mpSelYear,a.dom.xmonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker()}else{if((a=c.up("td.x-date-mp-year",2))){this.update(new Date(a.dom.xyear,this.mpSelMonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker()}}},hideMonthPicker:function(a){if(this.monthPicker){if(a===true){this.monthPicker.hide()}else{this.monthPicker.slideOut("t",{duration:0.2})}}},showPrevMonth:function(a){this.update(this.activeDate.add("mo",-1))},showNextMonth:function(a){this.update(this.activeDate.add("mo",1))},showPrevYear:function(){this.update(this.activeDate.add("y",-1))},showNextYear:function(){this.update(this.activeDate.add("y",1))},handleMouseWheel:function(a){a.stopEvent();if(!this.disabled){var b=a.getWheelDelta();if(b>0){this.showPrevMonth()}else{if(b<0){this.showNextMonth()}}}},handleDateClick:function(b,a){b.stopEvent();if(!this.disabled&&a.dateValue&&!Ext.fly(a.parentNode).hasClass("x-date-disabled")){this.cancelFocus=this.focusOnSelect===false;this.setValue(new Date(a.dateValue));delete this.cancelFocus;this.fireEvent("select",this,this.value)}},selectToday:function(){if(this.todayBtn&&!this.todayBtn.disabled){this.setValue(new Date().clearTime());this.fireEvent("select",this,this.value)}},update:function(H,B){if(this.rendered){var a=this.activeDate,q=this.isVisible();this.activeDate=H;if(!B&&a&&this.el){var p=H.getTime();if(a.getMonth()==H.getMonth()&&a.getFullYear()==H.getFullYear()){this.cells.removeClass("x-date-selected");this.cells.each(function(d){if(d.dom.firstChild.dateValue==p){d.addClass("x-date-selected");if(q&&!this.cancelFocus){Ext.fly(d.dom.firstChild).focus(50)}return false}},this);return}}var l=H.getDaysInMonth(),r=H.getFirstDateOfMonth(),g=r.getDay()-this.startDay;if(g<0){g+=7}l+=g;var C=H.add("mo",-1),h=C.getDaysInMonth()-g,e=this.cells.elements,s=this.textNodes,E=(new Date(C.getFullYear(),C.getMonth(),h,this.initHour)),D=new Date().clearTime().getTime(),x=H.clearTime(true).getTime(),v=this.minDate?this.minDate.clearTime(true):Number.NEGATIVE_INFINITY,z=this.maxDate?this.maxDate.clearTime(true):Number.POSITIVE_INFINITY,G=this.disabledDatesRE,u=this.disabledDatesText,J=this.disabledDays?this.disabledDays.join(""):false,F=this.disabledDaysText,A=this.format;if(this.showToday){var n=new Date().clearTime(),c=(nz||(G&&A&&G.test(n.dateFormat(A)))||(J&&J.indexOf(n.getDay())!=-1));if(!this.disabled){this.todayBtn.setDisabled(c);this.todayKeyListener[c?"disable":"enable"]()}}var m=function(K,d){d.title="";var i=E.clearTime(true).getTime();d.firstChild.dateValue=i;if(i==D){d.className+=" x-date-today";d.title=K.todayText}if(i==x){d.className+=" x-date-selected";if(q){Ext.fly(d.firstChild).focus(50)}}if(iz){d.className=" x-date-disabled";d.title=K.maxText;return}if(J){if(J.indexOf(E.getDay())!=-1){d.title=F;d.className=" x-date-disabled"}}if(G&&A){var w=E.dateFormat(A);if(G.test(w)){d.title=u.replace("%0",w);d.className=" x-date-disabled"}}};var y=0;for(;y=a.value){d=a.value}}c.setValue(b,d,false);c.fireEvent("drag",c,g,this)},getNewValue:function(){var a=this.slider,b=a.innerEl.translatePoints(this.tracker.getXY());return Ext.util.Format.round(a.reverseValue(b.left),a.decimalPrecision)},onDragEnd:function(c){var a=this.slider,b=this.value;this.el.removeClass("x-slider-thumb-drag");this.dragging=false;a.fireEvent("dragend",a,c);if(this.dragStartValue!=b){a.fireEvent("changecomplete",a,b,this)}},destroy:function(){Ext.destroyMembers(this,"tracker","el")}});Ext.slider.MultiSlider=Ext.extend(Ext.BoxComponent,{vertical:false,minValue:0,maxValue:100,decimalPrecision:0,keyIncrement:1,increment:0,clickRange:[5,15],clickToChange:true,animate:true,constrainThumbs:true,topThumbZIndex:10000,initComponent:function(){if(!Ext.isDefined(this.value)){this.value=this.minValue}this.thumbs=[];Ext.slider.MultiSlider.superclass.initComponent.call(this);this.keyIncrement=Math.max(this.increment,this.keyIncrement);this.addEvents("beforechange","change","changecomplete","dragstart","drag","dragend");if(this.values==undefined||Ext.isEmpty(this.values)){this.values=[0]}var a=this.values;for(var b=0;bthis.clickRange[0]&&c.top=c){d+=c}else{if(a*2<-c){d-=c}}}return d.constrain(this.minValue,this.maxValue)},afterRender:function(){Ext.slider.MultiSlider.superclass.afterRender.apply(this,arguments);for(var c=0;ce?e:c.value}this.syncThumb()},setValue:function(d,c,b,g){var a=this.thumbs[d],e=a.el;c=this.normalizeValue(c);if(c!==a.value&&this.fireEvent("beforechange",this,c,a.value,a)!==false){a.value=c;if(this.rendered){this.moveThumb(d,this.translateValue(c),b!==false);this.fireEvent("change",this,c,a);if(g){this.fireEvent("changecomplete",this,c,a)}}}},translateValue:function(a){var b=this.getRatio();return(a*b)-(this.minValue*b)-this.halfThumb},reverseValue:function(b){var a=this.getRatio();return(b+(this.minValue*a))/a},moveThumb:function(d,c,b){var a=this.thumbs[d].el;if(!b||this.animate===false){a.setLeft(c)}else{a.shift({left:c,stopFx:true,duration:0.35})}},focus:function(){this.focusEl.focus(10)},onResize:function(c,e){var b=this.thumbs,a=b.length,d=0;for(;dthis.clickRange[0]&&c.left','
    ','
    ','
    ',"
     
    ","
    ","
    ",'
    ',"
     
    ","
    ","
    ","");this.el=a?c.insertBefore(a,{cls:this.baseCls},true):c.append(d,{cls:this.baseCls},true);if(this.id){this.el.dom.id=this.id}var b=this.el.dom.firstChild;this.progressBar=Ext.get(b.firstChild);if(this.textEl){this.textEl=Ext.get(this.textEl);delete this.textTopEl}else{this.textTopEl=Ext.get(this.progressBar.dom.firstChild);var e=Ext.get(b.childNodes[1]);this.textTopEl.setStyle("z-index",99).addClass("x-hidden");this.textEl=new Ext.CompositeElement([this.textTopEl.dom.firstChild,e.dom.firstChild]);this.textEl.setWidth(b.offsetWidth)}this.progressBar.setHeight(b.offsetHeight)},afterRender:function(){Ext.ProgressBar.superclass.afterRender.call(this);if(this.value){this.updateProgress(this.value,this.text)}else{this.updateText(this.text)}},updateProgress:function(c,d,b){this.value=c||0;if(d){this.updateText(d)}if(this.rendered&&!this.isDestroyed){var a=Math.floor(c*this.el.dom.firstChild.offsetWidth);this.progressBar.setWidth(a,b===true||(b!==false&&this.animate));if(this.textTopEl){this.textTopEl.removeClass("x-hidden").setWidth(a)}}this.fireEvent("update",this,c,d);return this},wait:function(b){if(!this.waitTimer){var a=this;b=b||{};this.updateText(b.text);this.waitTimer=Ext.TaskMgr.start({run:function(c){var d=b.increment||10;c-=1;this.updateProgress(((((c+d)%d)+1)*(100/d))*0.01,null,b.animate)},interval:b.interval||1000,duration:b.duration,onStop:function(){if(b.fn){b.fn.apply(b.scope||this)}this.reset()},scope:a})}return this},isWaiting:function(){return this.waitTimer!==null},updateText:function(a){this.text=a||" ";if(this.rendered){this.textEl.update(this.text)}return this},syncProgressBar:function(){if(this.value){this.updateProgress(this.value,this.text)}return this},setSize:function(a,c){Ext.ProgressBar.superclass.setSize.call(this,a,c);if(this.textTopEl){var b=this.el.dom.firstChild;this.textEl.setSize(b.offsetWidth,b.offsetHeight)}this.syncProgressBar();return this},reset:function(a){this.updateProgress(0);if(this.textTopEl){this.textTopEl.addClass("x-hidden")}this.clearTimer();if(a===true){this.hide()}return this},clearTimer:function(){if(this.waitTimer){this.waitTimer.onStop=null;Ext.TaskMgr.stop(this.waitTimer);this.waitTimer=null}},onDestroy:function(){this.clearTimer();if(this.rendered){if(this.textEl.isComposite){this.textEl.clear()}Ext.destroyMembers(this,"textEl","progressBar","textTopEl")}Ext.ProgressBar.superclass.onDestroy.call(this)}});Ext.reg("progress",Ext.ProgressBar);(function(){var a=Ext.EventManager;var b=Ext.lib.Dom;Ext.dd.DragDrop=function(e,c,d){if(e){this.init(e,c,d)}};Ext.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true},moveOnly:false,unlock:function(){this.locked=false},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(c,d){},startDrag:function(c,d){},b4Drag:function(c){},onDrag:function(c){},onDragEnter:function(c,d){},b4DragOver:function(c){},onDragOver:function(c,d){},b4DragOut:function(c){},onDragOut:function(c,d){},b4DragDrop:function(c){},onDragDrop:function(c,d){},onInvalidDrop:function(c){},b4EndDrag:function(c){},endDrag:function(c){},b4MouseDown:function(c){},onMouseDown:function(c){},onMouseUp:function(c){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(k,h,p){if(Ext.isNumber(h)){h={left:h,right:h,top:h,bottom:h}}h=h||this.defaultPadding;var m=Ext.get(this.getEl()).getBox(),d=Ext.get(k),o=d.getScroll(),l,e=d.dom;if(e==document.body){l={x:o.left,y:o.top,width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()}}else{var n=d.getXY();l={x:n[0],y:n[1],width:e.clientWidth,height:e.clientHeight}}var i=m.y-l.y,g=m.x-l.x;this.resetConstraints();this.setXConstraint(g-(h.left||0),l.width-g-m.width-(h.right||0),this.xTickSize);this.setYConstraint(i-(h.top||0),l.height-i-m.height-(h.bottom||0),this.yTickSize)},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id)}return this._domRef},getDragEl:function(){return Ext.getDom(this.dragElId)},init:function(e,c,d){this.initTarget(e,c,d);a.on(this.id,"mousedown",this.handleMouseDown,this)},initTarget:function(e,c,d){this.config=d||{};this.DDM=Ext.dd.DDM;this.groups={};if(typeof e!=="string"){e=Ext.id(e)}this.id=e;this.addToGroup((c)?c:"default");this.handleElId=e;this.setDragElId(e);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();this.handleOnAvailable()},applyConfig:function(){this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false)},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable()},setPadding:function(e,c,g,d){if(!c&&0!==c){this.padding=[e,e,e,e]}else{if(!g&&0!==g){this.padding=[e,c,e,c]}else{this.padding=[e,c,g,d]}}},setInitPosition:function(g,e){var h=this.getEl();if(!this.DDM.verifyEl(h)){return}var d=g||0;var c=e||0;var i=b.getXY(h);this.initPageX=i[0]-d;this.initPageY=i[1]-c;this.lastPageX=i[0];this.lastPageY=i[1];this.setStartPosition(i)},setStartPosition:function(d){var c=d||b.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=c[0];this.startPageY=c[1]},addToGroup:function(c){this.groups[c]=true;this.DDM.regDragDrop(this,c)},removeFromGroup:function(c){if(this.groups[c]){delete this.groups[c]}this.DDM.removeDDFromGroup(this,c)},setDragElId:function(c){this.dragElId=c},setHandleElId:function(c){if(typeof c!=="string"){c=Ext.id(c)}this.handleElId=c;this.DDM.regHandle(this.id,c)},setOuterHandleElId:function(c){if(typeof c!=="string"){c=Ext.id(c)}a.on(c,"mousedown",this.handleMouseDown,this);this.setHandleElId(c);this.hasOuterHandles=true},unreg:function(){a.un(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this)},destroy:function(){this.unreg()},isLocked:function(){return(this.DDM.isLocked()||this.locked)},handleMouseDown:function(g,d){if(this.primaryButtonOnly&&g.button!=0){return}if(this.isLocked()){return}this.DDM.refreshCache(this.groups);var c=new Ext.lib.Point(Ext.lib.Event.getPageX(g),Ext.lib.Event.getPageY(g));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(c,this)){}else{if(this.clickValidator(g)){this.setStartPosition();this.b4MouseDown(g);this.onMouseDown(g);this.DDM.handleMouseDown(g,this);this.DDM.stopEvent(g)}else{}}},clickValidator:function(d){var c=d.getTarget();return(this.isValidHandleChild(c)&&(this.id==this.handleElId||this.DDM.handleWasClicked(c,this.id)))},addInvalidHandleType:function(c){var d=c.toUpperCase();this.invalidHandleTypes[d]=d},addInvalidHandleId:function(c){if(typeof c!=="string"){c=Ext.id(c)}this.invalidHandleIds[c]=c},addInvalidHandleClass:function(c){this.invalidHandleClasses.push(c)},removeInvalidHandleType:function(c){var d=c.toUpperCase();delete this.invalidHandleTypes[d]},removeInvalidHandleId:function(c){if(typeof c!=="string"){c=Ext.id(c)}delete this.invalidHandleIds[c]},removeInvalidHandleClass:function(d){for(var e=0,c=this.invalidHandleClasses.length;e=this.minX;d=d-c){if(!e[d]){this.xTicks[this.xTicks.length]=d;e[d]=true}}for(d=this.initPageX;d<=this.maxX;d=d+c){if(!e[d]){this.xTicks[this.xTicks.length]=d;e[d]=true}}this.xTicks.sort(this.DDM.numericSort)},setYTicks:function(g,c){this.yTicks=[];this.yTickSize=c;var e={};for(var d=this.initPageY;d>=this.minY;d=d-c){if(!e[d]){this.yTicks[this.yTicks.length]=d;e[d]=true}}for(d=this.initPageY;d<=this.maxY;d=d+c){if(!e[d]){this.yTicks[this.yTicks.length]=d;e[d]=true}}this.yTicks.sort(this.DDM.numericSort)},setXConstraint:function(e,d,c){this.leftConstraint=e;this.rightConstraint=d;this.minX=this.initPageX-e;this.maxX=this.initPageX+d;if(c){this.setXTicks(this.initPageX,c)}this.constrainX=true},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks()},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0},setYConstraint:function(c,e,d){this.topConstraint=c;this.bottomConstraint=e;this.minY=this.initPageY-c;this.maxY=this.initPageY+e;if(d){this.setYTicks(this.initPageY,d)}this.constrainY=true},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var d=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var c=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(d,c)}else{this.setInitPosition()}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize)}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize)}},getTick:function(l,g){if(!g){return l}else{if(g[0]>=l){return g[0]}else{for(var d=0,c=g.length;d=l){var k=l-g[d];var h=g[e]-l;return(h>k)?g[d]:g[e]}}return g[g.length-1]}}},toString:function(){return("DragDrop "+this.id)}}})();if(!Ext.dd.DragDropMgr){Ext.dd.DragDropMgr=function(){var a=Ext.EventManager;return{ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,init:function(){this.initialized=true},POINT:0,INTERSECT:1,mode:0,_execOnAll:function(d,c){for(var e in this.ids){for(var b in this.ids[e]){var g=this.ids[e][b];if(!this.isTypeOfDD(g)){continue}g[d].apply(g,c)}}},_onLoad:function(){this.init();a.on(document,"mouseup",this.handleMouseUp,this,true);a.on(document,"mousemove",this.handleMouseMove,this,true);a.on(window,"unload",this._onUnload,this,true);a.on(window,"resize",this._onResize,this,true)},_onResize:function(b){this._execOnAll("resetConstraints",[])},lock:function(){this.locked=true},unlock:function(){this.locked=false},isLocked:function(){return this.locked},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(c,b){if(!this.initialized){this.init()}if(!this.ids[b]){this.ids[b]={}}this.ids[b][c.id]=c},removeDDFromGroup:function(d,b){if(!this.ids[b]){this.ids[b]={}}var c=this.ids[b];if(c&&c[d.id]){delete c[d.id]}},_remove:function(c){for(var b in c.groups){if(b&&this.ids[b]&&this.ids[b][c.id]){delete this.ids[b][c.id]}}delete this.handleIds[c.id]},regHandle:function(c,b){if(!this.handleIds[c]){this.handleIds[c]={}}this.handleIds[c][b]=b},isDragDrop:function(b){return(this.getDDById(b))?true:false},getRelated:function(h,c){var g=[];for(var e in h.groups){for(var d in this.ids[e]){var b=this.ids[e][d];if(!this.isTypeOfDD(b)){continue}if(!c||b.isTarget){g[g.length]=b}}}return g},isLegalTarget:function(g,e){var c=this.getRelated(g,true);for(var d=0,b=c.length;dthis.clickPixelThresh||b>this.clickPixelThresh){this.startDrag(this.startX,this.startY)}}if(this.dragThreshMet){this.dragCurrent.b4Drag(d);this.dragCurrent.onDrag(d);if(!this.dragCurrent.moveOnly){this.fireEvents(d,false)}}this.stopEvent(d);return true},fireEvents:function(o,p){var r=this.dragCurrent;if(!r||r.isLocked()){return}var s=o.getPoint();var b=[];var g=[];var m=[];var k=[];var d=[];for(var h in this.dragOvers){var c=this.dragOvers[h];if(!this.isTypeOfDD(c)){continue}if(!this.isOverTarget(s,c,this.mode)){g.push(c)}b[h]=true;delete this.dragOvers[h]}for(var q in r.groups){if("string"!=typeof q){continue}for(h in this.ids[q]){var l=this.ids[q][h];if(!this.isTypeOfDD(l)){continue}if(l.isTarget&&!l.isLocked()&&((l!=r)||(r.ignoreSelf===false))){if(this.isOverTarget(s,l,this.mode)){if(p){k.push(l)}else{if(!b[l.id]){d.push(l)}else{m.push(l)}this.dragOvers[l.id]=l}}}}}if(this.mode){if(g.length){r.b4DragOut(o,g);r.onDragOut(o,g)}if(d.length){r.onDragEnter(o,d)}if(m.length){r.b4DragOver(o,m);r.onDragOver(o,m)}if(k.length){r.b4DragDrop(o,k);r.onDragDrop(o,k)}}else{var n=0;for(h=0,n=g.length;h2000){}else{setTimeout(b._addListeners,10);if(document&&document.body){b._timeoutCount+=1}}}},handleWasClicked:function(b,d){if(this.isHandle(d,b.id)){return true}else{var c=b.parentNode;while(c){if(this.isHandle(d,c.id)){return true}else{c=c.parentNode}}}return false}}}();Ext.dd.DDM=Ext.dd.DragDropMgr;Ext.dd.DDM._addListeners()}Ext.dd.DD=function(c,a,b){if(c){this.init(c,a,b)}};Ext.extend(Ext.dd.DD,Ext.dd.DragDrop,{scroll:true,autoOffset:function(c,b){var a=c-this.startPageX;var d=b-this.startPageY;this.setDelta(a,d)},setDelta:function(b,a){this.deltaX=b;this.deltaY=a},setDragElPos:function(c,b){var a=this.getDragEl();this.alignElWithMouse(a,c,b)},alignElWithMouse:function(c,h,g){var e=this.getTargetCoord(h,g);var b=c.dom?c:Ext.fly(c,"_dd");if(!this.deltaSetXY){var i=[e.x,e.y];b.setXY(i);var d=b.getLeft(true);var a=b.getTop(true);this.deltaSetXY=[d-e.x,a-e.y]}else{b.setLeftTop(e.x+this.deltaSetXY[0],e.y+this.deltaSetXY[1])}this.cachePosition(e.x,e.y);this.autoScroll(e.x,e.y,c.offsetHeight,c.offsetWidth);return e},cachePosition:function(b,a){if(b){this.lastPageX=b;this.lastPageY=a}else{var c=Ext.lib.Dom.getXY(this.getEl());this.lastPageX=c[0];this.lastPageY=c[1]}},autoScroll:function(m,l,e,n){if(this.scroll){var o=Ext.lib.Dom.getViewHeight();var b=Ext.lib.Dom.getViewWidth();var q=this.DDM.getScrollTop();var d=this.DDM.getScrollLeft();var k=e+l;var p=n+m;var i=(o+q-l-this.deltaY);var g=(b+d-m-this.deltaX);var c=40;var a=(document.all)?80:30;if(k>o&&i0&&l-qb&&g0&&m-dthis.maxX){a=this.maxX}}if(this.constrainY){if(dthis.maxY){d=this.maxY}}a=this.getTick(a,this.xTicks);d=this.getTick(d,this.yTicks);return{x:a,y:d}},applyConfig:function(){Ext.dd.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false)},b4MouseDown:function(a){this.autoOffset(a.getPageX(),a.getPageY())},b4Drag:function(a){this.setDragElPos(a.getPageX(),a.getPageY())},toString:function(){return("DD "+this.id)}});Ext.dd.DDProxy=function(c,a,b){if(c){this.init(c,a,b);this.initFrame()}};Ext.dd.DDProxy.dragElId="ygddfdiv";Ext.extend(Ext.dd.DDProxy,Ext.dd.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var b=this;var a=document.body;if(!a||!a.firstChild){setTimeout(function(){b.createFrame()},50);return}var d=this.getDragEl();if(!d){d=document.createElement("div");d.id=this.dragElId;var c=d.style;c.position="absolute";c.visibility="hidden";c.cursor="move";c.border="2px solid #aaa";c.zIndex=999;a.insertBefore(d,a.firstChild)}},initFrame:function(){this.createFrame()},applyConfig:function(){Ext.dd.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||Ext.dd.DDProxy.dragElId)},showFrame:function(e,d){var c=this.getEl();var a=this.getDragEl();var b=a.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(b.width,10)/2),Math.round(parseInt(b.height,10)/2))}this.setDragElPos(e,d);Ext.fly(a).show()},_resizeProxy:function(){if(this.resizeFrame){var a=this.getEl();Ext.fly(this.getDragEl()).setSize(a.offsetWidth,a.offsetHeight)}},b4MouseDown:function(b){var a=b.getPageX();var c=b.getPageY();this.autoOffset(a,c);this.setDragElPos(a,c)},b4StartDrag:function(a,b){this.showFrame(a,b)},b4EndDrag:function(a){Ext.fly(this.getDragEl()).hide()},endDrag:function(c){var b=this.getEl();var a=this.getDragEl();a.style.visibility="";this.beforeMove();b.style.visibility="hidden";Ext.dd.DDM.moveToEl(b,a);a.style.visibility="hidden";b.style.visibility="";this.afterDrag()},beforeMove:function(){},afterDrag:function(){},toString:function(){return("DDProxy "+this.id)}});Ext.dd.DDTarget=function(c,a,b){if(c){this.initTarget(c,a,b)}};Ext.extend(Ext.dd.DDTarget,Ext.dd.DragDrop,{getDragEl:Ext.emptyFn,isValidHandleChild:Ext.emptyFn,startDrag:Ext.emptyFn,endDrag:Ext.emptyFn,onDrag:Ext.emptyFn,onDragDrop:Ext.emptyFn,onDragEnter:Ext.emptyFn,onDragOut:Ext.emptyFn,onDragOver:Ext.emptyFn,onInvalidDrop:Ext.emptyFn,onMouseDown:Ext.emptyFn,onMouseUp:Ext.emptyFn,setXConstraint:Ext.emptyFn,setYConstraint:Ext.emptyFn,resetConstraints:Ext.emptyFn,clearConstraints:Ext.emptyFn,clearTicks:Ext.emptyFn,setInitPosition:Ext.emptyFn,setDragElId:Ext.emptyFn,setHandleElId:Ext.emptyFn,setOuterHandleElId:Ext.emptyFn,addInvalidHandleClass:Ext.emptyFn,addInvalidHandleId:Ext.emptyFn,addInvalidHandleType:Ext.emptyFn,removeInvalidHandleClass:Ext.emptyFn,removeInvalidHandleId:Ext.emptyFn,removeInvalidHandleType:Ext.emptyFn,toString:function(){return("DDTarget "+this.id)}});Ext.dd.DragTracker=Ext.extend(Ext.util.Observable,{active:false,tolerance:5,autoStart:false,constructor:function(a){Ext.apply(this,a);this.addEvents("mousedown","mouseup","mousemove","dragstart","dragend","drag");this.dragRegion=new Ext.lib.Region(0,0,0,0);if(this.el){this.initEl(this.el)}Ext.dd.DragTracker.superclass.constructor.call(this,a)},initEl:function(a){this.el=Ext.get(a);a.on("mousedown",this.onMouseDown,this,this.delegate?{delegate:this.delegate}:undefined)},destroy:function(){this.el.un("mousedown",this.onMouseDown,this);delete this.el},onMouseDown:function(b,a){if(this.fireEvent("mousedown",this,b)!==false&&this.onBeforeStart(b)!==false){this.startXY=this.lastXY=b.getXY();this.dragTarget=this.delegate?a:this.el.dom;if(this.preventDefault!==false){b.preventDefault()}Ext.getDoc().on({scope:this,mouseup:this.onMouseUp,mousemove:this.onMouseMove,selectstart:this.stopSelect});if(this.autoStart){this.timer=this.triggerStart.defer(this.autoStart===true?1000:this.autoStart,this,[b])}}},onMouseMove:function(d,c){if(this.active&&Ext.isIE&&!d.browserEvent.button){d.preventDefault();this.onMouseUp(d);return}d.preventDefault();var b=d.getXY(),a=this.startXY;this.lastXY=b;if(!this.active){if(Math.abs(a[0]-b[0])>this.tolerance||Math.abs(a[1]-b[1])>this.tolerance){this.triggerStart(d)}else{return}}this.fireEvent("mousemove",this,d);this.onDrag(d);this.fireEvent("drag",this,d)},onMouseUp:function(c){var b=Ext.getDoc(),a=this.active;b.un("mousemove",this.onMouseMove,this);b.un("mouseup",this.onMouseUp,this);b.un("selectstart",this.stopSelect,this);c.preventDefault();this.clearStart();this.active=false;delete this.elRegion;this.fireEvent("mouseup",this,c);if(a){this.onEnd(c);this.fireEvent("dragend",this,c)}},triggerStart:function(a){this.clearStart();this.active=true;this.onStart(a);this.fireEvent("dragstart",this,a)},clearStart:function(){if(this.timer){clearTimeout(this.timer);delete this.timer}},stopSelect:function(a){a.stopEvent();return false},onBeforeStart:function(a){},onStart:function(a){},onDrag:function(a){},onEnd:function(a){},getDragTarget:function(){return this.dragTarget},getDragCt:function(){return this.el},getXY:function(a){return a?this.constrainModes[a].call(this,this.lastXY):this.lastXY},getOffset:function(c){var b=this.getXY(c),a=this.startXY;return[a[0]-b[0],a[1]-b[1]]},constrainModes:{point:function(b){if(!this.elRegion){this.elRegion=this.getDragCt().getRegion()}var a=this.dragRegion;a.left=b[0];a.top=b[1];a.right=b[0];a.bottom=b[1];a.constrainTo(this.elRegion);return[a.left,a.top]}}});Ext.dd.ScrollManager=function(){var c=Ext.dd.DragDropMgr;var e={};var b=null;var i={};var h=function(m){b=null;a()};var k=function(){if(c.dragCurrent){c.refreshCache(c.dragCurrent.groups)}};var d=function(){if(c.dragCurrent){var m=Ext.dd.ScrollManager;var n=i.el.ddScrollConfig?i.el.ddScrollConfig.increment:m.increment;if(!m.animate){if(i.el.scroll(i.dir,n)){k()}}else{i.el.scroll(i.dir,n,true,m.animDuration,k)}}};var a=function(){if(i.id){clearInterval(i.id)}i.id=0;i.el=null;i.dir=""};var g=function(n,m){a();i.el=n;i.dir=m;var p=n.ddScrollConfig?n.ddScrollConfig.ddGroup:undefined,o=(n.ddScrollConfig&&n.ddScrollConfig.frequency)?n.ddScrollConfig.frequency:Ext.dd.ScrollManager.frequency;if(p===undefined||c.dragCurrent.ddGroup==p){i.id=setInterval(d,o)}};var l=function(p,s){if(s||!c.dragCurrent){return}var t=Ext.dd.ScrollManager;if(!b||b!=c.dragCurrent){b=c.dragCurrent;t.refreshCache()}var u=Ext.lib.Event.getXY(p);var v=new Ext.lib.Point(u[0],u[1]);for(var n in e){var o=e[n],m=o._region;var q=o.ddScrollConfig?o.ddScrollConfig:t;if(m&&m.contains(v)&&o.isScrollable()){if(m.bottom-v.y<=q.vthresh){if(i.el!=o){g(o,"down")}return}else{if(m.right-v.x<=q.hthresh){if(i.el!=o){g(o,"left")}return}else{if(v.y-m.top<=q.vthresh){if(i.el!=o){g(o,"up")}return}else{if(v.x-m.left<=q.hthresh){if(i.el!=o){g(o,"right")}return}}}}}}a()};c.fireEvents=c.fireEvents.createSequence(l,c);c.stopDrag=c.stopDrag.createSequence(h,c);return{register:function(o){if(Ext.isArray(o)){for(var n=0,m=o.length;n]+>/gi,asText:function(a){return String(a).replace(this.stripTagsRE,"")},asUCText:function(a){return String(a).toUpperCase().replace(this.stripTagsRE,"")},asUCString:function(a){return String(a).toUpperCase()},asDate:function(a){if(!a){return 0}if(Ext.isDate(a)){return a.getTime()}return Date.parse(String(a))},asFloat:function(a){var b=parseFloat(String(a).replace(/,/g,""));return isNaN(b)?0:b},asInt:function(a){var b=parseInt(String(a).replace(/,/g,""),10);return isNaN(b)?0:b}};Ext.data.Record=function(a,b){this.id=(b||b===0)?b:Ext.data.Record.id(this);this.data=a||{}};Ext.data.Record.create=function(e){var c=Ext.extend(Ext.data.Record,{});var d=c.prototype;d.fields=new Ext.util.MixedCollection(false,function(g){return g.name});for(var b=0,a=e.length;b-1){a.join(null);this.data.removeAt(b)}if(this.pruneModifiedRecords){this.modified.remove(a)}if(this.snapshot){this.snapshot.remove(a)}if(b>-1){this.fireEvent("remove",this,a,b)}},removeAt:function(a){this.remove(this.getAt(a))},removeAll:function(b){var a=[];this.each(function(c){a.push(c)});this.clearData();if(this.snapshot){this.snapshot.clear()}if(this.pruneModifiedRecords){this.modified=[]}if(b!==true){this.fireEvent("clear",this,a)}},onClear:function(b,a){Ext.each(a,function(d,c){this.destroyRecord(this,d,c)},this)},insert:function(d,c){var e,a,b;c=[].concat(c);for(e=0,a=c.length;e=0;d--){if(b[d].phantom===true){var a=b.splice(d,1).shift();if(a.isValid()){g.push(a)}}else{if(!b[d].isValid()){b.splice(d,1)}}}if(g.length){h.push(["create",g])}if(b.length){h.push(["update",b])}}k=h.length;if(k){e=++this.batchCounter;for(d=0;d=0;b--){this.modified.splice(this.modified.indexOf(a[b]),1)}}else{this.modified.splice(this.modified.indexOf(a),1)}},reMap:function(b){if(Ext.isArray(b)){for(var d=0,a=b.length;d=0;c--){this.insert(b[c].lastIndex,b[c])}}},handleException:function(a){Ext.handleError(a)},reload:function(a){this.load(Ext.applyIf(a||{},this.lastOptions))},loadRecords:function(b,m,h){var e,g;if(this.isDestroyed===true){return}if(!b||h===false){if(h!==false){this.fireEvent("load",this,[],m)}if(m.callback){m.callback.call(m.scope||this,[],m,false,b)}return}var a=b.records,k=b.totalRecords||a.length;if(!m||m.add!==true){if(this.pruneModifiedRecords){this.modified=[]}for(e=0,g=a.length;e-1){this.doUpdate(d)}else{l.push(d);++c}}this.totalLength=Math.max(k,this.data.length+c);this.add(l)}this.fireEvent("load",this,a,m);if(m.callback){m.callback.call(m.scope||this,a,m,true)}},loadData:function(c,a){var b=this.reader.readRecords(c);this.loadRecords(b,{add:a},true)},getCount:function(){return this.data.length||0},getTotalCount:function(){return this.totalLength||0},getSortState:function(){return this.sortInfo},applySort:function(){if((this.sortInfo||this.multiSortInfo)&&!this.remoteSort){this.sortData()}},sortData:function(){var a=this.hasMultiSort?this.multiSortInfo:this.sortInfo,k=a.direction||"ASC",h=a.sorters,c=[];if(!this.hasMultiSort){h=[{direction:k,field:a.field}]}for(var d=0,b=h.length;d1){for(var p=1,o=c.length;ph?1:(i=0;b--){if(Ext.isArray(c)){this.realize(a.splice(b,1).shift(),c.splice(b,1).shift())}else{this.realize(a.splice(b,1).shift(),c)}}}else{if(Ext.isArray(c)&&c.length==1){c=c.shift()}if(!this.isData(c)){throw new Ext.data.DataReader.Error("realize",a)}a.phantom=false;a._phid=a.id;a.id=this.getId(c);a.data=c;a.commit()}},update:function(a,c){if(Ext.isArray(a)){for(var b=a.length-1;b>=0;b--){if(Ext.isArray(c)){this.update(a.splice(b,1).shift(),c.splice(b,1).shift())}else{this.update(a.splice(b,1).shift(),c)}}}else{if(Ext.isArray(c)&&c.length==1){c=c.shift()}if(this.isData(c)){a.data=Ext.apply(a.data,c)}a.commit()}},extractData:function(l,a){var k=(this instanceof Ext.data.JsonReader)?"json":"node";var c=[];if(this.isData(l)&&!(this instanceof Ext.data.XmlReader)){l=[l]}var h=this.recordType.prototype.fields,p=h.items,o=h.length,c=[];if(a===true){var m=this.recordType;for(var e=0;e=0){return new Function("obj","return obj"+(b>0?".":"")+c)}return function(d){return d[c]}}}(),extractValues:function(h,d,a){var g,c={};for(var e=0;e<\u003fxml version="{version}" encoding="{encoding}"\u003f><{documentRoot}><{name}>{value}<{root}><{parent.record}><{name}>{value}',render:function(b,c,a){c=this.toArray(c);b.xmlData=this.tpl.applyTemplate({version:this.xmlVersion,encoding:this.xmlEncoding,documentRoot:(c.length>0||this.forceDocumentRoot===true)?this.documentRoot:false,record:this.meta.record,root:this.root,baseParams:c,records:(Ext.isArray(a[0]))?a:[a]})},createRecord:function(a){return this.toArray(this.toHash(a))},updateRecord:function(a){return this.toArray(this.toHash(a))},destroyRecord:function(b){var a={};a[this.meta.idProperty]=b.id;return this.toArray(a)}});Ext.data.XmlReader=function(a,b){a=a||{};Ext.applyIf(a,{idProperty:a.idProperty||a.idPath||a.id,successProperty:a.successProperty||a.success});Ext.data.XmlReader.superclass.constructor.call(this,a,b||a.fields)};Ext.extend(Ext.data.XmlReader,Ext.data.DataReader,{read:function(a){var b=a.responseXML;if(!b){throw {message:"XmlReader.read: XML Document not available"}}return this.readRecords(b)},readRecords:function(d){this.xmlData=d;var a=d.documentElement||d,c=Ext.DomQuery,g=0,e=true;if(this.meta.totalProperty){g=this.getTotal(a,0)}if(this.meta.successProperty){e=this.getSuccess(a)}var b=this.extractData(c.select(this.meta.record,a),true);return{success:e,records:b,totalRecords:g||b.length}},readResponse:function(g,b){var e=Ext.DomQuery,h=b.responseXML,a=h.documentElement||h;var c=new Ext.data.Response({action:g,success:this.getSuccess(a),message:this.getMessage(a),data:this.extractData(e.select(this.meta.record,a)||e.select(this.meta.root,a),false),raw:h});if(Ext.isEmpty(c.success)){throw new Ext.data.DataReader.Error("successProperty-response",this.meta.successProperty)}if(g===Ext.data.Api.actions.create){var d=Ext.isDefined(c.data);if(d&&Ext.isEmpty(c.data)){throw new Ext.data.JsonReader.Error("root-empty",this.meta.root)}else{if(!d){throw new Ext.data.JsonReader.Error("root-undefined-response",this.meta.root)}}}return c},getSuccess:function(){return true},buildExtractors:function(){if(this.ef){return}var m=this.meta,h=this.recordType,e=h.prototype.fields,l=e.items,k=e.length;if(m.totalProperty){this.getTotal=this.createAccessor(m.totalProperty)}if(m.successProperty){this.getSuccess=this.createAccessor(m.successProperty)}if(m.messageProperty){this.getMessage=this.createAccessor(m.messageProperty)}this.getRoot=function(g){return(!Ext.isEmpty(g[this.meta.record]))?g[this.meta.record]:g[this.meta.root]};if(m.idPath||m.idProperty){var d=this.createAccessor(m.idPath||m.idProperty);this.getId=function(g){var i=d(g)||g.id;return(i===undefined||i==="")?null:i}}else{this.getId=function(){return null}}var c=[];for(var b=0;b0&&c[0].field==this.groupField){c.shift()}this.groupField=e;this.groupDir=d;this.applyGroupField();var b=function(){this.fireEvent("groupchange",this,this.getGroupState())};if(this.groupOnSort){this.sort(e,d);b.call(this);return}if(this.remoteGroup){this.on("load",b,this,{single:true});this.reload()}else{this.sort(c);b.call(this)}},sort:function(h,c){if(this.remoteSort){return Ext.data.GroupingStore.superclass.sort.call(this,h,c)}var g=[];if(Ext.isArray(arguments[0])){g=arguments[0]}else{if(h==undefined){g=this.sortInfo?[this.sortInfo]:[]}else{var e=this.fields.get(h);if(!e){return false}var b=e.name,a=this.sortInfo||null,d=this.sortToggle?this.sortToggle[b]:null;if(!c){if(a&&a.field==b){c=(this.sortToggle[b]||"ASC").toggle("ASC","DESC")}else{c=e.sortDir}}this.sortToggle[b]=c;this.sortInfo={field:b,direction:c};g=[this.sortInfo]}}if(this.groupField){g.unshift({direction:this.groupDir,field:this.groupField})}return this.multiSort.call(this,g,c)},applyGroupField:function(){if(this.remoteGroup){if(!this.baseParams){this.baseParams={}}Ext.apply(this.baseParams,{groupBy:this.groupField,groupDir:this.groupDir});var a=this.lastOptions;if(a&&a.params){a.params.groupDir=this.groupDir;delete a.params.groupBy}}},applyGrouping:function(a){if(this.groupField!==false){this.groupBy(this.groupField,true,this.groupDir);return true}else{if(a===true){this.fireEvent("datachanged",this)}return false}},getGroupState:function(){return this.groupOnSort&&this.groupField!==false?(this.sortInfo?this.sortInfo.field:undefined):this.groupField}});Ext.reg("groupingstore",Ext.data.GroupingStore);Ext.data.DirectProxy=function(a){Ext.apply(this,a);if(typeof this.paramOrder=="string"){this.paramOrder=this.paramOrder.split(/[\s,|]/)}Ext.data.DirectProxy.superclass.constructor.call(this,a)};Ext.extend(Ext.data.DirectProxy,Ext.data.DataProxy,{paramOrder:undefined,paramsAsHash:true,directFn:undefined,doRequest:function(b,c,a,e,l,m,o){var k=[],h=this.api[b]||this.directFn;switch(b){case Ext.data.Api.actions.create:k.push(a.jsonData);break;case Ext.data.Api.actions.read:if(h.directCfg.method.len>0){if(this.paramOrder){for(var d=0,g=this.paramOrder.length;d1){for(var d=0,b=c.length;d0){this.doSend(a==1?this.callBuffer[0]:this.callBuffer);this.callBuffer=[]}},queueTransaction:function(a){if(a.form){this.processForm(a);return}this.callBuffer.push(a);if(this.enableBuffer){if(!this.callTask){this.callTask=new Ext.util.DelayedTask(this.combineAndSend,this)}this.callTask.delay(Ext.isNumber(this.enableBuffer)?this.enableBuffer:10)}else{this.combineAndSend()}},doCall:function(i,a,b){var h=null,e=b[a.len],g=b[a.len+1];if(a.len!==0){h=b.slice(0,a.len)}var d=new Ext.Direct.Transaction({provider:this,args:b,action:i,method:a.name,data:h,cb:g&&Ext.isFunction(e)?e.createDelegate(g):e});if(this.fireEvent("beforecall",this,d,a)!==false){Ext.Direct.addTransaction(d);this.queueTransaction(d);this.fireEvent("call",this,d,a)}},doForm:function(k,b,g,i,e){var d=new Ext.Direct.Transaction({provider:this,action:k,method:b.name,args:[g,i,e],cb:e&&Ext.isFunction(i)?i.createDelegate(e):i,isForm:true});if(this.fireEvent("beforecall",this,d,b)!==false){Ext.Direct.addTransaction(d);var a=String(g.getAttribute("enctype")).toLowerCase()=="multipart/form-data",h={extTID:d.tid,extAction:k,extMethod:b.name,extType:"rpc",extUpload:String(a)};Ext.apply(d,{form:Ext.getDom(g),isUpload:a,params:i&&Ext.isObject(i.params)?Ext.apply(h,i.params):h});this.fireEvent("call",this,d,b);this.processForm(d)}},processForm:function(a){Ext.Ajax.request({url:this.url,params:a.params,callback:this.onData,scope:this,form:a.form,isUpload:a.isUpload,ts:a})},createMethod:function(d,a){var b;if(!a.formHandler){b=function(){this.doCall(d,a,Array.prototype.slice.call(arguments,0))}.createDelegate(this)}else{b=function(e,g,c){this.doForm(d,a,e,g,c)}.createDelegate(this)}b.directCfg={action:d,method:a};return b},getTransaction:function(a){return a&&a.tid?Ext.Direct.getTransaction(a.tid):null},doCallback:function(c,g){var d=g.status?"success":"failure";if(c&&c.cb){var b=c.cb,a=Ext.isDefined(g.result)?g.result:g.data;if(Ext.isFunction(b)){b(a,g)}else{Ext.callback(b[d],b.scope,[a,g]);Ext.callback(b.callback,b.scope,[a,g])}}}});Ext.Direct.PROVIDERS.remoting=Ext.direct.RemotingProvider;Ext.Resizable=Ext.extend(Ext.util.Observable,{constructor:function(d,e){this.el=Ext.get(d);if(e&&e.wrap){e.resizeChild=this.el;this.el=this.el.wrap(typeof e.wrap=="object"?e.wrap:{cls:"xresizable-wrap"});this.el.id=this.el.dom.id=e.resizeChild.id+"-rzwrap";this.el.setStyle("overflow","hidden");this.el.setPositioning(e.resizeChild.getPositioning());e.resizeChild.clearPositioning();if(!e.width||!e.height){var g=e.resizeChild.getSize();this.el.setSize(g.width,g.height)}if(e.pinned&&!e.adjustments){e.adjustments="auto"}}this.proxy=this.el.createProxy({tag:"div",cls:"x-resizable-proxy",id:this.el.id+"-rzproxy"},Ext.getBody());this.proxy.unselectable();this.proxy.enableDisplayMode("block");Ext.apply(this,e);if(this.pinned){this.disableTrackOver=true;this.el.addClass("x-resizable-pinned")}var l=this.el.getStyle("position");if(l!="absolute"&&l!="fixed"){this.el.setStyle("position","relative")}if(!this.handles){this.handles="s,e,se";if(this.multiDirectional){this.handles+=",n,w"}}if(this.handles=="all"){this.handles="n s e w ne nw se sw"}var p=this.handles.split(/\s*?[,;]\s*?| /);var c=Ext.Resizable.positions;for(var k=0,m=p.length;k0){if(a>(e/2)){d=c+(e-a)}else{d=c-a}}return Math.max(b,d)},resizeElement:function(){var a=this.proxy.getBox();if(this.updateBox){this.el.setBox(a,false,this.animate,this.duration,null,this.easing)}else{this.el.setSize(a.width,a.height,this.animate,this.duration,null,this.easing)}this.updateChildSize();if(!this.dynamic){this.proxy.hide()}if(this.draggable&&this.constrainTo){this.dd.resetConstraints();this.dd.constrainTo(this.constrainTo)}return a},constrain:function(b,c,a,d){if(b-cd){c=b-d}}return c},onMouseMove:function(A){if(this.enabled&&this.activeHandle){try{if(this.resizeRegion&&!this.resizeRegion.contains(A.getPoint())){return}var u=this.curSize||this.startBox,m=this.startBox.x,l=this.startBox.y,c=m,b=l,n=u.width,v=u.height,d=n,p=v,o=this.minWidth,B=this.minHeight,t=this.maxWidth,E=this.maxHeight,i=this.widthIncrement,a=this.heightIncrement,C=A.getXY(),s=-(this.startPoint[0]-Math.max(this.minX,C[0])),q=-(this.startPoint[1]-Math.max(this.minY,C[1])),k=this.activeHandle.position,F,g;switch(k){case"east":n+=s;n=Math.min(Math.max(o,n),t);break;case"south":v+=q;v=Math.min(Math.max(B,v),E);break;case"southeast":n+=s;v+=q;n=Math.min(Math.max(o,n),t);v=Math.min(Math.max(B,v),E);break;case"north":q=this.constrain(v,q,B,E);l+=q;v-=q;break;case"west":s=this.constrain(n,s,o,t);m+=s;n-=s;break;case"northeast":n+=s;n=Math.min(Math.max(o,n),t);q=this.constrain(v,q,B,E);l+=q;v-=q;break;case"northwest":s=this.constrain(n,s,o,t);q=this.constrain(v,q,B,E);l+=q;v-=q;m+=s;n-=s;break;case"southwest":s=this.constrain(n,s,o,t);v+=q;v=Math.min(Math.max(B,v),E);m+=s;n-=s;break}var r=this.snap(n,i,o);var D=this.snap(v,a,B);if(r!=n||D!=v){switch(k){case"northeast":l-=D-v;break;case"north":l-=D-v;break;case"southwest":m-=r-n;break;case"west":m-=r-n;break;case"northwest":m-=r-n;l-=D-v;break}n=r;v=D}if(this.preserveRatio){switch(k){case"southeast":case"east":v=p*(n/d);v=Math.min(Math.max(B,v),E);n=d*(v/p);break;case"south":n=d*(v/p);n=Math.min(Math.max(o,n),t);v=p*(n/d);break;case"northeast":n=d*(v/p);n=Math.min(Math.max(o,n),t);v=p*(n/d);break;case"north":F=n;n=d*(v/p);n=Math.min(Math.max(o,n),t);v=p*(n/d);m+=(F-n)/2;break;case"southwest":v=p*(n/d);v=Math.min(Math.max(B,v),E);F=n;n=d*(v/p);m+=F-n;break;case"west":g=v;v=p*(n/d);v=Math.min(Math.max(B,v),E);l+=(g-v)/2;F=n;n=d*(v/p);m+=F-n;break;case"northwest":F=n;g=v;v=p*(n/d);v=Math.min(Math.max(B,v),E);n=d*(v/p);l+=g-v;m+=F-n;break}}this.proxy.setBounds(m,l,n,v);if(this.dynamic){this.resizeElement()}}catch(z){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over")}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over")}},getEl:function(){return this.el},getResizeChild:function(){return this.resizeChild},destroy:function(b){Ext.destroy(this.dd,this.overlay,this.proxy);this.overlay=null;this.proxy=null;var c=Ext.Resizable.positions;for(var a in c){if(typeof c[a]!="function"&&this[c[a]]){this[c[a]].destroy()}}if(b){this.el.update("");Ext.destroy(this.el);this.el=null}this.purgeListeners()},syncHandleHeight:function(){var a=this.el.getHeight(true);if(this.west){this.west.el.setHeight(a)}if(this.east){this.east.el.setHeight(a)}}});Ext.Resizable.positions={n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};Ext.Resizable.Handle=Ext.extend(Object,{constructor:function(d,g,c,e,a){if(!this.tpl){var b=Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});b.compile();Ext.Resizable.Handle.prototype.tpl=b}this.position=g;this.rz=d;this.el=this.tpl.append(d.el.dom,[this.position],true);this.el.unselectable();if(e){this.el.setOpacity(0)}if(!Ext.isEmpty(a)){this.el.addClass(a)}this.el.on("mousedown",this.onMouseDown,this);if(!c){this.el.on({scope:this,mouseover:this.onMouseOver,mouseout:this.onMouseOut})}},afterResize:function(a){},onMouseDown:function(a){this.rz.onMouseDown(this,a)},onMouseOver:function(a){this.rz.handleOver(this,a)},onMouseOut:function(a){this.rz.handleOut(this,a)},destroy:function(){Ext.destroy(this.el);this.el=null}});Ext.Window=Ext.extend(Ext.Panel,{baseCls:"x-window",resizable:true,draggable:true,closable:true,closeAction:"close",constrain:false,constrainHeader:false,plain:false,minimizable:false,maximizable:false,minHeight:100,minWidth:200,expandOnShow:true,showAnimDuration:0.25,hideAnimDuration:0.25,collapsible:false,initHidden:undefined,hidden:true,elements:"header,body",frame:true,floating:true,initComponent:function(){this.initTools();Ext.Window.superclass.initComponent.call(this);this.addEvents("resize","maximize","minimize","restore");if(Ext.isDefined(this.initHidden)){this.hidden=this.initHidden}if(this.hidden===false){this.hidden=true;this.show()}},getState:function(){return Ext.apply(Ext.Window.superclass.getState.call(this)||{},this.getBox(true))},onRender:function(b,a){Ext.Window.superclass.onRender.call(this,b,a);if(this.plain){this.el.addClass("x-window-plain")}this.focusEl=this.el.createChild({tag:"a",href:"#",cls:"x-dlg-focus",tabIndex:"-1",html:" "});this.focusEl.swallowEvent("click",true);this.proxy=this.el.createProxy("x-window-proxy");this.proxy.enableDisplayMode("block");if(this.modal){this.mask=this.container.createChild({cls:"ext-el-mask"},this.el.dom);this.mask.enableDisplayMode("block");this.mask.hide();this.mon(this.mask,"click",this.focus,this)}if(this.maximizable){this.mon(this.header,"dblclick",this.toggleMaximize,this)}},initEvents:function(){Ext.Window.superclass.initEvents.call(this);if(this.animateTarget){this.setAnimateTarget(this.animateTarget)}if(this.resizable){this.resizer=new Ext.Resizable(this.el,{minWidth:this.minWidth,minHeight:this.minHeight,handles:this.resizeHandles||"all",pinned:true,resizeElement:this.resizerAction,handleCls:"x-window-handle"});this.resizer.window=this;this.mon(this.resizer,"beforeresize",this.beforeResize,this)}if(this.draggable){this.header.addClass("x-window-draggable")}this.mon(this.el,"mousedown",this.toFront,this);this.manager=this.manager||Ext.WindowMgr;this.manager.register(this);if(this.maximized){this.maximized=false;this.maximize()}if(this.closable){var a=this.getKeyMap();a.on(27,this.onEsc,this);a.disable()}},initDraggable:function(){this.dd=new Ext.Window.DD(this)},onEsc:function(a,b){b.stopEvent();this[this.closeAction]()},beforeDestroy:function(){if(this.rendered){this.hide();this.clearAnchor();Ext.destroy(this.focusEl,this.resizer,this.dd,this.proxy,this.mask)}Ext.Window.superclass.beforeDestroy.call(this)},onDestroy:function(){if(this.manager){this.manager.unregister(this)}Ext.Window.superclass.onDestroy.call(this)},initTools:function(){if(this.minimizable){this.addTool({id:"minimize",handler:this.minimize.createDelegate(this,[])})}if(this.maximizable){this.addTool({id:"maximize",handler:this.maximize.createDelegate(this,[])});this.addTool({id:"restore",handler:this.restore.createDelegate(this,[]),hidden:true})}if(this.closable){this.addTool({id:"close",handler:this[this.closeAction].createDelegate(this,[])})}},resizerAction:function(){var a=this.proxy.getBox();this.proxy.hide();this.window.handleResize(a);return a},beforeResize:function(){this.resizer.minHeight=Math.max(this.minHeight,this.getFrameHeight()+40);this.resizer.minWidth=Math.max(this.minWidth,this.getFrameWidth()+40);this.resizeBox=this.el.getBox()},updateHandles:function(){if(Ext.isIE&&this.resizer){this.resizer.syncHandleHeight();this.el.repaint()}},handleResize:function(b){var a=this.resizeBox;if(a.x!=b.x||a.y!=b.y){this.updateBox(b)}else{this.setSize(b);if(Ext.isIE6&&Ext.isStrict){this.doLayout()}}this.focus();this.updateHandles();this.saveState()},focus:function(){var e=this.focusEl,a=this.defaultButton,c=typeof a,d,b;if(Ext.isDefined(a)){if(Ext.isNumber(a)&&this.fbar){e=this.fbar.items.get(a)}else{if(Ext.isString(a)){e=Ext.getCmp(a)}else{e=a}}d=e.getEl();b=Ext.getDom(this.container);if(d&&b){if(b!=document.body&&!Ext.lib.Region.getRegion(b).contains(Ext.lib.Region.getRegion(d.dom))){return}}}e=e||this.focusEl;e.focus.defer(10,e)},setAnimateTarget:function(a){a=Ext.get(a);this.animateTarget=a},beforeShow:function(){delete this.el.lastXY;delete this.el.lastLT;if(this.x===undefined||this.y===undefined){var a=this.el.getAlignToXY(this.container,"c-c");var b=this.el.translatePoints(a[0],a[1]);this.x=this.x===undefined?b.left:this.x;this.y=this.y===undefined?b.top:this.y}this.el.setLeftTop(this.x,this.y);if(this.expandOnShow){this.expand(false)}if(this.modal){Ext.getBody().addClass("x-body-masked");this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.mask.show()}},show:function(c,a,b){if(!this.rendered){this.render(Ext.getBody())}if(this.hidden===false){this.toFront();return this}if(this.fireEvent("beforeshow",this)===false){return this}if(a){this.on("show",a,b,{single:true})}this.hidden=false;if(Ext.isDefined(c)){this.setAnimateTarget(c)}this.beforeShow();if(this.animateTarget){this.animShow()}else{this.afterShow()}return this},afterShow:function(b){if(this.isDestroyed){return false}this.proxy.hide();this.el.setStyle("display","block");this.el.show();if(this.maximized){this.fitContainer()}if(Ext.isMac&&Ext.isGecko2){this.cascade(this.setAutoScroll)}if(this.monitorResize||this.modal||this.constrain||this.constrainHeader){Ext.EventManager.onWindowResize(this.onWindowResize,this)}this.doConstrain();this.doLayout();if(this.keyMap){this.keyMap.enable()}this.toFront();this.updateHandles();if(b&&(Ext.isIE||Ext.isWebKit)){var a=this.getSize();this.onResize(a.width,a.height)}this.onShow();this.fireEvent("show",this)},animShow:function(){this.proxy.show();this.proxy.setBox(this.animateTarget.getBox());this.proxy.setOpacity(0);var a=this.getBox();this.el.setStyle("display","none");this.proxy.shift(Ext.apply(a,{callback:this.afterShow.createDelegate(this,[true],false),scope:this,easing:"easeNone",duration:this.showAnimDuration,opacity:0.5}))},hide:function(c,a,b){if(this.hidden||this.fireEvent("beforehide",this)===false){return this}if(a){this.on("hide",a,b,{single:true})}this.hidden=true;if(c!==undefined){this.setAnimateTarget(c)}if(this.modal){this.mask.hide();Ext.getBody().removeClass("x-body-masked")}if(this.animateTarget){this.animHide()}else{this.el.hide();this.afterHide()}return this},afterHide:function(){this.proxy.hide();if(this.monitorResize||this.modal||this.constrain||this.constrainHeader){Ext.EventManager.removeResizeListener(this.onWindowResize,this)}if(this.keyMap){this.keyMap.disable()}this.onHide();this.fireEvent("hide",this)},animHide:function(){this.proxy.setOpacity(0.5);this.proxy.show();var a=this.getBox(false);this.proxy.setBox(a);this.el.hide();this.proxy.shift(Ext.apply(this.animateTarget.getBox(),{callback:this.afterHide,scope:this,duration:this.hideAnimDuration,easing:"easeNone",opacity:0}))},onShow:Ext.emptyFn,onHide:Ext.emptyFn,onWindowResize:function(){if(this.maximized){this.fitContainer()}if(this.modal){this.mask.setSize("100%","100%");var a=this.mask.dom.offsetHeight;this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true))}this.doConstrain()},doConstrain:function(){if(this.constrain||this.constrainHeader){var b;if(this.constrain){b={right:this.el.shadowOffset,left:this.el.shadowOffset,bottom:this.el.shadowOffset}}else{var a=this.getSize();b={right:-(a.width-100),bottom:-(a.height-25)}}var c=this.el.getConstrainToXY(this.container,true,b);if(c){this.setPosition(c[0],c[1])}}},ghost:function(a){var c=this.createGhost(a);var b=this.getBox(true);c.setLeftTop(b.x,b.y);c.setWidth(b.width);this.el.hide();this.activeGhost=c;return c},unghost:function(b,a){if(!this.activeGhost){return}if(b!==false){this.el.show();this.focus.defer(10,this);if(Ext.isMac&&Ext.isGecko2){this.cascade(this.setAutoScroll)}}if(a!==false){this.setPosition(this.activeGhost.getLeft(true),this.activeGhost.getTop(true))}this.activeGhost.hide();this.activeGhost.remove();delete this.activeGhost},minimize:function(){this.fireEvent("minimize",this);return this},close:function(){if(this.fireEvent("beforeclose",this)!==false){if(this.hidden){this.doClose()}else{this.hide(null,this.doClose,this)}}},doClose:function(){this.fireEvent("close",this);this.destroy()},maximize:function(){if(!this.maximized){this.expand(false);this.restoreSize=this.getSize();this.restorePos=this.getPosition(true);if(this.maximizable){this.tools.maximize.hide();this.tools.restore.show()}this.maximized=true;this.el.disableShadow();if(this.dd){this.dd.lock()}if(this.collapsible){this.tools.toggle.hide()}this.el.addClass("x-window-maximized");this.container.addClass("x-window-maximized-ct");this.setPosition(0,0);this.fitContainer();this.fireEvent("maximize",this)}return this},restore:function(){if(this.maximized){var a=this.tools;this.el.removeClass("x-window-maximized");if(a.restore){a.restore.hide()}if(a.maximize){a.maximize.show()}this.setPosition(this.restorePos[0],this.restorePos[1]);this.setSize(this.restoreSize.width,this.restoreSize.height);delete this.restorePos;delete this.restoreSize;this.maximized=false;this.el.enableShadow(true);if(this.dd){this.dd.unlock()}if(this.collapsible&&a.toggle){a.toggle.show()}this.container.removeClass("x-window-maximized-ct");this.doConstrain();this.fireEvent("restore",this)}return this},toggleMaximize:function(){return this[this.maximized?"restore":"maximize"]()},fitContainer:function(){var a=this.container.getViewSize(false);this.setSize(a.width,a.height)},setZIndex:function(a){if(this.modal){this.mask.setStyle("z-index",a)}this.el.setZIndex(++a);a+=5;if(this.resizer){this.resizer.proxy.setStyle("z-index",++a)}this.lastZIndex=a},alignTo:function(b,a,c){var d=this.el.getAlignToXY(b,a,c);this.setPagePosition(d[0],d[1]);return this},anchorTo:function(c,e,d,b){this.clearAnchor();this.anchorTarget={el:c,alignment:e,offsets:d};Ext.EventManager.onWindowResize(this.doAnchor,this);var a=typeof b;if(a!="undefined"){Ext.EventManager.on(window,"scroll",this.doAnchor,this,{buffer:a=="number"?b:50})}return this.doAnchor()},doAnchor:function(){var a=this.anchorTarget;this.alignTo(a.el,a.alignment,a.offsets);return this},clearAnchor:function(){if(this.anchorTarget){Ext.EventManager.removeResizeListener(this.doAnchor,this);Ext.EventManager.un(window,"scroll",this.doAnchor,this);delete this.anchorTarget}return this},toFront:function(a){if(this.manager.bringToFront(this)){if(!a||!a.getTarget().focus){this.focus()}}return this},setActive:function(a){if(a){if(!this.maximized){this.el.enableShadow(true)}this.fireEvent("activate",this)}else{this.el.disableShadow();this.fireEvent("deactivate",this)}},toBack:function(){this.manager.sendToBack(this);return this},center:function(){var a=this.el.getAlignToXY(this.container,"c-c");this.setPagePosition(a[0],a[1]);return this}});Ext.reg("window",Ext.Window);Ext.Window.DD=Ext.extend(Ext.dd.DD,{constructor:function(a){this.win=a;Ext.Window.DD.superclass.constructor.call(this,a.el.id,"WindowDD-"+a.id);this.setHandleElId(a.header.id);this.scroll=false},moveOnly:true,headerOffsets:[100,25],startDrag:function(){var a=this.win;this.proxy=a.ghost(a.initialConfig.cls);if(a.constrain!==false){var c=a.el.shadowOffset;this.constrainTo(a.container,{right:c,left:c,bottom:c})}else{if(a.constrainHeader!==false){var b=this.proxy.getSize();this.constrainTo(a.container,{right:-(b.width-this.headerOffsets[0]),bottom:-(b.height-this.headerOffsets[1])})}}},b4Drag:Ext.emptyFn,onDrag:function(a){this.alignElWithMouse(this.proxy,a.getPageX(),a.getPageY())},endDrag:function(a){this.win.unghost();this.win.saveState()}});Ext.WindowGroup=function(){var g={};var d=[];var e=null;var c=function(k,i){return(!k._lastAccess||k._lastAccess0){m.sort(c);var l=m[0].manager.zseed;for(var n=0;n=0;--k){if(!d[k].hidden){b(d[k]);return}}b(null)};return{zseed:9000,register:function(i){if(i.manager){i.manager.unregister(i)}i.manager=this;g[i.id]=i;d.push(i);i.on("hide",a)},unregister:function(i){delete i.manager;delete g[i.id];i.un("hide",a);d.remove(i)},get:function(i){return typeof i=="object"?i:g[i]},bringToFront:function(i){i=this.get(i);if(i!=e){i._lastAccess=new Date().getTime();h();return true}return false},sendToBack:function(i){i=this.get(i);i._lastAccess=-(new Date().getTime());h();return i},hideAll:function(){for(var i in g){if(g[i]&&typeof g[i]!="function"&&g[i].isVisible()){g[i].hide()}}},getActive:function(){return e},getBy:function(m,l){var n=[];for(var k=d.length-1;k>=0;--k){var o=d[k];if(m.call(l||o,o)!==false){n.push(o)}}return n},each:function(k,i){for(var l in g){if(g[l]&&typeof g[l]!="function"){if(k.call(i||g[l],g[l])===false){return}}}}}};Ext.WindowMgr=new Ext.WindowGroup();Ext.MessageBox=function(){var v,b,r,u,h,m,t,a,o,q,k,g,s,w,p,i="",d="",n=["ok","yes","no","cancel"];var c=function(y){s[y].blur();if(v.isVisible()){v.hide();x();Ext.callback(b.fn,b.scope||window,[y,w.dom.value,b],1)}};var x=function(){if(b&&b.cls){v.el.removeClass(b.cls)}o.reset()};var e=function(A,y,z){if(b&&b.closable!==false){v.hide();x()}if(z){z.stopEvent()}};var l=function(y){var A=0,z;if(!y){Ext.each(n,function(B){s[B].hide()});return A}v.footer.dom.style.display="";Ext.iterate(s,function(B,C){z=y[B];if(z){C.show();C.setText(Ext.isString(z)?z:Ext.MessageBox.buttonText[B]);A+=C.getEl().getWidth()+15}else{C.hide()}});return A};return{getDialog:function(y){if(!v){var A=[];s={};Ext.each(n,function(B){A.push(s[B]=new Ext.Button({text:this.buttonText[B],handler:c.createCallback(B),hideMode:"offsets"}))},this);v=new Ext.Window({autoCreate:true,title:y,resizable:false,constrain:true,constrainHeader:true,minimizable:false,maximizable:false,stateful:false,modal:true,shim:true,buttonAlign:"center",width:400,height:100,minHeight:80,plain:true,footer:true,closable:true,close:function(){if(b&&b.buttons&&b.buttons.no&&!b.buttons.cancel){c("no")}else{c("cancel")}},fbar:new Ext.Toolbar({items:A,enableOverflow:false})});v.render(document.body);v.getEl().addClass("x-window-dlg");r=v.mask;h=v.body.createChild({html:'

    '});k=Ext.get(h.dom.firstChild);var z=h.dom.childNodes[1];m=Ext.get(z.firstChild);t=Ext.get(z.childNodes[2].firstChild);t.enableDisplayMode();t.addKeyListener([10,13],function(){if(v.isVisible()&&b&&b.buttons){if(b.buttons.ok){c("ok")}else{if(b.buttons.yes){c("yes")}}}});a=Ext.get(z.childNodes[2].childNodes[1]);a.enableDisplayMode();o=new Ext.ProgressBar({renderTo:h});h.createChild({cls:"x-clear"})}return v},updateText:function(B){if(!v.isVisible()&&!b.width){v.setSize(this.maxWidth,100)}m.update(B?B+" ":" ");var z=d!=""?(k.getWidth()+k.getMargins("lr")):0,D=m.getWidth()+m.getMargins("lr"),A=v.getFrameWidth("lr"),C=v.body.getFrameWidth("lr"),y;y=Math.max(Math.min(b.width||z+D+A+C,b.maxWidth||this.maxWidth),Math.max(b.minWidth||this.minWidth,p||0));if(b.prompt===true){w.setWidth(y-z-A-C)}if(b.progress===true||b.wait===true){o.setSize(y-z-A-C)}if(Ext.isIE&&y==p){y+=4}m.update(B||" ");v.setSize(y,"auto").center();return this},updateProgress:function(z,y,A){o.updateProgress(z,y);if(A){this.updateText(A)}return this},isVisible:function(){return v&&v.isVisible()},hide:function(){var y=v?v.activeGhost:null;if(this.isVisible()||y){v.hide();x();if(y){v.unghost(false,false)}}return this},show:function(B){if(this.isVisible()){this.hide()}b=B;var C=this.getDialog(b.title||" ");C.setTitle(b.title||" ");var y=(b.closable!==false&&b.progress!==true&&b.wait!==true);C.tools.close.setDisplayed(y);w=t;b.prompt=b.prompt||(b.multiline?true:false);if(b.prompt){if(b.multiline){t.hide();a.show();a.setHeight(Ext.isNumber(b.multiline)?b.multiline:this.defaultTextHeight);w=a}else{t.show();a.hide()}}else{t.hide();a.hide()}w.dom.value=b.value||"";if(b.prompt){C.focusEl=w}else{var A=b.buttons;var z=null;if(A&&A.ok){z=s.ok}else{if(A&&A.yes){z=s.yes}}if(z){C.focusEl=z}}if(Ext.isDefined(b.iconCls)){C.setIconClass(b.iconCls)}this.setIcon(Ext.isDefined(b.icon)?b.icon:i);p=l(b.buttons);o.setVisible(b.progress===true||b.wait===true);this.updateProgress(0,b.progressText);this.updateText(b.msg);if(b.cls){C.el.addClass(b.cls)}C.proxyDrag=b.proxyDrag===true;C.modal=b.modal!==false;C.mask=b.modal!==false?r:false;if(!C.isVisible()){document.body.appendChild(v.el.dom);C.setAnimateTarget(b.animEl);C.on("show",function(){if(y===true){C.keyMap.enable()}else{C.keyMap.disable()}},this,{single:true});C.show(b.animEl)}if(b.wait===true){o.wait(b.waitConfig)}return this},setIcon:function(y){if(!v){i=y;return}i=undefined;if(y&&y!=""){k.removeClass("x-hidden");k.replaceClass(d,y);h.addClass("x-dlg-icon");d=y}else{k.replaceClass(d,"x-hidden");h.removeClass("x-dlg-icon");d=""}return this},progress:function(A,z,y){this.show({title:A,msg:z,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth,progressText:y});return this},wait:function(A,z,y){this.show({title:z,msg:A,buttons:false,closable:false,wait:true,modal:true,minWidth:this.minProgressWidth,waitConfig:y});return this},alert:function(B,A,z,y){this.show({title:B,msg:A,buttons:this.OK,fn:z,scope:y,minWidth:this.minWidth});return this},confirm:function(B,A,z,y){this.show({title:B,msg:A,buttons:this.YESNO,fn:z,scope:y,icon:this.QUESTION,minWidth:this.minWidth});return this},prompt:function(D,C,A,z,y,B){this.show({title:D,msg:C,buttons:this.OKCANCEL,fn:A,minWidth:this.minPromptWidth,scope:z,prompt:true,multiline:y,value:B});return this},OK:{ok:true},CANCEL:{cancel:true},OKCANCEL:{ok:true,cancel:true},YESNO:{yes:true,no:true},YESNOCANCEL:{yes:true,no:true,cancel:true},INFO:"ext-mb-info",WARNING:"ext-mb-warning",QUESTION:"ext-mb-question",ERROR:"ext-mb-error",defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,minPromptWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}}}();Ext.Msg=Ext.MessageBox;Ext.dd.PanelProxy=Ext.extend(Object,{constructor:function(a,b){this.panel=a;this.id=this.panel.id+"-ddproxy";Ext.apply(this,b)},insertProxy:true,setStatus:Ext.emptyFn,reset:Ext.emptyFn,update:Ext.emptyFn,stop:Ext.emptyFn,sync:Ext.emptyFn,getEl:function(){return this.ghost},getGhost:function(){return this.ghost},getProxy:function(){return this.proxy},hide:function(){if(this.ghost){if(this.proxy){this.proxy.remove();delete this.proxy}this.panel.el.dom.style.display="";this.ghost.remove();delete this.ghost}},show:function(){if(!this.ghost){this.ghost=this.panel.createGhost(this.panel.initialConfig.cls,undefined,Ext.getBody());this.ghost.setXY(this.panel.el.getXY());if(this.insertProxy){this.proxy=this.panel.el.insertSibling({cls:"x-panel-dd-spacer"});this.proxy.setSize(this.panel.getSize())}this.panel.el.dom.style.display="none"}},repair:function(b,c,a){this.hide();if(typeof c=="function"){c.call(a||this)}},moveProxy:function(a,b){if(this.proxy){a.insertBefore(this.proxy.dom,b)}}});Ext.Panel.DD=Ext.extend(Ext.dd.DragSource,{constructor:function(b,a){this.panel=b;this.dragData={panel:b};this.proxy=new Ext.dd.PanelProxy(b,a);Ext.Panel.DD.superclass.constructor.call(this,b.el,a);var d=b.header,c=b.body;if(d){this.setHandleElId(d.id);c=b.header}c.setStyle("cursor","move");this.scroll=false},showFrame:Ext.emptyFn,startDrag:Ext.emptyFn,b4StartDrag:function(a,b){this.proxy.show()},b4MouseDown:function(b){var a=b.getPageX(),c=b.getPageY();this.autoOffset(a,c)},onInitDrag:function(a,b){this.onStartDrag(a,b);return true},createFrame:Ext.emptyFn,getDragEl:function(a){return this.proxy.ghost.dom},endDrag:function(a){this.proxy.hide();this.panel.saveState()},autoOffset:function(a,b){a-=this.startPageX;b-=this.startPageY;this.setDelta(a,b)}});Ext.state.Provider=Ext.extend(Ext.util.Observable,{constructor:function(){this.addEvents("statechange");this.state={};Ext.state.Provider.superclass.constructor.call(this)},get:function(b,a){return typeof this.state[b]=="undefined"?a:this.state[b]},clear:function(a){delete this.state[a];this.fireEvent("statechange",this,a,null)},set:function(a,b){this.state[a]=b;this.fireEvent("statechange",this,a,b)},decodeValue:function(b){var e=/^(a|n|d|b|s|o|e)\:(.*)$/,h=e.exec(unescape(b)),d,c,a,g;if(!h||!h[1]){return}c=h[1];a=h[2];switch(c){case"e":return null;case"n":return parseFloat(a);case"d":return new Date(Date.parse(a));case"b":return(a=="1");case"a":d=[];if(a!=""){Ext.each(a.split("^"),function(i){d.push(this.decodeValue(i))},this)}return d;case"o":d={};if(a!=""){Ext.each(a.split("^"),function(i){g=i.split("=");d[g[0]]=this.decodeValue(g[1])},this)}return d;default:return a}},encodeValue:function(c){var b,g="",e=0,a,d;if(c==null){return"e:1"}else{if(typeof c=="number"){b="n:"+c}else{if(typeof c=="boolean"){b="b:"+(c?"1":"0")}else{if(Ext.isDate(c)){b="d:"+c.toGMTString()}else{if(Ext.isArray(c)){for(a=c.length;e-1){var e=this.isSelected(b),c=this.all.elements[b],d=this.bufferRender([a],b)[0];this.all.replaceElement(b,d,true);if(e){this.selected.replaceElement(c,d);this.all.item(b).addClass(this.selectedClass)}this.updateIndexes(b,b)}},onAdd:function(g,d,e){if(this.all.getCount()===0){this.refresh();return}var c=this.bufferRender(d,e),h,b=this.all.elements;if(e0){if(!b){this.selected.removeClass(this.selectedClass)}this.selected.clear();this.last=false;if(!a){this.fireEvent("selectionchange",this,this.selected.elements)}}},isSelected:function(a){return this.selected.contains(this.getNode(a))},deselect:function(a){if(this.isSelected(a)){a=this.getNode(a);this.selected.removeElement(a);if(this.last==a.viewIndex){this.last=false}Ext.fly(a).removeClass(this.selectedClass);this.fireEvent("selectionchange",this,this.selected.elements)}},select:function(d,g,b){if(Ext.isArray(d)){if(!g){this.clearSelections(true)}for(var c=0,a=d.length;c=a&&d[c];c--){b.push(d[c])}}return b},indexOf:function(a){a=this.getNode(a);if(Ext.isNumber(a.viewIndex)){return a.viewIndex}return this.all.indexOf(a)},onBeforeLoad:function(){if(this.loadingText){this.clearSelections(false,true);this.getTemplateTarget().update('
    '+this.loadingText+"
    ");this.all.clear()}},onDestroy:function(){this.all.clear();this.selected.clear();Ext.DataView.superclass.onDestroy.call(this);this.bindStore(null)}});Ext.DataView.prototype.setStore=Ext.DataView.prototype.bindStore;Ext.reg("dataview",Ext.DataView);Ext.list.ListView=Ext.extend(Ext.DataView,{itemSelector:"dl",selectedClass:"x-list-selected",overClass:"x-list-over",scrollOffset:undefined,columnResize:true,columnSort:true,maxColumnWidth:Ext.isIE?99:100,initComponent:function(){if(this.columnResize){this.colResizer=new Ext.list.ColumnResizer(this.colResizer);this.colResizer.init(this)}if(this.columnSort){this.colSorter=new Ext.list.Sorter(this.columnSort);this.colSorter.init(this)}if(!this.internalTpl){this.internalTpl=new Ext.XTemplate('
    ','','
    ',"{header}","
    ","
    ",'
    ',"
    ",'
    ',"
    ")}if(!this.tpl){this.tpl=new Ext.XTemplate('',"
    ",'','
    ',' class="{cls}">',"{[values.tpl.apply(parent)]}","
    ","
    ",'
    ',"
    ","
    ")}var l=this.columns,h=0,k=0,m=l.length,b=[];for(var g=0;gthis.maxColumnWidth){n.width-=(h-this.maxColumnWidth)/100}k++}b.push(n)}l=this.columns=b;if(k10)){b.style.width=d;g.style.width=d}else{b.style.width=c+"px";g.style.width=c+"px";setTimeout(function(){if((a.offsetWidth-a.clientWidth)>10){b.style.width=d;g.style.width=d}},10)}}if(Ext.isNumber(e)){a.style.height=Math.max(0,e-g.parentNode.offsetHeight)+"px"}},updateIndexes:function(){Ext.list.ListView.superclass.updateIndexes.apply(this,arguments);this.verifyInternalSize()},findHeaderIndex:function(g){g=g.dom||g;var a=g.parentNode,d=a.parentNode.childNodes,b=0,e;for(;e=d[b];b++){if(e==a){return b}}return -1},setHdWidths:function(){var d=this.innerHd.dom.getElementsByTagName("div"),c=0,b=this.columns,a=b.length;for(;c','','{text}',"");d.disableFormats=true;d.compile();Ext.TabPanel.prototype.itemTpl=d}this.items.each(this.initTab,this)},afterRender:function(){Ext.TabPanel.superclass.afterRender.call(this);if(this.autoTabs){this.readTabs(false)}if(this.activeTab!==undefined){var a=Ext.isObject(this.activeTab)?this.activeTab:this.items.get(this.activeTab);delete this.activeTab;this.setActiveTab(a)}},initEvents:function(){Ext.TabPanel.superclass.initEvents.call(this);this.mon(this.strip,{scope:this,mousedown:this.onStripMouseDown,contextmenu:this.onStripContextMenu});if(this.enableTabScroll){this.mon(this.strip,"mousewheel",this.onWheel,this)}},findTargets:function(c){var b=null,a=c.getTarget("li:not(.x-tab-edge)",this.strip);if(a){b=this.getComponent(a.id.split(this.idDelimiter)[1]);if(b.disabled){return{close:null,item:null,el:null}}}return{close:c.getTarget(".x-tab-strip-close",this.strip),item:b,el:a}},onStripMouseDown:function(b){if(b.button!==0){return}b.preventDefault();var a=this.findTargets(b);if(a.close){if(a.item.fireEvent("beforeclose",a.item)!==false){a.item.fireEvent("close",a.item);this.remove(a.item)}return}if(a.item&&a.item!=this.activeTab){this.setActiveTab(a.item)}},onStripContextMenu:function(b){b.preventDefault();var a=this.findTargets(b);if(a.item){this.fireEvent("contextmenu",this,a.item,b)}},readTabs:function(d){if(d===true){this.items.each(function(h){this.remove(h)},this)}var c=this.el.query(this.autoTabSelector);for(var b=0,a=c.length;b0){this.setActiveTab(0)}else{this.setActiveTab(null)}}}if(!this.destroying){this.delegateUpdates()}},onBeforeShowItem:function(a){if(a!=this.activeTab){this.setActiveTab(a);return false}},onItemDisabled:function(b){var a=this.getTabEl(b);if(a){Ext.fly(a).addClass("x-item-disabled")}this.stack.remove(b)},onItemEnabled:function(b){var a=this.getTabEl(b);if(a){Ext.fly(a).removeClass("x-item-disabled")}},onItemTitleChanged:function(b){var a=this.getTabEl(b);if(a){Ext.fly(a).child("span.x-tab-strip-text",true).innerHTML=b.title}},onItemIconChanged:function(d,a,c){var b=this.getTabEl(d);if(b){b=Ext.get(b);b.child("span.x-tab-strip-text").replaceClass(c,a);b[Ext.isEmpty(a)?"removeClass":"addClass"]("x-tab-with-icon")}},getTabEl:function(a){var b=this.getComponent(a);return b?b.tabEl:null},onResize:function(){Ext.TabPanel.superclass.onResize.apply(this,arguments);this.delegateUpdates()},beginUpdate:function(){this.suspendUpdates=true},endUpdate:function(){this.suspendUpdates=false;this.delegateUpdates()},hideTabStripItem:function(b){b=this.getComponent(b);var a=this.getTabEl(b);if(a){a.style.display="none";this.delegateUpdates()}this.stack.remove(b)},unhideTabStripItem:function(b){b=this.getComponent(b);var a=this.getTabEl(b);if(a){a.style.display="";this.delegateUpdates()}},delegateUpdates:function(){var a=this.rendered;if(this.suspendUpdates){return}if(this.resizeTabs&&a){this.autoSizeTabs()}if(this.enableTabScroll&&a){this.autoScrollTabs()}},autoSizeTabs:function(){var h=this.items.length,b=this.tabPosition!="bottom"?"header":"footer",c=this[b].dom.offsetWidth,a=this[b].dom.clientWidth;if(!this.resizeTabs||h<1||!a){return}var l=Math.max(Math.min(Math.floor((a-4)/h)-this.tabMargin,this.tabWidth),this.minTabWidth);this.lastTabWidth=l;var n=this.strip.query("li:not(.x-tab-edge)");for(var e=0,k=n.length;e20?c:20);if(!this.scrolling){if(!this.scrollLeft){this.createScrollers()}else{this.scrollLeft.show();this.scrollRight.show()}}this.scrolling=true;if(i>(a-c)){e.scrollLeft=a-c}else{this.scrollToTab(this.activeTab,false)}this.updateScrollButtons()}},createScrollers:function(){this.pos.addClass("x-tab-scrolling-"+this.tabPosition);var c=this.stripWrap.dom.offsetHeight;var a=this.pos.insertFirst({cls:"x-tab-scroller-left"});a.setHeight(c);a.addClassOnOver("x-tab-scroller-left-over");this.leftRepeater=new Ext.util.ClickRepeater(a,{interval:this.scrollRepeatInterval,handler:this.onScrollLeft,scope:this});this.scrollLeft=a;var b=this.pos.insertFirst({cls:"x-tab-scroller-right"});b.setHeight(c);b.addClassOnOver("x-tab-scroller-right-over");this.rightRepeater=new Ext.util.ClickRepeater(b,{interval:this.scrollRepeatInterval,handler:this.onScrollRight,scope:this});this.scrollRight=b},getScrollWidth:function(){return this.edge.getOffsetsTo(this.stripWrap)[0]+this.getScrollPos()},getScrollPos:function(){return parseInt(this.stripWrap.dom.scrollLeft,10)||0},getScrollArea:function(){return parseInt(this.stripWrap.dom.clientWidth,10)||0},getScrollAnim:function(){return{duration:this.scrollDuration,callback:this.updateScrollButtons,scope:this}},getScrollIncrement:function(){return this.scrollIncrement||(this.resizeTabs?this.lastTabWidth+2:100)},scrollToTab:function(e,a){if(!e){return}var c=this.getTabEl(e),h=this.getScrollPos(),d=this.getScrollArea(),g=Ext.fly(c).getOffsetsTo(this.stripWrap)[0]+h,b=g+c.offsetWidth;if(g(h+d)){this.scrollTo(b-d,a)}}},scrollTo:function(b,a){this.stripWrap.scrollTo("left",b,a?this.getScrollAnim():false);if(!a){this.updateScrollButtons()}},onWheel:function(g){var h=g.getWheelDelta()*this.wheelIncrement*-1;g.stopEvent();var i=this.getScrollPos(),c=i+h,a=this.getScrollWidth()-this.getScrollArea();var b=Math.max(0,Math.min(a,c));if(b!=i){this.scrollTo(b,false)}},onScrollRight:function(){var a=this.getScrollWidth()-this.getScrollArea(),c=this.getScrollPos(),b=Math.min(a,c+this.getScrollIncrement());if(b!=c){this.scrollTo(b,this.animScroll)}},onScrollLeft:function(){var b=this.getScrollPos(),a=Math.max(0,b-this.getScrollIncrement());if(a!=b){this.scrollTo(a,this.animScroll)}},updateScrollButtons:function(){var a=this.getScrollPos();this.scrollLeft[a===0?"addClass":"removeClass"]("x-tab-scroller-left-disabled");this.scrollRight[a>=(this.getScrollWidth()-this.getScrollArea())?"addClass":"removeClass"]("x-tab-scroller-right-disabled")},beforeDestroy:function(){Ext.destroy(this.leftRepeater,this.rightRepeater);this.deleteMembers("strip","edge","scrollLeft","scrollRight","stripWrap");this.activeTab=null;Ext.TabPanel.superclass.beforeDestroy.apply(this)}});Ext.reg("tabpanel",Ext.TabPanel);Ext.TabPanel.prototype.activate=Ext.TabPanel.prototype.setActiveTab;Ext.TabPanel.AccessStack=function(){var a=[];return{add:function(b){a.push(b);if(a.length>10){a.shift()}},remove:function(e){var d=[];for(var c=0,b=a.length;c','  ','  ','  ',"");Ext.Button.buttonTemplate.compile()}this.template=Ext.Button.buttonTemplate}var b,d=this.getTemplateArgs();if(a){b=this.template.insertBefore(a,d,true)}else{b=this.template.append(c,d,true)}this.btnEl=b.child(this.buttonSelector);this.mon(this.btnEl,{scope:this,focus:this.onFocus,blur:this.onBlur});this.initButtonEl(b,this.btnEl);Ext.ButtonToggleMgr.register(this)},initButtonEl:function(b,c){this.el=b;this.setIcon(this.icon);this.setText(this.text);this.setIconClass(this.iconCls);if(Ext.isDefined(this.tabIndex)){c.dom.tabIndex=this.tabIndex}if(this.tooltip){this.setTooltip(this.tooltip,true)}if(this.handleMouseEvents){this.mon(b,{scope:this,mouseover:this.onMouseOver,mousedown:this.onMouseDown})}if(this.menu){this.mon(this.menu,{scope:this,show:this.onMenuShow,hide:this.onMenuHide})}if(this.repeat){var a=new Ext.util.ClickRepeater(b,Ext.isObject(this.repeat)?this.repeat:{});this.mon(a,"click",this.onRepeatClick,this)}else{this.mon(b,this.clickEvent,this.onClick,this)}},afterRender:function(){Ext.Button.superclass.afterRender.call(this);this.useSetClass=true;this.setButtonClass();this.doc=Ext.getDoc();this.doAutoWidth()},setIconClass:function(a){this.iconCls=a;if(this.el){this.btnEl.dom.className="";this.btnEl.addClass(["x-btn-text",a||""]);this.setButtonClass()}return this},setTooltip:function(b,a){if(this.rendered){if(!a){this.clearTip()}if(Ext.isObject(b)){Ext.QuickTips.register(Ext.apply({target:this.btnEl.id},b));this.tooltip=b}else{this.btnEl.dom[this.tooltipType]=b}}else{this.tooltip=b}return this},clearTip:function(){if(Ext.isObject(this.tooltip)){Ext.QuickTips.unregister(this.btnEl)}},beforeDestroy:function(){if(this.rendered){this.clearTip()}if(this.menu&&this.destroyMenu!==false){Ext.destroy(this.btnEl,this.menu)}Ext.destroy(this.repeater)},onDestroy:function(){if(this.rendered){this.doc.un("mouseover",this.monitorMouseOver,this);this.doc.un("mouseup",this.onMouseUp,this);delete this.doc;delete this.btnEl;Ext.ButtonToggleMgr.unregister(this)}Ext.Button.superclass.onDestroy.call(this)},doAutoWidth:function(){if(this.autoWidth!==false&&this.el&&this.text&&this.width===undefined){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var a=this.btnEl;if(a&&a.getWidth()>20){a.clip();a.setWidth(Ext.util.TextMetrics.measure(a,this.text).width+a.getFrameWidth("lr"))}}if(this.minWidth){if(this.el.getWidth()a}else{return c.getPageY()>this.btnEl.getRegion().bottom}},onClick:function(b,a){b.preventDefault();if(!this.disabled){if(this.isClickOnArrow(b)){if(this.menu&&!this.menu.isVisible()&&!this.ignoreNextClick){this.showMenu()}this.fireEvent("arrowclick",this,b);if(this.arrowHandler){this.arrowHandler.call(this.scope||this,this,b)}}else{this.doToggle();this.fireEvent("click",this,b);if(this.handler){this.handler.call(this.scope||this,this,b)}}}},isMenuTriggerOver:function(a){return this.menu&&a.target.tagName==this.arrowSelector},isMenuTriggerOut:function(b,a){return this.menu&&b.target.tagName!=this.arrowSelector}});Ext.reg("splitbutton",Ext.SplitButton);Ext.CycleButton=Ext.extend(Ext.SplitButton,{getItemText:function(a){if(a&&this.showText===true){var b="";if(this.prependText){b+=this.prependText}b+=a.text;return b}return undefined},setActiveItem:function(c,a){if(!Ext.isObject(c)){c=this.menu.getComponent(c)}if(c){if(!this.rendered){this.text=this.getItemText(c);this.iconCls=c.iconCls}else{var b=this.getItemText(c);if(b){this.setText(b)}this.setIconClass(c.iconCls)}this.activeItem=c;if(!c.checked){c.setChecked(true,false)}if(this.forceIcon){this.setIconClass(this.forceIcon)}if(!a){this.fireEvent("change",this,c)}}},getActiveItem:function(){return this.activeItem},initComponent:function(){this.addEvents("change");if(this.changeHandler){this.on("change",this.changeHandler,this.scope||this);delete this.changeHandler}this.itemCount=this.items.length;this.menu={cls:"x-cycle-menu",items:[]};var a=0;Ext.each(this.items,function(c,b){Ext.apply(c,{group:c.group||this.id,itemIndex:b,checkHandler:this.checkHandler,scope:this,checked:c.checked||false});this.menu.items.push(c);if(c.checked){a=b}},this);Ext.CycleButton.superclass.initComponent.call(this);this.on("click",this.toggleSelected,this);this.setActiveItem(a,true)},checkHandler:function(a,b){if(b){this.setActiveItem(a)}},toggleSelected:function(){var a=this.menu;a.render();if(!a.hasLayout){a.doLayout()}var d,b;for(var c=1;c"){b=new a.Fill()}else{b=new a.TextItem(b)}}}this.applyDefaults(b)}else{if(b.isFormField||b.render){b=this.createComponent(b)}else{if(b.tag){b=new a.Item({autoEl:b})}else{if(b.tagName){b=new a.Item({el:b})}else{if(Ext.isObject(b)){b=b.xtype?this.createComponent(b):this.constructButton(b)}}}}}return b},applyDefaults:function(e){if(!Ext.isString(e)){e=Ext.Toolbar.superclass.applyDefaults.call(this,e);var b=this.internalDefaults;if(e.events){Ext.applyIf(e.initialConfig,b);Ext.apply(e,b)}else{Ext.applyIf(e,b)}}return e},addSeparator:function(){return this.add(new a.Separator())},addSpacer:function(){return this.add(new a.Spacer())},addFill:function(){this.add(new a.Fill())},addElement:function(b){return this.addItem(new a.Item({el:b}))},addItem:function(b){return this.add.apply(this,arguments)},addButton:function(c){if(Ext.isArray(c)){var e=[];for(var d=0,b=c.length;d");this.items.push(this.displayItem=new a.TextItem({}))}Ext.PagingToolbar.superclass.initComponent.call(this);this.addEvents("change","beforechange");this.on("afterlayout",this.onFirstLayout,this,{single:true});this.cursor=0;this.bindStore(this.store,true)},onFirstLayout:function(){if(this.dsLoaded){this.onLoad.apply(this,this.dsLoaded)}},updateInfo:function(){if(this.displayItem){var b=this.store.getCount();var c=b==0?this.emptyMsg:String.format(this.displayMsg,this.cursor+1,this.cursor+b,this.store.getTotalCount());this.displayItem.setText(c)}},onLoad:function(b,e,k){if(!this.rendered){this.dsLoaded=[b,e,k];return}var g=this.getParams();this.cursor=(k.params&&k.params[g.start])?k.params[g.start]:0;var i=this.getPageData(),c=i.activePage,h=i.pages;this.afterTextItem.setText(String.format(this.afterPageText,i.pages));this.inputItem.setValue(c);this.first.setDisabled(c==1);this.prev.setDisabled(c==1);this.next.setDisabled(c==h);this.last.setDisabled(c==h);this.refresh.enable();this.updateInfo();this.fireEvent("change",this,i)},getPageData:function(){var b=this.store.getTotalCount();return{total:b,activePage:Math.ceil((this.cursor+this.pageSize)/this.pageSize),pages:b=1&g<=l.pages){i.setValue(g)}}}}}},getParams:function(){return this.paramNames||this.store.paramNames},beforeLoad:function(){if(this.rendered&&this.refresh){this.refresh.disable()}},doLoad:function(d){var c={},b=this.getParams();c[b.start]=d;c[b.limit]=this.pageSize;if(this.fireEvent("beforechange",this,c)!==false){this.store.load({params:c})}},moveFirst:function(){this.doLoad(0)},movePrevious:function(){this.doLoad(Math.max(0,this.cursor-this.pageSize))},moveNext:function(){this.doLoad(this.cursor+this.pageSize)},moveLast:function(){var c=this.store.getTotalCount(),b=c%this.pageSize;this.doLoad(b?(c-b):c-this.pageSize)},doRefresh:function(){this.doLoad(this.cursor)},bindStore:function(c,d){var b;if(!d&&this.store){if(c!==this.store&&this.store.autoDestroy){this.store.destroy()}else{this.store.un("beforeload",this.beforeLoad,this);this.store.un("load",this.onLoad,this);this.store.un("exception",this.onLoadError,this)}if(!c){this.store=null}}if(c){c=Ext.StoreMgr.lookup(c);c.on({scope:this,beforeload:this.beforeLoad,load:this.onLoad,exception:this.onLoadError});b=true}this.store=c;if(b){this.onLoad(c,null,{})}},unbind:function(b){this.bindStore(null)},bind:function(b){this.bindStore(b)},onDestroy:function(){this.bindStore(null);Ext.PagingToolbar.superclass.onDestroy.call(this)}})})();Ext.reg("paging",Ext.PagingToolbar);Ext.History=(function(){var e,c;var l=false;var d;function g(){var m=location.href,n=m.indexOf("#");return n>=0?m.substr(n+1):null}function a(){c.value=d}function h(m){d=m;Ext.History.fireEvent("change",m)}function i(n){var m=['
    ',Ext.util.Format.htmlEncode(n),"
    "].join("");try{var p=e.contentWindow.document;p.open();p.write(m);p.close();return true}catch(o){return false}}function b(){if(!e.contentWindow||!e.contentWindow.document){setTimeout(b,10);return}var p=e.contentWindow.document;var n=p.getElementById("state");var m=n?n.innerText:null;var o=g();setInterval(function(){p=e.contentWindow.document;n=p.getElementById("state");var r=n?n.innerText:null;var q=g();if(r!==m){m=r;h(m);top.location.hash=m;o=m;a()}else{if(q!==o){o=q;i(q)}}},50);l=true;Ext.History.fireEvent("ready",Ext.History)}function k(){d=c.value?c.value:g();if(Ext.isIE){b()}else{var m=g();setInterval(function(){var n=g();if(n!==m){m=n;h(m);a()}},50);l=true;Ext.History.fireEvent("ready",Ext.History)}}return{fieldId:"x-history-field",iframeId:"x-history-frame",events:{},init:function(n,m){if(l){Ext.callback(n,m,[this]);return}if(!Ext.isReady){Ext.onReady(function(){Ext.History.init(n,m)});return}c=Ext.getDom(Ext.History.fieldId);if(Ext.isIE){e=Ext.getDom(Ext.History.iframeId)}this.addEvents("ready","change");if(n){this.on("ready",n,m,{single:true})}k()},add:function(m,n){if(n!==false){if(this.getToken()==m){return true}}if(Ext.isIE){return i(m)}else{top.location.hash=m;return true}},back:function(){history.go(-1)},forward:function(){history.go(1)},getToken:function(){return l?d:g()}}})();Ext.apply(Ext.History,new Ext.util.Observable());Ext.Tip=Ext.extend(Ext.Panel,{minWidth:40,maxWidth:300,shadow:"sides",defaultAlign:"tl-bl?",autoRender:true,quickShowInterval:250,frame:true,hidden:true,baseCls:"x-tip",floating:{shadow:true,shim:true,useDisplay:true,constrain:false},autoHeight:true,closeAction:"hide",initComponent:function(){Ext.Tip.superclass.initComponent.call(this);if(this.closable&&!this.title){this.elements+=",header"}},afterRender:function(){Ext.Tip.superclass.afterRender.call(this);if(this.closable){this.addTool({id:"close",handler:this[this.closeAction],scope:this})}},showAt:function(a){Ext.Tip.superclass.show.call(this);if(this.measureWidth!==false&&(!this.initialConfig||typeof this.initialConfig.width!="number")){this.doAutoWidth()}if(this.constrainPosition){a=this.el.adjustForConstraints(a)}this.setPagePosition(a[0],a[1])},doAutoWidth:function(a){a=a||0;var b=this.body.getTextWidth();if(this.title){b=Math.max(b,this.header.child("span").getTextWidth(this.title))}b+=this.getFrameWidth()+(this.closable?20:0)+this.body.getPadding("lr")+a;this.setWidth(b.constrain(this.minWidth,this.maxWidth));if(Ext.isIE7&&!this.repainted){this.el.repaint();this.repainted=true}},showBy:function(a,b){if(!this.rendered){this.render(Ext.getBody())}this.showAt(this.el.getAlignToXY(a,b||this.defaultAlign))},initDraggable:function(){this.dd=new Ext.Tip.DD(this,typeof this.draggable=="boolean"?null:this.draggable);this.header.addClass("x-tip-draggable")}});Ext.reg("tip",Ext.Tip);Ext.Tip.DD=function(b,a){Ext.apply(this,a);this.tip=b;Ext.Tip.DD.superclass.constructor.call(this,b.el.id,"WindowDD-"+b.id);this.setHandleElId(b.header.id);this.scroll=false};Ext.extend(Ext.Tip.DD,Ext.dd.DD,{moveOnly:true,scroll:false,headerOffsets:[100,25],startDrag:function(){this.tip.el.disableShadow()},endDrag:function(a){this.tip.el.enableShadow(true)}});Ext.ToolTip=Ext.extend(Ext.Tip,{showDelay:500,hideDelay:200,dismissDelay:5000,trackMouse:false,anchorToTarget:true,anchorOffset:0,targetCounter:0,constrainPosition:false,initComponent:function(){Ext.ToolTip.superclass.initComponent.call(this);this.lastActive=new Date();this.initTarget(this.target);this.origAnchor=this.anchor},onRender:function(b,a){Ext.ToolTip.superclass.onRender.call(this,b,a);this.anchorCls="x-tip-anchor-"+this.getAnchorPosition();this.anchorEl=this.el.createChild({cls:"x-tip-anchor "+this.anchorCls})},afterRender:function(){Ext.ToolTip.superclass.afterRender.call(this);this.anchorEl.setStyle("z-index",this.el.getZIndex()+1).setVisibilityMode(Ext.Element.DISPLAY)},initTarget:function(c){var a;if((a=Ext.get(c))){if(this.target){var b=Ext.get(this.target);this.mun(b,"mouseover",this.onTargetOver,this);this.mun(b,"mouseout",this.onTargetOut,this);this.mun(b,"mousemove",this.onMouseMove,this)}this.mon(a,{mouseover:this.onTargetOver,mouseout:this.onTargetOut,mousemove:this.onMouseMove,scope:this});this.target=a}if(this.anchor){this.anchorTarget=this.target}},onMouseMove:function(b){var a=this.delegate?b.getTarget(this.delegate):this.triggerElement=true;if(a){this.targetXY=b.getXY();if(a===this.triggerElement){if(!this.hidden&&this.trackMouse){this.setPagePosition(this.getTargetXY())}}else{this.hide();this.lastActive=new Date(0);this.onTargetOver(b)}}else{if(!this.closable&&this.isVisible()){this.hide()}}},getTargetXY:function(){if(this.delegate){this.anchorTarget=this.triggerElement}if(this.anchor){this.targetCounter++;var c=this.getOffsets(),m=(this.anchorToTarget&&!this.trackMouse)?this.el.getAlignToXY(this.anchorTarget,this.getAnchorAlign()):this.targetXY,a=Ext.lib.Dom.getViewWidth()-5,h=Ext.lib.Dom.getViewHeight()-5,i=document.documentElement,e=document.body,l=(i.scrollLeft||e.scrollLeft||0)+5,k=(i.scrollTop||e.scrollTop||0)+5,b=[m[0]+c[0],m[1]+c[1]],g=this.getSize();this.anchorEl.removeClass(this.anchorCls);if(this.targetCounter<2){if(b[0]a){if(this.anchorToTarget){this.defaultAlign="r-l";if(this.mouseOffset){this.mouseOffset[0]*=-1}}this.anchor="right";return this.getTargetXY()}if(b[1]h){if(this.anchorToTarget){this.defaultAlign="b-t";if(this.mouseOffset){this.mouseOffset[1]*=-1}}this.anchor="bottom";return this.getTargetXY()}}this.anchorCls="x-tip-anchor-"+this.getAnchorPosition();this.anchorEl.addClass(this.anchorCls);this.targetCounter=0;return b}else{var d=this.getMouseOffset();return[this.targetXY[0]+d[0],this.targetXY[1]+d[1]]}},getMouseOffset:function(){var a=this.anchor?[0,0]:[15,18];if(this.mouseOffset){a[0]+=this.mouseOffset[0];a[1]+=this.mouseOffset[1]}return a},getAnchorPosition:function(){if(this.anchor){this.tipAnchor=this.anchor.charAt(0)}else{var a=this.defaultAlign.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!a){throw"AnchorTip.defaultAlign is invalid"}this.tipAnchor=a[1].charAt(0)}switch(this.tipAnchor){case"t":return"top";case"b":return"bottom";case"r":return"right"}return"left"},getAnchorAlign:function(){switch(this.anchor){case"top":return"tl-bl";case"left":return"tl-tr";case"right":return"tr-tl";default:return"bl-tl"}},getOffsets:function(){var b,a=this.getAnchorPosition().charAt(0);if(this.anchorToTarget&&!this.trackMouse){switch(a){case"t":b=[0,9];break;case"b":b=[0,-13];break;case"r":b=[-13,0];break;default:b=[9,0];break}}else{switch(a){case"t":b=[-15-this.anchorOffset,30];break;case"b":b=[-19-this.anchorOffset,-13-this.el.dom.offsetHeight];break;case"r":b=[-15-this.el.dom.offsetWidth,-13-this.anchorOffset];break;default:b=[25,-13-this.anchorOffset];break}}var c=this.getMouseOffset();b[0]+=c[0];b[1]+=c[1];return b},onTargetOver:function(b){if(this.disabled||b.within(this.target.dom,true)){return}var a=b.getTarget(this.delegate);if(a){this.triggerElement=a;this.clearTimer("hide");this.targetXY=b.getXY();this.delayShow()}},delayShow:function(){if(this.hidden&&!this.showTimer){if(this.lastActive.getElapsed()=c){d=c-b-5}}return{x:a,y:d}},beforeDestroy:function(){this.clearTimers();Ext.destroy(this.anchorEl);delete this.anchorEl;delete this.target;delete this.anchorTarget;delete this.triggerElement;Ext.ToolTip.superclass.beforeDestroy.call(this)},onDestroy:function(){Ext.getDoc().un("mousedown",this.onDocMouseDown,this);Ext.ToolTip.superclass.onDestroy.call(this)}});Ext.reg("tooltip",Ext.ToolTip);Ext.QuickTip=Ext.extend(Ext.ToolTip,{interceptTitles:false,tagConfig:{namespace:"ext",attribute:"qtip",width:"qwidth",target:"target",title:"qtitle",hide:"hide",cls:"qclass",align:"qalign",anchor:"anchor"},initComponent:function(){this.target=this.target||Ext.getDoc();this.targets=this.targets||{};Ext.QuickTip.superclass.initComponent.call(this)},register:function(e){var h=Ext.isArray(e)?e:arguments;for(var g=0,a=h.length;g1){var d=function(i,h){if(i&&h){var k=h.findChild(a,b);if(k){k.select();if(g){g(true,k)}}else{if(g){g(false,k)}}}else{if(g){g(false,k)}}};this.expandPath(c.join(this.pathSeparator),a,d)}else{this.root.select();if(g){g(true,this.root)}}},getTreeEl:function(){return this.body},onRender:function(b,a){Ext.tree.TreePanel.superclass.onRender.call(this,b,a);this.el.addClass("x-tree");this.innerCt=this.body.createChild({tag:"ul",cls:"x-tree-root-ct "+(this.useArrows?"x-tree-arrows":this.lines?"x-tree-lines":"x-tree-no-lines")})},initEvents:function(){Ext.tree.TreePanel.superclass.initEvents.call(this);if(this.containerScroll){Ext.dd.ScrollManager.register(this.body)}if((this.enableDD||this.enableDrop)&&!this.dropZone){this.dropZone=new Ext.tree.TreeDropZone(this,this.dropConfig||{ddGroup:this.ddGroup||"TreeDD",appendOnly:this.ddAppendOnly===true})}if((this.enableDD||this.enableDrag)&&!this.dragZone){this.dragZone=new Ext.tree.TreeDragZone(this,this.dragConfig||{ddGroup:this.ddGroup||"TreeDD",scroll:this.ddScroll})}this.getSelectionModel().init(this)},afterRender:function(){Ext.tree.TreePanel.superclass.afterRender.call(this);this.renderRoot()},beforeDestroy:function(){if(this.rendered){Ext.dd.ScrollManager.unregister(this.body);Ext.destroy(this.dropZone,this.dragZone)}this.destroyRoot();Ext.destroy(this.loader);this.nodeHash=this.root=this.loader=null;Ext.tree.TreePanel.superclass.beforeDestroy.call(this)},destroyRoot:function(){if(this.root&&this.root.destroy){this.root.destroy(true)}}});Ext.tree.TreePanel.nodeTypes={};Ext.reg("treepanel",Ext.tree.TreePanel);Ext.tree.TreeEventModel=function(a){this.tree=a;this.tree.on("render",this.initEvents,this)};Ext.tree.TreeEventModel.prototype={initEvents:function(){var a=this.tree;if(a.trackMouseOver!==false){a.mon(a.innerCt,{scope:this,mouseover:this.delegateOver,mouseout:this.delegateOut})}a.mon(a.getTreeEl(),{scope:this,click:this.delegateClick,dblclick:this.delegateDblClick,contextmenu:this.delegateContextMenu})},getNode:function(b){var a;if(a=b.getTarget(".x-tree-node-el",10)){var c=Ext.fly(a,"_treeEvents").getAttribute("tree-node-id","ext");if(c){return this.tree.getNodeById(c)}}return null},getNodeTarget:function(b){var a=b.getTarget(".x-tree-node-icon",1);if(!a){a=b.getTarget(".x-tree-node-el",6)}return a},delegateOut:function(b,a){if(!this.beforeEvent(b)){return}if(b.getTarget(".x-tree-ec-icon",1)){var c=this.getNode(b);this.onIconOut(b,c);if(c==this.lastEcOver){delete this.lastEcOver}}if((a=this.getNodeTarget(b))&&!b.within(a,true)){this.onNodeOut(b,this.getNode(b))}},delegateOver:function(b,a){if(!this.beforeEvent(b)){return}if(Ext.isGecko&&!this.trackingDoc){Ext.getBody().on("mouseover",this.trackExit,this);this.trackingDoc=true}if(this.lastEcOver){this.onIconOut(b,this.lastEcOver);delete this.lastEcOver}if(b.getTarget(".x-tree-ec-icon",1)){this.lastEcOver=this.getNode(b);this.onIconOver(b,this.lastEcOver)}if(a=this.getNodeTarget(b)){this.onNodeOver(b,this.getNode(b))}},trackExit:function(a){if(this.lastOverNode){if(this.lastOverNode.ui&&!a.within(this.lastOverNode.ui.getEl())){this.onNodeOut(a,this.lastOverNode)}delete this.lastOverNode;Ext.getBody().un("mouseover",this.trackExit,this);this.trackingDoc=false}},delegateClick:function(b,a){if(this.beforeEvent(b)){if(b.getTarget("input[type=checkbox]",1)){this.onCheckboxClick(b,this.getNode(b))}else{if(b.getTarget(".x-tree-ec-icon",1)){this.onIconClick(b,this.getNode(b))}else{if(this.getNodeTarget(b)){this.onNodeClick(b,this.getNode(b))}}}}else{this.checkContainerEvent(b,"click")}},delegateDblClick:function(b,a){if(this.beforeEvent(b)){if(this.getNodeTarget(b)){this.onNodeDblClick(b,this.getNode(b))}}else{this.checkContainerEvent(b,"dblclick")}},delegateContextMenu:function(b,a){if(this.beforeEvent(b)){if(this.getNodeTarget(b)){this.onNodeContextMenu(b,this.getNode(b))}}else{this.checkContainerEvent(b,"contextmenu")}},checkContainerEvent:function(b,a){if(this.disabled){b.stopEvent();return false}this.onContainerEvent(b,a)},onContainerEvent:function(b,a){this.tree.fireEvent("container"+a,this.tree,b)},onNodeClick:function(b,a){a.ui.onClick(b)},onNodeOver:function(b,a){this.lastOverNode=a;a.ui.onOver(b)},onNodeOut:function(b,a){a.ui.onOut(b)},onIconOver:function(b,a){a.ui.addClass("x-tree-ec-over")},onIconOut:function(b,a){a.ui.removeClass("x-tree-ec-over")},onIconClick:function(b,a){a.ui.ecClick(b)},onCheckboxClick:function(b,a){a.ui.onCheckChange(b)},onNodeDblClick:function(b,a){a.ui.onDblClick(b)},onNodeContextMenu:function(b,a){a.ui.onContextMenu(b)},beforeEvent:function(b){var a=this.getNode(b);if(this.disabled||!a||!a.ui){b.stopEvent();return false}return true},disable:function(){this.disabled=true},enable:function(){this.disabled=false}};Ext.tree.DefaultSelectionModel=Ext.extend(Ext.util.Observable,{constructor:function(a){this.selNode=null;this.addEvents("selectionchange","beforeselect");Ext.apply(this,a);Ext.tree.DefaultSelectionModel.superclass.constructor.call(this)},init:function(a){this.tree=a;a.mon(a.getTreeEl(),"keydown",this.onKeyDown,this);a.on("click",this.onNodeClick,this)},onNodeClick:function(a,b){this.select(a)},select:function(c,a){if(!Ext.fly(c.ui.wrap).isVisible()&&a){return a.call(this,c)}var b=this.selNode;if(c==b){c.ui.onSelectedChange(true)}else{if(this.fireEvent("beforeselect",this,c,b)!==false){if(b&&b.ui){b.ui.onSelectedChange(false)}this.selNode=c;c.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,c,b)}}return c},unselect:function(b,a){if(this.selNode==b){this.clearSelections(a)}},clearSelections:function(a){var b=this.selNode;if(b){b.ui.onSelectedChange(false);this.selNode=null;if(a!==true){this.fireEvent("selectionchange",this,null)}}return b},getSelectedNode:function(){return this.selNode},isSelected:function(a){return this.selNode==a},selectPrevious:function(a){if(!(a=a||this.selNode||this.lastSelNode)){return null}var c=a.previousSibling;if(c){if(!c.isExpanded()||c.childNodes.length<1){return this.select(c,this.selectPrevious)}else{var b=c.lastChild;while(b&&b.isExpanded()&&Ext.fly(b.ui.wrap).isVisible()&&b.childNodes.length>0){b=b.lastChild}return this.select(b,this.selectPrevious)}}else{if(a.parentNode&&(this.tree.rootVisible||!a.parentNode.isRoot)){return this.select(a.parentNode,this.selectPrevious)}}return null},selectNext:function(b){if(!(b=b||this.selNode||this.lastSelNode)){return null}if(b.firstChild&&b.isExpanded()&&Ext.fly(b.ui.wrap).isVisible()){return this.select(b.firstChild,this.selectNext)}else{if(b.nextSibling){return this.select(b.nextSibling,this.selectNext)}else{if(b.parentNode){var a=null;b.parentNode.bubble(function(){if(this.nextSibling){a=this.getOwnerTree().selModel.select(this.nextSibling,this.selectNext);return false}});return a}}}return null},onKeyDown:function(c){var b=this.selNode||this.lastSelNode;var d=this;if(!b){return}var a=c.getKey();switch(a){case c.DOWN:c.stopEvent();this.selectNext();break;case c.UP:c.stopEvent();this.selectPrevious();break;case c.RIGHT:c.preventDefault();if(b.hasChildNodes()){if(!b.isExpanded()){b.expand()}else{if(b.firstChild){this.select(b.firstChild,c)}}}break;case c.LEFT:c.preventDefault();if(b.hasChildNodes()&&b.isExpanded()){b.collapse()}else{if(b.parentNode&&(this.tree.rootVisible||b.parentNode!=this.tree.getRootNode())){this.select(b.parentNode,c)}}break}}});Ext.tree.MultiSelectionModel=Ext.extend(Ext.util.Observable,{constructor:function(a){this.selNodes=[];this.selMap={};this.addEvents("selectionchange");Ext.apply(this,a);Ext.tree.MultiSelectionModel.superclass.constructor.call(this)},init:function(a){this.tree=a;a.mon(a.getTreeEl(),"keydown",this.onKeyDown,this);a.on("click",this.onNodeClick,this)},onNodeClick:function(a,b){if(b.ctrlKey&&this.isSelected(a)){this.unselect(a)}else{this.select(a,b,b.ctrlKey)}},select:function(a,c,b){if(b!==true){this.clearSelections(true)}if(this.isSelected(a)){this.lastSelNode=a;return a}this.selNodes.push(a);this.selMap[a.id]=a;this.lastSelNode=a;a.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,this.selNodes);return a},unselect:function(b){if(this.selMap[b.id]){b.ui.onSelectedChange(false);var c=this.selNodes;var a=c.indexOf(b);if(a!=-1){this.selNodes.splice(a,1)}delete this.selMap[b.id];this.fireEvent("selectionchange",this,this.selNodes)}},clearSelections:function(b){var d=this.selNodes;if(d.length>0){for(var c=0,a=d.length;c0},isExpandable:function(){return this.attributes.expandable||this.hasChildNodes()},appendChild:function(e){var g=false;if(Ext.isArray(e)){g=e}else{if(arguments.length>1){g=arguments}}if(g){for(var d=0,a=g.length;d0){var g=d?function(){e.apply(d,arguments)}:e;c.sort(g);for(var b=0;b
    ','',this.indentMarkup,"",'','',g?('':"/>")):"",'',e.text,"
    ",'',""].join("");if(m!==true&&e.nextSibling&&(b=e.nextSibling.ui.getEl())){this.wrap=Ext.DomHelper.insertHtml("beforeBegin",b,d)}else{this.wrap=Ext.DomHelper.insertHtml("beforeEnd",k,d)}this.elNode=this.wrap.childNodes[0];this.ctNode=this.wrap.childNodes[1];var i=this.elNode.childNodes;this.indentNode=i[0];this.ecNode=i[1];this.iconNode=i[2];var h=3;if(g){this.checkbox=i[3];this.checkbox.defaultChecked=this.checkbox.checked;h++}this.anchor=i[h];this.textNode=i[h].firstChild},getHref:function(a){return Ext.isEmpty(a)?(Ext.isGecko?"":"#"):a},getAnchor:function(){return this.anchor},getTextEl:function(){return this.textNode},getIconEl:function(){return this.iconNode},isChecked:function(){return this.checkbox?this.checkbox.checked:false},updateExpandIcon:function(){if(this.rendered){var g=this.node,d,c,a=g.isLast()?"x-tree-elbow-end":"x-tree-elbow",e=g.hasChildNodes();if(e||g.attributes.expandable){if(g.expanded){a+="-minus";d="x-tree-node-collapsed";c="x-tree-node-expanded"}else{a+="-plus";d="x-tree-node-expanded";c="x-tree-node-collapsed"}if(this.wasLeaf){this.removeClass("x-tree-node-leaf");this.wasLeaf=false}if(this.c1!=d||this.c2!=c){Ext.fly(this.elNode).replaceClass(d,c);this.c1=d;this.c2=c}}else{if(!this.wasLeaf){Ext.fly(this.elNode).replaceClass("x-tree-node-expanded","x-tree-node-collapsed");delete this.c1;delete this.c2;this.wasLeaf=true}}var b="x-tree-ec-icon "+a;if(this.ecc!=b){this.ecNode.className=b;this.ecc=b}}},onIdChange:function(a){if(this.rendered){this.elNode.setAttribute("ext:tree-node-id",a)}},getChildIndent:function(){if(!this.childIndent){var a=[],b=this.node;while(b){if(!b.isRoot||(b.isRoot&&b.ownerTree.rootVisible)){if(!b.isLast()){a.unshift('')}else{a.unshift('')}}b=b.parentNode}this.childIndent=a.join("")}return this.childIndent},renderIndent:function(){if(this.rendered){var a="",b=this.node.parentNode;if(b){a=b.ui.getChildIndent()}if(this.indentMarkup!=a){this.indentNode.innerHTML=a;this.indentMarkup=a}this.updateExpandIcon()}},destroy:function(){if(this.elNode){Ext.dd.Registry.unregister(this.elNode.id)}Ext.each(["textnode","anchor","checkbox","indentNode","ecNode","iconNode","elNode","ctNode","wrap","holder"],function(a){if(this[a]){Ext.fly(this[a]).remove();delete this[a]}},this);delete this.node}});Ext.tree.RootTreeNodeUI=Ext.extend(Ext.tree.TreeNodeUI,{render:function(){if(!this.rendered){var a=this.node.ownerTree.innerCt.dom;this.node.expanded=true;a.innerHTML='
    ';this.wrap=this.ctNode=a.firstChild}},collapse:Ext.emptyFn,expand:Ext.emptyFn});Ext.tree.TreeLoader=function(a){this.baseParams={};Ext.apply(this,a);this.addEvents("beforeload","load","loadexception");Ext.tree.TreeLoader.superclass.constructor.call(this);if(Ext.isString(this.paramOrder)){this.paramOrder=this.paramOrder.split(/[\s,|]/)}};Ext.extend(Ext.tree.TreeLoader,Ext.util.Observable,{uiProviders:{},clearOnLoad:true,paramOrder:undefined,paramsAsHash:false,nodeParameter:"node",directFn:undefined,load:function(b,c,a){if(this.clearOnLoad){while(b.firstChild){b.removeChild(b.firstChild)}}if(this.doPreload(b)){this.runCallback(c,a||b,[b])}else{if(this.directFn||this.dataUrl||this.url){this.requestData(b,c,a||b)}}},doPreload:function(d){if(d.attributes.children){if(d.childNodes.length<1){var c=d.attributes.children;d.beginUpdate();for(var b=0,a=c.length;b-1){c=[]}for(var d=0,a=b.length;dv2){return c?-1:1}}return 0}},doSort:function(a){a.sort(this.sortFn)},updateSort:function(a,b){if(b.childrenRendered){this.doSort.defer(1,this,[b])}},updateSortParent:function(a){var b=a.parentNode;if(b&&b.childrenRendered){this.doSort.defer(1,this,[b])}}});if(Ext.dd.DropZone){Ext.tree.TreeDropZone=function(a,b){this.allowParentInsert=b.allowParentInsert||false;this.allowContainerDrop=b.allowContainerDrop||false;this.appendOnly=b.appendOnly||false;Ext.tree.TreeDropZone.superclass.constructor.call(this,a.getTreeEl(),b);this.tree=a;this.dragOverData={};this.lastInsertClass="x-tree-no-status"};Ext.extend(Ext.tree.TreeDropZone,Ext.dd.DropZone,{ddGroup:"TreeDD",expandDelay:1000,expandNode:function(a){if(a.hasChildNodes()&&!a.isExpanded()){a.expand(false,null,this.triggerCacheRefresh.createDelegate(this))}},queueExpand:function(a){this.expandProcId=this.expandNode.defer(this.expandDelay,this,[a])},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);this.expandProcId=false}},isValidDropPoint:function(a,l,i,d,c){if(!a||!c){return false}var g=a.node;var h=c.node;if(!(g&&g.isTarget&&l)){return false}if(l=="append"&&g.allowChildren===false){return false}if((l=="above"||l=="below")&&(g.parentNode&&g.parentNode.allowChildren===false)){return false}if(h&&(g==h||h.contains(g))){return false}var b=this.dragOverData;b.tree=this.tree;b.target=g;b.data=c;b.point=l;b.source=i;b.rawEvent=d;b.dropNode=h;b.cancel=false;var k=this.tree.fireEvent("nodedragover",b);return b.cancel===false&&k!==false},getDropPoint:function(h,g,m){var o=g.node;if(o.isRoot){return o.allowChildren!==false?"append":false}var c=g.ddel;var p=Ext.lib.Dom.getY(c),k=p+c.offsetHeight;var i=Ext.lib.Event.getPageY(h);var l=o.allowChildren===false||o.isLeaf();if(this.appendOnly||o.parentNode.allowChildren===false){return l?false:"append"}var d=false;if(!this.allowParentInsert){d=o.hasChildNodes()&&o.isExpanded()}var a=(k-p)/(l?2:3);if(i>=p&&i<(p+a)){return"above"}else{if(!d&&(l||i>=k-a&&i<=k)){return"below"}else{return"append"}}},onNodeEnter:function(d,a,c,b){this.cancelExpand()},onContainerOver:function(a,c,b){if(this.allowContainerDrop&&this.isValidDropPoint({ddel:this.tree.getRootNode().ui.elNode,node:this.tree.getRootNode()},"append",a,c,b)){return this.dropAllowed}return this.dropNotAllowed},onNodeOver:function(b,i,h,g){var l=this.getDropPoint(h,b,i);var c=b.node;if(!this.expandProcId&&l=="append"&&c.hasChildNodes()&&!b.node.isExpanded()){this.queueExpand(c)}else{if(l!="append"){this.cancelExpand()}}var d=this.dropNotAllowed;if(this.isValidDropPoint(b,l,i,h,g)){if(l){var a=b.ddel;var k;if(l=="above"){d=b.node.isFirst()?"x-tree-drop-ok-above":"x-tree-drop-ok-between";k="x-tree-drag-insert-above"}else{if(l=="below"){d=b.node.isLast()?"x-tree-drop-ok-below":"x-tree-drop-ok-between";k="x-tree-drag-insert-below"}else{d="x-tree-drop-ok-append";k="x-tree-drag-append"}}if(this.lastInsertClass!=k){Ext.fly(a).replaceClass(this.lastInsertClass,k);this.lastInsertClass=k}}}return d},onNodeOut:function(d,a,c,b){this.cancelExpand();this.removeDropIndicators(d)},onNodeDrop:function(i,b,h,d){var a=this.getDropPoint(h,i,b);var g=i.node;g.ui.startDrop();if(!this.isValidDropPoint(i,a,b,h,d)){g.ui.endDrop();return false}var c=d.node||(b.getTreeNode?b.getTreeNode(d,g,a,h):null);return this.processDrop(g,d,a,b,h,c)},onContainerDrop:function(a,g,c){if(this.allowContainerDrop&&this.isValidDropPoint({ddel:this.tree.getRootNode().ui.elNode,node:this.tree.getRootNode()},"append",a,g,c)){var d=this.tree.getRootNode();d.ui.startDrop();var b=c.node||(a.getTreeNode?a.getTreeNode(c,d,"append",g):null);return this.processDrop(d,c,"append",a,g,b)}return false},processDrop:function(k,h,b,a,i,d){var g={tree:this.tree,target:k,data:h,point:b,source:a,rawEvent:i,dropNode:d,cancel:!d,dropStatus:false};var c=this.tree.fireEvent("beforenodedrop",g);if(c===false||g.cancel===true||!g.dropNode){k.ui.endDrop();return g.dropStatus}k=g.target;if(b=="append"&&!k.isExpanded()){k.expand(false,null,function(){this.completeDrop(g)}.createDelegate(this))}else{this.completeDrop(g)}return true},completeDrop:function(h){var d=h.dropNode,e=h.point,c=h.target;if(!Ext.isArray(d)){d=[d]}var g;for(var b=0,a=d.length;bd.offsetLeft){e.scrollLeft=d.offsetLeft}var a=Math.min(this.maxWidth,(e.clientWidth>20?e.clientWidth:e.offsetWidth)-Math.max(0,d.offsetLeft-e.scrollLeft)-5);this.setSize(a,"")},triggerEdit:function(a,c){this.completeEdit();if(a.attributes.editable!==false){this.editNode=a;if(this.tree.autoScroll){Ext.fly(a.ui.getEl()).scrollIntoView(this.tree.body)}var b=a.text||"";if(!Ext.isGecko&&Ext.isEmpty(a.text)){a.setText(" ")}this.autoEditTimer=this.startEdit.defer(this.editDelay,this,[a.ui.textNode,b]);return false}},bindScroll:function(){this.tree.getTreeEl().on("scroll",this.cancelEdit,this)},beforeNodeClick:function(a,b){clearTimeout(this.autoEditTimer);if(this.tree.getSelectionModel().isSelected(a)){b.stopEvent();return this.triggerEdit(a)}},onNodeDblClick:function(a,b){clearTimeout(this.autoEditTimer)},updateNode:function(a,b){this.tree.getTreeEl().un("scroll",this.cancelEdit,this);this.editNode.setText(b)},onHide:function(){Ext.tree.TreeEditor.superclass.onHide.call(this);if(this.editNode){this.editNode.ui.focus.defer(50,this.editNode.ui)}},onSpecialKey:function(c,b){var a=b.getKey();if(a==b.ESC){b.stopEvent();this.cancelEdit()}else{if(a==b.ENTER&&!b.hasModifier()){b.stopEvent();this.completeEdit()}}},onDestroy:function(){clearTimeout(this.autoEditTimer);Ext.tree.TreeEditor.superclass.onDestroy.call(this);var a=this.tree;a.un("beforeclick",this.beforeNodeClick,this);a.un("dblclick",this.onNodeDblClick,this)}}); +/* SWFObject v2.2 + is released under the MIT License +*/ +var swfobject=function(){var F="undefined",t="object",U="Shockwave Flash",Y="ShockwaveFlash.ShockwaveFlash",s="application/x-shockwave-flash",T="SWFObjectExprInst",z="onreadystatechange",Q=window,l=document,v=navigator,V=false,W=[i],q=[],P=[],K=[],n,S,G,D,L=false,a=false,p,I,o=true,O=function(){var ac=typeof l.getElementById!=F&&typeof l.getElementsByTagName!=F&&typeof l.createElement!=F,aj=v.userAgent.toLowerCase(),aa=v.platform.toLowerCase(),ag=aa?(/win/).test(aa):/win/.test(aj),ae=aa?(/mac/).test(aa):/mac/.test(aj),ah=/webkit/.test(aj)?parseFloat(aj.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,Z=!+"\v1",ai=[0,0,0],ad=null;if(typeof v.plugins!=F&&typeof v.plugins[U]==t){ad=v.plugins[U].description;if(ad&&!(typeof v.mimeTypes!=F&&v.mimeTypes[s]&&!v.mimeTypes[s].enabledPlugin)){V=true;Z=false;ad=ad.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ai[0]=parseInt(ad.replace(/^(.*)\..*$/,"$1"),10);ai[1]=parseInt(ad.replace(/^.*\.(.*)\s.*$/,"$1"),10);ai[2]=/[a-zA-Z]/.test(ad)?parseInt(ad.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof Q.ActiveXObject!=F){try{var af=new ActiveXObject(Y);if(af){ad=af.GetVariable("$version");if(ad){Z=true;ad=ad.split(" ")[1].split(",");ai=[parseInt(ad[0],10),parseInt(ad[1],10),parseInt(ad[2],10)]}}}catch(ab){}}}return{w3:ac,pv:ai,wk:ah,ie:Z,win:ag,mac:ae}}(),m=function(){if(!O.w3){return}if((typeof l.readyState!=F&&l.readyState=="complete")||(typeof l.readyState==F&&(l.getElementsByTagName("body")[0]||l.body))){g()}if(!L){if(typeof l.addEventListener!=F){l.addEventListener("DOMContentLoaded",g,false)}if(O.ie&&O.win){l.attachEvent(z,function(){if(l.readyState=="complete"){l.detachEvent(z,arguments.callee);g()}});if(Q==top){(function(){if(L){return}try{l.documentElement.doScroll("left")}catch(Z){setTimeout(arguments.callee,0);return}g()})()}}if(O.wk){(function(){if(L){return}if(!(/loaded|complete/).test(l.readyState)){setTimeout(arguments.callee,0);return}g()})()}u(g)}}();function g(){if(L){return}try{var ab=l.getElementsByTagName("body")[0].appendChild(E("span"));ab.parentNode.removeChild(ab)}catch(ac){return}L=true;var Z=W.length;for(var aa=0;aa0){for(var ah=0;ah0){var ag=c(aa);if(ag){if(H(q[ah].swfVersion)&&!(O.wk&&O.wk<312)){y(aa,true);if(ad){ac.success=true;ac.ref=B(aa);ad(ac)}}else{if(q[ah].expressInstall&&C()){var ak={};ak.data=q[ah].expressInstall;ak.width=ag.getAttribute("width")||"0";ak.height=ag.getAttribute("height")||"0";if(ag.getAttribute("class")){ak.styleclass=ag.getAttribute("class")}if(ag.getAttribute("align")){ak.align=ag.getAttribute("align")}var aj={};var Z=ag.getElementsByTagName("param");var ae=Z.length;for(var af=0;af'}}ac.outerHTML='"+ah+"";P[P.length]=ak.id;Z=c(ak.id)}else{var ab=E(t);ab.setAttribute("type",s);for(var ae in ak){if(ak[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="styleclass"){ab.setAttribute("class",ak[ae])}else{if(ae.toLowerCase()!="classid"){ab.setAttribute(ae,ak[ae])}}}}for(var ad in ai){if(ai[ad]!=Object.prototype[ad]&&ad.toLowerCase()!="movie"){e(ab,ad,ai[ad])}}ac.parentNode.replaceChild(ab,ac);Z=ab}}return Z}function e(ab,Z,aa){var ac=E("param");ac.setAttribute("name",Z);ac.setAttribute("value",aa);ab.appendChild(ac)}function A(aa){var Z=c(aa);if(Z&&Z.nodeName=="OBJECT"){if(O.ie&&O.win){Z.style.display="none";(function(){if(Z.readyState==4){b(aa)}else{setTimeout(arguments.callee,10)}})()}else{Z.parentNode.removeChild(Z)}}}function b(ab){var aa=c(ab);if(aa){for(var Z in aa){if(typeof aa[Z]=="function"){aa[Z]=null}}aa.parentNode.removeChild(aa)}}function c(ab){var Z=null;try{Z=l.getElementById(ab)}catch(aa){}return Z}function E(Z){return l.createElement(Z)}function k(ab,Z,aa){ab.attachEvent(Z,aa);K[K.length]=[ab,Z,aa]}function H(ab){var aa=O.pv,Z=ab.split(".");Z[0]=parseInt(Z[0],10);Z[1]=parseInt(Z[1],10)||0;Z[2]=parseInt(Z[2],10)||0;return(aa[0]>Z[0]||(aa[0]==Z[0]&&aa[1]>Z[1])||(aa[0]==Z[0]&&aa[1]==Z[1]&&aa[2]>=Z[2]))?true:false}function x(ae,aa,af,ad){if(O.ie&&O.mac){return}var ac=l.getElementsByTagName("head")[0];if(!ac){return}var Z=(af&&typeof af=="string")?af:"screen";if(ad){p=null;I=null}if(!p||I!=Z){var ab=E("style");ab.setAttribute("type","text/css");ab.setAttribute("media",Z);p=ac.appendChild(ab);if(O.ie&&O.win&&typeof l.styleSheets!=F&&l.styleSheets.length>0){p=l.styleSheets[l.styleSheets.length-1]}I=Z}if(O.ie&&O.win){if(p&&typeof p.addRule==t){p.addRule(ae,aa)}}else{if(p&&typeof l.createTextNode!=F){p.appendChild(l.createTextNode(ae+" {"+aa+"}"))}}}function y(ab,Z){if(!o){return}var aa=Z?"visible":"hidden";if(L&&c(ab)){c(ab).style.visibility=aa}else{x("#"+ab,"visibility:"+aa)}}function N(aa){var ab=/[\\\"<>\.;]/;var Z=ab.exec(aa)!=null;return Z&&typeof encodeURIComponent!=F?encodeURIComponent(aa):aa}var d=function(){if(O.ie&&O.win){window.attachEvent("onunload",function(){var ae=K.length;for(var ad=0;ad0){for(h=0;h-1&&e.position=="left"){e.position="bottom"}return e},onDestroy:function(){Ext.chart.CartesianChart.superclass.onDestroy.call(this);Ext.each(this.labelFn,function(a){this.removeFnProxy(a)},this)}});Ext.reg("cartesianchart",Ext.chart.CartesianChart);Ext.chart.LineChart=Ext.extend(Ext.chart.CartesianChart,{type:"line"});Ext.reg("linechart",Ext.chart.LineChart);Ext.chart.ColumnChart=Ext.extend(Ext.chart.CartesianChart,{type:"column"});Ext.reg("columnchart",Ext.chart.ColumnChart);Ext.chart.StackedColumnChart=Ext.extend(Ext.chart.CartesianChart,{type:"stackcolumn"});Ext.reg("stackedcolumnchart",Ext.chart.StackedColumnChart);Ext.chart.BarChart=Ext.extend(Ext.chart.CartesianChart,{type:"bar"});Ext.reg("barchart",Ext.chart.BarChart);Ext.chart.StackedBarChart=Ext.extend(Ext.chart.CartesianChart,{type:"stackbar"});Ext.reg("stackedbarchart",Ext.chart.StackedBarChart);Ext.chart.Axis=function(a){Ext.apply(this,a)};Ext.chart.Axis.prototype={type:null,orientation:"horizontal",reverse:false,labelFunction:null,hideOverlappingLabels:true,labelSpacing:2};Ext.chart.NumericAxis=Ext.extend(Ext.chart.Axis,{type:"numeric",minimum:NaN,maximum:NaN,majorUnit:NaN,minorUnit:NaN,snapToUnits:true,alwaysShowZero:true,scale:"linear",roundMajorUnit:true,calculateByLabelSize:true,position:"left",adjustMaximumByMajorUnit:true,adjustMinimumByMajorUnit:true});Ext.chart.TimeAxis=Ext.extend(Ext.chart.Axis,{type:"time",minimum:null,maximum:null,majorUnit:NaN,majorTimeUnit:null,minorUnit:NaN,minorTimeUnit:null,snapToUnits:true,stackingEnabled:false,calculateByLabelSize:true});Ext.chart.CategoryAxis=Ext.extend(Ext.chart.Axis,{type:"category",categoryNames:null,calculateCategoryCount:false});Ext.chart.Series=function(a){Ext.apply(this,a)};Ext.chart.Series.prototype={type:null,displayName:null};Ext.chart.CartesianSeries=Ext.extend(Ext.chart.Series,{xField:null,yField:null,showInLegend:true,axis:"primary"});Ext.chart.ColumnSeries=Ext.extend(Ext.chart.CartesianSeries,{type:"column"});Ext.chart.LineSeries=Ext.extend(Ext.chart.CartesianSeries,{type:"line"});Ext.chart.BarSeries=Ext.extend(Ext.chart.CartesianSeries,{type:"bar"});Ext.chart.PieSeries=Ext.extend(Ext.chart.Series,{type:"pie",dataField:null,categoryField:null});Ext.menu.Menu=Ext.extend(Ext.Container,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,ignoreParentClicks:false,enableScrolling:true,maxHeight:null,scrollIncrement:24,showSeparator:true,defaultOffsets:[0,0],plain:false,floating:true,zIndex:15000,hidden:true,layout:"menu",hideMode:"offsets",scrollerHeight:8,autoLayout:true,defaultType:"menuitem",bufferResize:false,initComponent:function(){if(Ext.isArray(this.initialConfig)){Ext.apply(this,{items:this.initialConfig})}this.addEvents("click","mouseover","mouseout","itemclick");Ext.menu.MenuMgr.register(this);if(this.floating){Ext.EventManager.onWindowResize(this.hide,this)}else{if(this.initialConfig.hidden!==false){this.hidden=false}this.internalDefaults={hideOnClick:false}}Ext.menu.Menu.superclass.initComponent.call(this);if(this.autoLayout){var a=this.doLayout.createDelegate(this,[]);this.on({add:a,remove:a})}},getLayoutTarget:function(){return this.ul},onRender:function(b,a){if(!b){b=Ext.getBody()}var c={id:this.getId(),cls:"x-menu "+((this.floating)?"x-menu-floating x-layer ":"")+(this.cls||"")+(this.plain?" x-menu-plain":"")+(this.showSeparator?"":" x-menu-nosep"),style:this.style,cn:[{tag:"a",cls:"x-menu-focus",href:"#",onclick:"return false;",tabIndex:"-1"},{tag:"ul",cls:"x-menu-list"}]};if(this.floating){this.el=new Ext.Layer({shadow:this.shadow,dh:c,constrain:false,parentEl:b,zindex:this.zIndex})}else{this.el=b.createChild(c)}Ext.menu.Menu.superclass.onRender.call(this,b,a);if(!this.keyNav){this.keyNav=new Ext.menu.MenuNav(this)}this.focusEl=this.el.child("a.x-menu-focus");this.ul=this.el.child("ul.x-menu-list");this.mon(this.ul,{scope:this,click:this.onClick,mouseover:this.onMouseOver,mouseout:this.onMouseOut});if(this.enableScrolling){this.mon(this.el,{scope:this,delegate:".x-menu-scroller",click:this.onScroll,mouseover:this.deactivateActive})}},findTargetItem:function(b){var a=b.getTarget(".x-menu-list-item",this.ul,true);if(a&&a.menuItemId){return this.items.get(a.menuItemId)}},onClick:function(b){var a=this.findTargetItem(b);if(a){if(a.isFormField){this.setActiveItem(a)}else{if(a instanceof Ext.menu.BaseItem){if(a.menu&&this.ignoreParentClicks){a.expandMenu();b.preventDefault()}else{if(a.onClick){a.onClick(b);this.fireEvent("click",this,a,b)}}}}}},setActiveItem:function(a,b){if(a!=this.activeItem){this.deactivateActive();if((this.activeItem=a).isFormField){a.focus()}else{a.activate(b)}}else{if(b){a.expandMenu()}}},deactivateActive:function(){var b=this.activeItem;if(b){if(b.isFormField){if(b.collapse){b.collapse()}}else{b.deactivate()}delete this.activeItem}},tryActivate:function(g,e){var b=this.items;for(var c=g,a=b.length;c>=0&&c=a.scrollHeight){this.onScrollerOut(null,b)}},onScrollerIn:function(d,b){var a=this.ul.dom,c=Ext.fly(b).is(".x-menu-scroller-top");if(c?a.scrollTop>0:a.scrollTop+this.activeMaxc){b=c;a=i-h}else{if(bb&&b>0){this.activeMax=b-this.scrollerHeight*2-this.el.getFrameWidth("tb")-Ext.num(this.el.shadowOffset,0);this.ul.setHeight(this.activeMax);this.createScrollers();this.el.select(".x-menu-scroller").setDisplayed("")}else{this.ul.setHeight(d);this.el.select(".x-menu-scroller").setDisplayed("none")}this.ul.dom.scrollTop=0;return a},createScrollers:function(){if(!this.scroller){this.scroller={pos:0,top:this.el.insertFirst({tag:"div",cls:"x-menu-scroller x-menu-scroller-top",html:" "}),bottom:this.el.createChild({tag:"div",cls:"x-menu-scroller x-menu-scroller-bottom",html:" "})};this.scroller.top.hover(this.onScrollerIn,this.onScrollerOut,this);this.scroller.topRepeater=new Ext.util.ClickRepeater(this.scroller.top,{listeners:{click:this.onScroll.createDelegate(this,[null,this.scroller.top],false)}});this.scroller.bottom.hover(this.onScrollerIn,this.onScrollerOut,this);this.scroller.bottomRepeater=new Ext.util.ClickRepeater(this.scroller.bottom,{listeners:{click:this.onScroll.createDelegate(this,[null,this.scroller.bottom],false)}})}},onLayout:function(){if(this.isVisible()){if(this.enableScrolling){this.constrainScroll(this.el.getTop())}if(this.floating){this.el.sync()}}},focus:function(){if(!this.hidden){this.doFocus.defer(50,this)}},doFocus:function(){if(!this.hidden){this.focusEl.focus()}},hide:function(a){if(!this.isDestroyed){this.deepHide=a;Ext.menu.Menu.superclass.hide.call(this);delete this.deepHide}},onHide:function(){Ext.menu.Menu.superclass.onHide.call(this);this.deactivateActive();if(this.el&&this.floating){this.el.hide()}var a=this.parentMenu;if(this.deepHide===true&&a){if(a.floating){a.hide(true)}else{a.deactivateActive()}}},lookupComponent:function(a){if(Ext.isString(a)){a=(a=="separator"||a=="-")?new Ext.menu.Separator():new Ext.menu.TextItem(a);this.applyDefaults(a)}else{if(Ext.isObject(a)){a=this.getMenuItem(a)}else{if(a.tagName||a.el){a=new Ext.BoxComponent({el:a})}}}return a},applyDefaults:function(b){if(!Ext.isString(b)){b=Ext.menu.Menu.superclass.applyDefaults.call(this,b);var a=this.internalDefaults;if(a){if(b.events){Ext.applyIf(b.initialConfig,a);Ext.apply(b,a)}else{Ext.applyIf(b,a)}}}return b},getMenuItem:function(a){if(!a.isXType){if(!a.xtype&&Ext.isBoolean(a.checked)){return new Ext.menu.CheckItem(a)}return Ext.create(a,this.defaultType)}return a},addSeparator:function(){return this.add(new Ext.menu.Separator())},addElement:function(a){return this.add(new Ext.menu.BaseItem({el:a}))},addItem:function(a){return this.add(a)},addMenuItem:function(a){return this.add(this.getMenuItem(a))},addText:function(a){return this.add(new Ext.menu.TextItem(a))},onDestroy:function(){Ext.EventManager.removeResizeListener(this.hide,this);var a=this.parentMenu;if(a&&a.activeChild==this){delete a.activeChild}delete this.parentMenu;Ext.menu.Menu.superclass.onDestroy.call(this);Ext.menu.MenuMgr.unregister(this);if(this.keyNav){this.keyNav.disable()}var b=this.scroller;if(b){Ext.destroy(b.topRepeater,b.bottomRepeater,b.top,b.bottom)}Ext.destroy(this.el,this.focusEl,this.ul)}});Ext.reg("menu",Ext.menu.Menu);Ext.menu.MenuNav=Ext.extend(Ext.KeyNav,function(){function a(d,c){if(!c.tryActivate(c.items.indexOf(c.activeItem)-1,-1)){c.tryActivate(c.items.length-1,-1)}}function b(d,c){if(!c.tryActivate(c.items.indexOf(c.activeItem)+1,1)){c.tryActivate(0,1)}}return{constructor:function(c){Ext.menu.MenuNav.superclass.constructor.call(this,c.el);this.scope=this.menu=c},doRelay:function(g,d){var c=g.getKey();if(this.menu.activeItem&&this.menu.activeItem.isFormField&&c!=g.TAB){return false}if(!this.menu.activeItem&&g.isNavKeyPress()&&c!=g.SPACE&&c!=g.RETURN){this.menu.tryActivate(0,1);return false}return d.call(this.scope||this,g,this.menu)},tab:function(d,c){d.stopEvent();if(d.shiftKey){a(d,c)}else{b(d,c)}},up:a,down:b,right:function(d,c){if(c.activeItem){c.activeItem.expandMenu(true)}},left:function(d,c){c.hide();if(c.parentMenu&&c.parentMenu.activeItem){c.parentMenu.activeItem.activate()}},enter:function(d,c){if(c.activeItem){d.stopPropagation();c.activeItem.onClick(d);c.fireEvent("click",this,c.activeItem);return true}}}}());Ext.menu.MenuMgr=function(){var g,d,c={},a=false,l=new Date();function n(){g={};d=new Ext.util.MixedCollection();Ext.getDoc().addKeyListener(27,function(){if(d.length>0){i()}})}function i(){if(d&&d.length>0){var o=d.clone();o.each(function(p){p.hide()});return true}return false}function e(o){d.remove(o);if(d.length<1){Ext.getDoc().un("mousedown",m);a=false}}function k(o){var p=d.last();l=new Date();d.add(o);if(!a){Ext.getDoc().on("mousedown",m);a=true}if(o.parentMenu){o.getEl().setZIndex(parseInt(o.parentMenu.getEl().getStyle("z-index"),10)+3);o.parentMenu.activeChild=o}else{if(p&&!p.isDestroyed&&p.isVisible()){o.getEl().setZIndex(parseInt(p.getEl().getStyle("z-index"),10)+3)}}}function b(o){if(o.activeChild){o.activeChild.hide()}if(o.autoHideTimer){clearTimeout(o.autoHideTimer);delete o.autoHideTimer}}function h(o){var p=o.parentMenu;if(!p&&!o.allowOtherMenus){i()}else{if(p&&p.activeChild){p.activeChild.hide()}}}function m(o){if(l.getElapsed()>50&&d.length>0&&!o.getTarget(".x-menu")){i()}}return{hideAll:function(){return i()},register:function(o){if(!g){n()}g[o.id]=o;o.on({beforehide:b,hide:e,beforeshow:h,show:k})},get:function(o){if(typeof o=="string"){if(!g){return null}return g[o]}else{if(o.events){return o}else{if(typeof o.length=="number"){return new Ext.menu.Menu({items:o})}else{return Ext.create(o,"menu")}}}},unregister:function(o){delete g[o.id];o.un("beforehide",b);o.un("hide",e);o.un("beforeshow",h);o.un("show",k)},registerCheckable:function(o){var p=o.group;if(p){if(!c[p]){c[p]=[]}c[p].push(o)}},unregisterCheckable:function(o){var p=o.group;if(p){c[p].remove(o)}},onCheckChange:function(q,r){if(q.group&&r){var t=c[q.group],p=0,o=t.length,s;for(;p',' target="{hrefTarget}"',"",">",'{altText}','{text}',"")}var c=this.getTemplateArgs();this.el=b?this.itemTpl.insertBefore(b,c,true):this.itemTpl.append(d,c,true);this.iconEl=this.el.child("img.x-menu-item-icon");this.textEl=this.el.child(".x-menu-item-text");if(!this.href){this.mon(this.el,"click",Ext.emptyFn,null,{preventDefault:true})}Ext.menu.Item.superclass.onRender.call(this,d,b)},getTemplateArgs:function(){return{id:this.id,cls:this.itemCls+(this.menu?" x-menu-item-arrow":"")+(this.cls?" "+this.cls:""),href:this.href||"#",hrefTarget:this.hrefTarget,icon:this.icon||Ext.BLANK_IMAGE_URL,iconCls:this.iconCls||"",text:this.itemText||this.text||" ",altText:this.altText||""}},setText:function(a){this.text=a||" ";if(this.rendered){this.textEl.update(this.text);this.parentMenu.layout.doAutoSize()}},setIconClass:function(a){var b=this.iconCls;this.iconCls=a;if(this.rendered){this.iconEl.replaceClass(b,this.iconCls)}},beforeDestroy:function(){if(this.menu){delete this.menu.ownerCt;this.menu.destroy()}Ext.menu.Item.superclass.beforeDestroy.call(this)},handleClick:function(a){if(!this.href){a.stopEvent()}Ext.menu.Item.superclass.handleClick.apply(this,arguments)},activate:function(a){if(Ext.menu.Item.superclass.activate.apply(this,arguments)){this.focus();if(a){this.expandMenu()}}return true},shouldDeactivate:function(a){if(Ext.menu.Item.superclass.shouldDeactivate.call(this,a)){if(this.menu&&this.menu.isVisible()){return !this.menu.getEl().getRegion().contains(a.getPoint())}return true}return false},deactivate:function(){Ext.menu.Item.superclass.deactivate.apply(this,arguments);this.hideMenu()},expandMenu:function(a){if(!this.disabled&&this.menu){clearTimeout(this.hideTimer);delete this.hideTimer;if(!this.menu.isVisible()&&!this.showTimer){this.showTimer=this.deferExpand.defer(this.showDelay,this,[a])}else{if(this.menu.isVisible()&&a){this.menu.tryActivate(0,1)}}}},deferExpand:function(a){delete this.showTimer;this.menu.show(this.container,this.parentMenu.subMenuAlign||"tl-tr?",this.parentMenu);if(a){this.menu.tryActivate(0,1)}},hideMenu:function(){clearTimeout(this.showTimer);delete this.showTimer;if(!this.hideTimer&&this.menu&&this.menu.isVisible()){this.hideTimer=this.deferHide.defer(this.hideDelay,this)}},deferHide:function(){delete this.hideTimer;if(this.menu.over){this.parentMenu.setActiveItem(this,false)}else{this.menu.hide()}}});Ext.reg("menuitem",Ext.menu.Item);Ext.menu.CheckItem=Ext.extend(Ext.menu.Item,{itemCls:"x-menu-item x-menu-check-item",groupClass:"x-menu-group-item",checked:false,ctype:"Ext.menu.CheckItem",initComponent:function(){Ext.menu.CheckItem.superclass.initComponent.call(this);this.addEvents("beforecheckchange","checkchange");if(this.checkHandler){this.on("checkchange",this.checkHandler,this.scope)}Ext.menu.MenuMgr.registerCheckable(this)},onRender:function(a){Ext.menu.CheckItem.superclass.onRender.apply(this,arguments);if(this.group){this.el.addClass(this.groupClass)}if(this.checked){this.checked=false;this.setChecked(true,true)}},destroy:function(){Ext.menu.MenuMgr.unregisterCheckable(this);Ext.menu.CheckItem.superclass.destroy.apply(this,arguments)},setChecked:function(b,a){var c=a===true;if(this.checked!=b&&(c||this.fireEvent("beforecheckchange",this,b)!==false)){Ext.menu.MenuMgr.onCheckChange(this,b);if(this.container){this.container[b?"addClass":"removeClass"]("x-menu-item-checked")}this.checked=b;if(!c){this.fireEvent("checkchange",this,b)}}},handleClick:function(a){if(!this.disabled&&!(this.checked&&this.group)){this.setChecked(!this.checked)}Ext.menu.CheckItem.superclass.handleClick.apply(this,arguments)}});Ext.reg("menucheckitem",Ext.menu.CheckItem);Ext.menu.DateMenu=Ext.extend(Ext.menu.Menu,{enableScrolling:false,hideOnClick:true,pickerId:null,cls:"x-date-menu",initComponent:function(){this.on("beforeshow",this.onBeforeShow,this);if(this.strict=(Ext.isIE7&&Ext.isStrict)){this.on("show",this.onShow,this,{single:true,delay:20})}Ext.apply(this,{plain:true,showSeparator:false,items:this.picker=new Ext.DatePicker(Ext.applyIf({internalRender:this.strict||!Ext.isIE,ctCls:"x-menu-date-item",id:this.pickerId},this.initialConfig))});this.picker.purgeListeners();Ext.menu.DateMenu.superclass.initComponent.call(this);this.relayEvents(this.picker,["select"]);this.on("show",this.picker.focus,this.picker);this.on("select",this.menuHide,this);if(this.handler){this.on("select",this.handler,this.scope||this)}},menuHide:function(){if(this.hideOnClick){this.hide(true)}},onBeforeShow:function(){if(this.picker){this.picker.hideMonthPicker(true)}},onShow:function(){var a=this.picker.getEl();a.setWidth(a.getWidth())}});Ext.reg("datemenu",Ext.menu.DateMenu);Ext.menu.ColorMenu=Ext.extend(Ext.menu.Menu,{enableScrolling:false,hideOnClick:true,cls:"x-color-menu",paletteId:null,initComponent:function(){Ext.apply(this,{plain:true,showSeparator:false,items:this.palette=new Ext.ColorPalette(Ext.applyIf({id:this.paletteId},this.initialConfig))});this.palette.purgeListeners();Ext.menu.ColorMenu.superclass.initComponent.call(this);this.relayEvents(this.palette,["select"]);this.on("select",this.menuHide,this);if(this.handler){this.on("select",this.handler,this.scope||this)}},menuHide:function(){if(this.hideOnClick){this.hide(true)}}});Ext.reg("colormenu",Ext.menu.ColorMenu);Ext.form.Field=Ext.extend(Ext.BoxComponent,{invalidClass:"x-form-invalid",invalidText:"The value in this field is invalid",focusClass:"x-form-focus",validationEvent:"keyup",validateOnBlur:true,validationDelay:250,defaultAutoCreate:{tag:"input",type:"text",size:"20",autocomplete:"off"},fieldClass:"x-form-field",msgTarget:"qtip",msgFx:"normal",readOnly:false,disabled:false,submitValue:true,isFormField:true,msgDisplay:"",hasFocus:false,initComponent:function(){Ext.form.Field.superclass.initComponent.call(this);this.addEvents("focus","blur","specialkey","change","invalid","valid")},getName:function(){return this.rendered&&this.el.dom.name?this.el.dom.name:this.name||this.id||""},onRender:function(c,a){if(!this.el){var b=this.getAutoCreate();if(!b.name){b.name=this.name||this.id}if(this.inputType){b.type=this.inputType}this.autoEl=b}Ext.form.Field.superclass.onRender.call(this,c,a);if(this.submitValue===false){this.el.dom.removeAttribute("name")}var d=this.el.dom.type;if(d){if(d=="password"){d="text"}this.el.addClass("x-form-"+d)}if(this.readOnly){this.setReadOnly(true)}if(this.tabIndex!==undefined){this.el.dom.setAttribute("tabIndex",this.tabIndex)}this.el.addClass([this.fieldClass,this.cls])},getItemCt:function(){return this.itemCt},initValue:function(){if(this.value!==undefined){this.setValue(this.value)}else{if(!Ext.isEmpty(this.el.dom.value)&&this.el.dom.value!=this.emptyText){this.setValue(this.el.dom.value)}}this.originalValue=this.getValue()},isDirty:function(){if(this.disabled||!this.rendered){return false}return String(this.getValue())!==String(this.originalValue)},setReadOnly:function(a){if(this.rendered){this.el.dom.readOnly=a}this.readOnly=a},afterRender:function(){Ext.form.Field.superclass.afterRender.call(this);this.initEvents();this.initValue()},fireKey:function(a){if(a.isSpecialKey()){this.fireEvent("specialkey",this,a)}},reset:function(){this.setValue(this.originalValue);this.clearInvalid()},initEvents:function(){this.mon(this.el,Ext.EventManager.getKeyEvent(),this.fireKey,this);this.mon(this.el,"focus",this.onFocus,this);this.mon(this.el,"blur",this.onBlur,this,this.inEditor?{buffer:10}:null)},preFocus:Ext.emptyFn,onFocus:function(){this.preFocus();if(this.focusClass){this.el.addClass(this.focusClass)}if(!this.hasFocus){this.hasFocus=true;this.startValue=this.getValue();this.fireEvent("focus",this)}},beforeBlur:Ext.emptyFn,onBlur:function(){this.beforeBlur();if(this.focusClass){this.el.removeClass(this.focusClass)}this.hasFocus=false;if(this.validationEvent!==false&&(this.validateOnBlur||this.validationEvent=="blur")){this.validate()}var a=this.getValue();if(String(a)!==String(this.startValue)){this.fireEvent("change",this,a,this.startValue)}this.fireEvent("blur",this);this.postBlur()},postBlur:Ext.emptyFn,isValid:function(a){if(this.disabled){return true}var c=this.preventMark;this.preventMark=a===true;var b=this.validateValue(this.processValue(this.getRawValue()));this.preventMark=c;return b},validate:function(){if(this.disabled||this.validateValue(this.processValue(this.getRawValue()))){this.clearInvalid();return true}return false},processValue:function(a){return a},validateValue:function(b){var a=this.getErrors(b)[0];if(a==undefined){return true}else{this.markInvalid(a);return false}},getErrors:function(){return[]},getActiveError:function(){return this.activeError||""},markInvalid:function(c){if(this.rendered&&!this.preventMark){c=c||this.invalidText;var a=this.getMessageHandler();if(a){a.mark(this,c)}else{if(this.msgTarget){this.el.addClass(this.invalidClass);var b=Ext.getDom(this.msgTarget);if(b){b.innerHTML=c;b.style.display=this.msgDisplay}}}}this.setActiveError(c)},clearInvalid:function(){if(this.rendered&&!this.preventMark){this.el.removeClass(this.invalidClass);var a=this.getMessageHandler();if(a){a.clear(this)}else{if(this.msgTarget){this.el.removeClass(this.invalidClass);var b=Ext.getDom(this.msgTarget);if(b){b.innerHTML="";b.style.display="none"}}}}this.unsetActiveError()},setActiveError:function(b,a){this.activeError=b;if(a!==true){this.fireEvent("invalid",this,b)}},unsetActiveError:function(a){delete this.activeError;if(a!==true){this.fireEvent("valid",this)}},getMessageHandler:function(){return Ext.form.MessageTargets[this.msgTarget]},getErrorCt:function(){return this.el.findParent(".x-form-element",5,true)||this.el.findParent(".x-form-field-wrap",5,true)},alignErrorEl:function(){this.errorEl.setWidth(this.getErrorCt().getWidth(true)-20)},alignErrorIcon:function(){this.errorIcon.alignTo(this.el,"tl-tr",[2,0])},getRawValue:function(){var a=this.rendered?this.el.getValue():Ext.value(this.value,"");if(a===this.emptyText){a=""}return a},getValue:function(){if(!this.rendered){return this.value}var a=this.el.getValue();if(a===this.emptyText||a===undefined){a=""}return a},setRawValue:function(a){return this.rendered?(this.el.dom.value=(Ext.isEmpty(a)?"":a)):""},setValue:function(a){this.value=a;if(this.rendered){this.el.dom.value=(Ext.isEmpty(a)?"":a);this.validate()}return this},append:function(a){this.setValue([this.getValue(),a].join(""))}});Ext.form.MessageTargets={qtip:{mark:function(a,b){a.el.addClass(a.invalidClass);a.el.dom.qtip=b;a.el.dom.qclass="x-form-invalid-tip";if(Ext.QuickTips){Ext.QuickTips.enable()}},clear:function(a){a.el.removeClass(a.invalidClass);a.el.dom.qtip=""}},title:{mark:function(a,b){a.el.addClass(a.invalidClass);a.el.dom.title=b},clear:function(a){a.el.dom.title=""}},under:{mark:function(b,c){b.el.addClass(b.invalidClass);if(!b.errorEl){var a=b.getErrorCt();if(!a){b.el.dom.title=c;return}b.errorEl=a.createChild({cls:"x-form-invalid-msg"});b.on("resize",b.alignErrorEl,b);b.on("destroy",function(){Ext.destroy(this.errorEl)},b)}b.alignErrorEl();b.errorEl.update(c);Ext.form.Field.msgFx[b.msgFx].show(b.errorEl,b)},clear:function(a){a.el.removeClass(a.invalidClass);if(a.errorEl){Ext.form.Field.msgFx[a.msgFx].hide(a.errorEl,a)}else{a.el.dom.title=""}}},side:{mark:function(b,c){b.el.addClass(b.invalidClass);if(!b.errorIcon){var a=b.getErrorCt();if(!a){b.el.dom.title=c;return}b.errorIcon=a.createChild({cls:"x-form-invalid-icon"});if(b.ownerCt){b.ownerCt.on("afterlayout",b.alignErrorIcon,b);b.ownerCt.on("expand",b.alignErrorIcon,b)}b.on("resize",b.alignErrorIcon,b);b.on("destroy",function(){Ext.destroy(this.errorIcon)},b)}b.alignErrorIcon();b.errorIcon.dom.qtip=c;b.errorIcon.dom.qclass="x-form-invalid-tip";b.errorIcon.show()},clear:function(a){a.el.removeClass(a.invalidClass);if(a.errorIcon){a.errorIcon.dom.qtip="";a.errorIcon.hide()}else{a.el.dom.title=""}}}};Ext.form.Field.msgFx={normal:{show:function(a,b){a.setDisplayed("block")},hide:function(a,b){a.setDisplayed(false).update("")}},slide:{show:function(a,b){a.slideIn("t",{stopFx:true})},hide:function(a,b){a.slideOut("t",{stopFx:true,useDisplay:true})}},slideRight:{show:function(a,b){a.fixDisplay();a.alignTo(b.el,"tl-tr");a.slideIn("l",{stopFx:true})},hide:function(a,b){a.slideOut("l",{stopFx:true,useDisplay:true})}}};Ext.reg("field",Ext.form.Field);Ext.form.TextField=Ext.extend(Ext.form.Field,{grow:false,growMin:30,growMax:800,vtype:null,maskRe:null,disableKeyFilter:false,allowBlank:true,minLength:0,maxLength:Number.MAX_VALUE,minLengthText:"The minimum length for this field is {0}",maxLengthText:"The maximum length for this field is {0}",selectOnFocus:false,blankText:"This field is required",validator:null,regex:null,regexText:"",emptyText:null,emptyClass:"x-form-empty-field",initComponent:function(){Ext.form.TextField.superclass.initComponent.call(this);this.addEvents("autosize","keydown","keyup","keypress")},initEvents:function(){Ext.form.TextField.superclass.initEvents.call(this);if(this.validationEvent=="keyup"){this.validationTask=new Ext.util.DelayedTask(this.validate,this);this.mon(this.el,"keyup",this.filterValidation,this)}else{if(this.validationEvent!==false&&this.validationEvent!="blur"){this.mon(this.el,this.validationEvent,this.validate,this,{buffer:this.validationDelay})}}if(this.selectOnFocus||this.emptyText){this.mon(this.el,"mousedown",this.onMouseDown,this);if(this.emptyText){this.applyEmptyText()}}if(this.maskRe||(this.vtype&&this.disableKeyFilter!==true&&(this.maskRe=Ext.form.VTypes[this.vtype+"Mask"]))){this.mon(this.el,"keypress",this.filterKeys,this)}if(this.grow){this.mon(this.el,"keyup",this.onKeyUpBuffered,this,{buffer:50});this.mon(this.el,"click",this.autoSize,this)}if(this.enableKeyEvents){this.mon(this.el,{scope:this,keyup:this.onKeyUp,keydown:this.onKeyDown,keypress:this.onKeyPress})}},onMouseDown:function(a){if(!this.hasFocus){this.mon(this.el,"mouseup",Ext.emptyFn,this,{single:true,preventDefault:true})}},processValue:function(a){if(this.stripCharsRe){var b=a.replace(this.stripCharsRe,"");if(b!==a){this.setRawValue(b);return b}}return a},filterValidation:function(a){if(!a.isNavKeyPress()){this.validationTask.delay(this.validationDelay)}},onDisable:function(){Ext.form.TextField.superclass.onDisable.call(this);if(Ext.isIE){this.el.dom.unselectable="on"}},onEnable:function(){Ext.form.TextField.superclass.onEnable.call(this);if(Ext.isIE){this.el.dom.unselectable=""}},onKeyUpBuffered:function(a){if(this.doAutoSize(a)){this.autoSize()}},doAutoSize:function(a){return !a.isNavKeyPress()},onKeyUp:function(a){this.fireEvent("keyup",this,a)},onKeyDown:function(a){this.fireEvent("keydown",this,a)},onKeyPress:function(a){this.fireEvent("keypress",this,a)},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText()},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1&&!this.hasFocus){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass)}},preFocus:function(){var a=this.el,b;if(this.emptyText){if(a.dom.value==this.emptyText){this.setRawValue("");b=true}a.removeClass(this.emptyClass)}if(this.selectOnFocus||b){a.dom.select()}},postBlur:function(){this.applyEmptyText()},filterKeys:function(b){if(b.ctrlKey){return}var a=b.getKey();if(Ext.isGecko&&(b.isNavKeyPress()||a==b.BACKSPACE||(a==b.DELETE&&b.button==-1))){return}var c=String.fromCharCode(b.getCharCode());if(!Ext.isGecko&&b.isSpecialKey()&&!c){return}if(!this.maskRe.test(c)){b.stopEvent()}},setValue:function(a){if(this.emptyText&&this.el&&!Ext.isEmpty(a)){this.el.removeClass(this.emptyClass)}Ext.form.TextField.superclass.setValue.apply(this,arguments);this.applyEmptyText();this.autoSize();return this},getErrors:function(a){var d=Ext.form.TextField.superclass.getErrors.apply(this,arguments);a=Ext.isDefined(a)?a:this.processValue(this.getRawValue());if(Ext.isFunction(this.validator)){var c=this.validator(a);if(c!==true){d.push(c)}}if(a.length<1||a===this.emptyText){if(this.allowBlank){return d}else{d.push(this.blankText)}}if(!this.allowBlank&&(a.length<1||a===this.emptyText)){d.push(this.blankText)}if(a.lengththis.maxLength){d.push(String.format(this.maxLengthText,this.maxLength))}if(this.vtype){var b=Ext.form.VTypes;if(!b[this.vtype](a,this)){d.push(this.vtypeText||b[this.vtype+"Text"])}}if(this.regex&&!this.regex.test(a)){d.push(this.regexText)}return d},selectText:function(h,a){var c=this.getRawValue();var e=false;if(c.length>0){h=h===undefined?0:h;a=a===undefined?c.length:a;var g=this.el.dom;if(g.setSelectionRange){g.setSelectionRange(h,a)}else{if(g.createTextRange){var b=g.createTextRange();b.moveStart("character",h);b.moveEnd("character",a-c.length);b.select()}}e=Ext.isGecko||Ext.isOpera}else{e=true}if(e){this.focus()}},autoSize:function(){if(!this.grow||!this.rendered){return}if(!this.metrics){this.metrics=Ext.util.TextMetrics.createInstance(this.el)}var c=this.el;var b=c.dom.value;var e=document.createElement("div");e.appendChild(document.createTextNode(b));b=e.innerHTML;Ext.removeNode(e);e=null;b+=" ";var a=Math.min(this.growMax,Math.max(this.metrics.getWidth(b)+10,this.growMin));this.el.setWidth(a);this.fireEvent("autosize",this,a)},onDestroy:function(){if(this.validationTask){this.validationTask.cancel();this.validationTask=null}Ext.form.TextField.superclass.onDestroy.call(this)}});Ext.reg("textfield",Ext.form.TextField);Ext.form.TriggerField=Ext.extend(Ext.form.TextField,{defaultAutoCreate:{tag:"input",type:"text",size:"16",autocomplete:"off"},hideTrigger:false,editable:true,readOnly:false,wrapFocusClass:"x-trigger-wrap-focus",autoSize:Ext.emptyFn,monitorTab:true,deferHeight:true,mimicing:false,actionMode:"wrap",defaultTriggerWidth:17,onResize:function(a,c){Ext.form.TriggerField.superclass.onResize.call(this,a,c);var b=this.getTriggerWidth();if(Ext.isNumber(a)){this.el.setWidth(a-b)}this.wrap.setWidth(this.el.getWidth()+b)},getTriggerWidth:function(){var a=this.trigger.getWidth();if(!this.hideTrigger&&!this.readOnly&&a===0){a=this.defaultTriggerWidth}return a},alignErrorIcon:function(){if(this.wrap){this.errorIcon.alignTo(this.wrap,"tl-tr",[2,0])}},onRender:function(b,a){this.doc=Ext.isIE?Ext.getBody():Ext.getDoc();Ext.form.TriggerField.superclass.onRender.call(this,b,a);this.wrap=this.el.wrap({cls:"x-form-field-wrap x-form-field-trigger-wrap"});this.trigger=this.wrap.createChild(this.triggerConfig||{tag:"img",src:Ext.BLANK_IMAGE_URL,alt:"",cls:"x-form-trigger "+this.triggerClass});this.initTrigger();if(!this.width){this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth())}this.resizeEl=this.positionEl=this.wrap},getWidth:function(){return(this.el.getWidth()+this.trigger.getWidth())},updateEditState:function(){if(this.rendered){if(this.readOnly){this.el.dom.readOnly=true;this.el.addClass("x-trigger-noedit");this.mun(this.el,"click",this.onTriggerClick,this);this.trigger.setDisplayed(false)}else{if(!this.editable){this.el.dom.readOnly=true;this.el.addClass("x-trigger-noedit");this.mon(this.el,"click",this.onTriggerClick,this)}else{this.el.dom.readOnly=false;this.el.removeClass("x-trigger-noedit");this.mun(this.el,"click",this.onTriggerClick,this)}this.trigger.setDisplayed(!this.hideTrigger)}this.onResize(this.width||this.wrap.getWidth())}},setHideTrigger:function(a){if(a!=this.hideTrigger){this.hideTrigger=a;this.updateEditState()}},setEditable:function(a){if(a!=this.editable){this.editable=a;this.updateEditState()}},setReadOnly:function(a){if(a!=this.readOnly){this.readOnly=a;this.updateEditState()}},afterRender:function(){Ext.form.TriggerField.superclass.afterRender.call(this);this.updateEditState()},initTrigger:function(){this.mon(this.trigger,"click",this.onTriggerClick,this,{preventDefault:true});this.trigger.addClassOnOver("x-form-trigger-over");this.trigger.addClassOnClick("x-form-trigger-click")},onDestroy:function(){Ext.destroy(this.trigger,this.wrap);if(this.mimicing){this.doc.un("mousedown",this.mimicBlur,this)}delete this.doc;Ext.form.TriggerField.superclass.onDestroy.call(this)},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass(this.wrapFocusClass);this.mimicing=true;this.doc.on("mousedown",this.mimicBlur,this,{delay:10});if(this.monitorTab){this.on("specialkey",this.checkTab,this)}}},checkTab:function(a,b){if(b.getKey()==b.TAB){this.triggerBlur()}},onBlur:Ext.emptyFn,mimicBlur:function(a){if(!this.isDestroyed&&!this.wrap.contains(a.target)&&this.validateBlur(a)){this.triggerBlur()}},triggerBlur:function(){this.mimicing=false;this.doc.un("mousedown",this.mimicBlur,this);if(this.monitorTab&&this.el){this.un("specialkey",this.checkTab,this)}Ext.form.TriggerField.superclass.onBlur.call(this);if(this.wrap){this.wrap.removeClass(this.wrapFocusClass)}},beforeBlur:Ext.emptyFn,validateBlur:function(a){return true},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:"span",cls:"x-form-twin-triggers",cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,alt:"",cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,alt:"",cls:"x-form-trigger "+this.trigger2Class}]}},getTrigger:function(a){return this.triggers[a]},afterRender:function(){Ext.form.TwinTriggerField.superclass.afterRender.call(this);var c=this.triggers,b=0,a=c.length;for(;b")}}d.innerHTML=a;b=Math.min(this.growMax,Math.max(d.offsetHeight,this.growMin));if(b!=this.lastHeight){this.lastHeight=b;this.el.setHeight(b);this.fireEvent("autosize",this,b)}}});Ext.reg("textarea",Ext.form.TextArea);Ext.form.NumberField=Ext.extend(Ext.form.TextField,{fieldClass:"x-form-field x-form-num-field",allowDecimals:true,decimalSeparator:".",decimalPrecision:2,allowNegative:true,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.MAX_VALUE,minText:"The minimum value for this field is {0}",maxText:"The maximum value for this field is {0}",nanText:"{0} is not a valid number",baseChars:"0123456789",autoStripChars:false,initEvents:function(){var a=this.baseChars+"";if(this.allowDecimals){a+=this.decimalSeparator}if(this.allowNegative){a+="-"}a=Ext.escapeRe(a);this.maskRe=new RegExp("["+a+"]");if(this.autoStripChars){this.stripCharsRe=new RegExp("[^"+a+"]","gi")}Ext.form.NumberField.superclass.initEvents.call(this)},getErrors:function(b){var c=Ext.form.NumberField.superclass.getErrors.apply(this,arguments);b=Ext.isDefined(b)?b:this.processValue(this.getRawValue());if(b.length<1){return c}b=String(b).replace(this.decimalSeparator,".");if(isNaN(b)){c.push(String.format(this.nanText,b))}var a=this.parseValue(b);if(athis.maxValue){c.push(String.format(this.maxText,this.maxValue))}return c},getValue:function(){return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this)))},setValue:function(a){a=this.fixPrecision(a);a=Ext.isNumber(a)?a:parseFloat(String(a).replace(this.decimalSeparator,"."));a=isNaN(a)?"":String(a).replace(".",this.decimalSeparator);return Ext.form.NumberField.superclass.setValue.call(this,a)},setMinValue:function(a){this.minValue=Ext.num(a,Number.NEGATIVE_INFINITY)},setMaxValue:function(a){this.maxValue=Ext.num(a,Number.MAX_VALUE)},parseValue:function(a){a=parseFloat(String(a).replace(this.decimalSeparator,"."));return isNaN(a)?"":a},fixPrecision:function(b){var a=isNaN(b);if(!this.allowDecimals||this.decimalPrecision==-1||a||!b){return a?"":b}return parseFloat(parseFloat(b).toFixed(this.decimalPrecision))},beforeBlur:function(){var a=this.parseValue(this.getRawValue());if(!Ext.isEmpty(a)){this.setValue(a)}}});Ext.reg("numberfield",Ext.form.NumberField);Ext.form.DateField=Ext.extend(Ext.form.TriggerField,{format:"m/d/Y",altFormats:"m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d|n-j|n/j",disabledDaysText:"Disabled",disabledDatesText:"Disabled",minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:"x-form-date-trigger",showToday:true,startDay:0,defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"},initTime:"12",initTimeFormat:"H",safeParse:function(b,c){if(/[gGhH]/.test(c.replace(/(\\.)/g,""))){return Date.parseDate(b,c)}else{var a=Date.parseDate(b+" "+this.initTime,c+" "+this.initTimeFormat);if(a){return a.clearTime()}}},initComponent:function(){Ext.form.DateField.superclass.initComponent.call(this);this.addEvents("select");if(Ext.isString(this.minValue)){this.minValue=this.parseDate(this.minValue)}if(Ext.isString(this.maxValue)){this.maxValue=this.parseDate(this.maxValue)}this.disabledDatesRE=null;this.initDisabledDays()},initEvents:function(){Ext.form.DateField.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{down:function(a){this.onTriggerClick()},scope:this,forceKeyDown:true})},initDisabledDays:function(){if(this.disabledDates){var b=this.disabledDates,a=b.length-1,c="(?:";Ext.each(b,function(g,e){c+=Ext.isDate(g)?"^"+Ext.escapeRe(g.dateFormat(this.format))+"$":b[e];if(e!=a){c+="|"}},this);this.disabledDatesRE=new RegExp(c+")")}},setDisabledDates:function(a){this.disabledDates=a;this.initDisabledDays();if(this.menu){this.menu.picker.setDisabledDates(this.disabledDatesRE)}},setDisabledDays:function(a){this.disabledDays=a;if(this.menu){this.menu.picker.setDisabledDays(a)}},setMinValue:function(a){this.minValue=(Ext.isString(a)?this.parseDate(a):a);if(this.menu){this.menu.picker.setMinDate(this.minValue)}},setMaxValue:function(a){this.maxValue=(Ext.isString(a)?this.parseDate(a):a);if(this.menu){this.menu.picker.setMaxDate(this.maxValue)}},getErrors:function(e){var h=Ext.form.DateField.superclass.getErrors.apply(this,arguments);e=this.formatDate(e||this.processValue(this.getRawValue()));if(e.length<1){return h}var c=e;e=this.parseDate(e);if(!e){h.push(String.format(this.invalidText,c,this.format));return h}var g=e.getTime();if(this.minValue&&gthis.maxValue.clearTime().getTime()){h.push(String.format(this.maxText,this.formatDate(this.maxValue)))}if(this.disabledDays){var a=e.getDay();for(var b=0;b
    {'+this.displayField+"}
    "}this.view=new Ext.DataView({applyTo:this.innerList,tpl:this.tpl,singleSelect:true,selectedClass:this.selectedClass,itemSelector:this.itemSelector||"."+a+"-item",emptyText:this.listEmptyText,deferEmptyText:false});this.mon(this.view,{containerclick:this.onViewClick,click:this.onViewClick,scope:this});this.bindStore(this.store,true);if(this.resizable){this.resizer=new Ext.Resizable(this.list,{pinned:true,handles:"se"});this.mon(this.resizer,"resize",function(g,d,e){this.maxHeight=e-this.handleHeight-this.list.getFrameWidth("tb")-this.assetHeight;this.listWidth=d;this.innerList.setWidth(d-this.list.getFrameWidth("lr"));this.restrictHeight()},this);this[this.pageSize?"footer":"innerList"].setStyle("margin-bottom",this.handleHeight+"px")}}},getListParent:function(){return document.body},getStore:function(){return this.store},bindStore:function(a,b){if(this.store&&!b){if(this.store!==a&&this.store.autoDestroy){this.store.destroy()}else{this.store.un("beforeload",this.onBeforeLoad,this);this.store.un("load",this.onLoad,this);this.store.un("exception",this.collapse,this)}if(!a){this.store=null;if(this.view){this.view.bindStore(null)}if(this.pageTb){this.pageTb.bindStore(null)}}}if(a){if(!b){this.lastQuery=null;if(this.pageTb){this.pageTb.bindStore(a)}}this.store=Ext.StoreMgr.lookup(a);this.store.on({scope:this,beforeload:this.onBeforeLoad,load:this.onLoad,exception:this.collapse});if(this.view){this.view.bindStore(a)}}},reset:function(){if(this.clearFilterOnReset&&this.mode=="local"){this.store.clearFilter()}Ext.form.ComboBox.superclass.reset.call(this)},initEvents:function(){Ext.form.ComboBox.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{up:function(a){this.inKeyMode=true;this.selectPrev()},down:function(a){if(!this.isExpanded()){this.onTriggerClick()}else{this.inKeyMode=true;this.selectNext()}},enter:function(a){this.onViewClick()},esc:function(a){this.collapse()},tab:function(a){if(this.forceSelection===true){this.collapse()}else{this.onViewClick(false)}return true},scope:this,doRelay:function(c,b,a){if(a=="down"||this.scope.isExpanded()){var d=Ext.KeyNav.prototype.doRelay.apply(this,arguments);if(!Ext.isIE&&Ext.EventManager.useKeydown){this.scope.fireKey(c)}return d}return true},forceKeyDown:true,defaultEventAction:"stopEvent"});this.queryDelay=Math.max(this.queryDelay||10,this.mode=="local"?10:250);this.dqTask=new Ext.util.DelayedTask(this.initQuery,this);if(this.typeAhead){this.taTask=new Ext.util.DelayedTask(this.onTypeAhead,this)}if(!this.enableKeyEvents){this.mon(this.el,"keyup",this.onKeyUp,this)}},onDestroy:function(){if(this.dqTask){this.dqTask.cancel();this.dqTask=null}this.bindStore(null);Ext.destroy(this.resizer,this.view,this.pageTb,this.list);Ext.destroyMembers(this,"hiddenField");Ext.form.ComboBox.superclass.onDestroy.call(this)},fireKey:function(a){if(!this.isExpanded()){Ext.form.ComboBox.superclass.fireKey.call(this,a)}},onResize:function(a,b){Ext.form.ComboBox.superclass.onResize.apply(this,arguments);if(!isNaN(a)&&this.isVisible()&&this.list){this.doResize(a)}else{this.bufferSize=a}},doResize:function(a){if(!Ext.isDefined(this.listWidth)){var b=Math.max(a,this.minListWidth);this.list.setWidth(b);this.innerList.setWidth(b-this.list.getFrameWidth("lr"))}},onEnable:function(){Ext.form.ComboBox.superclass.onEnable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=false}},onDisable:function(){Ext.form.ComboBox.superclass.onDisable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=true}},onBeforeLoad:function(){if(!this.hasFocus){return}this.innerList.update(this.loadingText?'
    '+this.loadingText+"
    ":"");this.restrictHeight();this.selectedIndex=-1},onLoad:function(){if(!this.hasFocus){return}if(this.store.getCount()>0||this.listEmptyText){this.expand();this.restrictHeight();if(this.lastQuery==this.allQuery){if(this.editable){this.el.dom.select()}if(this.autoSelect!==false&&!this.selectByValue(this.value,true)){this.select(0,true)}}else{if(this.autoSelect!==false){this.selectNext()}if(this.typeAhead&&this.lastKey!=Ext.EventObject.BACKSPACE&&this.lastKey!=Ext.EventObject.DELETE){this.taTask.delay(this.typeAheadDelay)}}}else{this.collapse()}},onTypeAhead:function(){if(this.store.getCount()>0){var b=this.store.getAt(0);var c=b.data[this.displayField];var a=c.length;var d=this.getRawValue().length;if(d!=a){this.setRawValue(c);this.selectText(d,c.length)}}},assertValue:function(){var b=this.getRawValue(),a;if(this.valueField&&Ext.isDefined(this.value)){a=this.findRecord(this.valueField,this.value)}if(!a||a.get(this.displayField)!=b){a=this.findRecord(this.displayField,b)}if(!a&&this.forceSelection){if(b.length>0&&b!=this.emptyText){this.el.dom.value=Ext.value(this.lastSelectionText,"");this.applyEmptyText()}else{this.clearValue()}}else{if(a&&this.valueField){if(this.value==b){return}b=a.get(this.valueField||this.displayField)}this.setValue(b)}},onSelect:function(a,b){if(this.fireEvent("beforeselect",this,a,b)!==false){this.setValue(a.data[this.valueField||this.displayField]);this.collapse();this.fireEvent("select",this,a,b)}},getName:function(){var a=this.hiddenField;return a&&a.name?a.name:this.hiddenName||Ext.form.ComboBox.superclass.getName.call(this)},getValue:function(){if(this.valueField){return Ext.isDefined(this.value)?this.value:""}else{return Ext.form.ComboBox.superclass.getValue.call(this)}},clearValue:function(){if(this.hiddenField){this.hiddenField.value=""}this.setRawValue("");this.lastSelectionText="";this.applyEmptyText();this.value=""},setValue:function(a){var c=a;if(this.valueField){var b=this.findRecord(this.valueField,a);if(b){c=b.data[this.displayField]}else{if(Ext.isDefined(this.valueNotFoundText)){c=this.valueNotFoundText}}}this.lastSelectionText=c;if(this.hiddenField){this.hiddenField.value=Ext.value(a,"")}Ext.form.ComboBox.superclass.setValue.call(this,c);this.value=a;return this},findRecord:function(c,b){var a;if(this.store.getCount()>0){this.store.each(function(d){if(d.data[c]==b){a=d;return false}})}return a},onViewMove:function(b,a){this.inKeyMode=false},onViewOver:function(d,b){if(this.inKeyMode){return}var c=this.view.findItemFromChild(b);if(c){var a=this.view.indexOf(c);this.select(a,false)}},onViewClick:function(b){var a=this.view.getSelectedIndexes()[0],c=this.store,d=c.getAt(a);if(d){this.onSelect(d,a)}else{this.collapse()}if(b!==false){this.el.focus()}},restrictHeight:function(){this.innerList.dom.style.height="";var b=this.innerList.dom,e=this.list.getFrameWidth("tb")+(this.resizable?this.handleHeight:0)+this.assetHeight,c=Math.max(b.clientHeight,b.offsetHeight,b.scrollHeight),a=this.getPosition()[1]-Ext.getBody().getScroll().top,g=Ext.lib.Dom.getViewHeight()-a-this.getSize().height,d=Math.max(a,g,this.minHeight||0)-this.list.shadowOffset-e-5;c=Math.min(c,d,this.maxHeight);this.innerList.setHeight(c);this.list.beginUpdate();this.list.setHeight(c+e);this.list.alignTo.apply(this.list,[this.el].concat(this.listAlign));this.list.endUpdate()},isExpanded:function(){return this.list&&this.list.isVisible()},selectByValue:function(a,c){if(!Ext.isEmpty(a,true)){var b=this.findRecord(this.valueField||this.displayField,a);if(b){this.select(this.store.indexOf(b),c);return true}}return false},select:function(a,c){this.selectedIndex=a;this.view.select(a);if(c!==false){var b=this.view.getNode(a);if(b){this.innerList.scrollChildIntoView(b,false)}}},selectNext:function(){var a=this.store.getCount();if(a>0){if(this.selectedIndex==-1){this.select(0)}else{if(this.selectedIndex0){if(this.selectedIndex==-1){this.select(0)}else{if(this.selectedIndex!==0){this.select(this.selectedIndex-1)}}}},onKeyUp:function(b){var a=b.getKey();if(this.editable!==false&&this.readOnly!==true&&(a==b.BACKSPACE||!b.isSpecialKey())){this.lastKey=a;this.dqTask.delay(this.queryDelay)}Ext.form.ComboBox.superclass.onKeyUp.call(this,b)},validateBlur:function(){return !this.list||!this.list.isVisible()},initQuery:function(){this.doQuery(this.getRawValue())},beforeBlur:function(){this.assertValue()},postBlur:function(){Ext.form.ComboBox.superclass.postBlur.call(this);this.collapse();this.inKeyMode=false},doQuery:function(c,b){c=Ext.isEmpty(c)?"":c;var a={query:c,forceAll:b,combo:this,cancel:false};if(this.fireEvent("beforequery",a)===false||a.cancel){return false}c=a.query;b=a.forceAll;if(b===true||(c.length>=this.minChars)){if(this.lastQuery!==c){this.lastQuery=c;if(this.mode=="local"){this.selectedIndex=-1;if(b){this.store.clearFilter()}else{this.store.filter(this.displayField,c)}this.onLoad()}else{this.store.baseParams[this.queryParam]=c;this.store.load({params:this.getParams(c)});this.expand()}}else{this.selectedIndex=-1;this.onLoad()}}},getParams:function(a){var b={},c=this.store.paramNames;if(this.pageSize){b[c.start]=0;b[c.limit]=this.pageSize}return b},collapse:function(){if(!this.isExpanded()){return}this.list.hide();Ext.getDoc().un("mousewheel",this.collapseIf,this);Ext.getDoc().un("mousedown",this.collapseIf,this);this.fireEvent("collapse",this)},collapseIf:function(a){if(!this.isDestroyed&&!a.within(this.wrap)&&!a.within(this.list)){this.collapse()}},expand:function(){if(this.isExpanded()||!this.hasFocus){return}if(this.title||this.pageSize){this.assetHeight=0;if(this.title){this.assetHeight+=this.header.getHeight()}if(this.pageSize){this.assetHeight+=this.footer.getHeight()}}if(this.bufferSize){this.doResize(this.bufferSize);delete this.bufferSize}this.list.alignTo.apply(this.list,[this.el].concat(this.listAlign));this.list.setZIndex(this.getZIndex());this.list.show();if(Ext.isGecko2){this.innerList.setOverflow("auto")}this.mon(Ext.getDoc(),{scope:this,mousewheel:this.collapseIf,mousedown:this.collapseIf});this.fireEvent("expand",this)},onTriggerClick:function(){if(this.readOnly||this.disabled){return}if(this.isExpanded()){this.collapse();this.el.focus()}else{this.onFocus({});if(this.triggerAction=="all"){this.doQuery(this.allQuery,true)}else{this.doQuery(this.getRawValue())}this.el.focus()}}});Ext.reg("combo",Ext.form.ComboBox);Ext.form.Checkbox=Ext.extend(Ext.form.Field,{focusClass:undefined,fieldClass:"x-form-field",checked:false,boxLabel:" ",defaultAutoCreate:{tag:"input",type:"checkbox",autocomplete:"off"},actionMode:"wrap",initComponent:function(){Ext.form.Checkbox.superclass.initComponent.call(this);this.addEvents("check")},onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel&&!this.fieldLabel){this.el.alignTo(this.wrap,"c-c")}},initEvents:function(){Ext.form.Checkbox.superclass.initEvents.call(this);this.mon(this.el,{scope:this,click:this.onClick,change:this.onClick})},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,onRender:function(b,a){Ext.form.Checkbox.superclass.onRender.call(this,b,a);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue}this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:"label",htmlFor:this.el.id,cls:"x-form-cb-label",html:this.boxLabel})}if(this.checked){this.setValue(true)}else{this.checked=this.el.dom.checked}if(Ext.isIE&&!Ext.isStrict){this.wrap.repaint()}this.resizeEl=this.positionEl=this.wrap},onDestroy:function(){Ext.destroy(this.wrap);Ext.form.Checkbox.superclass.onDestroy.call(this)},initValue:function(){this.originalValue=this.getValue()},getValue:function(){if(this.rendered){return this.el.dom.checked}return this.checked},onClick:function(){if(this.el.dom.checked!=this.checked){this.setValue(this.el.dom.checked)}},setValue:function(a){var c=this.checked,b=this.inputValue;this.checked=(a===true||a==="true"||a=="1"||(b?a==b:String(a).toLowerCase()=="on"));if(this.rendered){this.el.dom.checked=this.checked;this.el.dom.defaultChecked=this.checked}if(c!=this.checked){this.fireEvent("check",this,this.checked);if(this.handler){this.handler.call(this.scope||this,this,this.checked)}}return this}});Ext.reg("checkbox",Ext.form.Checkbox);Ext.form.CheckboxGroup=Ext.extend(Ext.form.Field,{columns:"auto",vertical:false,allowBlank:true,blankText:"You must select at least one item in this group",defaultType:"checkbox",groupCls:"x-form-check-group",initComponent:function(){this.addEvents("change");this.on("change",this.validate,this);Ext.form.CheckboxGroup.superclass.initComponent.call(this)},onRender:function(k,g){if(!this.el){var q={autoEl:{id:this.id},cls:this.groupCls,layout:"column",renderTo:k,bufferResize:false};var a={xtype:"container",defaultType:this.defaultType,layout:"form",defaults:{hideLabel:true,anchor:"100%"}};if(this.items[0].items){Ext.apply(q,{layoutConfig:{columns:this.items.length},defaults:this.defaults,items:this.items});for(var e=0,n=this.items.length;e0&&e%s==0){p++}if(this.items[e].fieldLabel){this.items[e].hideLabel=false}o[p].items.push(this.items[e])}}else{for(var e=0,n=this.items.length;e-1){b.setValue(true)}})},getBox:function(b){var a=null;this.eachItem(function(c){if(b==c||c.dataIndex==b||c.id==b||c.getName()==b){a=c;return false}});return a},getValue:function(){var a=[];this.eachItem(function(b){if(b.checked){a.push(b)}});return a},eachItem:function(b,a){if(this.items&&this.items.each){this.items.each(b,a||this)}},getRawValue:Ext.emptyFn,setRawValue:Ext.emptyFn});Ext.reg("checkboxgroup",Ext.form.CheckboxGroup);Ext.form.CompositeField=Ext.extend(Ext.form.Field,{defaultMargins:"0 5 0 0",skipLastItemMargin:true,isComposite:true,combineErrors:true,labelConnector:", ",initComponent:function(){var g=[],b=this.items,e;for(var d=0,c=b.length;d")},sortErrors:function(){var a=this.items;this.fieldErrors.sort("ASC",function(g,d){var c=function(b){return function(i){return i.getName()==b}};var h=a.findIndexBy(c(g.field)),e=a.findIndexBy(c(d.field));return h1){var a=this.getBox(c);if(a){a.setValue(b);if(a.checked){this.eachItem(function(d){if(d!==a){d.setValue(false)}})}}}else{this.setValueForItem(c)}},setValueForItem:function(a){a=String(a).split(",")[0];this.eachItem(function(b){b.setValue(a==b.inputValue)})},fireChecked:function(){if(!this.checkTask){this.checkTask=new Ext.util.DelayedTask(this.bufferChecked,this)}this.checkTask.delay(10)},bufferChecked:function(){var a=null;this.eachItem(function(b){if(b.checked){a=b;return false}});this.fireEvent("change",this,a)},onDestroy:function(){if(this.checkTask){this.checkTask.cancel();this.checkTask=null}Ext.form.RadioGroup.superclass.onDestroy.call(this)}});Ext.reg("radiogroup",Ext.form.RadioGroup);Ext.form.Hidden=Ext.extend(Ext.form.Field,{inputType:"hidden",shouldLayout:false,onRender:function(){Ext.form.Hidden.superclass.onRender.apply(this,arguments)},initEvents:function(){this.originalValue=this.getValue()},setSize:Ext.emptyFn,setWidth:Ext.emptyFn,setHeight:Ext.emptyFn,setPosition:Ext.emptyFn,setPagePosition:Ext.emptyFn,markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn});Ext.reg("hidden",Ext.form.Hidden);Ext.form.BasicForm=Ext.extend(Ext.util.Observable,{constructor:function(b,a){Ext.apply(this,a);if(Ext.isString(this.paramOrder)){this.paramOrder=this.paramOrder.split(/[\s,|]/)}this.items=new Ext.util.MixedCollection(false,function(c){return c.getItemId()});this.addEvents("beforeaction","actionfailed","actioncomplete");if(b){this.initEl(b)}Ext.form.BasicForm.superclass.constructor.call(this)},timeout:30,paramOrder:undefined,paramsAsHash:false,waitTitle:"Please Wait...",activeAction:null,trackResetOnLoad:false,initEl:function(a){this.el=Ext.get(a);this.id=this.el.id||Ext.id();if(!this.standardSubmit){this.el.on("submit",this.onSubmit,this)}this.el.addClass("x-form")},getEl:function(){return this.el},onSubmit:function(a){a.stopEvent()},destroy:function(a){if(a!==true){this.items.each(function(b){Ext.destroy(b)});Ext.destroy(this.el)}this.items.clear();this.purgeListeners()},isValid:function(){var a=true;this.items.each(function(b){if(!b.validate()){a=false}});return a},isDirty:function(){var a=false;this.items.each(function(b){if(b.isDirty()){a=true;return false}});return a},doAction:function(b,a){if(Ext.isString(b)){b=new Ext.form.Action.ACTION_TYPES[b](this,a)}if(this.fireEvent("beforeaction",this,b)!==false){this.beforeAction(b);b.run.defer(100,b)}return this},submit:function(b){b=b||{};if(this.standardSubmit){var a=b.clientValidation===false||this.isValid();if(a){var c=this.el.dom;if(this.url&&Ext.isEmpty(c.action)){c.action=this.url}c.submit()}return a}var d=String.format("{0}submit",this.api?"direct":"");this.doAction(d,b);return this},load:function(a){var b=String.format("{0}load",this.api?"direct":"");this.doAction(b,a);return this},updateRecord:function(b){b.beginEdit();var a=b.fields,d,c;a.each(function(e){d=this.findField(e.name);if(d){c=d.getValue();if(typeof c!=undefined&&c.getGroupValue){c=c.getGroupValue()}else{if(d.eachItem){c=[];d.eachItem(function(g){c.push(g.getValue())})}}b.set(e.name,c)}},this);b.endEdit();return this},loadRecord:function(a){this.setValues(a.data);return this},beforeAction:function(a){this.items.each(function(c){if(c.isFormField&&c.syncValue){c.syncValue()}});var b=a.options;if(b.waitMsg){if(this.waitMsgTarget===true){this.el.mask(b.waitMsg,"x-mask-loading")}else{if(this.waitMsgTarget){this.waitMsgTarget=Ext.get(this.waitMsgTarget);this.waitMsgTarget.mask(b.waitMsg,"x-mask-loading")}else{Ext.MessageBox.wait(b.waitMsg,b.waitTitle||this.waitTitle)}}}},afterAction:function(a,c){this.activeAction=null;var b=a.options;if(b.waitMsg){if(this.waitMsgTarget===true){this.el.unmask()}else{if(this.waitMsgTarget){this.waitMsgTarget.unmask()}else{Ext.MessageBox.updateProgress(1);Ext.MessageBox.hide()}}}if(c){if(b.reset){this.reset()}Ext.callback(b.success,b.scope,[this,a]);this.fireEvent("actioncomplete",this,a)}else{Ext.callback(b.failure,b.scope,[this,a]);this.fireEvent("actionfailed",this,a)}},findField:function(c){var b=this.items.get(c);if(!Ext.isObject(b)){var a=function(d){if(d.isFormField){if(d.dataIndex==c||d.id==c||d.getName()==c){b=d;return false}else{if(d.isComposite){return d.items.each(a)}else{if(d instanceof Ext.form.CheckboxGroup&&d.rendered){return d.eachItem(a)}}}}};this.items.each(a)}return b||null},markInvalid:function(h){if(Ext.isArray(h)){for(var c=0,a=h.length;c':">"),c,"")}return d.join("")},createToolbar:function(e){var c=[];var a=Ext.QuickTips&&Ext.QuickTips.isEnabled();function d(k,h,i){return{itemId:k,cls:"x-btn-icon",iconCls:"x-edit-"+k,enableToggle:h!==false,scope:e,handler:i||e.relayBtnCmd,clickEvent:"mousedown",tooltip:a?e.buttonTips[k]||undefined:undefined,overflowText:e.buttonTips[k].title||undefined,tabIndex:-1}}if(this.enableFont&&!Ext.isSafari2){var g=new Ext.Toolbar.Item({autoEl:{tag:"select",cls:"x-font-select",html:this.createFontOptions()}});c.push(g,"-")}if(this.enableFormat){c.push(d("bold"),d("italic"),d("underline"))}if(this.enableFontSize){c.push("-",d("increasefontsize",false,this.adjustFont),d("decreasefontsize",false,this.adjustFont))}if(this.enableColors){c.push("-",{itemId:"forecolor",cls:"x-btn-icon",iconCls:"x-edit-forecolor",clickEvent:"mousedown",tooltip:a?e.buttonTips.forecolor||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({allowReselect:true,focus:Ext.emptyFn,value:"000000",plain:true,listeners:{scope:this,select:function(i,h){this.execCmd("forecolor",Ext.isWebKit||Ext.isIE?"#"+h:h);this.deferFocus()}},clickEvent:"mousedown"})},{itemId:"backcolor",cls:"x-btn-icon",iconCls:"x-edit-backcolor",clickEvent:"mousedown",tooltip:a?e.buttonTips.backcolor||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({focus:Ext.emptyFn,value:"FFFFFF",plain:true,allowReselect:true,listeners:{scope:this,select:function(i,h){if(Ext.isGecko){this.execCmd("useCSS",false);this.execCmd("hilitecolor",h);this.execCmd("useCSS",true);this.deferFocus()}else{this.execCmd(Ext.isOpera?"hilitecolor":"backcolor",Ext.isWebKit||Ext.isIE?"#"+h:h);this.deferFocus()}}},clickEvent:"mousedown"})})}if(this.enableAlignments){c.push("-",d("justifyleft"),d("justifycenter"),d("justifyright"))}if(!Ext.isSafari2){if(this.enableLinks){c.push("-",d("createlink",false,this.createLink))}if(this.enableLists){c.push("-",d("insertorderedlist"),d("insertunorderedlist"))}if(this.enableSourceEdit){c.push("-",d("sourceedit",true,function(h){this.toggleSourceEdit(!this.sourceEditMode)}))}}var b=new Ext.Toolbar({renderTo:this.wrap.dom.firstChild,items:c});if(g){this.fontSelect=g.el;this.mon(this.fontSelect,"change",function(){var h=this.fontSelect.dom.value;this.relayCmd("fontname",h);this.deferFocus()},this)}this.mon(b.el,"click",function(h){h.preventDefault()});this.tb=b;this.tb.doLayout()},onDisable:function(){this.wrap.mask();Ext.form.HtmlEditor.superclass.onDisable.call(this)},onEnable:function(){this.wrap.unmask();Ext.form.HtmlEditor.superclass.onEnable.call(this)},setReadOnly:function(b){Ext.form.HtmlEditor.superclass.setReadOnly.call(this,b);if(this.initialized){if(Ext.isIE){this.getEditorBody().contentEditable=!b}else{this.setDesignMode(!b)}var a=this.getEditorBody();if(a){a.style.cursor=this.readOnly?"default":"text"}this.disableItems(b)}},getDocMarkup:function(){var a=Ext.fly(this.iframe).getHeight()-this.iframePad*2;return String.format('',this.iframePad,a)},getEditorBody:function(){var a=this.getDoc();return a.body||a.documentElement},getDoc:function(){return Ext.isIE?this.getWin().document:(this.iframe.contentDocument||this.getWin().document)},getWin:function(){return Ext.isIE?this.iframe.contentWindow:window.frames[this.iframe.name]},onRender:function(b,a){Ext.form.HtmlEditor.superclass.onRender.call(this,b,a);this.el.dom.style.border="0 none";this.el.dom.setAttribute("tabIndex",-1);this.el.addClass("x-hidden");if(Ext.isIE){this.el.applyStyles("margin-top:-1px;margin-bottom:-1px;")}this.wrap=this.el.wrap({cls:"x-html-editor-wrap",cn:{cls:"x-html-editor-tb"}});this.createToolbar(this);this.disableItems(true);this.tb.doLayout();this.createIFrame();if(!this.width){var c=this.el.getSize();this.setSize(c.width,this.height||c.height)}this.resizeEl=this.positionEl=this.wrap},createIFrame:function(){var a=document.createElement("iframe");a.name=Ext.id();a.frameBorder="0";a.style.overflow="auto";a.src=Ext.SSL_SECURE_URL;this.wrap.dom.appendChild(a);this.iframe=a;this.monitorTask=Ext.TaskMgr.start({run:this.checkDesignMode,scope:this,interval:100})},initFrame:function(){Ext.TaskMgr.stop(this.monitorTask);var b=this.getDoc();this.win=this.getWin();b.open();b.write(this.getDocMarkup());b.close();var a={run:function(){var c=this.getDoc();if(c.body||c.readyState=="complete"){Ext.TaskMgr.stop(a);this.setDesignMode(true);this.initEditor.defer(10,this)}},interval:10,duration:10000,scope:this};Ext.TaskMgr.start(a)},checkDesignMode:function(){if(this.wrap&&this.wrap.dom.offsetWidth){var a=this.getDoc();if(!a){return}if(!a.editorInitialized||this.getDesignMode()!="on"){this.initFrame()}}},setDesignMode:function(b){var a=this.getDoc();if(a){if(this.readOnly){b=false}a.designMode=(/on|true/i).test(String(b).toLowerCase())?"on":"off"}},getDesignMode:function(){var a=this.getDoc();if(!a){return""}return String(a.designMode).toLowerCase()},disableItems:function(a){if(this.fontSelect){this.fontSelect.dom.disabled=a}this.tb.items.each(function(b){if(b.getItemId()!="sourceedit"){b.setDisabled(a)}})},onResize:function(b,c){Ext.form.HtmlEditor.superclass.onResize.apply(this,arguments);if(this.el&&this.iframe){if(Ext.isNumber(b)){var e=b-this.wrap.getFrameWidth("lr");this.el.setWidth(e);this.tb.setWidth(e);this.iframe.style.width=Math.max(e,0)+"px"}if(Ext.isNumber(c)){var a=c-this.wrap.getFrameWidth("tb")-this.tb.el.getHeight();this.el.setHeight(a);this.iframe.style.height=Math.max(a,0)+"px";var d=this.getEditorBody();if(d){d.style.height=Math.max((a-(this.iframePad*2)),0)+"px"}}}},toggleSourceEdit:function(b){var d,a;if(b===undefined){b=!this.sourceEditMode}this.sourceEditMode=b===true;var c=this.tb.getComponent("sourceedit");if(c.pressed!==this.sourceEditMode){c.toggle(this.sourceEditMode);if(!c.xtbHidden){return}}if(this.sourceEditMode){this.previousSize=this.getSize();d=Ext.get(this.iframe).getHeight();this.disableItems(true);this.syncValue();this.iframe.className="x-hidden";this.el.removeClass("x-hidden");this.el.dom.removeAttribute("tabIndex");this.el.focus();this.el.dom.style.height=d+"px"}else{a=parseInt(this.el.dom.style.height,10);if(this.initialized){this.disableItems(this.readOnly)}this.pushValue();this.iframe.className="";this.el.addClass("x-hidden");this.el.dom.setAttribute("tabIndex",-1);this.deferFocus();this.setSize(this.previousSize);delete this.previousSize;this.iframe.style.height=a+"px"}this.fireEvent("editmodechange",this,this.sourceEditMode)},createLink:function(){var a=prompt(this.createLinkText,this.defaultLinkValue);if(a&&a!="http://"){this.relayCmd("createlink",a)}},initEvents:function(){this.originalValue=this.getValue()},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,setValue:function(a){Ext.form.HtmlEditor.superclass.setValue.call(this,a);this.pushValue();return this},cleanHtml:function(a){a=String(a);if(Ext.isWebKit){a=a.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,"")}if(a.charCodeAt(0)==this.defaultValue.replace(/\D/g,"")){a=a.substring(1)}return a},syncValue:function(){if(this.initialized){var d=this.getEditorBody();var c=d.innerHTML;if(Ext.isWebKit){var b=d.getAttribute("style");var a=b.match(/text-align:(.*?);/i);if(a&&a[1]){c='
    '+c+"
    "}}c=this.cleanHtml(c);if(this.fireEvent("beforesync",this,c)!==false){this.el.dom.value=c;this.fireEvent("sync",this,c)}}},getValue:function(){this[this.sourceEditMode?"pushValue":"syncValue"]();return Ext.form.HtmlEditor.superclass.getValue.call(this)},pushValue:function(){if(this.initialized){var a=this.el.dom.value;if(!this.activated&&a.length<1){a=this.defaultValue}if(this.fireEvent("beforepush",this,a)!==false){this.getEditorBody().innerHTML=a;if(Ext.isGecko){this.setDesignMode(false);this.setDesignMode(true)}this.fireEvent("push",this,a)}}},deferFocus:function(){this.focus.defer(10,this)},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus()}else{this.el.focus()}},initEditor:function(){try{var c=this.getEditorBody(),a=this.el.getStyles("font-size","font-family","background-image","background-repeat","background-color","color"),g,b;a["background-attachment"]="fixed";c.bgProperties="fixed";Ext.DomHelper.applyStyles(c,a);g=this.getDoc();if(g){try{Ext.EventManager.removeAll(g)}catch(d){}}b=this.onEditorEvent.createDelegate(this);Ext.EventManager.on(g,{mousedown:b,dblclick:b,click:b,keyup:b,buffer:100});if(Ext.isGecko){Ext.EventManager.on(g,"keypress",this.applyCommand,this)}if(Ext.isIE||Ext.isWebKit||Ext.isOpera){Ext.EventManager.on(g,"keydown",this.fixKeys,this)}g.editorInitialized=true;this.initialized=true;this.pushValue();this.setReadOnly(this.readOnly);this.fireEvent("initialize",this)}catch(d){}},beforeDestroy:function(){if(this.monitorTask){Ext.TaskMgr.stop(this.monitorTask)}if(this.rendered){Ext.destroy(this.tb);var b=this.getDoc();if(b){try{Ext.EventManager.removeAll(b);for(var c in b){delete b[c]}}catch(a){}}if(this.wrap){this.wrap.dom.innerHTML="";this.wrap.remove()}}Ext.form.HtmlEditor.superclass.beforeDestroy.call(this)},onFirstFocus:function(){this.activated=true;this.disableItems(this.readOnly);if(Ext.isGecko){this.win.focus();var a=this.win.getSelection();if(!a.focusNode||a.focusNode.nodeType!=3){var b=a.getRangeAt(0);b.selectNodeContents(this.getEditorBody());b.collapse(true);this.deferFocus()}try{this.execCmd("useCSS",true);this.execCmd("styleWithCSS",false)}catch(c){}}this.fireEvent("activate",this)},adjustFont:function(b){var d=b.getItemId()=="increasefontsize"?1:-1,c=this.getDoc(),a=parseInt(c.queryCommandValue("FontSize")||2,10);if((Ext.isSafari&&!Ext.isSafari2)||Ext.isChrome||Ext.isAir){if(a<=10){a=1+d}else{if(a<=13){a=2+d}else{if(a<=16){a=3+d}else{if(a<=18){a=4+d}else{if(a<=24){a=5+d}else{a=6+d}}}}}a=a.constrain(1,6)}else{if(Ext.isSafari){d*=2}a=Math.max(1,a+d)+(Ext.isSafari?"px":0)}this.execCmd("FontSize",a)},onEditorEvent:function(a){this.updateToolbar()},updateToolbar:function(){if(this.readOnly){return}if(!this.activated){this.onFirstFocus();return}var b=this.tb.items.map,c=this.getDoc();if(this.enableFont&&!Ext.isSafari2){var a=(c.queryCommandValue("FontName")||this.defaultFont).toLowerCase();if(a!=this.fontSelect.dom.value){this.fontSelect.dom.value=a}}if(this.enableFormat){b.bold.toggle(c.queryCommandState("bold"));b.italic.toggle(c.queryCommandState("italic"));b.underline.toggle(c.queryCommandState("underline"))}if(this.enableAlignments){b.justifyleft.toggle(c.queryCommandState("justifyleft"));b.justifycenter.toggle(c.queryCommandState("justifycenter"));b.justifyright.toggle(c.queryCommandState("justifyright"))}if(!Ext.isSafari2&&this.enableLists){b.insertorderedlist.toggle(c.queryCommandState("insertorderedlist"));b.insertunorderedlist.toggle(c.queryCommandState("insertunorderedlist"))}Ext.menu.MenuMgr.hideAll();this.syncValue()},relayBtnCmd:function(a){this.relayCmd(a.getItemId())},relayCmd:function(b,a){(function(){this.focus();this.execCmd(b,a);this.updateToolbar()}).defer(10,this)},execCmd:function(b,a){var c=this.getDoc();c.execCommand(b,false,a===undefined?null:a);this.syncValue()},applyCommand:function(b){if(b.ctrlKey){var d=b.getCharCode(),a;if(d>0){d=String.fromCharCode(d);switch(d){case"b":a="bold";break;case"i":a="italic";break;case"u":a="underline";break}if(a){this.win.focus();this.execCmd(a);this.deferFocus();b.preventDefault()}}}},insertAtCursor:function(c){if(!this.activated){return}if(Ext.isIE){this.win.focus();var b=this.getDoc(),a=b.selection.createRange();if(a){a.pasteHTML(c);this.syncValue();this.deferFocus()}}else{this.win.focus();this.execCmd("InsertHTML",c);this.deferFocus()}},fixKeys:function(){if(Ext.isIE){return function(g){var a=g.getKey(),d=this.getDoc(),b;if(a==g.TAB){g.stopEvent();b=d.selection.createRange();if(b){b.collapse(true);b.pasteHTML("    ");this.deferFocus()}}else{if(a==g.ENTER){b=d.selection.createRange();if(b){var c=b.parentElement();if(!c||c.tagName.toLowerCase()!="li"){g.stopEvent();b.pasteHTML("
    ");b.collapse(false);b.select()}}}}}}else{if(Ext.isOpera){return function(b){var a=b.getKey();if(a==b.TAB){b.stopEvent();this.win.focus();this.execCmd("InsertHTML","    ");this.deferFocus()}}}else{if(Ext.isWebKit){return function(b){var a=b.getKey();if(a==b.TAB){b.stopEvent();this.execCmd("InsertText","\t");this.deferFocus()}else{if(a==b.ENTER){b.stopEvent();this.execCmd("InsertHtml","

    ");this.deferFocus()}}}}}}}(),getToolbar:function(){return this.tb},buttonTips:{bold:{title:"Bold (Ctrl+B)",text:"Make the selected text bold.",cls:"x-html-editor-tip"},italic:{title:"Italic (Ctrl+I)",text:"Make the selected text italic.",cls:"x-html-editor-tip"},underline:{title:"Underline (Ctrl+U)",text:"Underline the selected text.",cls:"x-html-editor-tip"},increasefontsize:{title:"Grow Text",text:"Increase the font size.",cls:"x-html-editor-tip"},decreasefontsize:{title:"Shrink Text",text:"Decrease the font size.",cls:"x-html-editor-tip"},backcolor:{title:"Text Highlight Color",text:"Change the background color of the selected text.",cls:"x-html-editor-tip"},forecolor:{title:"Font Color",text:"Change the color of the selected text.",cls:"x-html-editor-tip"},justifyleft:{title:"Align Text Left",text:"Align text to the left.",cls:"x-html-editor-tip"},justifycenter:{title:"Center Text",text:"Center text in the editor.",cls:"x-html-editor-tip"},justifyright:{title:"Align Text Right",text:"Align text to the right.",cls:"x-html-editor-tip"},insertunorderedlist:{title:"Bullet List",text:"Start a bulleted list.",cls:"x-html-editor-tip"},insertorderedlist:{title:"Numbered List",text:"Start a numbered list.",cls:"x-html-editor-tip"},createlink:{title:"Hyperlink",text:"Make the selected text a hyperlink.",cls:"x-html-editor-tip"},sourceedit:{title:"Source Edit",text:"Switch to source editing mode.",cls:"x-html-editor-tip"}}});Ext.reg("htmleditor",Ext.form.HtmlEditor);Ext.form.TimeField=Ext.extend(Ext.form.ComboBox,{minValue:undefined,maxValue:undefined,minText:"The time in this field must be equal to or after {0}",maxText:"The time in this field must be equal to or before {0}",invalidText:"{0} is not a valid time",format:"g:i A",altFormats:"g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H|gi a|hi a|giA|hiA|gi A|hi A",increment:15,mode:"local",triggerAction:"all",typeAhead:false,initDate:"1/1/2008",initDateFormat:"j/n/Y",initComponent:function(){if(Ext.isDefined(this.minValue)){this.setMinValue(this.minValue,true)}if(Ext.isDefined(this.maxValue)){this.setMaxValue(this.maxValue,true)}if(!this.store){this.generateStore(true)}Ext.form.TimeField.superclass.initComponent.call(this)},setMinValue:function(b,a){this.setLimit(b,true,a);return this},setMaxValue:function(b,a){this.setLimit(b,false,a);return this},generateStore:function(b){var c=this.minValue||new Date(this.initDate).clearTime(),a=this.maxValue||new Date(this.initDate).clearTime().add("mi",(24*60)-1),d=[];while(c<=a){d.push(c.dateFormat(this.format));c=c.add("mi",this.increment)}this.bindStore(d,b)},setLimit:function(b,g,a){var e;if(Ext.isString(b)){e=this.parseDate(b)}else{if(Ext.isDate(b)){e=b}}if(e){var c=new Date(this.initDate).clearTime();c.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds());this[g?"minValue":"maxValue"]=c;if(!a){this.generateStore()}}},getValue:function(){var a=Ext.form.TimeField.superclass.getValue.call(this);return this.formatDate(this.parseDate(a))||""},setValue:function(a){return Ext.form.TimeField.superclass.setValue.call(this,this.formatDate(this.parseDate(a)))},validateValue:Ext.form.DateField.prototype.validateValue,formatDate:Ext.form.DateField.prototype.formatDate,parseDate:function(h){if(!h||Ext.isDate(h)){return h}var k=this.initDate+" ",g=this.initDateFormat+" ",b=Date.parseDate(k+h,g+this.format),c=this.altFormats;if(!b&&c){if(!this.altFormatsArray){this.altFormatsArray=c.split("|")}for(var e=0,d=this.altFormatsArray,a=d.length;e=0){if(!d){c=g-1}d=false;while(c>=0){if(e.call(k||this,l,c,i)===true){return[l,c]}c--}l--}}else{if(c>=g){l++;d=false}while(l','
    ','
    ','
    ','
    {header}
    ',"
    ",'
    ',"
    ",'
    ','
    {body}
    ','',"
    ","
    ",'
     
    ','
     
    ',""),headerTpl:new Ext.Template('',"",'{cells}',"","
    "),bodyTpl:new Ext.Template("{rows}"),cellTpl:new Ext.Template('','
    {value}
    ',""),initTemplates:function(){var c=this.templates||{},d,b,g=new Ext.Template('','
    ',this.grid.enableHdMenu?'':"","{value}",'',"
    ",""),a=['','','
    {body}
    ',"",""].join(""),e=['',"","{cells}",this.enableRowBody?a:"","","
    "].join("");Ext.applyIf(c,{hcell:g,cell:this.cellTpl,body:this.bodyTpl,header:this.headerTpl,master:this.masterTpl,row:new Ext.Template('
    '+e+"
    "),rowInner:new Ext.Template(e)});for(b in c){d=c[b];if(d&&Ext.isFunction(d.compile)&&!d.compiled){d.disableFormats=true;d.compile()}}this.templates=c;this.colRe=new RegExp("x-grid3-td-([^\\s]+)","")},fly:function(a){if(!this._flyweight){this._flyweight=new Ext.Element.Flyweight(document.body)}this._flyweight.dom=a;return this._flyweight},getEditorParent:function(){return this.scroller.dom},initElements:function(){var b=Ext.Element,d=Ext.get(this.grid.getGridEl().dom.firstChild),e=new b(d.child("div.x-grid3-viewport")),c=new b(e.child("div.x-grid3-header")),a=new b(e.child("div.x-grid3-scroller"));if(this.grid.hideHeaders){c.setDisplayed(false)}if(this.forceFit){a.setStyle("overflow-x","hidden")}Ext.apply(this,{el:d,mainWrap:e,scroller:a,mainHd:c,innerHd:c.child("div.x-grid3-header-inner").dom,mainBody:new b(b.fly(a).child("div.x-grid3-body")),focusEl:new b(b.fly(a).child("a")),resizeMarker:new b(d.child("div.x-grid3-resize-marker")),resizeProxy:new b(d.child("div.x-grid3-resize-proxy"))});this.focusEl.swallowEvent("click",true)},getRows:function(){return this.hasRows()?this.mainBody.dom.childNodes:[]},findCell:function(a){if(!a){return false}return this.fly(a).findParent(this.cellSelector,this.cellSelectorDepth)},findCellIndex:function(d,c){var b=this.findCell(d),a;if(b){a=this.fly(b).hasClass(c);if(!c||a){return this.getCellIndex(b)}}return false},getCellIndex:function(b){if(b){var a=b.className.match(this.colRe);if(a&&a[1]){return this.cm.getIndexById(a[1])}}return false},findHeaderCell:function(b){var a=this.findCell(b);return a&&this.fly(a).hasClass(this.hdCls)?a:null},findHeaderIndex:function(a){return this.findCellIndex(a,this.hdCls)},findRow:function(a){if(!a){return false}return this.fly(a).findParent(this.rowSelector,this.rowSelectorDepth)},findRowIndex:function(a){var b=this.findRow(a);return b?b.rowIndex:false},findRowBody:function(a){if(!a){return false}return this.fly(a).findParent(this.rowBodySelector,this.rowBodySelectorDepth)},getRow:function(a){return this.getRows()[a]},getCell:function(b,a){return Ext.fly(this.getRow(b)).query(this.cellSelector)[a]},getHeaderCell:function(a){return this.mainHd.dom.getElementsByTagName("td")[a]},addRowClass:function(b,a){var c=this.getRow(b);if(c){this.fly(c).addClass(a)}},removeRowClass:function(c,a){var b=this.getRow(c);if(b){this.fly(b).removeClass(a)}},removeRow:function(a){Ext.removeNode(this.getRow(a));this.syncFocusEl(a)},removeRows:function(c,a){var b=this.mainBody.dom,d;for(d=c;d<=a;d++){Ext.removeNode(b.childNodes[c])}this.syncFocusEl(c)},getScrollState:function(){var a=this.scroller.dom;return{left:a.scrollLeft,top:a.scrollTop}},restoreScroll:function(a){var b=this.scroller.dom;b.scrollLeft=a.left;b.scrollTop=a.top},scrollToTop:function(){var a=this.scroller.dom;a.scrollTop=0;a.scrollLeft=0},syncScroll:function(){this.syncHeaderScroll();var a=this.scroller.dom;this.grid.fireEvent("bodyscroll",a.scrollLeft,a.scrollTop)},syncHeaderScroll:function(){var a=this.innerHd,b=this.scroller.dom.scrollLeft;a.scrollLeft=b;a.scrollLeft=b},updateSortIcon:function(d,c){var a=this.sortClasses,b=a[c=="DESC"?1:0],e=this.mainHd.select("td").removeClass(a);e.item(d).addClass(b)},updateAllColumnWidths:function(){var e=this.getTotalWidth(),k=this.cm.getColumnCount(),m=this.getRows(),g=m.length,b=[],l,a,h,d,c;for(d=0;d=this.ds.getCount()){return null}d=(d!==undefined?d:0);var c=this.getRow(h),b=this.cm,e=b.getColumnCount(),a;if(!(g===false&&d===0)){while(dn){o.scrollTop=r-a}}if(e!==false){var m=parseInt(h.offsetLeft,10),k=m+h.offsetWidth,i=parseInt(o.scrollLeft,10),b=i+o.clientWidth;if(mb){o.scrollLeft=k-o.clientWidth}}}return this.getResolvedXY(s)},insertRows:function(a,i,e,h){var d=a.getCount()-1;if(!h&&i===0&&e>=d){this.fireEvent("beforerowsinserted",this,i,e);this.refresh();this.fireEvent("rowsinserted",this,i,e)}else{if(!h){this.fireEvent("beforerowsinserted",this,i,e)}var b=this.renderRows(i,e),g=this.getRow(i);if(g){if(i===0){Ext.fly(this.getRow(0)).removeClass(this.firstRowCls)}Ext.DomHelper.insertHtml("beforeBegin",g,b)}else{var c=this.getRow(d-1);if(c){Ext.fly(c).removeClass(this.lastRowCls)}Ext.DomHelper.insertHtml("beforeEnd",this.mainBody.dom,b)}if(!h){this.processRows(i);this.fireEvent("rowsinserted",this,i,e)}else{if(i===0||i>=d){Ext.fly(this.getRow(i)).addClass(i===0?this.firstRowCls:this.lastRowCls)}}}this.syncFocusEl(i)},deleteRows:function(a,c,b){if(a.getRowCount()<1){this.refresh()}else{this.fireEvent("beforerowsdeleted",this,c,b);this.removeRows(c,b);this.processRows(c);this.fireEvent("rowsdeleted",this,c,b)}},getColumnStyle:function(b,d){var a=this.cm,g=a.config,c=d?"":g[b].css||"",e=g[b].align;c+=String.format("width: {0};",this.getColumnWidth(b));if(a.isHidden(b)){c+="display: none; "}if(e){c+=String.format("text-align: {0};",e)}return c},getColumnWidth:function(b){var c=this.cm.getColumnWidth(b),a=this.borderWidth;if(Ext.isNumber(c)){if(Ext.isBorderBox||(Ext.isWebKit&&!Ext.isSafari2)){return c+"px"}else{return Math.max(c-a,0)+"px"}}else{return c}},getTotalWidth:function(){return this.cm.getTotalWidth()+"px"},fitColumns:function(g,k,h){var a=this.grid,m=this.cm,t=m.getTotalWidth(false),r=this.getGridInnerWidth(),s=r-t,c=[],p=0,o=0,v,d,q;if(r<20||s===0){return false}var e=m.getColumnCount(true),n=m.getColumnCount(false),b=e-(Ext.isNumber(h)?1:0);if(b===0){b=1;h=undefined}for(q=0;qr){var u=(b==e)?p:h,l=Math.max(1,m.getColumnWidth(u)-(t-r));m.setColumnWidth(u,l,true)}if(g!==true){this.updateAllColumnWidths()}return true},autoExpand:function(l){var a=this.grid,i=this.cm,e=this.getGridInnerWidth(),c=i.getTotalWidth(false),g=a.autoExpandColumn;if(!this.userResized&&g){if(e!=c){var k=i.getIndexById(g),b=i.getColumnWidth(k),h=e-c+b,d=Math.min(Math.max(h,a.autoExpandMin),a.autoExpandMax);if(b!=d){i.setColumnWidth(k,d,true);if(l!==true){this.updateColumnWidth(k,d)}}}}},getGridInnerWidth:function(){return this.grid.getGridEl().getWidth(true)-this.getScrollOffset()},getColumnData:function(){var e=[],c=this.cm,g=c.getColumnCount(),a=this.ds.fields,d,b;for(d=0;d'+this.emptyText+"")}},updateHeaderSortState:function(){var b=this.ds.getSortState();if(!b){return}if(!this.sortState||(this.sortState.field!=b.field||this.sortState.direction!=b.direction)){this.grid.fireEvent("sortchange",this.grid,b)}this.sortState=b;var c=this.cm.findColumnIndex(b.field);if(c!=-1){var a=b.direction;this.updateSortIcon(c,a)}},clearHeaderSortState:function(){if(!this.sortState){return}this.grid.fireEvent("sortchange",this.grid,null);this.mainHd.select("td").removeClass(this.sortClasses);delete this.sortState},destroy:function(){var k=this,a=k.grid,d=a.getGridEl(),i=k.dragZone,g=k.splitZone,h=k.columnDrag,e=k.columnDrop,l=k.scrollToTopTask,c,b;if(l&&l.cancel){l.cancel()}Ext.destroyMembers(k,"colMenu","hmenu");k.initData(null,null);k.purgeListeners();Ext.fly(k.innerHd).un("click",k.handleHdDown,k);if(a.enableColumnMove){c=h.dragData;b=h.proxy;Ext.destroy(h.el,b.ghost,b.el,e.el,e.proxyTop,e.proxyBottom,c.ddel,c.header);if(b.anim){Ext.destroy(b.anim)}delete b.ghost;delete c.ddel;delete c.header;h.destroy();delete Ext.dd.DDM.locationCache[h.id];delete h._domRef;delete e.proxyTop;delete e.proxyBottom;e.destroy();delete Ext.dd.DDM.locationCache["gridHeader"+d.id];delete e._domRef;delete Ext.dd.DDM.ids[e.ddGroup]}if(g){g.destroy();delete g._domRef;delete Ext.dd.DDM.ids["gridSplitters"+d.id]}Ext.fly(k.innerHd).removeAllListeners();Ext.removeNode(k.innerHd);delete k.innerHd;Ext.destroy(k.el,k.mainWrap,k.mainHd,k.scroller,k.mainBody,k.focusEl,k.resizeMarker,k.resizeProxy,k.activeHdBtn,k._flyweight,i,g);delete a.container;if(i){i.destroy()}Ext.dd.DDM.currentTarget=null;delete Ext.dd.DDM.locationCache[d.id];Ext.EventManager.removeResizeListener(k.onWindowResize,k)},onDenyColumnHide:function(){},render:function(){if(this.autoFill){var a=this.grid.ownerCt;if(a&&a.getLayout()){a.on("afterlayout",function(){this.fitColumns(true,true);this.updateHeaders();this.updateHeaderSortState()},this,{single:true})}}else{if(this.forceFit){this.fitColumns(true,false)}else{if(this.grid.autoExpandColumn){this.autoExpand(true)}}}this.grid.getGridEl().dom.innerHTML=this.renderUI();this.afterRenderUI()},initData:function(a,e){var b=this;if(b.ds){var d=b.ds;d.un("add",b.onAdd,b);d.un("load",b.onLoad,b);d.un("clear",b.onClear,b);d.un("remove",b.onRemove,b);d.un("update",b.onUpdate,b);d.un("datachanged",b.onDataChange,b);if(d!==a&&d.autoDestroy){d.destroy()}}if(a){a.on({scope:b,load:b.onLoad,add:b.onAdd,remove:b.onRemove,update:b.onUpdate,clear:b.onClear,datachanged:b.onDataChange})}if(b.cm){var c=b.cm;c.un("configchange",b.onColConfigChange,b);c.un("widthchange",b.onColWidthChange,b);c.un("headerchange",b.onHeaderChange,b);c.un("hiddenchange",b.onHiddenChange,b);c.un("columnmoved",b.onColumnMove,b)}if(e){delete b.lastViewWidth;e.on({scope:b,configchange:b.onColConfigChange,widthchange:b.onColWidthChange,headerchange:b.onHeaderChange,hiddenchange:b.onHiddenChange,columnmoved:b.onColumnMove})}b.ds=a;b.cm=e},onDataChange:function(){this.refresh(true);this.updateHeaderSortState();this.syncFocusEl(0)},onClear:function(){this.refresh();this.syncFocusEl(0)},onUpdate:function(b,a){this.refreshRow(a)},onAdd:function(b,a,c){this.insertRows(b,c,c+(a.length-1))},onRemove:function(b,a,c,d){if(d!==true){this.fireEvent("beforerowremoved",this,c,a)}this.removeRow(c);if(d!==true){this.processRows(c);this.applyEmptyText();this.fireEvent("rowremoved",this,c,a)}},onLoad:function(){if(Ext.isGecko){if(!this.scrollToTopTask){this.scrollToTopTask=new Ext.util.DelayedTask(this.scrollToTop,this)}this.scrollToTopTask.delay(1)}else{this.scrollToTop()}},onColWidthChange:function(a,b,c){this.updateColumnWidth(b,c)},onHeaderChange:function(a,b,c){this.updateHeaders()},onHiddenChange:function(a,b,c){this.updateColumnHidden(b,c)},onColumnMove:function(a,c,b){this.indexMap=null;this.refresh(true);this.restoreScroll(this.getScrollState());this.afterMove(b);this.grid.fireEvent("columnmove",c,b)},onColConfigChange:function(){delete this.lastViewWidth;this.indexMap=null;this.refresh(true)},initUI:function(a){a.on("headerclick",this.onHeaderClick,this)},initEvents:Ext.emptyFn,onHeaderClick:function(b,a){if(this.headersDisabled||!this.cm.isSortable(a)){return}b.stopEditing(true);b.store.sort(this.cm.getDataIndex(a))},onRowOver:function(b,a){var c=this.findRowIndex(a);if(c!==false){this.addRowClass(c,this.rowOverCls)}},onRowOut:function(b,a){var c=this.findRowIndex(a);if(c!==false&&!b.within(this.getRow(c),true)){this.removeRowClass(c,this.rowOverCls)}},onRowSelect:function(a){this.addRowClass(a,this.selectedRowClass)},onRowDeselect:function(a){this.removeRowClass(a,this.selectedRowClass)},onCellSelect:function(c,b){var a=this.getCell(c,b);if(a){this.fly(a).addClass("x-grid3-cell-selected")}},onCellDeselect:function(c,b){var a=this.getCell(c,b);if(a){this.fly(a).removeClass("x-grid3-cell-selected")}},handleWheel:function(a){a.stopPropagation()},onColumnSplitterMoved:function(a,b){this.userResized=true;this.grid.colModel.setColumnWidth(a,b,true);if(this.forceFit){this.fitColumns(true,false,a);this.updateAllColumnWidths()}else{this.updateColumnWidth(a,b);this.syncHeaderScroll()}this.grid.fireEvent("columnresize",a,b)},beforeColMenuShow:function(){var b=this.cm,d=b.getColumnCount(),a=this.colMenu,c;a.removeAll();for(c=0;c0){if(!this.cm.isHidden(a-1)){return a}a--}return undefined},handleHdOver:function(c,b){var d=this.findHeaderCell(b);if(d&&!this.headersDisabled){var a=this.fly(d);this.activeHdRef=b;this.activeHdIndex=this.getCellIndex(d);this.activeHdRegion=a.getRegion();if(!this.isMenuDisabled(this.activeHdIndex,a)){a.addClass("x-grid3-hd-over");this.activeHdBtn=a.child(".x-grid3-hd-btn");if(this.activeHdBtn){this.activeHdBtn.dom.style.height=(d.firstChild.offsetHeight-1)+"px"}}}},handleHdOut:function(b,a){var c=this.findHeaderCell(a);if(c&&(!Ext.isIE||!b.within(c,true))){this.activeHdRef=null;this.fly(c).removeClass("x-grid3-hd-over");c.style.cursor=""}},isMenuDisabled:function(a,b){return this.cm.isMenuDisabled(a)},hasRows:function(){var a=this.mainBody.dom.firstChild;return a&&a.nodeType==1&&a.className!="x-grid-empty"},isHideableColumn:function(a){return !a.hidden},bind:function(a,b){this.initData(a,b)}});Ext.grid.GridView.SplitDragZone=Ext.extend(Ext.dd.DDProxy,{constructor:function(a,b){this.grid=a;this.view=a.getView();this.marker=this.view.resizeMarker;this.proxy=this.view.resizeProxy;Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this,b,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.scroll=false;this.hw=this.view.splitHandleWidth||5},b4StartDrag:function(a,e){this.dragHeadersDisabled=this.view.headersDisabled;this.view.headersDisabled=true;var d=this.view.mainWrap.getHeight();this.marker.setHeight(d);this.marker.show();this.marker.alignTo(this.view.getHeaderCell(this.cellIndex),"tl-tl",[-2,0]);this.proxy.setHeight(d);var b=this.cm.getColumnWidth(this.cellIndex),c=Math.max(b-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(c,1000);this.setYConstraint(0,0);this.minX=a-c;this.maxX=a+1000;this.startPos=a;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,a,e)},allowHeaderDrag:function(a){return true},handleMouseDown:function(a){var h=this.view.findHeaderCell(a.getTarget());if(h&&this.allowHeaderDrag(a)){var l=this.view.fly(h).getXY(),c=l[0],i=a.getXY(),b=i[0],g=h.offsetWidth,d=false;if((b-c)<=this.hw){d=-1}else{if((c+g)-b<=this.hw){d=0}}if(d!==false){this.cm=this.grid.colModel;var k=this.view.getCellIndex(h);if(d==-1){if(k+d<0){return}while(this.cm.isHidden(k+d)){--d;if(k+d<0){return}}}this.cellIndex=k+d;this.split=h.dom;if(this.cm.isResizable(this.cellIndex)&&!this.cm.isFixed(this.cellIndex)){Ext.grid.GridView.SplitDragZone.superclass.handleMouseDown.apply(this,arguments)}}else{if(this.view.columnDrag){this.view.columnDrag.callHandleMouseDown(a)}}}},endDrag:function(g){this.marker.hide();var a=this.view,c=Math.max(this.minX,g.getPageX()),d=c-this.startPos,b=this.dragHeadersDisabled;a.onColumnSplitterMoved(this.cellIndex,this.cm.getColumnWidth(this.cellIndex)+d);setTimeout(function(){a.headersDisabled=b},50)},autoOffset:function(){this.setDelta(0,0)}});Ext.grid.PivotGridView=Ext.extend(Ext.grid.GridView,{colHeaderCellCls:"grid-hd-group-cell",title:"",getColumnHeaders:function(){return this.grid.topAxis.buildHeaders()},getRowHeaders:function(){return this.grid.leftAxis.buildHeaders()},renderRows:function(a,r){var b=this.grid,n=b.extractData(),o=n.length,e=this.templates,q=b.renderer,h=typeof q=="function",t=this.getCellCls,m=typeof t=="function",d=e.cell,u=e.row,k=[],p={},c="width:"+this.getGridInnerWidth()+"px;",l,g,s;a=a||0;r=Ext.isDefined(r)?r:o-1;for(s=0;s','
    ','
    ','
    {title}
    ','
    ','
    ',"
    ",'
    ',"
    ",'
    ','
    ','
    {body}
    ','',"
    ","
    ",'
     
    ','
     
    ',""),initTemplates:function(){Ext.grid.PivotGridView.superclass.initTemplates.apply(this,arguments);var a=this.templates||{};if(!a.gcell){a.gcell=new Ext.XTemplate('','
    ',this.grid.enableHdMenu?'':"","{value}","
    ","")}this.templates=a;this.hrowRe=new RegExp("ux-grid-hd-group-row-(\\d+)","")},initElements:function(){Ext.grid.PivotGridView.superclass.initElements.apply(this,arguments);this.rowHeadersEl=new Ext.Element(this.scroller.child("div.x-grid3-row-headers"));this.headerTitleEl=new Ext.Element(this.mainHd.child("div.x-grid3-header-title"))},getGridInnerWidth:function(){var a=Ext.grid.PivotGridView.superclass.getGridInnerWidth.apply(this,arguments);return a-this.getTotalRowHeaderWidth()},getTotalRowHeaderWidth:function(){var d=this.getRowHeaders(),c=d.length,b=0,a;for(a=0;a0&&d>0){g=g||n.data[a[e-1].dataIndex]!=k[d-1].data[a[e-1].dataIndex]}if(g){r.push({header:p,span:o,start:b});b+=o;o=0}if(h){r.push({header:m,span:o+1,start:b});b+=o;o=0}p=m;o++}c.push({items:r,width:dimension.width||this.defaultHeaderWidth});p=undefined}return c}});Ext.grid.HeaderDragZone=Ext.extend(Ext.dd.DragZone,{maxDragWidth:120,constructor:function(a,c,b){this.grid=a;this.view=a.getView();this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDragZone.superclass.constructor.call(this,c);if(b){this.setHandleElId(Ext.id(c));this.setOuterHandleElId(Ext.id(b))}this.scroll=false},getDragData:function(c){var a=Ext.lib.Event.getTarget(c),b=this.view.findHeaderCell(a);if(b){return{ddel:b.firstChild,header:b}}return false},onInitDrag:function(a){this.dragHeadersDisabled=this.view.headersDisabled;this.view.headersDisabled=true;var b=this.dragData.ddel.cloneNode(true);b.id=Ext.id();b.style.width=Math.min(this.dragData.header.offsetWidth,this.maxDragWidth)+"px";this.proxy.update(b);return true},afterValidDrop:function(){this.completeDrop()},afterInvalidDrop:function(){this.completeDrop()},completeDrop:function(){var a=this.view,b=this.dragHeadersDisabled;setTimeout(function(){a.headersDisabled=b},50)}});Ext.grid.HeaderDropZone=Ext.extend(Ext.dd.DropZone,{proxyOffsets:[-4,-9],fly:Ext.Element.fly,constructor:function(a,c,b){this.grid=a;this.view=a.getView();this.proxyTop=Ext.DomHelper.append(document.body,{cls:"col-move-top",html:" "},true);this.proxyBottom=Ext.DomHelper.append(document.body,{cls:"col-move-bottom",html:" "},true);this.proxyTop.hide=this.proxyBottom.hide=function(){this.setLeftTop(-100,-100);this.setStyle("visibility","hidden")};this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDropZone.superclass.constructor.call(this,a.getGridEl().dom)},getTargetFromEvent:function(c){var a=Ext.lib.Event.getTarget(c),b=this.view.findCellIndex(a);if(b!==false){return this.view.getHeaderCell(b)}},nextVisible:function(c){var b=this.view,a=this.grid.colModel;c=c.nextSibling;while(c){if(!a.isHidden(b.getCellIndex(c))){return c}c=c.nextSibling}return null},prevVisible:function(c){var b=this.view,a=this.grid.colModel;c=c.prevSibling;while(c){if(!a.isHidden(b.getCellIndex(c))){return c}c=c.prevSibling}return null},positionIndicator:function(d,l,k){var a=Ext.lib.Event.getPageX(k),g=Ext.lib.Dom.getRegion(l.firstChild),c,i,b=g.top+this.proxyOffsets[1];if((g.right-a)<=(g.right-g.left)/2){c=g.right+this.view.borderWidth;i="after"}else{c=g.left;i="before"}if(this.grid.colModel.isFixed(this.view.getCellIndex(l))){return false}c+=this.proxyOffsets[0];this.proxyTop.setLeftTop(c,b);this.proxyTop.show();if(!this.bottomOffset){this.bottomOffset=this.view.mainHd.getHeight()}this.proxyBottom.setLeftTop(c,b+this.proxyTop.dom.offsetHeight+this.bottomOffset);this.proxyBottom.show();return i},onNodeEnter:function(d,a,c,b){if(b.header!=d){this.positionIndicator(b.header,d,c)}},onNodeOver:function(g,b,d,c){var a=false;if(c.header!=g){a=this.positionIndicator(c.header,g,d)}if(!a){this.proxyTop.hide();this.proxyBottom.hide()}return a?this.dropAllowed:this.dropNotAllowed},onNodeOut:function(d,a,c,b){this.proxyTop.hide();this.proxyBottom.hide()},onNodeDrop:function(b,o,g,c){var d=c.header;if(d!=b){var l=this.grid.colModel,k=Ext.lib.Event.getPageX(g),a=Ext.lib.Dom.getRegion(b.firstChild),p=(a.right-k)<=((a.right-a.left)/2)?"after":"before",i=this.view.getCellIndex(d),m=this.view.getCellIndex(b);if(p=="after"){m++}if(i=0&&this.config[a].resizable!==false&&this.config[a].fixed!==true},setHidden:function(a,b){var d=this.config[a];if(d.hidden!==b){d.hidden=b;this.totalWidth=null;this.fireEvent("hiddenchange",this,a,b)}},setEditor:function(a,b){this.config[a].setEditor(b)},destroy:function(){var b=this.config.length,a=0;for(;a0},isSelected:function(a){var b=Ext.isNumber(a)?this.grid.store.getAt(a):a;return(b&&this.selections.key(b.id)?true:false)},isIdSelected:function(a){return(this.selections.key(a)?true:false)},handleMouseDown:function(d,i,h){if(h.button!==0||this.isLocked()){return}var a=this.grid.getView();if(h.shiftKey&&!this.singleSelect&&this.last!==false){var c=this.last;this.selectRange(c,i,h.ctrlKey);this.last=c;a.focusRow(i)}else{var b=this.isSelected(i);if(h.ctrlKey&&b){this.deselectRow(i)}else{if(!b||this.getCount()>1){this.selectRow(i,h.ctrlKey||h.shiftKey);a.focusRow(i)}}}},selectRows:function(c,d){if(!d){this.clearSelections()}for(var b=0,a=c.length;b=a;c--){this.selectRow(c,true)}}},deselectRange:function(c,b,a){if(this.isLocked()){return}for(var d=c;d<=b;d++){this.deselectRow(d,a)}},selectRow:function(b,d,a){if(this.isLocked()||(b<0||b>=this.grid.store.getCount())||(d&&this.isSelected(b))){return}var c=this.grid.store.getAt(b);if(c&&this.fireEvent("beforerowselect",this,b,d,c)!==false){if(!d||this.singleSelect){this.clearSelections()}this.selections.add(c);this.last=this.lastActive=b;if(!a){this.grid.getView().onRowSelect(b)}if(!this.silent){this.fireEvent("rowselect",this,b,c);this.fireEvent("selectionchange",this)}}},deselectRow:function(b,a){if(this.isLocked()){return}if(this.last==b){this.last=false}if(this.lastActive==b){this.lastActive=false}var c=this.grid.store.getAt(b);if(c){this.selections.remove(c);if(!a){this.grid.getView().onRowDeselect(b)}this.fireEvent("rowdeselect",this,b,c);this.fireEvent("selectionchange",this)}},acceptsNav:function(c,b,a){return !a.isHidden(b)&&a.isCellEditable(b,c)},onEditorKey:function(o,m){var d=m.getKey(),h,i=this.grid,q=i.lastEdit,l=i.activeEditor,b=m.shiftKey,p,q,a,n;if(d==m.TAB){m.stopEvent();l.completeEdit();if(b){h=i.walkCells(l.row,l.col-1,-1,this.acceptsNav,this)}else{h=i.walkCells(l.row,l.col+1,1,this.acceptsNav,this)}}else{if(d==m.ENTER){if(this.moveEditorOnEnter!==false){if(b){h=i.walkCells(q.row-1,q.col,-1,this.acceptsNav,this)}else{h=i.walkCells(q.row+1,q.col,1,this.acceptsNav,this)}}}}if(h){a=h[0];n=h[1];this.onEditorSelect(a,q.row);if(i.isEditor&&i.editing){p=i.activeEditor;if(p&&p.field.triggerBlur){p.field.triggerBlur()}}i.startEditing(a,n)}},onEditorSelect:function(b,a){if(a!=b){this.selectRow(b)}},destroy:function(){Ext.destroy(this.rowNav);this.rowNav=null;Ext.grid.RowSelectionModel.superclass.destroy.call(this)}});Ext.grid.Column=Ext.extend(Ext.util.Observable,{isColumn:true,constructor:function(b){Ext.apply(this,b);if(Ext.isString(this.renderer)){this.renderer=Ext.util.Format[this.renderer]}else{if(Ext.isObject(this.renderer)){this.scope=this.renderer.scope;this.renderer=this.renderer.fn}}if(!this.scope){this.scope=this}var a=this.editor;delete this.editor;this.setEditor(a);this.addEvents("click","contextmenu","dblclick","mousedown");Ext.grid.Column.superclass.constructor.call(this)},processEvent:function(b,d,c,g,a){return this.fireEvent(b,this,c,g,d)},destroy:function(){if(this.setEditor){this.setEditor(null)}this.purgeListeners()},renderer:function(a){return a},getEditor:function(a){return this.editable!==false?this.editor:null},setEditor:function(b){var a=this.editor;if(a){if(a.gridEditor){a.gridEditor.destroy();delete a.gridEditor}else{a.destroy()}}this.editor=null;if(b){if(!b.isXType){b=Ext.create(b,"textfield")}this.editor=b}},getCellEditor:function(b){var a=this.getEditor(b);if(a){if(!a.startEdit){if(!a.gridEditor){a.gridEditor=new Ext.grid.GridEditor(a)}a=a.gridEditor}}return a}});Ext.grid.BooleanColumn=Ext.extend(Ext.grid.Column,{trueText:"true",falseText:"false",undefinedText:" ",constructor:function(a){Ext.grid.BooleanColumn.superclass.constructor.call(this,a);var c=this.trueText,d=this.falseText,b=this.undefinedText;this.renderer=function(e){if(e===undefined){return b}if(!e||e==="false"){return d}return c}}});Ext.grid.NumberColumn=Ext.extend(Ext.grid.Column,{format:"0,000.00",constructor:function(a){Ext.grid.NumberColumn.superclass.constructor.call(this,a);this.renderer=Ext.util.Format.numberRenderer(this.format)}});Ext.grid.DateColumn=Ext.extend(Ext.grid.Column,{format:"m/d/Y",constructor:function(a){Ext.grid.DateColumn.superclass.constructor.call(this,a);this.renderer=Ext.util.Format.dateRenderer(this.format)}});Ext.grid.TemplateColumn=Ext.extend(Ext.grid.Column,{constructor:function(a){Ext.grid.TemplateColumn.superclass.constructor.call(this,a);var b=(!Ext.isPrimitive(this.tpl)&&this.tpl.compile)?this.tpl:new Ext.XTemplate(this.tpl);this.renderer=function(d,e,c){return b.apply(c.data)};this.tpl=b}});Ext.grid.ActionColumn=Ext.extend(Ext.grid.Column,{header:" ",actionIdRe:/x-action-col-(\d+)/,altText:"",constructor:function(b){var g=this,c=b.items||(g.items=[g]),a=c.length,d,e;Ext.grid.ActionColumn.superclass.constructor.call(g,b);g.renderer=function(h,i){h=Ext.isFunction(b.renderer)?b.renderer.apply(this,arguments)||"":"";i.css+=" x-action-col-cell";for(d=0;d"}return h}},destroy:function(){delete this.items;delete this.renderer;return Ext.grid.ActionColumn.superclass.destroy.apply(this,arguments)},processEvent:function(c,i,d,k,b){var a=i.getTarget().className.match(this.actionIdRe),h,g;if(a&&(h=this.items[parseInt(a[1],10)])){if(c=="click"){(g=h.handler||this.handler)&&g.call(h.scope||this.scope||this,d,k,b,h,i)}else{if((c=="mousedown")&&(h.stopSelection!==false)){return false}}}return Ext.grid.ActionColumn.superclass.processEvent.apply(this,arguments)}});Ext.grid.Column.types={gridcolumn:Ext.grid.Column,booleancolumn:Ext.grid.BooleanColumn,numbercolumn:Ext.grid.NumberColumn,datecolumn:Ext.grid.DateColumn,templatecolumn:Ext.grid.TemplateColumn,actioncolumn:Ext.grid.ActionColumn};Ext.grid.RowNumberer=Ext.extend(Object,{header:"",width:23,sortable:false,constructor:function(a){Ext.apply(this,a);if(this.rowspan){this.renderer=this.renderer.createDelegate(this)}},fixed:true,hideable:false,menuDisabled:true,dataIndex:"",id:"numberer",rowspan:undefined,renderer:function(b,c,a,d){if(this.rowspan){c.cellAttr='rowspan="'+this.rowspan+'"'}return d+1}});Ext.grid.CheckboxSelectionModel=Ext.extend(Ext.grid.RowSelectionModel,{header:'
     
    ',width:20,sortable:false,menuDisabled:true,fixed:true,hideable:false,dataIndex:"",id:"checker",isColumn:true,constructor:function(){Ext.grid.CheckboxSelectionModel.superclass.constructor.apply(this,arguments);if(this.checkOnly){this.handleMouseDown=Ext.emptyFn}},initEvents:function(){Ext.grid.CheckboxSelectionModel.superclass.initEvents.call(this);this.grid.on("render",function(){Ext.fly(this.grid.getView().innerHd).on("mousedown",this.onHdMouseDown,this)},this)},processEvent:function(b,d,c,g,a){if(b=="mousedown"){this.onMouseDown(d,d.getTarget());return false}else{return Ext.grid.Column.prototype.processEvent.apply(this,arguments)}},onMouseDown:function(c,b){if(c.button===0&&b.className=="x-grid3-row-checker"){c.stopEvent();var d=c.getTarget(".x-grid3-row");if(d){var a=d.rowIndex;if(this.isSelected(a)){this.deselectRow(a)}else{this.selectRow(a,true);this.grid.getView().focusRow(a)}}}},onHdMouseDown:function(c,a){if(a.className=="x-grid3-hd-checker"){c.stopEvent();var b=Ext.fly(a.parentNode);var d=b.hasClass("x-grid3-hd-checker-on");if(d){b.removeClass("x-grid3-hd-checker-on");this.clearSelections()}else{b.addClass("x-grid3-hd-checker-on");this.selectAll()}}},renderer:function(b,c,a){return'
     
    '},onEditorSelect:function(b,a){if(a!=b&&!this.checkOnly){this.selectRow(b)}}});Ext.grid.CellSelectionModel=Ext.extend(Ext.grid.AbstractSelectionModel,{constructor:function(a){Ext.apply(this,a);this.selection=null;this.addEvents("beforecellselect","cellselect","selectionchange");Ext.grid.CellSelectionModel.superclass.constructor.call(this)},initEvents:function(){this.grid.on("cellmousedown",this.handleMouseDown,this);this.grid.on(Ext.EventManager.getKeyEvent(),this.handleKeyDown,this);this.grid.getView().on({scope:this,refresh:this.onViewChange,rowupdated:this.onRowUpdated,beforerowremoved:this.clearSelections,beforerowsinserted:this.clearSelections});if(this.grid.isEditor){this.grid.on("beforeedit",this.beforeEdit,this)}},beforeEdit:function(a){this.select(a.row,a.column,false,true,a.record)},onRowUpdated:function(a,b,c){if(this.selection&&this.selection.record==c){a.onCellSelect(b,this.selection.cell[1])}},onViewChange:function(){this.clearSelections(true)},getSelectedCell:function(){return this.selection?this.selection.cell:null},clearSelections:function(b){var a=this.selection;if(a){if(b!==true){this.grid.view.onCellDeselect(a.cell[0],a.cell[1])}this.selection=null;this.fireEvent("selectionchange",this,null)}},hasSelection:function(){return this.selection?true:false},handleMouseDown:function(b,d,a,c){if(c.button!==0||this.isLocked()){return}this.select(d,a)},select:function(g,c,b,e,d){if(this.fireEvent("beforecellselect",this,g,c)!==false){this.clearSelections();d=d||this.grid.store.getAt(g);this.selection={record:d,cell:[g,c]};if(!b){var a=this.grid.getView();a.onCellSelect(g,c);if(e!==true){a.focusCell(g,c)}}this.fireEvent("cellselect",this,g,c);this.fireEvent("selectionchange",this,this.selection)}},isSelectable:function(c,b,a){return !a.isHidden(b)},onEditorKey:function(b,a){if(a.getKey()==a.TAB){this.handleKeyDown(a)}},handleKeyDown:function(l){if(!l.isNavKeyPress()){return}var d=l.getKey(),i=this.grid,q=this.selection,b=this,n=function(g,c,e){return i.walkCells(g,c,e,i.isEditor&&i.editing?b.acceptsNav:b.isSelectable,b)},p,h,a,m,o;switch(d){case l.ESC:case l.PAGE_UP:case l.PAGE_DOWN:break;default:l.stopEvent();break}if(!q){p=n(0,0,1);if(p){this.select(p[0],p[1])}return}p=q.cell;a=p[0];m=p[1];switch(d){case l.TAB:if(l.shiftKey){h=n(a,m-1,-1)}else{h=n(a,m+1,1)}break;case l.DOWN:h=n(a+1,m,1);break;case l.UP:h=n(a-1,m,-1);break;case l.RIGHT:h=n(a,m+1,1);break;case l.LEFT:h=n(a,m-1,-1);break;case l.ENTER:if(i.isEditor&&!i.editing){i.startEditing(a,m);return}break}if(h){a=h[0];m=h[1];this.select(a,m);if(i.isEditor&&i.editing){o=i.activeEditor;if(o&&o.field.triggerBlur){o.field.triggerBlur()}i.startEditing(a,m)}}},acceptsNav:function(c,b,a){return !a.isHidden(b)&&a.isCellEditable(b,c)}});Ext.grid.EditorGridPanel=Ext.extend(Ext.grid.GridPanel,{clicksToEdit:2,forceValidation:false,isEditor:true,detectEdit:false,autoEncode:false,trackMouseOver:false,initComponent:function(){Ext.grid.EditorGridPanel.superclass.initComponent.call(this);if(!this.selModel){this.selModel=new Ext.grid.CellSelectionModel()}this.activeEditor=null;this.addEvents("beforeedit","afteredit","validateedit")},initEvents:function(){Ext.grid.EditorGridPanel.superclass.initEvents.call(this);this.getGridEl().on("mousewheel",this.stopEditing.createDelegate(this,[true]),this);this.on("columnresize",this.stopEditing,this,[true]);if(this.clicksToEdit==1){this.on("cellclick",this.onCellDblClick,this)}else{var a=this.getView();if(this.clicksToEdit=="auto"&&a.mainBody){a.mainBody.on("mousedown",this.onAutoEditClick,this)}this.on("celldblclick",this.onCellDblClick,this)}},onResize:function(){Ext.grid.EditorGridPanel.superclass.onResize.apply(this,arguments);var a=this.activeEditor;if(this.editing&&a){a.realign(true)}},onCellDblClick:function(b,c,a){this.startEditing(c,a)},onAutoEditClick:function(c,b){if(c.button!==0){return}var g=this.view.findRowIndex(b),a=this.view.findCellIndex(b);if(g!==false&&a!==false){this.stopEditing();if(this.selModel.getSelectedCell){var d=this.selModel.getSelectedCell();if(d&&d[0]===g&&d[1]===a){this.startEditing(g,a)}}else{if(this.selModel.isSelected(g)){this.startEditing(g,a)}}}},onEditComplete:function(b,d,a){this.editing=false;this.lastActiveEditor=this.activeEditor;this.activeEditor=null;var c=b.record,h=this.colModel.getDataIndex(b.col);d=this.postEditValue(d,a,c,h);if(this.forceValidation===true||String(d)!==String(a)){var g={grid:this,record:c,field:h,originalValue:a,value:d,row:b.row,column:b.col,cancel:false};if(this.fireEvent("validateedit",g)!==false&&!g.cancel&&String(d)!==String(a)){c.set(h,g.value);delete g.cancel;this.fireEvent("afteredit",g)}}this.view.focusCell(b.row,b.col)},startEditing:function(i,c){this.stopEditing();if(this.colModel.isCellEditable(c,i)){this.view.ensureVisible(i,c,true);var d=this.store.getAt(i),h=this.colModel.getDataIndex(c),g={grid:this,record:d,field:h,value:d.data[h],row:i,column:c,cancel:false};if(this.fireEvent("beforeedit",g)!==false&&!g.cancel){this.editing=true;var b=this.colModel.getCellEditor(c,i);if(!b){return}if(!b.rendered){b.parentEl=this.view.getEditorParent(b);b.on({scope:this,render:{fn:function(e){e.field.focus(false,true)},single:true,scope:this},specialkey:function(l,k){this.getSelectionModel().onEditorKey(l,k)},complete:this.onEditComplete,canceledit:this.stopEditing.createDelegate(this,[true])})}Ext.apply(b,{row:i,col:c,record:d});this.lastEdit={row:i,col:c};this.activeEditor=b;b.selectSameEditor=(this.activeEditor==this.lastActiveEditor);var a=this.preEditValue(d,h);b.startEdit(this.view.getCell(i,c).firstChild,Ext.isDefined(a)?a:"");(function(){delete b.selectSameEditor}).defer(50)}}},preEditValue:function(a,c){var b=a.data[c];return this.autoEncode&&Ext.isString(b)?Ext.util.Format.htmlDecode(b):b},postEditValue:function(c,a,b,d){return this.autoEncode&&Ext.isString(c)?Ext.util.Format.htmlEncode(c):c},stopEditing:function(b){if(this.editing){var a=this.lastActiveEditor=this.activeEditor;if(a){a[b===true?"cancelEdit":"completeEdit"]();this.view.focusCell(a.row,a.col)}this.activeEditor=null}this.editing=false}});Ext.reg("editorgrid",Ext.grid.EditorGridPanel);Ext.grid.GridEditor=function(b,a){Ext.grid.GridEditor.superclass.constructor.call(this,b,a);b.monitorTab=false};Ext.extend(Ext.grid.GridEditor,Ext.Editor,{alignment:"tl-tl",autoSize:"width",hideEl:false,cls:"x-small-editor x-grid-editor",shim:false,shadow:false});Ext.grid.PropertyRecord=Ext.data.Record.create([{name:"name",type:"string"},"value"]);Ext.grid.PropertyStore=Ext.extend(Ext.util.Observable,{constructor:function(a,b){this.grid=a;this.store=new Ext.data.Store({recordType:Ext.grid.PropertyRecord});this.store.on("update",this.onUpdate,this);if(b){this.setSource(b)}Ext.grid.PropertyStore.superclass.constructor.call(this)},setSource:function(c){this.source=c;this.store.removeAll();var b=[];for(var a in c){if(this.isEditableValue(c[a])){b.push(new Ext.grid.PropertyRecord({name:a,value:c[a]},a))}}this.store.loadRecords({records:b},{},true)},onUpdate:function(e,a,d){if(d==Ext.data.Record.EDIT){var b=a.data.value;var c=a.modified.value;if(this.grid.fireEvent("beforepropertychange",this.source,a.id,b,c)!==false){this.source[a.id]=b;a.commit();this.grid.fireEvent("propertychange",this.source,a.id,b,c)}else{a.reject()}}},getProperty:function(a){return this.store.getAt(a)},isEditableValue:function(a){return Ext.isPrimitive(a)||Ext.isDate(a)},setValue:function(d,c,a){var b=this.getRec(d);if(b){b.set("value",c);this.source[d]=c}else{if(a){this.source[d]=c;b=new Ext.grid.PropertyRecord({name:d,value:c},d);this.store.add(b)}}},remove:function(b){var a=this.getRec(b);if(a){this.store.remove(a);delete this.source[b]}},getRec:function(a){return this.store.getById(a)},getSource:function(){return this.source}});Ext.grid.PropertyColumnModel=Ext.extend(Ext.grid.ColumnModel,{nameText:"Name",valueText:"Value",dateFormat:"m/j/Y",trueText:"true",falseText:"false",constructor:function(c,b){var d=Ext.grid,e=Ext.form;this.grid=c;d.PropertyColumnModel.superclass.constructor.call(this,[{header:this.nameText,width:50,sortable:true,dataIndex:"name",id:"name",menuDisabled:true},{header:this.valueText,width:50,resizable:false,dataIndex:"value",id:"value",menuDisabled:true}]);this.store=b;var a=new e.Field({autoCreate:{tag:"select",children:[{tag:"option",value:"true",html:this.trueText},{tag:"option",value:"false",html:this.falseText}]},getValue:function(){return this.el.dom.value=="true"}});this.editors={date:new d.GridEditor(new e.DateField({selectOnFocus:true})),string:new d.GridEditor(new e.TextField({selectOnFocus:true})),number:new d.GridEditor(new e.NumberField({selectOnFocus:true,style:"text-align:left;"})),"boolean":new d.GridEditor(a,{autoSize:"both"})};this.renderCellDelegate=this.renderCell.createDelegate(this);this.renderPropDelegate=this.renderProp.createDelegate(this)},renderDate:function(a){return a.dateFormat(this.dateFormat)},renderBool:function(a){return this[a?"trueText":"falseText"]},isCellEditable:function(a,b){return a==1},getRenderer:function(a){return a==1?this.renderCellDelegate:this.renderPropDelegate},renderProp:function(a){return this.getPropertyName(a)},renderCell:function(d,b,c){var a=this.grid.customRenderers[c.get("name")];if(a){return a.apply(this,arguments)}var e=d;if(Ext.isDate(d)){e=this.renderDate(d)}else{if(typeof d=="boolean"){e=this.renderBool(d)}}return Ext.util.Format.htmlEncode(e)},getPropertyName:function(b){var a=this.grid.propertyNames;return a&&a[b]?a[b]:b},getCellEditor:function(a,e){var b=this.store.getProperty(e),d=b.data.name,c=b.data.value;if(this.grid.customEditors[d]){return this.grid.customEditors[d]}if(Ext.isDate(c)){return this.editors.date}else{if(typeof c=="number"){return this.editors.number}else{if(typeof c=="boolean"){return this.editors["boolean"]}else{return this.editors.string}}}},destroy:function(){Ext.grid.PropertyColumnModel.superclass.destroy.call(this);this.destroyEditors(this.editors);this.destroyEditors(this.grid.customEditors)},destroyEditors:function(b){for(var a in b){Ext.destroy(b[a])}}});Ext.grid.PropertyGrid=Ext.extend(Ext.grid.EditorGridPanel,{enableColumnMove:false,stripeRows:false,trackMouseOver:false,clicksToEdit:1,enableHdMenu:false,viewConfig:{forceFit:true},initComponent:function(){this.customRenderers=this.customRenderers||{};this.customEditors=this.customEditors||{};this.lastEditRow=null;var b=new Ext.grid.PropertyStore(this);this.propStore=b;var a=new Ext.grid.PropertyColumnModel(this,b);b.store.sort("name","ASC");this.addEvents("beforepropertychange","propertychange");this.cm=a;this.ds=b.store;Ext.grid.PropertyGrid.superclass.initComponent.call(this);this.mon(this.selModel,"beforecellselect",function(e,d,c){if(c===0){this.startEditing.defer(200,this,[d,1]);return false}},this)},onRender:function(){Ext.grid.PropertyGrid.superclass.onRender.apply(this,arguments);this.getGridEl().addClass("x-props-grid")},afterRender:function(){Ext.grid.PropertyGrid.superclass.afterRender.apply(this,arguments);if(this.source){this.setSource(this.source)}},setSource:function(a){this.propStore.setSource(a)},getSource:function(){return this.propStore.getSource()},setProperty:function(c,b,a){this.propStore.setValue(c,b,a)},removeProperty:function(a){this.propStore.remove(a)}});Ext.reg("propertygrid",Ext.grid.PropertyGrid);Ext.grid.GroupingView=Ext.extend(Ext.grid.GridView,{groupByText:"Group By This Field",showGroupsText:"Show in Groups",hideGroupedColumn:false,showGroupName:true,startCollapsed:false,enableGrouping:true,enableGroupingMenu:true,enableNoGroups:true,emptyGroupText:"(None)",ignoreAdd:false,groupTextTpl:"{text}",groupMode:"value",cancelEditOnToggle:true,initTemplates:function(){Ext.grid.GroupingView.superclass.initTemplates.call(this);this.state={};var a=this.grid.getSelectionModel();a.on(a.selectRow?"beforerowselect":"beforecellselect",this.onBeforeRowSelect,this);if(!this.startGroup){this.startGroup=new Ext.XTemplate('
    ','
    ',this.groupTextTpl,"
    ",'
    ')}this.startGroup.compile();if(!this.endGroup){this.endGroup="
    "}},findGroup:function(a){return Ext.fly(a).up(".x-grid-group",this.mainBody.dom)},getGroups:function(){return this.hasRows()?this.mainBody.dom.childNodes:[]},onAdd:function(d,a,b){if(this.canGroup()&&!this.ignoreAdd){var c=this.getScrollState();this.fireEvent("beforerowsinserted",d,b,b+(a.length-1));this.refresh();this.restoreScroll(c);this.fireEvent("rowsinserted",d,b,b+(a.length-1))}else{if(!this.canGroup()){Ext.grid.GroupingView.superclass.onAdd.apply(this,arguments)}}},onRemove:function(e,a,b,d){Ext.grid.GroupingView.superclass.onRemove.apply(this,arguments);var c=document.getElementById(a._groupId);if(c&&c.childNodes[1].childNodes.length<1){Ext.removeNode(c)}this.applyEmptyText()},refreshRow:function(a){if(this.ds.getCount()==1){this.refresh()}else{this.isUpdating=true;Ext.grid.GroupingView.superclass.refreshRow.apply(this,arguments);this.isUpdating=false}},beforeMenuShow:function(){var c,a=this.hmenu.items,b=this.cm.config[this.hdCtxIndex].groupable===false;if((c=a.get("groupBy"))){c.setDisabled(b)}if((c=a.get("showGroups"))){c.setDisabled(b);c.setChecked(this.canGroup(),true)}},renderUI:function(){var a=Ext.grid.GroupingView.superclass.renderUI.call(this);if(this.enableGroupingMenu&&this.hmenu){this.hmenu.add("-",{itemId:"groupBy",text:this.groupByText,handler:this.onGroupByClick,scope:this,iconCls:"x-group-by-icon"});if(this.enableNoGroups){this.hmenu.add({itemId:"showGroups",text:this.showGroupsText,checked:true,checkHandler:this.onShowGroupsClick,scope:this})}this.hmenu.on("beforeshow",this.beforeMenuShow,this)}return a},processEvent:function(b,i){Ext.grid.GroupingView.superclass.processEvent.call(this,b,i);var h=i.getTarget(".x-grid-group-hd",this.mainBody);if(h){var g=this.getGroupField(),d=this.getPrefix(g),a=h.id.substring(d.length),c=new RegExp("gp-"+Ext.escapeRe(g)+"--hd");a=a.substr(0,a.length-3);if(a||c.test(h.id)){this.grid.fireEvent("group"+b,this.grid,g,a,i)}if(b=="mousedown"&&i.button==0){this.toggleGroup(h.parentNode)}}},onGroupByClick:function(){var a=this.grid;this.enableGrouping=true;a.store.groupBy(this.cm.getDataIndex(this.hdCtxIndex));a.fireEvent("groupchange",a,a.store.getGroupState());this.beforeMenuShow();this.refresh()},onShowGroupsClick:function(a,b){this.enableGrouping=b;if(b){this.onGroupByClick()}else{this.grid.store.clearGrouping();this.grid.fireEvent("groupchange",this,null)}},toggleRowIndex:function(c,a){if(!this.canGroup()){return}var b=this.getRow(c);if(b){this.toggleGroup(this.findGroup(b),a)}},toggleGroup:function(c,b){var a=Ext.get(c);b=Ext.isDefined(b)?b:a.hasClass("x-grid-group-collapsed");if(this.state[a.id]!==b){if(this.cancelEditOnToggle!==false){this.grid.stopEditing(true)}this.state[a.id]=b;a[b?"removeClass":"addClass"]("x-grid-group-collapsed")}},toggleAllGroups:function(c){var b=this.getGroups();for(var d=0,a=b.length;d=0){cacheItem=listeners[index];} +if(!el||!cacheItem){return false;} +this.doRemove(el,eventName,cacheItem[this.WFN],false);delete listeners[index][this.WFN];delete listeners[index][this.FN];listeners.splice(index,1);return true;},getTarget:function(ev,resolveTextNode){ev=ev.browserEvent||ev;var t=ev.target||ev.srcElement;return this.resolveTextNode(t);},resolveTextNode:function(node){if(Ext.isWebKit&&node&&3==node.nodeType){return node.parentNode;}else{return node;}},getPageX:function(ev){ev=ev.browserEvent||ev;var x=ev.pageX;if(!x&&0!==x){x=ev.clientX||0;if(Ext.isIE){x+=this.getScroll()[1];}} +return x;},getPageY:function(ev){ev=ev.browserEvent||ev;var y=ev.pageY;if(!y&&0!==y){y=ev.clientY||0;if(Ext.isIE){y+=this.getScroll()[0];}} +return y;},getXY:function(ev){ev=ev.browserEvent||ev;return[this.getPageX(ev),this.getPageY(ev)];},getRelatedTarget:function(ev){ev=ev.browserEvent||ev;var t=ev.relatedTarget;if(!t){if(ev.type=="mouseout"){t=ev.toElement;}else if(ev.type=="mouseover"){t=ev.fromElement;}} +return this.resolveTextNode(t);},getTime:function(ev){ev=ev.browserEvent||ev;if(!ev.time){var t=new Date().getTime();try{ev.time=t;}catch(ex){this.lastError=ex;return t;}} +return ev.time;},stopEvent:function(ev){this.stopPropagation(ev);this.preventDefault(ev);},stopPropagation:function(ev){ev=ev.browserEvent||ev;if(ev.stopPropagation){ev.stopPropagation();}else{ev.cancelBubble=true;}},preventDefault:function(ev){ev=ev.browserEvent||ev;if(ev.preventDefault){ev.preventDefault();}else{ev.returnValue=false;}},getEvent:function(e){var ev=e||window.event;if(!ev){var c=this.getEvent.caller;while(c){ev=c.arguments[0];if(ev&&Event==ev.constructor){break;} +c=c.caller;}} +return ev;},getCharCode:function(ev){ev=ev.browserEvent||ev;return ev.charCode||ev.keyCode||0;},_getCacheIndex:function(el,eventName,fn){for(var i=0,len=listeners.length;i0);} +var notAvail=[];for(var i=0,len=onAvailStack.length;i0){for(var i=0,len=searchList.length;i0){j=listeners.length;while(j){index=j-1;l=listeners[index];if(l){EU.removeListener(l[EU.EL],l[EU.TYPE],l[EU.FN],index);} +j=j-1;} +l=null;EU.clearCache();} +EU.doRemove(window,"unload",EU._unload);},getScroll:function(){var dd=document.documentElement,db=document.body;if(dd&&(dd.scrollTop||dd.scrollLeft)){return[dd.scrollTop,dd.scrollLeft];}else if(db){return[db.scrollTop,db.scrollLeft];}else{return[0,0];}},doAdd:function(){if(window.addEventListener){return function(el,eventName,fn,capture){el.addEventListener(eventName,fn,(capture));};}else if(window.attachEvent){return function(el,eventName,fn,capture){el.attachEvent("on"+eventName,fn);};}else{return function(){};}}(),doRemove:function(){if(window.removeEventListener){return function(el,eventName,fn,capture){el.removeEventListener(eventName,fn,(capture));};}else if(window.detachEvent){return function(el,eventName,fn){el.detachEvent("on"+eventName,fn);};}else{return function(){};}}()};}();var E=Ext.lib.Event;E.on=E.addListener;E.un=E.removeListener;if(document&&document.body){E._load();}else{E.doAdd(window,"load",E._load);} +E.doAdd(window,"unload",E._unload);E._tryPreloadAttach();Ext.lib.Ajax={request:function(method,uri,cb,data,options){if(options){var hs=options.headers;if(hs){for(var h in hs){if(hs.hasOwnProperty(h)){this.initHeader(h,hs[h],false);}}} +if(options.xmlData){if(!hs||!hs['Content-Type']){this.initHeader('Content-Type','text/xml',false);} +method=(method?method:(options.method?options.method:'POST'));data=options.xmlData;}else if(options.jsonData){if(!hs||!hs['Content-Type']){this.initHeader('Content-Type','application/json',false);} +method=(method?method:(options.method?options.method:'POST'));data=typeof options.jsonData=='object'?Ext.encode(options.jsonData):options.jsonData;}} +return this.asyncRequest(method,uri,cb,data);},serializeForm:function(form){if(typeof form=='string'){form=(document.getElementById(form)||document.forms[form]);} +var el,name,val,disabled,data='',hasSubmit=false;for(var i=0;i=200&&httpStatus<300)||(Ext.isIE&&httpStatus==1223)){responseObject=this.createResponseObject(o,callback.argument);if(callback.success){if(!callback.scope){callback.success(responseObject);} +else{callback.success.apply(callback.scope,[responseObject]);}}} +else{switch(httpStatus){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:responseObject=this.createExceptionObject(o.tId,callback.argument,(isAbort?isAbort:false));if(callback.failure){if(!callback.scope){callback.failure(responseObject);} +else{callback.failure.apply(callback.scope,[responseObject]);}} +break;default:responseObject=this.createResponseObject(o,callback.argument);if(callback.failure){if(!callback.scope){callback.failure(responseObject);} +else{callback.failure.apply(callback.scope,[responseObject]);}}}} +this.releaseObject(o);responseObject=null;},createResponseObject:function(o,callbackArg) +{var obj={};var headerObj={};try +{var headerStr=o.conn.getAllResponseHeaders();var header=headerStr.split('\n');for(var i=0;i=this.left&®ion.right<=this.right&®ion.top>=this.top&®ion.bottom<=this.bottom);},getArea:function(){return((this.bottom-this.top)*(this.right-this.left));},intersect:function(region){var t=Math.max(this.top,region.top);var r=Math.min(this.right,region.right);var b=Math.min(this.bottom,region.bottom);var l=Math.max(this.left,region.left);if(b>=t&&r>=l){return new Ext.lib.Region(t,r,b,l);}else{return null;}},union:function(region){var t=Math.min(this.top,region.top);var r=Math.max(this.right,region.right);var b=Math.max(this.bottom,region.bottom);var l=Math.min(this.left,region.left);return new Ext.lib.Region(t,r,b,l);},constrainTo:function(r){this.top=this.top.constrain(r.top,r.bottom);this.bottom=this.bottom.constrain(r.top,r.bottom);this.left=this.left.constrain(r.left,r.right);this.right=this.right.constrain(r.left,r.right);return this;},adjust:function(t,l,b,r){this.top+=t;this.left+=l;this.right+=r;this.bottom+=b;return this;}};Ext.lib.Region.getRegion=function(el){var p=Ext.lib.Dom.getXY(el);var t=p[1];var r=p[0]+el.offsetWidth;var b=p[1]+el.offsetHeight;var l=p[0];return new Ext.lib.Region(t,r,b,l);};Ext.lib.Point=function(x,y){if(Ext.isArray(x)){y=x[1];x=x[0];} +this.x=this.right=this.left=this[0]=x;this.y=this.top=this.bottom=this[1]=y;};Ext.lib.Point.prototype=new Ext.lib.Region();Ext.lib.Anim={scroll:function(el,args,duration,easing,cb,scope){return this.run(el,args,duration,easing,cb,scope,Ext.lib.Scroll);},motion:function(el,args,duration,easing,cb,scope){return this.run(el,args,duration,easing,cb,scope,Ext.lib.Motion);},color:function(el,args,duration,easing,cb,scope){return this.run(el,args,duration,easing,cb,scope,Ext.lib.ColorAnim);},run:function(el,args,duration,easing,cb,scope,type){type=type||Ext.lib.AnimBase;if(typeof easing=="string"){easing=Ext.lib.Easing[easing];} +var anim=new type(el,args,duration,easing);anim.animateX(function(){Ext.callback(cb,scope);});return anim;}};function fly(el){if(!libFlyweight){libFlyweight=new Ext.Element.Flyweight();} +libFlyweight.dom=el;return libFlyweight;} +if(Ext.isIE){function fnCleanUp(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;window.detachEvent("onunload",fnCleanUp);} +window.attachEvent("onunload",fnCleanUp);} +Ext.lib.AnimBase=function(el,attributes,duration,method){if(el){this.init(el,attributes,duration,method);}};Ext.lib.AnimBase.prototype={toString:function(){var el=this.getEl();var id=el.id||el.tagName;return("Anim "+id);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(attr,start,end){return this.method(this.currentFrame,start,end-start,this.totalFrames);},setAttribute:function(attr,val,unit){if(this.patterns.noNegatives.test(attr)){val=(val>0)?val:0;} +Ext.fly(this.getEl(),'_anim').setStyle(attr,val+unit);},getAttribute:function(attr){var el=this.getEl();var val=fly(el).getStyle(attr);if(val!=='auto'&&!this.patterns.offsetUnit.test(val)){return parseFloat(val);} +var a=this.patterns.offsetAttribute.exec(attr)||[];var pos=!!(a[3]);var box=!!(a[2]);if(box||(fly(el).getStyle('position')=='absolute'&&pos)){val=el['offset'+a[0].charAt(0).toUpperCase()+a[0].substr(1)];}else{val=0;} +return val;},getDefaultUnit:function(attr){if(this.patterns.defaultUnit.test(attr)){return'px';} +return'';},animateX:function(callback,scope){var f=function(){this.onComplete.removeListener(f);if(typeof callback=="function"){callback.call(scope||this,this);}};this.onComplete.addListener(f,this);this.animate();},setRuntimeAttribute:function(attr){var start;var end;var attributes=this.attributes;this.runtimeAttributes[attr]={};var isset=function(prop){return(typeof prop!=='undefined');};if(!isset(attributes[attr]['to'])&&!isset(attributes[attr]['by'])){return false;} +start=(isset(attributes[attr]['from']))?attributes[attr]['from']:this.getAttribute(attr);if(isset(attributes[attr]['to'])){end=attributes[attr]['to'];}else if(isset(attributes[attr]['by'])){if(start.constructor==Array){end=[];for(var i=0,len=start.length;i0&&isFinite(tweak)){if(tween.currentFrame+tweak>=frames){tweak=frames-(frame+1);} +tween.currentFrame+=tweak;}};};Ext.lib.Bezier=new function(){this.getPosition=function(points,t){var n=points.length;var tmp=[];for(var i=0;i0&&!Ext.isArray(control[0])){control=[control];}else{var tmp=[];for(i=0,len=control.length;i0){this.runtimeAttributes[attr]=this.runtimeAttributes[attr].concat(control);} +this.runtimeAttributes[attr][this.runtimeAttributes[attr].length]=end;} +else{superclass.setRuntimeAttribute.call(this,attr);}};var translateValues=function(val,start){var pageXY=Ext.lib.Dom.getXY(this.getEl());val=[val[0]-pageXY[0]+start[0],val[1]-pageXY[1]+start[1]];return val;};var isset=function(prop){return(typeof prop!=='undefined');};})();(function(){Ext.lib.Scroll=function(el,attributes,duration,method){if(el){Ext.lib.Scroll.superclass.constructor.call(this,el,attributes,duration,method);}};Ext.extend(Ext.lib.Scroll,Ext.lib.ColorAnim);var Y=Ext.lib;var superclass=Y.Scroll.superclass;var proto=Y.Scroll.prototype;proto.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return("Scroll "+id);};proto.doMethod=function(attr,start,end){var val=null;if(attr=='scroll'){val=[this.method(this.currentFrame,start[0],end[0]-start[0],this.totalFrames),this.method(this.currentFrame,start[1],end[1]-start[1],this.totalFrames)];}else{val=superclass.doMethod.call(this,attr,start,end);} +return val;};proto.getAttribute=function(attr){var val=null;var el=this.getEl();if(attr=='scroll'){val=[el.scrollLeft,el.scrollTop];}else{val=superclass.getAttribute.call(this,attr);} +return val;};proto.setAttribute=function(attr,val,unit){var el=this.getEl();if(attr=='scroll'){el.scrollLeft=val[0];el.scrollTop=val[1];}else{superclass.setAttribute.call(this,attr,val,unit);}};})();})(); diff --git a/tests/javascript/frameworks/ext/ext-base-3.3.1.js b/tests/javascript/frameworks/ext/ext-base-3.3.1.js new file mode 100644 index 0000000000000000000000000000000000000000..e164634078c40b056e031fd624f2a73cb3600ad6 --- /dev/null +++ b/tests/javascript/frameworks/ext/ext-base-3.3.1.js @@ -0,0 +1,7 @@ +/* + * Ext JS Library 3.3.1 + * Copyright(c) 2006-2010 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +window.undefined=window.undefined;Ext={version:"3.3.1",versionDetail:{major:3,minor:3,patch:1}};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e=="object"){for(var a in e){d[a]=e[a]}}return d};(function(){var g=0,t=Object.prototype.toString,u=navigator.userAgent.toLowerCase(),z=function(e){return e.test(u)},i=document,n=i.documentMode,l=i.compatMode=="CSS1Compat",B=z(/opera/),h=z(/\bchrome\b/),v=z(/webkit/),y=!h&&z(/safari/),f=y&&z(/applewebkit\/4/),b=y&&z(/version\/3/),C=y&&z(/version\/4/),s=!B&&z(/msie/),q=s&&(z(/msie 7/)||n==7),p=s&&(z(/msie 8/)&&n!=7),r=s&&!q&&!p,o=!v&&z(/gecko/),d=o&&z(/rv:1\.8/),a=o&&z(/rv:1\.9/),w=s&&!l,A=z(/windows|win32/),k=z(/macintosh|mac os x/),j=z(/adobeair/),m=z(/linux/),c=/^https/i.test(window.location.protocol);if(r){try{i.execCommand("BackgroundImageCache",false,true)}catch(x){}}Ext.apply(Ext,{SSL_SECURE_URL:c&&s?'javascript:""':"about:blank",isStrict:l,isSecure:c,isReady:false,enableForcedBoxModel:false,enableGarbageCollector:true,enableListenerCollection:false,enableNestedListenerRemoval:false,USE_NATIVE_JSON:false,applyIf:function(D,E){if(D){for(var e in E){if(!Ext.isDefined(D[e])){D[e]=E[e]}}}return D},id:function(e,D){e=Ext.getDom(e,true)||{};if(!e.id){e.id=(D||"ext-gen")+(++g)}return e.id},extend:function(){var D=function(F){for(var E in F){this[E]=F[E]}};var e=Object.prototype.constructor;return function(K,H,J){if(typeof H=="object"){J=H;H=K;K=J.constructor!=e?J.constructor:function(){H.apply(this,arguments)}}var G=function(){},I,E=H.prototype;G.prototype=E;I=K.prototype=new G();I.constructor=K;K.superclass=E;if(E.constructor==e){E.constructor=H}K.override=function(F){Ext.override(K,F)};I.superclass=I.supr=(function(){return E});I.override=D;Ext.override(K,J);K.extend=function(F){return Ext.extend(K,F)};return K}}(),override:function(e,E){if(E){var D=e.prototype;Ext.apply(D,E);if(Ext.isIE&&E.hasOwnProperty("toString")){D.toString=E.toString}}},namespace:function(){var D,e;Ext.each(arguments,function(E){e=E.split(".");D=window[e[0]]=window[e[0]]||{};Ext.each(e.slice(1),function(F){D=D[F]=D[F]||{}})});return D},urlEncode:function(H,G){var E,D=[],F=encodeURIComponent;Ext.iterate(H,function(e,I){E=Ext.isEmpty(I);Ext.each(E?e:I,function(J){D.push("&",F(e),"=",(!Ext.isEmpty(J)&&(J!=e||!E))?(Ext.isDate(J)?Ext.encode(J).replace(/"/g,""):F(J)):"")})});if(!G){D.shift();G=""}return G+D.join("")},urlDecode:function(E,D){if(Ext.isEmpty(E)){return{}}var H={},G=E.split("&"),I=decodeURIComponent,e,F;Ext.each(G,function(J){J=J.split("=");e=I(J[0]);F=I(J[1]);H[e]=D||!H[e]?F:[].concat(H[e]).concat(F)});return H},urlAppend:function(e,D){if(!Ext.isEmpty(D)){return e+(e.indexOf("?")===-1?"?":"&")+D}return e},toArray:function(){return s?function(E,H,F,G){G=[];for(var D=0,e=E.length;D0){return setTimeout(d,c)}d();return 0}});Ext.applyIf(String,{format:function(b){var a=Ext.toArray(arguments,1);return b.replace(/\{(\d+)\}/g,function(c,d){return a[d]})}});Ext.applyIf(Array.prototype,{indexOf:function(b,c){var a=this.length;c=c||0;c+=(c<0)?a:0;for(;c0){for(var p=0;p0);if(!A){A=true;for(I=0;I=0){B=s.substr(0,A).toLowerCase();if(s.charAt(A+1)==" "){++A}C[B]=s.substr(A+1)}})}catch(z){}return{tId:u.tId,status:v?204:w.status,statusText:v?"No Content":w.statusText,getResponseHeader:function(s){return C[s.toLowerCase()]},getAllResponseHeaders:function(){return x},responseText:w.responseText,responseXML:w.responseXML,argument:y}}function o(s){if(s.tId){k.conn[s.tId]=null}s.conn=null;s=null}function f(x,y,t,s){if(!y){o(x);return}var v,u;try{if(x.conn.status!==undefined&&x.conn.status!=0){v=x.conn.status}else{v=13030}}catch(w){v=13030}if((v>=200&&v<300)||(Ext.isIE&&v==1223)){u=p(x,y.argument);if(y.success){if(!y.scope){y.success(u)}else{y.success.apply(y.scope,[u])}}}else{switch(v){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:u=e(x.tId,y.argument,(t?t:false),s);if(y.failure){if(!y.scope){y.failure(u)}else{y.failure.apply(y.scope,[u])}}break;default:u=p(x,y.argument);if(y.failure){if(!y.scope){y.failure(u)}else{y.failure.apply(y.scope,[u])}}}}o(x);u=null}function m(u,x,s,w,t,v){if(s&&s.readyState==4){clearInterval(t[w]);t[w]=null;if(v){clearTimeout(k.timeout[w]);k.timeout[w]=null}f(u,x)}}function r(s,t){k.abort(s,t,true)}function n(u,x){x=x||{};var s=u.conn,w=u.tId,t=k.poll,v=x.timeout||null;if(v){k.conn[w]=s;k.timeout[w]=setTimeout(r.createCallback(u,x),v)}t[w]=setInterval(m.createCallback(u,x,s,w,t,v),k.pollInterval)}function i(w,t,v,s){var u=l()||null;if(u){u.conn.open(w,t,true);if(k.useDefaultXhrHeader){j("X-Requested-With",k.defaultXhrHeader)}if(s&&k.useDefaultHeader&&(!k.headers||!k.headers[d])){j(d,k.defaultPostHeader)}if(k.defaultHeaders||k.headers){h(u)}n(u,v);u.conn.send(s||null)}return u}function l(){var t;try{if(t=q(k.transactionId)){k.transactionId++}}catch(s){}finally{return t}}function q(v){var s;try{s=new XMLHttpRequest()}catch(u){for(var t=0;t0&&isFinite(w)){if(r.curFrame+w>=v){w=v-(u+1)}r.curFrame+=w}}};g.Bezier=new function(){this.getPosition=function(p,o){var r=p.length,m=[],q=1-o,l,k;for(l=0;l0&&!Ext.isArray(s[0])){s=[s]}else{}Ext.fly(p,"_anim").position();A.setXY(p,j(x)?x:A.getXY(p));o=w.getAttr("points");if(j(y)){q=k.call(w,y,o);for(r=0,t=s.length;r0){n=n.concat(s)}n[n.length]=q}else{m.setRunAttr.call(this,u)}}});var k=function(n,p){var o=g.Dom.getXY(this.el);return[n[0]-o[0]+p[0],n[1]-o[1]+p[1]]}})()})();(function(){var d=Math.abs,i=Math.PI,h=Math.asin,g=Math.pow,e=Math.sin,f=Ext.lib;Ext.apply(f.Easing,{easeBoth:function(k,j,m,l){return((k/=l/2)<1)?m/2*k*k+j:-m/2*((--k)*(k-2)-1)+j},easeInStrong:function(k,j,m,l){return m*(k/=l)*k*k*k+j},easeOutStrong:function(k,j,m,l){return -m*((k=k/l-1)*k*k*k-1)+j},easeBothStrong:function(k,j,m,l){return((k/=l/2)<1)?m/2*k*k*k*k+j:-m/2*((k-=2)*k*k*k-2)+j},elasticIn:function(l,j,q,o,k,n){if(l==0||(l/=o)==1){return l==0?j:j+q}n=n||(o*0.3);var m;if(k>=d(q)){m=n/(2*i)*h(q/k)}else{k=q;m=n/4}return -(k*g(2,10*(l-=1))*e((l*o-m)*(2*i)/n))+j},elasticOut:function(l,j,q,o,k,n){if(l==0||(l/=o)==1){return l==0?j:j+q}n=n||(o*0.3);var m;if(k>=d(q)){m=n/(2*i)*h(q/k)}else{k=q;m=n/4}return k*g(2,-10*l)*e((l*o-m)*(2*i)/n)+q+j},elasticBoth:function(l,j,q,o,k,n){if(l==0||(l/=o/2)==2){return l==0?j:j+q}n=n||(o*(0.3*1.5));var m;if(k>=d(q)){m=n/(2*i)*h(q/k)}else{k=q;m=n/4}return l<1?-0.5*(k*g(2,10*(l-=1))*e((l*o-m)*(2*i)/n))+j:k*g(2,-10*(l-=1))*e((l*o-m)*(2*i)/n)*0.5+q+j},backIn:function(k,j,n,m,l){l=l||1.70158;return n*(k/=m)*k*((l+1)*k-l)+j},backOut:function(k,j,n,m,l){if(!l){l=1.70158}return n*((k=k/m-1)*k*((l+1)*k+l)+1)+j},backBoth:function(k,j,n,m,l){l=l||1.70158;return((k/=m/2)<1)?n/2*(k*k*(((l*=(1.525))+1)*k-l))+j:n/2*((k-=2)*k*(((l*=(1.525))+1)*k+l)+2)+j},bounceIn:function(k,j,m,l){return m-f.Easing.bounceOut(l-k,0,m,l)+j},bounceOut:function(k,j,m,l){if((k/=l)<(1/2.75)){return m*(7.5625*k*k)+j}else{if(k<(2/2.75)){return m*(7.5625*(k-=(1.5/2.75))*k+0.75)+j}else{if(k<(2.5/2.75)){return m*(7.5625*(k-=(2.25/2.75))*k+0.9375)+j}}}return m*(7.5625*(k-=(2.625/2.75))*k+0.984375)+j},bounceBoth:function(k,j,m,l){return(k0){return setTimeout(d,c)}d();return 0}});Ext.applyIf(String,{format:function(b){var a=Ext.toArray(arguments,1);return b.replace(/\{(\d+)\}/g,function(c,d){return a[d]})}});Ext.applyIf(Array.prototype,{indexOf:function(c){for(var b=0,a=this.length;b0){for(var r=0;r0);if(!E){E=true;Ext.each(r,function(N,O,M){if(N&&(J=H.getElementById(N.id))){if(!N.checkReady||x||J.nextSibling||(H&&H.body)){J=N.override?(N.override===true?N.obj:N.override):J;N.fn.call(J,N.obj);r[O]=null}else{L.push(item)}}});B=(L.length==0)?0:B-1;if(K){o()}else{clearInterval(d);d=null}I=!(E=false)}return I}function o(){if(!d){var I=function(){F()};d=setInterval(I,t)}}function G(){var I=Ext.fly(H).getScroll();return[I.top,I.top]}function k(I,J){I=I.browserEvent||I;var K=I["page"+J];if(!K&&0!=K){K=I["client"+J]||0;if(Ext.isIE){K+=G()[J=="X"?0:1]}}return K}var z={onAvailable:function(K,I,L,J){r.push({id:K,fn:I,obj:L,override:J,checkReady:false});B=m;o()},addListener:function(L,I,K){var J;L=Ext.getDom(L);if(L&&K){if("unload"==I){J=!!(g[g.length]=[L,I,K])}else{v.push([L,I,K,J=e(L,I,K,false)])}}return !!J},removeListener:function(N,J,M){var L=false,K,I;N=Ext.getDom(N);if(!M){L=this.purgeElement(N,false,J)}else{if("unload"==J){Ext.each(g,function(P,Q,O){if(P&&P[0]==N&&P[1]==J&&P[2]==M){g.splice(Q,1);L=true}})}else{K=arguments[3]||A(N,J,M);I=v[K];if(N&&I){h(N,J,I[n],false);I[n]=I[j]=null;v.splice(K,1);L=true}}}return L},getTarget:function(I){I=I.browserEvent||I;return this.resolveTextNode(I.target||I.srcElement)},resolveTextNode:function(I){return I&&!D(I)&&q(I)?I.parentNode:I},getRelatedTarget:function(I){I=I.browserEvent||I;return this.resolveTextNode(I.relatedTarget||(I.type=="mouseout"?I.toElement:I.type=="mouseover"?I.fromElement:null))},getPageX:function(I){return k(I,"X")},getPageY:function(I){return k(I,"Y")},getXY:function(I){return[this.getPageX(I),this.getPageY(I)]},stopEvent:function(I){this.stopPropagation(I);this.preventDefault(I)},stopPropagation:function(I){I=I.browserEvent||I;if(I.stopPropagation){I.stopPropagation()}else{I.cancelBubble=true}},preventDefault:function(I){I=I.browserEvent||I;if(I.preventDefault){I.preventDefault()}else{I.returnValue=false}},getEvent:function(I){I=I||l.event;if(!I){var J=this.getEvent.caller;while(J){I=J.arguments[0];if(I&&Event==I.constructor){break}J=J.caller}}return I},getCharCode:function(I){I=I.browserEvent||I;return I.charCode||I.keyCode||0},_load:function(J){x=true;var I=Ext.lib.Event;if(Ext.isIE&&J!==true){h(l,"load",arguments.callee)}},purgeElement:function(J,L,I){var K=this;Ext.each(K.getListeners(J,I),function(M){if(M){K.removeListener(J,M.type,M.fn)}});if(L&&J&&J.childNodes){Ext.each(J.childNodes,function(M){K.purgeElement(M,L,I)})}},getListeners:function(L,J){var M=this,K=[],I;if(J){I=J=="unload"?g:v}else{I=v.concat(g)}Ext.each(I,function(N,O){if(N&&N[C]==L&&(!J||J==N[s])){K.push({type:N[s],fn:N[j],obj:N[u],adjust:N[y],index:O})}});return K.length?K:null},_unload:function(P){var O=Ext.lib.Event,M,L,J,I,K,N;Ext.each(g,function(Q){if(Q){try{N=Q[y]?(Q[y]===true?Q[u]:Q[y]):l;Q[j].call(N,O.getEvent(R),Q[u])}catch(R){}}});g=null;if(v&&(L=v.length)){while(L){if(J=v[K=--L]){O.removeListener(J[C],J[s],J[j],K)}}}h(l,"unload",O._unload)}};z.on=z.addListener;z.un=z.removeListener;if(H&&H.body){z._load(true)}else{e(l,"load",z._load)}e(l,"unload",z._unload);F();return z}();Ext.lib.Ajax=function(){var g=["MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];function h(t){var s=t.conn,u;function r(v,w){for(u in w){if(w.hasOwnProperty(u)){v.setRequestHeader(u,w[u])}}}if(l.defaultHeaders){r(s,l.defaultHeaders)}if(l.headers){r(s,l.headers);l.headers=null}}function d(u,t,s,r){return{tId:u,status:s?-1:0,statusText:s?"transaction aborted":"communication failure",isAbort:true,isTimeout:true,argument:t}}function k(r,s){(l.headers=l.headers||{})[r]=s}function p(w,u){var r={},s,t=w.conn;try{s=w.conn.getAllResponseHeaders();Ext.each(s.split("\n"),function(x){var y=x.indexOf(":");r[x.substr(0,y)]=x.substr(y+1)})}catch(v){}return{tId:w.tId,status:t.status,statusText:t.statusText,getResponseHeader:function(x){return r[x]},getAllResponseHeaders:function(){return s},responseText:t.responseText,responseXML:t.responseXML,argument:u}}function o(r){r.conn=null;r=null}function e(w,x,s,r){if(!x){o(w);return}var u,t;try{if(w.conn.status!==undefined&&w.conn.status!=0){u=w.conn.status}else{u=13030}}catch(v){u=13030}if((u>=200&&u<300)||(Ext.isIE&&u==1223)){t=p(w,x.argument);if(x.success){if(!x.scope){x.success(t)}else{x.success.apply(x.scope,[t])}}}else{switch(u){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:t=d(w.tId,x.argument,(s?s:false),r);if(x.failure){if(!x.scope){x.failure(t)}else{x.failure.apply(x.scope,[t])}}break;default:t=p(w,x.argument);if(x.failure){if(!x.scope){x.failure(t)}else{x.failure.apply(x.scope,[t])}}}}o(w);t=null}function n(t,w){w=w||{};var r=t.conn,v=t.tId,s=l.poll,u=w.timeout||null;if(u){l.timeout[v]=setTimeout(function(){l.abort(t,w,true)},u)}s[v]=setInterval(function(){if(r&&r.readyState==4){clearInterval(s[v]);s[v]=null;if(u){clearTimeout(l.timeout[v]);l.timeout[v]=null}e(t,w)}},l.pollInterval)}function j(v,s,u,r){var t=m()||null;if(t){t.conn.open(v,s,true);if(l.useDefaultXhrHeader){k("X-Requested-With",l.defaultXhrHeader)}if(r&&l.useDefaultHeader&&(!l.headers||!l.headers["Content-Type"])){k("Content-Type",l.defaultPostHeader)}if(l.defaultHeaders||l.headers){h(t)}n(t,u);t.conn.send(r||null)}return t}function m(){var s;try{if(s=q(l.transactionId)){l.transactionId++}}catch(r){}finally{return s}}function q(u){var r;try{r=new XMLHttpRequest()}catch(t){for(var s=0;s0&&isFinite(y)){if(t.curFrame+y>=x){y=x-(w+1)}t.curFrame+=y}}};h.Bezier=new function(){this.getPosition=function(r,q){var u=r.length,p=[],s=1-q,o,m;for(o=0;o0&&!Ext.isArray(v[0])){v=[v]}else{}Ext.fly(s,"_anim").position();D.setXY(s,l(A)?A:D.getXY(s));r=z.getAttr("points");if(l(B)){t=m.call(z,B,r);for(u=0,w=v.length;u0){q=q.concat(v)}q[q.length]=t}else{p.setRunAttr.call(this,x)}}});var m=function(q,s){var r=h.Dom.getXY(this.el);return[q[0]-r[0]+s[0],q[1]-r[1]+s[1]]}})()})();(function(){var d=Math.abs,k=Math.PI,j=Math.asin,h=Math.pow,e=Math.sin,g=Ext.lib;Ext.apply(g.Easing,{easeBoth:function(m,l,o,n){return((m/=n/2)<1)?o/2*m*m+l:-o/2*((--m)*(m-2)-1)+l},easeInStrong:function(m,l,o,n){return o*(m/=n)*m*m*m+l},easeOutStrong:function(m,l,o,n){return -o*((m=m/n-1)*m*m*m-1)+l},easeBothStrong:function(m,l,o,n){return((m/=n/2)<1)?o/2*m*m*m*m+l:-o/2*((m-=2)*m*m*m-2)+l},elasticIn:function(n,l,u,r,m,q){if(n==0||(n/=r)==1){return n==0?l:l+u}q=q||(r*0.3);var o;if(m>=d(u)){o=q/(2*k)*j(u/m)}else{m=u;o=q/4}return -(m*h(2,10*(n-=1))*e((n*r-o)*(2*k)/q))+l},elasticOut:function(n,l,u,r,m,q){if(n==0||(n/=r)==1){return n==0?l:l+u}q=q||(r*0.3);var o;if(m>=d(u)){o=q/(2*k)*j(u/m)}else{m=u;o=q/4}return m*h(2,-10*n)*e((n*r-o)*(2*k)/q)+u+l},elasticBoth:function(n,l,u,r,m,q){if(n==0||(n/=r/2)==2){return n==0?l:l+u}q=q||(r*(0.3*1.5));var o;if(m>=d(u)){o=q/(2*k)*j(u/m)}else{m=u;o=q/4}return n<1?-0.5*(m*h(2,10*(n-=1))*e((n*r-o)*(2*k)/q))+l:m*h(2,-10*(n-=1))*e((n*r-o)*(2*k)/q)*0.5+u+l},backIn:function(m,l,p,o,n){n=n||1.70158;return p*(m/=o)*m*((n+1)*m-n)+l},backOut:function(m,l,p,o,n){if(!n){n=1.70158}return p*((m=m/o-1)*m*((n+1)*m+n)+1)+l},backBoth:function(m,l,p,o,n){n=n||1.70158;return((m/=o/2)<1)?p/2*(m*m*(((n*=(1.525))+1)*m-n))+l:p/2*((m-=2)*m*(((n*=(1.525))+1)*m+n)+2)+l},bounceIn:function(m,l,o,n){return o-g.Easing.bounceOut(n-m,0,o,n)+l},bounceOut:function(m,l,o,n){if((m/=n)<(1/2.75)){return o*(7.5625*m*m)+l}else{if(m<(2/2.75)){return o*(7.5625*(m-=(1.5/2.75))*m+0.75)+l}else{if(m<(2.5/2.75)){return o*(7.5625*(m-=(2.25/2.75))*m+0.9375)+l}}}return o*(7.5625*(m-=(2.625/2.75))*m+0.984375)+l},bounceBoth:function(m,l,o,n){return(m0},suspendEvents:function(p){this.eventsSuspended=h;if(p){this.suspendedEventsQueue=[]}},resumeEvents:function(){var p=this;p.eventsSuspended=!delete p.suspendedEventQueue;l(p.suspendedEventsQueue,function(q){p.fireEvent.apply(p,q)})}}}();var e=j.Observable.prototype;e.on=e.addListener;e.un=e.removeListener;j.Observable.releaseCapture=function(n){n.fireEvent=e.fireEvent};function g(p,q,n){return function(){if(q.target==arguments[0]){p.apply(n,m(arguments))}}}function c(q,r,p){var n=new j.DelayedTask();return function(){n.delay(r.buffer,q,p,m(arguments))}}function d(p,q,o,n){return function(){q.removeListener(o,n);return p.apply(n,arguments)}}function b(p,q,n){return function(){var o=m(arguments);(function(){p.apply(n,o)}).defer(q.delay||10)}}j.Event=function(o,n){this.name=n;this.obj=o;this.listeners=[]};j.Event.prototype={addListener:function(q,p,o){var r=this,n;p=p||r.obj;if(!r.isListening(q,p)){n=r.createListener(q,p,o);if(r.firing){r.listeners=r.listeners.slice(0)}r.listeners.push(n)}},createListener:function(r,q,s){s=s||{},q=q||this.obj;var n={fn:r,scope:q,options:s},p=r;if(s.target){p=g(p,s,q)}if(s.delay){p=b(p,s,q)}if(s.single){p=d(p,this,r,q)}if(s.buffer){p=c(p,s,q)}n.fireFn=p;return n},findListener:function(q,p){var o,n=-1;l(this.listeners,function(r,s){o=r.scope;if(r.fn==q&&(o==p||o==this.obj)){n=s;return k}},this);return n},isListening:function(o,n){return this.findListener(o,n)!=-1},removeListener:function(q,p){var o,r=this,n=k;if((o=r.findListener(q,p))!=-1){if(r.firing){r.listeners=r.listeners.slice(0)}r.listeners.splice(o,1);n=h}return n},clearListeners:function(){this.listeners=[]},fire:function(){var p=this,o=m(arguments),n=h;l(p.listeners,function(q){p.firing=h;if(q.fireFn.apply(q.scope||p.obj||window,o)===k){return n=p.firing=k}});p.firing=k;return n}}})();Ext.DomHelper=function(){var t=null,k=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i,m=/^table|tbody|tr|td$/i,q,n="afterbegin",o="afterend",c="beforebegin",p="beforeend",a="",h="
    ",b=a+"",j=""+h,l=b+"",s=""+j;function g(x,z,y,A,w,u){var v=q.insertHtml(A,Ext.getDom(x),r(z));return y?Ext.get(v,true):v}function r(z){var w="",v,y,x,u,A;if(typeof z=="string"){w=z}else{if(Ext.isArray(z)){Ext.each(z,function(B){w+=r(B)})}else{w+="<"+(z.tag=z.tag||"div");for(v in z){y=z[v];if(!/tag|children|cn|html$/i.test(v)&&!Ext.isFunction(y)){if(Ext.isObject(y)){w+=" "+v+"='";for(x in y){u=y[x];w+=!Ext.isFunction(u)?x+":"+u+";":""}w+="'"}else{w+=" "+({cls:"class",htmlFor:"for"}[v]||v)+"='"+y+"'"}}}if(k.test(z.tag)){w+="/>"}else{w+=">";if(A=z.children||z.cn){w+=r(A)}else{if(z.html){w+=z.html}}w+=""}}}return w}function e(z,x,w,y){t.innerHTML=[x,w,y].join("");var u=-1,v=t;while(++u "'+z+'"'},insertBefore:function(u,w,v){return g(u,w,v,c)},insertAfter:function(u,w,v){return g(u,w,v,o,"nextSibling")},insertFirst:function(u,w,v){return g(u,w,v,n,"firstChild")},append:function(u,w,v){return g(u,w,v,p,"",true)},overwrite:function(u,w,v){u=Ext.getDom(u);u.innerHTML=r(w);return v?Ext.get(u.firstChild):u.firstChild},createHtml:r};return q}();Ext.Template=function(d){var e=this,b=arguments,c=[];if(Ext.isArray(d)){d=d.join("")}else{if(b.length>1){Ext.each(b,function(a){if(Ext.isObject(a)){Ext.apply(e,a)}else{c.push(a)}});d=c.join("")}}e.html=d;if(e.compiled){e.compile()}};Ext.Template.prototype={applyTemplate:function(a){var b=this;return b.compiled?b.compiled(a):b.html.replace(b.re,function(c,d){return a[d]!==undefined?a[d]:""})},set:function(a,c){var b=this;b.html=a;b.compiled=null;return c?b.compile():b},re:/\{([\w-]+)\}/g,compile:function(){var me=this,sep=Ext.isGecko?"+":",";function fn(m,name){name="values['"+name+"']";return"'"+sep+"("+name+" == undefined ? '' : "+name+")"+sep+"'"}eval("this.compiled = function(values){ return "+(Ext.isGecko?"'":"['")+me.html.replace(/\\/g,"\\\\").replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn)+(Ext.isGecko?"';};":"'].join('');};"));return me},insertFirst:function(b,a,c){return this.doInsert("afterBegin",b,a,c)},insertBefore:function(b,a,c){return this.doInsert("beforeBegin",b,a,c)},insertAfter:function(b,a,c){return this.doInsert("afterEnd",b,a,c)},append:function(b,a,c){return this.doInsert("beforeEnd",b,a,c)},doInsert:function(c,e,b,a){e=Ext.getDom(e);var d=Ext.DomHelper.insertHtml(c,e,this.applyTemplate(b));return a?Ext.get(d,true):d},overwrite:function(b,a,c){b=Ext.getDom(b);b.innerHTML=this.applyTemplate(a);return c?Ext.get(b.firstChild,true):b.firstChild}};Ext.Template.prototype.apply=Ext.Template.prototype.applyTemplate;Ext.Template.from=function(b,a){b=Ext.getDom(b);return new Ext.Template(b.value||b.innerHTML,a||"")};Ext.DomQuery=function(){var cache={},simpleCache={},valueCache={},nonSpace=/\S/,trimRe=/^\s+|\s+$/g,tplRe=/\{(\d+)\}/g,modeRe=/^(\s?[\/>+~]\s?|\s|$)/,tagTokenRe=/^(#)?([\w-\*]+)/,nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/,isIE=window.ActiveXObject?true:false,isOpera=Ext.isOpera,key=30803;eval("var batch = 30803;");function child(p,index){var i=0,n=p.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n}}n=n.nextSibling}return null}function next(n){while((n=n.nextSibling)&&n.nodeType!=1){}return n}function prev(n){while((n=n.previousSibling)&&n.nodeType!=1){}return n}function children(d){var n=d.firstChild,ni=-1,nx;while(n){nx=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){d.removeChild(n)}else{n.nodeIndex=++ni}n=nx}return this}function byClassName(c,a,v){if(!v){return c}var r=[],ri=-1,cn;for(var i=0,ci;ci=c[i];i++){if((" "+ci.className+" ").indexOf(v)!=-1){r[++ri]=ci}}return r}function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0]}if(!n){return null}if(attr=="for"){return n.htmlFor}if(attr=="class"||attr=="className"){return n.className}return n.getAttribute(attr)||n[attr]}function getNodes(ns,mode,tagName){var result=[],ri=-1,cs;if(!ns){return result}tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns]}if(!mode){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[++ri]=ci}}}else{if(mode=="/"||mode==">"){var utag=tagName.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=isOpera?ni.childNodes:(ni.children||ni.childNodes);for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){result[++ri]=cj}}}}else{if(mode=="+"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){result[++ri]=n}}}else{if(mode=="~"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)){if(n.nodeName==utag||n.nodeName==tagName||tagName=="*"){result[++ri]=n}}}}}}}return result}function concat(a,b){if(b.slice){return a.concat(b)}for(var i=0,l=b.length;i1){return nodup(results)}return results},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0]},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select")}var n=valueCache[path](root),v;n=n[0]?n[0]:n;v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==="")?defaultValue:v)},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v)},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el)}var isArray=Ext.isArray(el),result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0)},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple")}var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result},matchers:[{re:/^\.([\w-]+)/,select:'n = byClassName(n, null, " {1} ");'},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w-]+)/,select:'n = byId(n, null, "{1}");'},{re:/^@([\w-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v},"!=":function(a,v){return a!=v},"^=":function(a,v){return a&&a.substr(0,v.length)==v},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v},"*=":function(a,v){return a&&a.indexOf(v)!==-1},"%=":function(a,v){return(a%v)==0},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+"-")},"~=":function(a,v){return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"nth-child":function(c,a){var r=[],ri=-1,m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a),f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j}}pn._batch=batch}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n}}else{if((n.nodeIndex+l)%f==0){r[++ri]=n}}}return r},"only-child":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci}}return r},empty:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break}}if(empty){r[++ri]=ci}}return r},contains:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||"").indexOf(v)!=-1){r[++ri]=ci}}return r},nodeValue:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci}}return r},checked:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci}}return r},not:function(c,ss){return Ext.DomQuery.filter(c,ss,true)},any:function(c,selectors){var ss=selectors.split("|"),r=[],ri=-1,s;for(var i=0,ci;ci=c[i];i++){for(var j=0;s=ss[j];j++){if(Ext.DomQuery.is(ci,s)){r[++ri]=ci;break}}}return r},odd:function(c){return this["nth-child"](c,"odd")},even:function(c){return this["nth-child"](c,"even")},nth:function(c,a){return c[a-1]||[]},first:function(c){return c[0]||[]},last:function(c){return c[c.length-1]||[]},has:function(c,ss){var s=Ext.DomQuery.select,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci}}return r},next:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},prev:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r}}}}();Ext.query=Ext.DomQuery.select;Ext.EventManager=function(){var u,n,k=false,m=Ext.lib.Event,o=Ext.lib.Dom,b=document,v=window,g="ie-deferred-loader",p="DOMContentLoaded",e={},h=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;function l(B,x,A,z,y){var D=Ext.id(B),C=e[D]=e[D]||{};(C[x]=C[x]||[]).push([A,z,y]);m.on(B,x,z);if(x=="mousewheel"&&B.addEventListener){var w=["DOMMouseScroll",z,false];B.addEventListener.apply(B,w);m.on(window,"unload",function(){B.removeEventListener.apply(B,w)})}if(x=="mousedown"&&B==document){Ext.EventManager.stoppedMouseDownEvent.addListener(z)}}function c(){if(!k){Ext.isReady=k=true;if(n){clearInterval(n)}if(Ext.isGecko||Ext.isOpera){b.removeEventListener(p,c,false)}if(Ext.isIE){var w=b.getElementById(g);if(w){w.onreadystatechange=null;w.parentNode.removeChild(w)}}if(u){u.fire();u.clearListeners()}}}function a(){var w="complete";u=new Ext.util.Event();if(Ext.isGecko||Ext.isOpera){b.addEventListener(p,c,false)}else{if(Ext.isIE){b.write(" + (end) + + Returns: + email=bob@bob.com&zipCode=90210 + */ + + toQueryString: function(){ + var queryString = []; + this.getFormElements().each(function(el){ + var name = el.name; + var value = el.getValue(); + if (value === false || !name || el.disabled) return; + var qs = function(val){ + queryString.push(name + '=' + encodeURIComponent(val)); + }; + if ($type(value) == 'array') value.each(qs); + else qs(value); + }); + return queryString.join('&'); + } + +}); + +/* +Script: Element.Dimensions.js + Contains Element prototypes to deal with Element size and position in space. + +Note: + The functions in this script require n XHTML doctype. + +License: + MIT-style license. +*/ + +/* +Class: Element + Custom class to allow all of its methods to be used with any DOM element via the dollar function <$>. +*/ + +Element.extend({ + + /* + Property: scrollTo + Scrolls the element to the specified coordinated (if the element has an overflow) + + Arguments: + x - the x coordinate + y - the y coordinate + + Example: + >$('myElement').scrollTo(0, 100) + */ + + scrollTo: function(x, y){ + this.scrollLeft = x; + this.scrollTop = y; + }, + + /* + Property: getSize + Return an Object representing the size/scroll values of the element. + + Example: + (start code) + $('myElement').getSize(); + (end) + + Returns: + (start code) + { + 'scroll': {'x': 100, 'y': 100}, + 'size': {'x': 200, 'y': 400}, + 'scrollSize': {'x': 300, 'y': 500} + } + (end) + */ + + getSize: function(){ + return { + 'scroll': {'x': this.scrollLeft, 'y': this.scrollTop}, + 'size': {'x': this.offsetWidth, 'y': this.offsetHeight}, + 'scrollSize': {'x': this.scrollWidth, 'y': this.scrollHeight} + }; + }, + + /* + Property: getPosition + Returns the real offsets of the element. + + Arguments: + overflown - optional, an array of nested scrolling containers for scroll offset calculation, use this if your element is inside any element containing scrollbars + + Example: + >$('element').getPosition(); + + Returns: + >{x: 100, y:500}; + */ + + getPosition: function(overflown){ + overflown = overflown || []; + var el = this, left = 0, top = 0; + do { + left += el.offsetLeft || 0; + top += el.offsetTop || 0; + el = el.offsetParent; + } while (el); + overflown.each(function(element){ + left -= element.scrollLeft || 0; + top -= element.scrollTop || 0; + }); + return {'x': left, 'y': top}; + }, + + /* + Property: getTop + Returns the distance from the top of the window to the Element. + + Arguments: + overflown - optional, an array of nested scrolling containers, see Element::getPosition + */ + + getTop: function(overflown){ + return this.getPosition(overflown).y; + }, + + /* + Property: getLeft + Returns the distance from the left of the window to the Element. + + Arguments: + overflown - optional, an array of nested scrolling containers, see Element::getPosition + */ + + getLeft: function(overflown){ + return this.getPosition(overflown).x; + }, + + /* + Property: getCoordinates + Returns an object with width, height, left, right, top, and bottom, representing the values of the Element + + Arguments: + overflown - optional, an array of nested scrolling containers, see Element::getPosition + + Example: + (start code) + var myValues = $('myElement').getCoordinates(); + (end) + + Returns: + (start code) + { + width: 200, + height: 300, + left: 100, + top: 50, + right: 300, + bottom: 350 + } + (end) + */ + + getCoordinates: function(overflown){ + var position = this.getPosition(overflown); + var obj = { + 'width': this.offsetWidth, + 'height': this.offsetHeight, + 'left': position.x, + 'top': position.y + }; + obj.right = obj.left + obj.width; + obj.bottom = obj.top + obj.height; + return obj; + } + +}); + +/* +Script: Window.DomReady.js + Contains the custom event domready, for window. + +License: + MIT-style license. +*/ + +/* Section: Custom Events */ + +/* +Event: domready + executes a function when the dom tree is loaded, without waiting for images. Only works when called from window. + +Credits: + (c) Dean Edwards/Matthias Miller/John Resig, remastered for MooTools. + +Arguments: + fn - the function to execute when the DOM is ready + +Example: + > window.addEvent('domready', function(){ + > alert('the dom is ready'); + > }); +*/ + +Element.Events.domready = { + + add: function(fn){ + if (window.loaded){ + fn.call(this); + return; + } + var domReady = function(){ + if (window.loaded) return; + window.loaded = true; + window.timer = $clear(window.timer); + this.fireEvent('domready'); + }.bind(this); + if (document.readyState && window.webkit){ + window.timer = function(){ + if (['loaded','complete'].contains(document.readyState)) domReady(); + }.periodical(50); + } else if (document.readyState && window.ie){ + if (!$('ie_ready')){ + var src = (window.location.protocol == 'https:') ? '://0' : 'javascript:void(0)'; + document.write(' + (end) + */ + + send: function(options){ + return new Ajax(this.getProperty('action'), $merge({data: this.toQueryString()}, options, {method: 'post'})).request(); + } + +}); + +/* +Script: Cookie.js + A cookie reader/creator + +Credits: + based on the functions by Peter-Paul Koch (http://quirksmode.org) +*/ + +/* +Class: Cookie + Class for creating, getting, and removing cookies. +*/ + +var Cookie = new Abstract({ + + options: { + domain: false, + path: false, + duration: false, + secure: false + }, + + /* + Property: set + Sets a cookie in the browser. + + Arguments: + key - the key (name) for the cookie + value - the value to set, cannot contain semicolons + options - an object representing the Cookie options. See Options below. Default values are stored in Cookie.options. + + Options: + domain - the domain the Cookie belongs to. If you want to share the cookie with pages located on a different domain, you have to set this value. Defaults to the current domain. + path - the path the Cookie belongs to. If you want to share the cookie with pages located in a different path, you have to set this value, for example to "/" to share the cookie with all pages on the domain. Defaults to the current path. + duration - the duration of the Cookie before it expires, in days. + If set to false or 0, the cookie will be a session cookie that expires when the browser is closed. This is default. + secure - Stored cookie information can be accessed only from a secure environment. + + Returns: + An object with the options, the key and the value. You can give it as first parameter to Cookie.remove. + + Example: + >Cookie.set('username', 'Harald'); // session cookie (duration is false), or ... + >Cookie.set('username', 'JackBauer', {duration: 1}); // save this for 1 day + + */ + + set: function(key, value, options){ + options = $merge(this.options, options); + value = encodeURIComponent(value); + if (options.domain) value += '; domain=' + options.domain; + if (options.path) value += '; path=' + options.path; + if (options.duration){ + var date = new Date(); + date.setTime(date.getTime() + options.duration * 24 * 60 * 60 * 1000); + value += '; expires=' + date.toGMTString(); + } + if (options.secure) value += '; secure'; + document.cookie = key + '=' + value; + return $extend(options, {'key': key, 'value': value}); + }, + + /* + Property: get + Gets the value of a cookie. + + Arguments: + key - the name of the cookie you wish to retrieve. + + Returns: + The cookie string value, or false if not found. + + Example: + >Cookie.get("username") //returns JackBauer + */ + + get: function(key){ + var value = document.cookie.match('(?:^|;)\\s*' + key.escapeRegExp() + '=([^;]*)'); + return value ? decodeURIComponent(value[1]) : false; + }, + + /* + Property: remove + Removes a cookie from the browser. + + Arguments: + cookie - the name of the cookie to remove or a previous cookie (for domains) + options - optional. you can also pass the domain and path here. Same as options in + + Examples: + >Cookie.remove('username') //bye-bye JackBauer, cya in 24 hours + > + >var myCookie = Cookie.set('username', 'Aaron', {domain: 'mootools.net'}); // Cookie.set returns an object with all values need to remove the cookie + >Cookie.remove(myCookie); + */ + + remove: function(cookie, options){ + if ($type(cookie) == 'object') this.set(cookie.key, '', $merge(cookie, {duration: -1})); + else this.set(cookie, '', $merge(options, {duration: -1})); + } + +}); + +/* +Script: Json.js + Simple Json parser and Stringyfier, See: + +License: + MIT-style license. +*/ + +/* +Class: Json + Simple Json parser and Stringyfier, See: +*/ + +var Json = { + + /* + Property: toString + Converts an object to a string, to be passed in server-side scripts as a parameter. Although its not normal usage for this class, this method can also be used to convert functions and arrays to strings. + + Arguments: + obj - the object to convert to string + + Returns: + A json string + + Example: + (start code) + Json.toString({apple: 'red', lemon: 'yellow'}); '{"apple":"red","lemon":"yellow"}' + (end) + */ + + toString: function(obj){ + switch($type(obj)){ + case 'string': + return '"' + obj.replace(/(["\\])/g, '\\$1') + '"'; + case 'array': + return '[' + obj.map(Json.toString).join(',') + ']'; + case 'object': + var string = []; + for (var property in obj) string.push(Json.toString(property) + ':' + Json.toString(obj[property])); + return '{' + string.join(',') + '}'; + case 'number': + if (isFinite(obj)) break; + case false: + return 'null'; + } + return String(obj); + }, + + /* + Property: evaluate + converts a json string to an javascript Object. + + Arguments: + str - the string to evaluate. if its not a string, it returns false. + secure - optionally, performs syntax check on json string. Defaults to false. + + Credits: + Json test regexp is by Douglas Crockford . + + Example: + >var myObject = Json.evaluate('{"apple":"red","lemon":"yellow"}'); + >//myObject will become {apple: 'red', lemon: 'yellow'} + */ + + evaluate: function(str, secure){ + return (($type(str) != 'string') || (secure && !str.test(/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/))) ? null : eval('(' + str + ')'); + } + +}; + +/* +Script: Json.Remote.js + Contains . + +License: + MIT-style license. +*/ + +/* +Class: Json.Remote + Wrapped XHR with automated sending and receiving of Javascript Objects in Json Format. + Inherits methods, properties, options and events from . + +Arguments: + url - the url you want to send your object to. + options - see options + +Example: + this code will send user information based on name/last name + (start code) + var jSonRequest = new Json.Remote("http://site.com/tellMeAge.php", {onComplete: function(person){ + alert(person.age); //is 25 years + alert(person.height); //is 170 cm + alert(person.weight); //is 120 kg + }}).send({'name': 'John', 'lastName': 'Doe'}); + (end) +*/ + +Json.Remote = XHR.extend({ + + initialize: function(url, options){ + this.url = url; + this.addEvent('onSuccess', this.onComplete); + this.parent(options); + this.setHeader('X-Request', 'JSON'); + }, + + send: function(obj){ + return this.parent(this.url, 'json=' + Json.toString(obj)); + }, + + onComplete: function(){ + this.fireEvent('onComplete', [Json.evaluate(this.response.text, this.options.secure)]); + } + +}); + +/* +Script: Assets.js + provides dynamic loading for images, css and javascript files. + +License: + MIT-style license. +*/ + +var Asset = new Abstract({ + + /* + Property: javascript + Injects a javascript file in the page. + + Arguments: + source - the path of the javascript file + properties - some additional attributes you might want to add to the script element + + Example: + > new Asset.javascript('/scripts/myScript.js', {id: 'myScript'}); + */ + + javascript: function(source, properties){ + properties = $merge({ + 'onload': Class.empty + }, properties); + var script = new Element('script', {'src': source}).addEvents({ + 'load': properties.onload, + 'readystatechange': function(){ + if (this.readyState == 'complete') this.fireEvent('load'); + } + }); + delete properties.onload; + return script.setProperties(properties).inject(document.head); + }, + + /* + Property: css + Injects a css file in the page. + + Arguments: + source - the path of the css file + properties - some additional attributes you might want to add to the link element + + Example: + > new Asset.css('/css/myStyle.css', {id: 'myStyle', title: 'myStyle'}); + */ + + css: function(source, properties){ + return new Element('link', $merge({ + 'rel': 'stylesheet', 'media': 'screen', 'type': 'text/css', 'href': source + }, properties)).inject(document.head); + }, + + /* + Property: image + Preloads an image and returns the img element. does not inject it to the page. + + Arguments: + source - the path of the image file + properties - some additional attributes you might want to add to the img element + + Example: + > new Asset.image('/images/myImage.png', {id: 'myImage', title: 'myImage', onload: myFunction}); + + Returns: + the img element. you can inject it anywhere you want with // + */ + + image: function(source, properties){ + properties = $merge({ + 'onload': Class.empty, + 'onabort': Class.empty, + 'onerror': Class.empty + }, properties); + var image = new Image(); + image.src = source; + var element = new Element('img', {'src': source}); + ['load', 'abort', 'error'].each(function(type){ + var event = properties['on' + type]; + delete properties['on' + type]; + element.addEvent(type, function(){ + this.removeEvent(type, arguments.callee); + event.call(this); + }); + }); + if (image.width && image.height) element.fireEvent('load', element, 1); + return element.setProperties(properties); + }, + + /* + Property: images + Preloads an array of images (as strings) and returns an array of img elements. does not inject them to the page. + + Arguments: + sources - array, the paths of the image files + options - object, see below + + Options: + onComplete - a function to execute when all image files are loaded in the browser's cache + onProgress - a function to execute when one image file is loaded in the browser's cache + + Example: + (start code) + new Asset.images(['/images/myImage.png', '/images/myImage2.gif'], { + onComplete: function(){ + alert('all images loaded!'); + } + }); + (end) + + Returns: + the img elements as $$. you can inject them anywhere you want with // + */ + + images: function(sources, options){ + options = $merge({ + onComplete: Class.empty, + onProgress: Class.empty + }, options); + if (!sources.push) sources = [sources]; + var images = []; + var counter = 0; + sources.each(function(source){ + var img = new Asset.image(source, { + 'onload': function(){ + options.onProgress.call(this, counter); + counter++; + if (counter == sources.length) options.onComplete(); + } + }); + images.push(img); + }); + return new Elements(images); + } + +}); + +/* +Script: Hash.js + Contains the class Hash. + +License: + MIT-style license. +*/ + +/* +Class: Hash + It wraps an object that it uses internally as a map. The user must use set(), get(), and remove() to add/change, retrieve and remove values, it must not access the internal object directly. null/undefined values are allowed. + +Note: + Each hash instance has the length property. + +Arguments: + obj - an object to convert into a Hash instance. + +Example: + (start code) + var hash = new Hash({a: 'hi', b: 'world', c: 'howdy'}); + hash.remove('b'); // b is removed. + hash.set('c', 'hello'); + hash.get('c'); // returns 'hello' + hash.length // returns 2 (a and c) + (end) +*/ + +var Hash = new Class({ + + length: 0, + + initialize: function(object){ + this.obj = object || {}; + this.setLength(); + }, + + /* + Property: get + Retrieves a value from the hash. + + Arguments: + key - The key + + Returns: + The value + */ + + get: function(key){ + return (this.hasKey(key)) ? this.obj[key] : null; + }, + + /* + Property: hasKey + Check the presence of a specified key-value pair in the hash. + + Arguments: + key - The key + + Returns: + True if the Hash contains a value for the specified key, otherwise false + */ + + hasKey: function(key){ + return (key in this.obj); + }, + + /* + Property: set + Adds a key-value pair to the hash or replaces a previous value associated with the key. + + Arguments: + key - The key + value - The value + */ + + set: function(key, value){ + if (!this.hasKey(key)) this.length++; + this.obj[key] = value; + return this; + }, + + setLength: function(){ + this.length = 0; + for (var p in this.obj) this.length++; + return this; + }, + + /* + Property: remove + Removes a key-value pair from the hash. + + Arguments: + key - The key + */ + + remove: function(key){ + if (this.hasKey(key)){ + delete this.obj[key]; + this.length--; + } + return this; + }, + + /* + Property: each + Calls a function for each key-value pair. The first argument passed to the function will be the value, the second one will be the key, like $each. + + Arguments: + fn - The function to call for each key-value pair + bind - Optional, the object that will be referred to as "this" in the function + */ + + each: function(fn, bind){ + $each(this.obj, fn, bind); + }, + + /* + Property: extend + Extends the current hash with an object containing key-value pairs. Values for duplicate keys will be replaced by the new ones. + + Arguments: + obj - An object containing key-value pairs + */ + + extend: function(obj){ + $extend(this.obj, obj); + return this.setLength(); + }, + + /* + Property: merge + Merges the current hash with multiple objects. + */ + + merge: function(){ + this.obj = $merge.apply(null, [this.obj].extend(arguments)); + return this.setLength(); + }, + + /* + Property: empty + Empties all hash values properties and values. + */ + + empty: function(){ + this.obj = {}; + this.length = 0; + return this; + }, + + /* + Property: keys + Returns an array containing all the keys, in the same order as the values returned by . + + Returns: + An array containing all the keys of the hash + */ + + keys: function(){ + var keys = []; + for (var property in this.obj) keys.push(property); + return keys; + }, + + /* + Property: values + Returns an array containing all the values, in the same order as the keys returned by . + + Returns: + An array containing all the values of the hash + */ + + values: function(){ + var values = []; + for (var property in this.obj) values.push(this.obj[property]); + return values; + } + +}); + +/* Section: Utility Functions */ + +/* +Function: $H + Shortcut to create a Hash from an Object. +*/ + +function $H(obj){ + return new Hash(obj); +}; + +/* +Script: Hash.Cookie.js + Stores and loads an Hash as a cookie using Json format. +*/ + +/* +Class: Hash.Cookie + Inherits all the methods from , additional methods are save and load. + Hash json string has a limit of 4kb (4096byte), so be careful with your Hash size. + Creating a new instance automatically loads the data from the Cookie into the Hash. + If the Hash is emptied, the cookie is also removed. + +Arguments: + name - the key (name) for the cookie + options - options are identical to and are simply passed along to it. + In addition, it has the autoSave option, to save the cookie at every operation. defaults to true. + +Example: + (start code) + var fruits = new Hash.Cookie('myCookieName', {duration: 3600}); + fruits.extend({ + 'lemon': 'yellow', + 'apple': 'red' + }); + fruits.set('melon', 'green'); + fruits.get('lemon'); // yellow + + // ... on another page ... values load automatically + + var fruits = new Hash.Cookie('myCookieName', {duration: 365}); + fruits.get('melon'); // green + + fruits.erase(); // delete cookie + (end) +*/ + +Hash.Cookie = Hash.extend({ + + initialize: function(name, options){ + this.name = name; + this.options = $extend({'autoSave': true}, options || {}); + this.load(); + }, + + /* + Property: save + Saves the Hash to the cookie. If the hash is empty, removes the cookie. + + Returns: + Returns false when the JSON string cookie is too long (4kb), otherwise true. + + Example: + (start code) + var login = new Hash.Cookie('userstatus', {autoSave: false}); + + login.extend({ + 'username': 'John', + 'credentials': [4, 7, 9] + }); + login.set('last_message', 'User logged in!'); + + login.save(); // finally save the Hash + (end) + */ + + save: function(){ + if (this.length == 0){ + Cookie.remove(this.name, this.options); + return true; + } + var str = Json.toString(this.obj); + if (str.length > 4096) return false; //cookie would be truncated! + Cookie.set(this.name, str, this.options); + return true; + }, + + /* + Property: load + Loads the cookie and assigns it to the Hash. + */ + + load: function(){ + this.obj = Json.evaluate(Cookie.get(this.name), true) || {}; + this.setLength(); + } + +}); + +Hash.Cookie.Methods = {}; +['extend', 'set', 'merge', 'empty', 'remove'].each(function(method){ + Hash.Cookie.Methods[method] = function(){ + Hash.prototype[method].apply(this, arguments); + if (this.options.autoSave) this.save(); + return this; + }; +}); +Hash.Cookie.implement(Hash.Cookie.Methods); + +/* +Script: Color.js + Contains the Color class. + +License: + MIT-style license. +*/ + +/* +Class: Color + Creates a new Color Object, which is an array with some color specific methods. +Arguments: + color - the hex, the RGB array or the HSB array of the color to create. For HSB colors, you need to specify the second argument. + type - a string representing the type of the color to create. needs to be specified if you intend to create the color with HSB values, or an array of HEX values. Can be 'rgb', 'hsb' or 'hex'. + +Example: + (start code) + var black = new Color('#000'); + var purple = new Color([255,0,255]); + // mix black with white and purple, each time at 10% of the new color + var darkpurple = black.mix('#fff', purple, 10); + $('myDiv').setStyle('background-color', darkpurple); + (end) +*/ + +var Color = new Class({ + + initialize: function(color, type){ + type = type || (color.push ? 'rgb' : 'hex'); + var rgb, hsb; + switch(type){ + case 'rgb': + rgb = color; + hsb = rgb.rgbToHsb(); + break; + case 'hsb': + rgb = color.hsbToRgb(); + hsb = color; + break; + default: + rgb = color.hexToRgb(true); + hsb = rgb.rgbToHsb(); + } + rgb.hsb = hsb; + rgb.hex = rgb.rgbToHex(); + return $extend(rgb, Color.prototype); + }, + + /* + Property: mix + Mixes two or more colors with the Color. + + Arguments: + color - a color to mix. you can use as arguments how many colors as you want to mix with the original one. + alpha - if you use a number as the last argument, it will be threated as the amount of the color to mix. + */ + + mix: function(){ + var colors = $A(arguments); + var alpha = ($type(colors[colors.length - 1]) == 'number') ? colors.pop() : 50; + var rgb = this.copy(); + colors.each(function(color){ + color = new Color(color); + for (var i = 0; i < 3; i++) rgb[i] = Math.round((rgb[i] / 100 * (100 - alpha)) + (color[i] / 100 * alpha)); + }); + return new Color(rgb, 'rgb'); + }, + + /* + Property: invert + Inverts the Color. + */ + + invert: function(){ + return new Color(this.map(function(value){ + return 255 - value; + })); + }, + + /* + Property: setHue + Modifies the hue of the Color, and returns a new one. + + Arguments: + value - the hue to set + */ + + setHue: function(value){ + return new Color([value, this.hsb[1], this.hsb[2]], 'hsb'); + }, + + /* + Property: setSaturation + Changes the saturation of the Color, and returns a new one. + + Arguments: + percent - the percentage of the saturation to set + */ + + setSaturation: function(percent){ + return new Color([this.hsb[0], percent, this.hsb[2]], 'hsb'); + }, + + /* + Property: setBrightness + Changes the brightness of the Color, and returns a new one. + + Arguments: + percent - the percentage of the brightness to set + */ + + setBrightness: function(percent){ + return new Color([this.hsb[0], this.hsb[1], percent], 'hsb'); + } + +}); + +/* Section: Utility Functions */ + +/* +Function: $RGB + Shortcut to create a new color, based on red, green, blue values. + +Arguments: + r - (integer) red value (0-255) + g - (integer) green value (0-255) + b - (integer) blue value (0-255) + +*/ + +function $RGB(r, g, b){ + return new Color([r, g, b], 'rgb'); +}; + +/* +Function: $HSB + Shortcut to create a new color, based on hue, saturation, brightness values. + +Arguments: + h - (integer) hue value (0-100) + s - (integer) saturation value (0-100) + b - (integer) brightness value (0-100) +*/ + +function $HSB(h, s, b){ + return new Color([h, s, b], 'hsb'); +}; + +/* +Class: Array + A collection of The Array Object prototype methods. +*/ + +Array.extend({ + + /* + Property: rgbToHsb + Converts a RGB array to an HSB array. + + Returns: + the HSB array. + */ + + rgbToHsb: function(){ + var red = this[0], green = this[1], blue = this[2]; + var hue, saturation, brightness; + var max = Math.max(red, green, blue), min = Math.min(red, green, blue); + var delta = max - min; + brightness = max / 255; + saturation = (max != 0) ? delta / max : 0; + if (saturation == 0){ + hue = 0; + } else { + var rr = (max - red) / delta; + var gr = (max - green) / delta; + var br = (max - blue) / delta; + if (red == max) hue = br - gr; + else if (green == max) hue = 2 + rr - br; + else hue = 4 + gr - rr; + hue /= 6; + if (hue < 0) hue++; + } + return [Math.round(hue * 360), Math.round(saturation * 100), Math.round(brightness * 100)]; + }, + + /* + Property: hsbToRgb + Converts an HSB array to an RGB array. + + Returns: + the RGB array. + */ + + hsbToRgb: function(){ + var br = Math.round(this[2] / 100 * 255); + if (this[1] == 0){ + return [br, br, br]; + } else { + var hue = this[0] % 360; + var f = hue % 60; + var p = Math.round((this[2] * (100 - this[1])) / 10000 * 255); + var q = Math.round((this[2] * (6000 - this[1] * f)) / 600000 * 255); + var t = Math.round((this[2] * (6000 - this[1] * (60 - f))) / 600000 * 255); + switch(Math.floor(hue / 60)){ + case 0: return [br, t, p]; + case 1: return [q, br, p]; + case 2: return [p, br, t]; + case 3: return [p, q, br]; + case 4: return [t, p, br]; + case 5: return [br, p, q]; + } + } + return false; + } + +}); + +/* +Script: Scroller.js + Contains the . + +License: + MIT-style license. +*/ + +/* +Class: Scroller + The Scroller is a class to scroll any element with an overflow (including the window) when the mouse cursor reaches certain buondaries of that element. + You must call its start method to start listening to mouse movements. + +Note: + The Scroller requires an XHTML doctype. + +Arguments: + element - required, the element to scroll. + options - optional, see options below, and options. + +Options: + area - integer, the necessary boundaries to make the element scroll. + velocity - integer, velocity ratio, the modifier for the window scrolling speed. + +Events: + onChange - optionally, when the mouse reaches some boundaries, you can choose to alter some other values, instead of the scrolling offsets. + Automatically passes as parameters x and y values. +*/ + +var Scroller = new Class({ + + options: { + area: 20, + velocity: 1, + onChange: function(x, y){ + this.element.scrollTo(x, y); + } + }, + + initialize: function(element, options){ + this.setOptions(options); + this.element = $(element); + this.mousemover = ([window, document].contains(element)) ? $(document.body) : this.element; + }, + + /* + Property: start + The scroller starts listening to mouse movements. + */ + + start: function(){ + this.coord = this.getCoords.bindWithEvent(this); + this.mousemover.addListener('mousemove', this.coord); + }, + + /* + Property: stop + The scroller stops listening to mouse movements. + */ + + stop: function(){ + this.mousemover.removeListener('mousemove', this.coord); + this.timer = $clear(this.timer); + }, + + getCoords: function(event){ + this.page = (this.element == window) ? event.client : event.page; + if (!this.timer) this.timer = this.scroll.periodical(50, this); + }, + + scroll: function(){ + var el = this.element.getSize(); + var pos = this.element.getPosition(); + + var change = {'x': 0, 'y': 0}; + for (var z in this.page){ + if (this.page[z] < (this.options.area + pos[z]) && el.scroll[z] != 0) + change[z] = (this.page[z] - this.options.area - pos[z]) * this.options.velocity; + else if (this.page[z] + this.options.area > (el.size[z] + pos[z]) && el.scroll[z] + el.size[z] != el.scrollSize[z]) + change[z] = (this.page[z] - el.size[z] + this.options.area - pos[z]) * this.options.velocity; + } + if (change.y || change.x) this.fireEvent('onChange', [el.scroll.x + change.x, el.scroll.y + change.y]); + } + +}); + +Scroller.implement(new Events, new Options); + +/* +Script: Slider.js + Contains + +License: + MIT-style license. +*/ + +/* +Class: Slider + Creates a slider with two elements: a knob and a container. Returns the values. + +Note: + The Slider requires an XHTML doctype. + +Arguments: + element - the knob container + knob - the handle + options - see Options below + +Options: + steps - the number of steps for your slider. + mode - either 'horizontal' or 'vertical'. defaults to horizontal. + offset - relative offset for knob position. default to 0. + +Events: + onChange - a function to fire when the value changes. + onComplete - a function to fire when you're done dragging. + onTick - optionally, you can alter the onTick behavior, for example displaying an effect of the knob moving to the desired position. + Passes as parameter the new position. +*/ + +var Slider = new Class({ + + options: { + onChange: Class.empty, + onComplete: Class.empty, + onTick: function(pos){ + this.knob.setStyle(this.p, pos); + }, + mode: 'horizontal', + steps: 100, + offset: 0 + }, + + initialize: function(el, knob, options){ + this.element = $(el); + this.knob = $(knob); + this.setOptions(options); + this.previousChange = -1; + this.previousEnd = -1; + this.step = -1; + this.element.addEvent('mousedown', this.clickedElement.bindWithEvent(this)); + var mod, offset; + switch(this.options.mode){ + case 'horizontal': + this.z = 'x'; + this.p = 'left'; + mod = {'x': 'left', 'y': false}; + offset = 'offsetWidth'; + break; + case 'vertical': + this.z = 'y'; + this.p = 'top'; + mod = {'x': false, 'y': 'top'}; + offset = 'offsetHeight'; + } + this.max = this.element[offset] - this.knob[offset] + (this.options.offset * 2); + this.half = this.knob[offset]/2; + this.getPos = this.element['get' + this.p.capitalize()].bind(this.element); + this.knob.setStyle('position', 'relative').setStyle(this.p, - this.options.offset); + var lim = {}; + lim[this.z] = [- this.options.offset, this.max - this.options.offset]; + this.drag = new Drag.Base(this.knob, { + limit: lim, + modifiers: mod, + snap: 0, + onStart: function(){ + this.draggedKnob(); + }.bind(this), + onDrag: function(){ + this.draggedKnob(); + }.bind(this), + onComplete: function(){ + this.draggedKnob(); + this.end(); + }.bind(this) + }); + if (this.options.initialize) this.options.initialize.call(this); + }, + + /* + Property: set + The slider will get the step you pass. + + Arguments: + step - one integer + */ + + set: function(step){ + this.step = step.limit(0, this.options.steps); + this.checkStep(); + this.end(); + this.fireEvent('onTick', this.toPosition(this.step)); + return this; + }, + + clickedElement: function(event){ + var position = event.page[this.z] - this.getPos() - this.half; + position = position.limit(-this.options.offset, this.max -this.options.offset); + this.step = this.toStep(position); + this.checkStep(); + this.end(); + this.fireEvent('onTick', position); + }, + + draggedKnob: function(){ + this.step = this.toStep(this.drag.value.now[this.z]); + this.checkStep(); + }, + + checkStep: function(){ + if (this.previousChange != this.step){ + this.previousChange = this.step; + this.fireEvent('onChange', this.step); + } + }, + + end: function(){ + if (this.previousEnd !== this.step){ + this.previousEnd = this.step; + this.fireEvent('onComplete', this.step + ''); + } + }, + + toStep: function(position){ + return Math.round((position + this.options.offset) / this.max * this.options.steps); + }, + + toPosition: function(step){ + return this.max * step / this.options.steps; + } + +}); + +Slider.implement(new Events); +Slider.implement(new Options); + +/* +Script: SmoothScroll.js + Contains + +License: + MIT-style license. +*/ + +/* +Class: SmoothScroll + Auto targets all the anchors in a page and display a smooth scrolling effect upon clicking them. + Inherits methods, properties, options and events from . + +Note: + SmoothScroll requires an XHTML doctype. + +Arguments: + options - the Fx.Scroll options (see: ) plus links, a collection of elements you want your smoothscroll on. Defaults to document.links. + +Example: + >new SmoothScroll(); +*/ + +var SmoothScroll = Fx.Scroll.extend({ + + initialize: function(options){ + this.parent(window, options); + this.links = (this.options.links) ? $$(this.options.links) : $$(document.links); + var location = window.location.href.match(/^[^#]*/)[0] + '#'; + this.links.each(function(link){ + if (link.href.indexOf(location) != 0) return; + var anchor = link.href.substr(location.length); + if (anchor && $(anchor)) this.useLink(link, anchor); + }, this); + if (!window.webkit419) this.addEvent('onComplete', function(){ + window.location.hash = this.anchor; + }); + }, + + useLink: function(link, anchor){ + link.addEvent('click', function(event){ + this.anchor = anchor; + this.toElement(anchor); + event.stop(); + }.bindWithEvent(this)); + } + +}); + +/* +Script: Sortables.js + Contains Class. + +License: + MIT-style license. +*/ + +/* +Class: Sortables + Creates an interface for and drop, resorting of a list. + +Note: + The Sortables require an XHTML doctype. + +Arguments: + list - required, the list that will become sortable. + options - an Object, see options below. + +Options: + handles - a collection of elements to be used for drag handles. defaults to the elements. + +Events: + onStart - function executed when the item starts dragging + onComplete - function executed when the item ends dragging +*/ + +var Sortables = new Class({ + + options: { + handles: false, + onStart: Class.empty, + onComplete: Class.empty, + ghost: true, + snap: 3, + onDragStart: function(element, ghost){ + ghost.setStyle('opacity', 0.7); + element.setStyle('opacity', 0.7); + }, + onDragComplete: function(element, ghost){ + element.setStyle('opacity', 1); + ghost.remove(); + this.trash.remove(); + } + }, + + initialize: function(list, options){ + this.setOptions(options); + this.list = $(list); + this.elements = this.list.getChildren(); + this.handles = (this.options.handles) ? $$(this.options.handles) : this.elements; + this.bound = { + 'start': [], + 'moveGhost': this.moveGhost.bindWithEvent(this) + }; + for (var i = 0, l = this.handles.length; i < l; i++){ + this.bound.start[i] = this.start.bindWithEvent(this, this.elements[i]); + } + this.attach(); + if (this.options.initialize) this.options.initialize.call(this); + this.bound.move = this.move.bindWithEvent(this); + this.bound.end = this.end.bind(this); + }, + + attach: function(){ + this.handles.each(function(handle, i){ + handle.addEvent('mousedown', this.bound.start[i]); + }, this); + }, + + detach: function(){ + this.handles.each(function(handle, i){ + handle.removeEvent('mousedown', this.bound.start[i]); + }, this); + }, + + start: function(event, el){ + this.active = el; + this.coordinates = this.list.getCoordinates(); + if (this.options.ghost){ + var position = el.getPosition(); + this.offset = event.page.y - position.y; + this.trash = new Element('div').inject(document.body); + this.ghost = el.clone().inject(this.trash).setStyles({ + 'position': 'absolute', + 'left': position.x, + 'top': event.page.y - this.offset + }); + document.addListener('mousemove', this.bound.moveGhost); + this.fireEvent('onDragStart', [el, this.ghost]); + } + document.addListener('mousemove', this.bound.move); + document.addListener('mouseup', this.bound.end); + this.fireEvent('onStart', el); + event.stop(); + }, + + moveGhost: function(event){ + var value = event.page.y - this.offset; + value = value.limit(this.coordinates.top, this.coordinates.bottom - this.ghost.offsetHeight); + this.ghost.setStyle('top', value); + event.stop(); + }, + + move: function(event){ + var now = event.page.y; + this.previous = this.previous || now; + var up = ((this.previous - now) > 0); + var prev = this.active.getPrevious(); + var next = this.active.getNext(); + if (prev && up && now < prev.getCoordinates().bottom) this.active.injectBefore(prev); + if (next && !up && now > next.getCoordinates().top) this.active.injectAfter(next); + this.previous = now; + }, + + serialize: function(converter){ + return this.list.getChildren().map(converter || function(el){ + return this.elements.indexOf(el); + }, this); + }, + + end: function(){ + this.previous = null; + document.removeListener('mousemove', this.bound.move); + document.removeListener('mouseup', this.bound.end); + if (this.options.ghost){ + document.removeListener('mousemove', this.bound.moveGhost); + this.fireEvent('onDragComplete', [this.active, this.ghost]); + } + this.fireEvent('onComplete', this.active); + } + +}); + +Sortables.implement(new Events, new Options); + +/* +Script: Tips.js + Tooltips, BubbleTips, whatever they are, they will appear on mouseover + +License: + MIT-style license. + +Credits: + The idea behind Tips.js is based on Bubble Tooltips () by Alessandro Fulcitiniti +*/ + +/* +Class: Tips + Display a tip on any element with a title and/or href. + +Note: + Tips requires an XHTML doctype. + +Arguments: + elements - a collection of elements to apply the tooltips to on mouseover. + options - an object. See options Below. + +Options: + maxTitleChars - the maximum number of characters to display in the title of the tip. defaults to 30. + showDelay - the delay the onShow method is called. (defaults to 100 ms) + hideDelay - the delay the onHide method is called. (defaults to 100 ms) + + className - the prefix for your tooltip classNames. defaults to 'tool'. + + the whole tooltip will have as classname: tool-tip + + the title will have as classname: tool-title + + the text will have as classname: tool-text + + offsets - the distance of your tooltip from the mouse. an Object with x/y properties. + fixed - if set to true, the toolTip will not follow the mouse. + +Events: + onShow - optionally you can alter the default onShow behaviour with this option (like displaying a fade in effect); + onHide - optionally you can alter the default onHide behaviour with this option (like displaying a fade out effect); + +Example: + (start code) + + + (end) + +Note: + The title of the element will always be used as the tooltip body. If you put :: on your title, the text before :: will become the tooltip title. +*/ + +var Tips = new Class({ + + options: { + onShow: function(tip){ + tip.setStyle('visibility', 'visible'); + }, + onHide: function(tip){ + tip.setStyle('visibility', 'hidden'); + }, + maxTitleChars: 30, + showDelay: 100, + hideDelay: 100, + className: 'tool', + offsets: {'x': 16, 'y': 16}, + fixed: false + }, + + initialize: function(elements, options){ + this.setOptions(options); + this.toolTip = new Element('div', { + 'class': this.options.className + '-tip', + 'styles': { + 'position': 'absolute', + 'top': '0', + 'left': '0', + 'visibility': 'hidden' + } + }).inject(document.body); + this.wrapper = new Element('div').inject(this.toolTip); + $$(elements).each(this.build, this); + if (this.options.initialize) this.options.initialize.call(this); + }, + + build: function(el){ + el.$tmp.myTitle = (el.href && el.getTag() == 'a') ? el.href.replace('http://', '') : (el.rel || false); + if (el.title){ + var dual = el.title.split('::'); + if (dual.length > 1){ + el.$tmp.myTitle = dual[0].trim(); + el.$tmp.myText = dual[1].trim(); + } else { + el.$tmp.myText = el.title; + } + el.removeAttribute('title'); + } else { + el.$tmp.myText = false; + } + if (el.$tmp.myTitle && el.$tmp.myTitle.length > this.options.maxTitleChars) el.$tmp.myTitle = el.$tmp.myTitle.substr(0, this.options.maxTitleChars - 1) + "…"; + el.addEvent('mouseenter', function(event){ + this.start(el); + if (!this.options.fixed) this.locate(event); + else this.position(el); + }.bind(this)); + if (!this.options.fixed) el.addEvent('mousemove', this.locate.bindWithEvent(this)); + var end = this.end.bind(this); + el.addEvent('mouseleave', end); + el.addEvent('trash', end); + }, + + start: function(el){ + this.wrapper.empty(); + if (el.$tmp.myTitle){ + this.title = new Element('span').inject(new Element('div', {'class': this.options.className + '-title'}).inject(this.wrapper)).setHTML(el.$tmp.myTitle); + } + if (el.$tmp.myText){ + this.text = new Element('span').inject(new Element('div', {'class': this.options.className + '-text'}).inject(this.wrapper)).setHTML(el.$tmp.myText); + } + $clear(this.timer); + this.timer = this.show.delay(this.options.showDelay, this); + }, + + end: function(event){ + $clear(this.timer); + this.timer = this.hide.delay(this.options.hideDelay, this); + }, + + position: function(element){ + var pos = element.getPosition(); + this.toolTip.setStyles({ + 'left': pos.x + this.options.offsets.x, + 'top': pos.y + this.options.offsets.y + }); + }, + + locate: function(event){ + var win = {'x': window.getWidth(), 'y': window.getHeight()}; + var scroll = {'x': window.getScrollLeft(), 'y': window.getScrollTop()}; + var tip = {'x': this.toolTip.offsetWidth, 'y': this.toolTip.offsetHeight}; + var prop = {'x': 'left', 'y': 'top'}; + for (var z in prop){ + var pos = event.page[z] + this.options.offsets[z]; + if ((pos + tip[z] - scroll[z]) > win[z]) pos = event.page[z] - this.options.offsets[z] - tip[z]; + this.toolTip.setStyle(prop[z], pos); + }; + }, + + show: function(){ + if (this.options.timeout) this.timer = this.hide.delay(this.options.timeout, this); + this.fireEvent('onShow', [this.toolTip]); + }, + + hide: function(){ + this.fireEvent('onHide', [this.toolTip]); + } + +}); + +Tips.implement(new Events, new Options); + +/* +Script: Group.js + For Grouping Classes or Elements Events. The Event added to the Group will fire when all of the events of the items of the group are fired. + +License: + MIT-style license. +*/ + +/* +Class: Group + An "Utility" Class. + +Arguments: + List of Class instances + +Example: + (start code) + xhr1 = new Ajax('data.js', {evalScript: true}); + xhr2 = new Ajax('abstraction.js', {evalScript: true}); + xhr3 = new Ajax('template.js', {evalScript: true}); + + var group = new Group(xhr1, xhr2, xhr3); + group.addEvent('onComplete', function(){ + alert('All Scripts loaded'); + }); + + xhr1.request(); + xhr2.request(); + xhr3.request(); + (end) + +*/ + +var Group = new Class({ + + initialize: function(){ + this.instances = $A(arguments); + this.events = {}; + this.checker = {}; + }, + + /* + Property: addEvent + adds an event to the stack of events of the Class instances. + + Arguments: + type - string; the event name (e.g. 'onComplete') + fn - function to execute when all instances fired this event + */ + + addEvent: function(type, fn){ + this.checker[type] = this.checker[type] || {}; + this.events[type] = this.events[type] || []; + if (this.events[type].contains(fn)) return false; + else this.events[type].push(fn); + this.instances.each(function(instance, i){ + instance.addEvent(type, this.check.bind(this, [type, instance, i])); + }, this); + return this; + }, + + check: function(type, instance, i){ + this.checker[type][i] = true; + var every = this.instances.every(function(current, j){ + return this.checker[type][j] || false; + }, this); + if (!every) return; + this.checker[type] = {}; + this.events[type].each(function(event){ + event.call(this, this.instances, instance); + }, this); + } + +}); + +/* +Script: Accordion.js + Contains + +License: + MIT-style license. +*/ + +/* +Class: Accordion + The Accordion class creates a group of elements that are toggled when their handles are clicked. When one elements toggles in, the others toggles back. + Inherits methods, properties, options and events from . + +Note: + The Accordion requires an XHTML doctype. + +Arguments: + togglers - required, a collection of elements, the elements handlers that will be clickable. + elements - required, a collection of elements the transitions will be applied to. + options - optional, see options below, and options and events. + +Options: + show - integer, the Index of the element to show at start. + display - integer, the Index of the element to show at start (with a transition). defaults to 0. + fixedHeight - integer, if you want the elements to have a fixed height. defaults to false. + fixedWidth - integer, if you want the elements to have a fixed width. defaults to false. + height - boolean, will add a height transition to the accordion if true. defaults to true. + opacity - boolean, will add an opacity transition to the accordion if true. defaults to true. + width - boolean, will add a width transition to the accordion if true. defaults to false, css mastery is required to make this work! + alwaysHide - boolean, will allow to hide all elements if true, instead of always keeping one element shown. defaults to false. + +Events: + onActive - function to execute when an element starts to show + onBackground - function to execute when an element starts to hide +*/ + +var Accordion = Fx.Elements.extend({ + + options: { + onActive: Class.empty, + onBackground: Class.empty, + display: 0, + show: false, + height: true, + width: false, + opacity: true, + fixedHeight: false, + fixedWidth: false, + wait: false, + alwaysHide: false + }, + + initialize: function(){ + var options, togglers, elements, container; + $each(arguments, function(argument, i){ + switch($type(argument)){ + case 'object': options = argument; break; + case 'element': container = $(argument); break; + default: + var temp = $$(argument); + if (!togglers) togglers = temp; + else elements = temp; + } + }); + this.togglers = togglers || []; + this.elements = elements || []; + this.container = $(container); + this.setOptions(options); + this.previous = -1; + if (this.options.alwaysHide) this.options.wait = true; + if ($chk(this.options.show)){ + this.options.display = false; + this.previous = this.options.show; + } + if (this.options.start){ + this.options.display = false; + this.options.show = false; + } + this.effects = {}; + if (this.options.opacity) this.effects.opacity = 'fullOpacity'; + if (this.options.width) this.effects.width = this.options.fixedWidth ? 'fullWidth' : 'offsetWidth'; + if (this.options.height) this.effects.height = this.options.fixedHeight ? 'fullHeight' : 'scrollHeight'; + for (var i = 0, l = this.togglers.length; i < l; i++) this.addSection(this.togglers[i], this.elements[i]); + this.elements.each(function(el, i){ + if (this.options.show === i){ + this.fireEvent('onActive', [this.togglers[i], el]); + } else { + for (var fx in this.effects) el.setStyle(fx, 0); + } + }, this); + this.parent(this.elements); + if ($chk(this.options.display)) this.display(this.options.display); + }, + + /* + Property: addSection + Dynamically adds a new section into the accordion at the specified position. + + Arguments: + toggler - (dom element) the element that toggles the accordion section open. + element - (dom element) the element that stretches open when the toggler is clicked. + pos - (integer) the index where these objects are to be inserted within the accordion. + */ + + addSection: function(toggler, element, pos){ + toggler = $(toggler); + element = $(element); + var test = this.togglers.contains(toggler); + var len = this.togglers.length; + this.togglers.include(toggler); + this.elements.include(element); + if (len && (!test || pos)){ + pos = $pick(pos, len - 1); + toggler.injectBefore(this.togglers[pos]); + element.injectAfter(toggler); + } else if (this.container && !test){ + toggler.inject(this.container); + element.inject(this.container); + } + var idx = this.togglers.indexOf(toggler); + toggler.addEvent('click', this.display.bind(this, idx)); + if (this.options.height) element.setStyles({'padding-top': 0, 'border-top': 'none', 'padding-bottom': 0, 'border-bottom': 'none'}); + if (this.options.width) element.setStyles({'padding-left': 0, 'border-left': 'none', 'padding-right': 0, 'border-right': 'none'}); + element.fullOpacity = 1; + if (this.options.fixedWidth) element.fullWidth = this.options.fixedWidth; + if (this.options.fixedHeight) element.fullHeight = this.options.fixedHeight; + element.setStyle('overflow', 'hidden'); + if (!test){ + for (var fx in this.effects) element.setStyle(fx, 0); + } + return this; + }, + + /* + Property: display + Shows a specific section and hides all others. Useful when triggering an accordion from outside. + + Arguments: + index - integer, the index of the item to show, or the actual element to show. + */ + + display: function(index){ + index = ($type(index) == 'element') ? this.elements.indexOf(index) : index; + if ((this.timer && this.options.wait) || (index === this.previous && !this.options.alwaysHide)) return this; + this.previous = index; + var obj = {}; + this.elements.each(function(el, i){ + obj[i] = {}; + var hide = (i != index) || (this.options.alwaysHide && (el.offsetHeight > 0)); + this.fireEvent(hide ? 'onBackground' : 'onActive', [this.togglers[i], el]); + for (var fx in this.effects) obj[i][fx] = hide ? 0 : el[this.effects[fx]]; + }, this); + return this.start(obj); + }, + + showThisHideOpen: function(index){return this.display(index);} + +}); + +Fx.Accordion = Accordion; diff --git a/tests/javascript/frameworks/mootools/mootools-1.2.5.js b/tests/javascript/frameworks/mootools/mootools-1.2.5.js new file mode 100644 index 0000000000000000000000000000000000000000..7107846797c53785a443b4187ad147be33cee593 --- /dev/null +++ b/tests/javascript/frameworks/mootools/mootools-1.2.5.js @@ -0,0 +1,4261 @@ +/* +--- + +name: Core + +description: The core of MooTools, contains all the base functions and the Native and Hash implementations. Required by all the other scripts. + +license: MIT-style license. + +copyright: Copyright (c) 2006-2008 [Valerio Proietti](http://mad4milk.net/). + +authors: The MooTools production team (http://mootools.net/developers/) + +inspiration: + - Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php) + - Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php) + +provides: [MooTools, Native, Hash.base, Array.each, $util] + +... +*/ + +var MooTools = { + 'version': '1.2.5', + 'build': '008d8f0f2fcc2044e54fdd3635341aaab274e757' +}; + +var Native = function(options){ + options = options || {}; + var name = options.name; + var legacy = options.legacy; + var protect = options.protect; + var methods = options.implement; + var generics = options.generics; + var initialize = options.initialize; + var afterImplement = options.afterImplement || function(){}; + var object = initialize || legacy; + generics = generics !== false; + + object.constructor = Native; + object.$family = {name: 'native'}; + if (legacy && initialize) object.prototype = legacy.prototype; + object.prototype.constructor = object; + + if (name){ + var family = name.toLowerCase(); + object.prototype.$family = {name: family}; + Native.typize(object, family); + } + + var add = function(obj, name, method, force){ + if (!protect || force || !obj.prototype[name]) obj.prototype[name] = method; + if (generics) Native.genericize(obj, name, protect); + afterImplement.call(obj, name, method); + return obj; + }; + + object.alias = function(a1, a2, a3){ + if (typeof a1 == 'string'){ + var pa1 = this.prototype[a1]; + if ((a1 = pa1)) return add(this, a2, a1, a3); + } + for (var a in a1) this.alias(a, a1[a], a2); + return this; + }; + + object.implement = function(a1, a2, a3){ + if (typeof a1 == 'string') return add(this, a1, a2, a3); + for (var p in a1) add(this, p, a1[p], a2); + return this; + }; + + if (methods) object.implement(methods); + + return object; +}; + +Native.genericize = function(object, property, check){ + if ((!check || !object[property]) && typeof object.prototype[property] == 'function') object[property] = function(){ + var args = Array.prototype.slice.call(arguments); + return object.prototype[property].apply(args.shift(), args); + }; +}; + +Native.implement = function(objects, properties){ + for (var i = 0, l = objects.length; i < l; i++) objects[i].implement(properties); +}; + +Native.typize = function(object, family){ + if (!object.type) object.type = function(item){ + return ($type(item) === family); + }; +}; + +(function(){ + var natives = {'Array': Array, 'Date': Date, 'Function': Function, 'Number': Number, 'RegExp': RegExp, 'String': String}; + for (var n in natives) new Native({name: n, initialize: natives[n], protect: true}); + + var types = {'boolean': Boolean, 'native': Native, 'object': Object}; + for (var t in types) Native.typize(types[t], t); + + var generics = { + 'Array': ["concat", "indexOf", "join", "lastIndexOf", "pop", "push", "reverse", "shift", "slice", "sort", "splice", "toString", "unshift", "valueOf"], + 'String': ["charAt", "charCodeAt", "concat", "indexOf", "lastIndexOf", "match", "replace", "search", "slice", "split", "substr", "substring", "toLowerCase", "toUpperCase", "valueOf"] + }; + for (var g in generics){ + for (var i = generics[g].length; i--;) Native.genericize(natives[g], generics[g][i], true); + } +})(); + +var Hash = new Native({ + + name: 'Hash', + + initialize: function(object){ + if ($type(object) == 'hash') object = $unlink(object.getClean()); + for (var key in object) this[key] = object[key]; + return this; + } + +}); + +Hash.implement({ + + forEach: function(fn, bind){ + for (var key in this){ + if (this.hasOwnProperty(key)) fn.call(bind, this[key], key, this); + } + }, + + getClean: function(){ + var clean = {}; + for (var key in this){ + if (this.hasOwnProperty(key)) clean[key] = this[key]; + } + return clean; + }, + + getLength: function(){ + var length = 0; + for (var key in this){ + if (this.hasOwnProperty(key)) length++; + } + return length; + } + +}); + +Hash.alias('forEach', 'each'); + +Array.implement({ + + forEach: function(fn, bind){ + for (var i = 0, l = this.length; i < l; i++) fn.call(bind, this[i], i, this); + } + +}); + +Array.alias('forEach', 'each'); + +function $A(iterable){ + if (iterable.item){ + var l = iterable.length, array = new Array(l); + while (l--) array[l] = iterable[l]; + return array; + } + return Array.prototype.slice.call(iterable); +}; + +function $arguments(i){ + return function(){ + return arguments[i]; + }; +}; + +function $chk(obj){ + return !!(obj || obj === 0); +}; + +function $clear(timer){ + clearTimeout(timer); + clearInterval(timer); + return null; +}; + +function $defined(obj){ + return (obj != undefined); +}; + +function $each(iterable, fn, bind){ + var type = $type(iterable); + ((type == 'arguments' || type == 'collection' || type == 'array') ? Array : Hash).each(iterable, fn, bind); +}; + +function $empty(){}; + +function $extend(original, extended){ + for (var key in (extended || {})) original[key] = extended[key]; + return original; +}; + +function $H(object){ + return new Hash(object); +}; + +function $lambda(value){ + return ($type(value) == 'function') ? value : function(){ + return value; + }; +}; + +function $merge(){ + var args = Array.slice(arguments); + args.unshift({}); + return $mixin.apply(null, args); +}; + +function $mixin(mix){ + for (var i = 1, l = arguments.length; i < l; i++){ + var object = arguments[i]; + if ($type(object) != 'object') continue; + for (var key in object){ + var op = object[key], mp = mix[key]; + mix[key] = (mp && $type(op) == 'object' && $type(mp) == 'object') ? $mixin(mp, op) : $unlink(op); + } + } + return mix; +}; + +function $pick(){ + for (var i = 0, l = arguments.length; i < l; i++){ + if (arguments[i] != undefined) return arguments[i]; + } + return null; +}; + +function $random(min, max){ + return Math.floor(Math.random() * (max - min + 1) + min); +}; + +function $splat(obj){ + var type = $type(obj); + return (type) ? ((type != 'array' && type != 'arguments') ? [obj] : obj) : []; +}; + +var $time = Date.now || function(){ + return +new Date; +}; + +function $try(){ + for (var i = 0, l = arguments.length; i < l; i++){ + try { + return arguments[i](); + } catch(e){} + } + return null; +}; + +function $type(obj){ + if (obj == undefined) return false; + if (obj.$family) return (obj.$family.name == 'number' && !isFinite(obj)) ? false : obj.$family.name; + if (obj.nodeName){ + switch (obj.nodeType){ + case 1: return 'element'; + case 3: return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace'; + } + } else if (typeof obj.length == 'number'){ + if (obj.callee) return 'arguments'; + else if (obj.item) return 'collection'; + } + return typeof obj; +}; + +function $unlink(object){ + var unlinked; + switch ($type(object)){ + case 'object': + unlinked = {}; + for (var p in object) unlinked[p] = $unlink(object[p]); + break; + case 'hash': + unlinked = new Hash(object); + break; + case 'array': + unlinked = []; + for (var i = 0, l = object.length; i < l; i++) unlinked[i] = $unlink(object[i]); + break; + default: return object; + } + return unlinked; +}; + +/* +--- + +name: Array + +description: Contains Array Prototypes like each, contains, and erase. + +license: MIT-style license. + +requires: [$util, Array.each] + +provides: Array + +... +*/ + +Array.implement({ + + every: function(fn, bind){ + for (var i = 0, l = this.length; i < l; i++){ + if (!fn.call(bind, this[i], i, this)) return false; + } + return true; + }, + + filter: function(fn, bind){ + var results = []; + for (var i = 0, l = this.length; i < l; i++){ + if (fn.call(bind, this[i], i, this)) results.push(this[i]); + } + return results; + }, + + clean: function(){ + return this.filter($defined); + }, + + indexOf: function(item, from){ + var len = this.length; + for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){ + if (this[i] === item) return i; + } + return -1; + }, + + map: function(fn, bind){ + var results = []; + for (var i = 0, l = this.length; i < l; i++) results[i] = fn.call(bind, this[i], i, this); + return results; + }, + + some: function(fn, bind){ + for (var i = 0, l = this.length; i < l; i++){ + if (fn.call(bind, this[i], i, this)) return true; + } + return false; + }, + + associate: function(keys){ + var obj = {}, length = Math.min(this.length, keys.length); + for (var i = 0; i < length; i++) obj[keys[i]] = this[i]; + return obj; + }, + + link: function(object){ + var result = {}; + for (var i = 0, l = this.length; i < l; i++){ + for (var key in object){ + if (object[key](this[i])){ + result[key] = this[i]; + delete object[key]; + break; + } + } + } + return result; + }, + + contains: function(item, from){ + return this.indexOf(item, from) != -1; + }, + + extend: function(array){ + for (var i = 0, j = array.length; i < j; i++) this.push(array[i]); + return this; + }, + + getLast: function(){ + return (this.length) ? this[this.length - 1] : null; + }, + + getRandom: function(){ + return (this.length) ? this[$random(0, this.length - 1)] : null; + }, + + include: function(item){ + if (!this.contains(item)) this.push(item); + return this; + }, + + combine: function(array){ + for (var i = 0, l = array.length; i < l; i++) this.include(array[i]); + return this; + }, + + erase: function(item){ + for (var i = this.length; i--; i){ + if (this[i] === item) this.splice(i, 1); + } + return this; + }, + + empty: function(){ + this.length = 0; + return this; + }, + + flatten: function(){ + var array = []; + for (var i = 0, l = this.length; i < l; i++){ + var type = $type(this[i]); + if (!type) continue; + array = array.concat((type == 'array' || type == 'collection' || type == 'arguments') ? Array.flatten(this[i]) : this[i]); + } + return array; + }, + + hexToRgb: function(array){ + if (this.length != 3) return null; + var rgb = this.map(function(value){ + if (value.length == 1) value += value; + return value.toInt(16); + }); + return (array) ? rgb : 'rgb(' + rgb + ')'; + }, + + rgbToHex: function(array){ + if (this.length < 3) return null; + if (this.length == 4 && this[3] == 0 && !array) return 'transparent'; + var hex = []; + for (var i = 0; i < 3; i++){ + var bit = (this[i] - 0).toString(16); + hex.push((bit.length == 1) ? '0' + bit : bit); + } + return (array) ? hex : '#' + hex.join(''); + } + +}); + +/* +--- + +name: String + +description: Contains String Prototypes like camelCase, capitalize, test, and toInt. + +license: MIT-style license. + +requires: Native + +provides: String + +... +*/ + +String.implement({ + + test: function(regex, params){ + return ((typeof regex == 'string') ? new RegExp(regex, params) : regex).test(this); + }, + + contains: function(string, separator){ + return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1; + }, + + trim: function(){ + return this.replace(/^\s+|\s+$/g, ''); + }, + + clean: function(){ + return this.replace(/\s+/g, ' ').trim(); + }, + + camelCase: function(){ + return this.replace(/-\D/g, function(match){ + return match.charAt(1).toUpperCase(); + }); + }, + + hyphenate: function(){ + return this.replace(/[A-Z]/g, function(match){ + return ('-' + match.charAt(0).toLowerCase()); + }); + }, + + capitalize: function(){ + return this.replace(/\b[a-z]/g, function(match){ + return match.toUpperCase(); + }); + }, + + escapeRegExp: function(){ + return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1'); + }, + + toInt: function(base){ + return parseInt(this, base || 10); + }, + + toFloat: function(){ + return parseFloat(this); + }, + + hexToRgb: function(array){ + var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/); + return (hex) ? hex.slice(1).hexToRgb(array) : null; + }, + + rgbToHex: function(array){ + var rgb = this.match(/\d{1,3}/g); + return (rgb) ? rgb.rgbToHex(array) : null; + }, + + stripScripts: function(option){ + var scripts = ''; + var text = this.replace(/]*>([\s\S]*?)<\/script>/gi, function(){ + scripts += arguments[1] + '\n'; + return ''; + }); + if (option === true) $exec(scripts); + else if ($type(option) == 'function') option(scripts, text); + return text; + }, + + substitute: function(object, regexp){ + return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){ + if (match.charAt(0) == '\\') return match.slice(1); + return (object[name] != undefined) ? object[name] : ''; + }); + } + +}); + +/* +--- + +name: Function + +description: Contains Function Prototypes like create, bind, pass, and delay. + +license: MIT-style license. + +requires: [Native, $util] + +provides: Function + +... +*/ + +try { + delete Function.prototype.bind; +} catch(e){} + +Function.implement({ + + extend: function(properties){ + for (var property in properties) this[property] = properties[property]; + return this; + }, + + create: function(options){ + var self = this; + options = options || {}; + return function(event){ + var args = options.arguments; + args = (args != undefined) ? $splat(args) : Array.slice(arguments, (options.event) ? 1 : 0); + if (options.event) args = [event || window.event].extend(args); + var returns = function(){ + return self.apply(options.bind || null, args); + }; + if (options.delay) return setTimeout(returns, options.delay); + if (options.periodical) return setInterval(returns, options.periodical); + if (options.attempt) return $try(returns); + return returns(); + }; + }, + + run: function(args, bind){ + return this.apply(bind, $splat(args)); + }, + + pass: function(args, bind){ + return this.create({bind: bind, arguments: args}); + }, + + bind: function(bind, args){ + return this.create({bind: bind, arguments: args}); + }, + + bindWithEvent: function(bind, args){ + return this.create({bind: bind, arguments: args, event: true}); + }, + + attempt: function(args, bind){ + return this.create({bind: bind, arguments: args, attempt: true})(); + }, + + delay: function(delay, bind, args){ + return this.create({bind: bind, arguments: args, delay: delay})(); + }, + + periodical: function(periodical, bind, args){ + return this.create({bind: bind, arguments: args, periodical: periodical})(); + } + +}); + +/* +--- + +name: Number + +description: Contains Number Prototypes like limit, round, times, and ceil. + +license: MIT-style license. + +requires: [Native, $util] + +provides: Number + +... +*/ + +Number.implement({ + + limit: function(min, max){ + return Math.min(max, Math.max(min, this)); + }, + + round: function(precision){ + precision = Math.pow(10, precision || 0); + return Math.round(this * precision) / precision; + }, + + times: function(fn, bind){ + for (var i = 0; i < this; i++) fn.call(bind, i, this); + }, + + toFloat: function(){ + return parseFloat(this); + }, + + toInt: function(base){ + return parseInt(this, base || 10); + } + +}); + +Number.alias('times', 'each'); + +(function(math){ + var methods = {}; + math.each(function(name){ + if (!Number[name]) methods[name] = function(){ + return Math[name].apply(null, [this].concat($A(arguments))); + }; + }); + Number.implement(methods); +})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']); + +/* +--- + +name: Hash + +description: Contains Hash Prototypes. Provides a means for overcoming the JavaScript practical impossibility of extending native Objects. + +license: MIT-style license. + +requires: Hash.base + +provides: Hash + +... +*/ + +Hash.implement({ + + has: Object.prototype.hasOwnProperty, + + keyOf: function(value){ + for (var key in this){ + if (this.hasOwnProperty(key) && this[key] === value) return key; + } + return null; + }, + + hasValue: function(value){ + return (Hash.keyOf(this, value) !== null); + }, + + extend: function(properties){ + Hash.each(properties || {}, function(value, key){ + Hash.set(this, key, value); + }, this); + return this; + }, + + combine: function(properties){ + Hash.each(properties || {}, function(value, key){ + Hash.include(this, key, value); + }, this); + return this; + }, + + erase: function(key){ + if (this.hasOwnProperty(key)) delete this[key]; + return this; + }, + + get: function(key){ + return (this.hasOwnProperty(key)) ? this[key] : null; + }, + + set: function(key, value){ + if (!this[key] || this.hasOwnProperty(key)) this[key] = value; + return this; + }, + + empty: function(){ + Hash.each(this, function(value, key){ + delete this[key]; + }, this); + return this; + }, + + include: function(key, value){ + if (this[key] == undefined) this[key] = value; + return this; + }, + + map: function(fn, bind){ + var results = new Hash; + Hash.each(this, function(value, key){ + results.set(key, fn.call(bind, value, key, this)); + }, this); + return results; + }, + + filter: function(fn, bind){ + var results = new Hash; + Hash.each(this, function(value, key){ + if (fn.call(bind, value, key, this)) results.set(key, value); + }, this); + return results; + }, + + every: function(fn, bind){ + for (var key in this){ + if (this.hasOwnProperty(key) && !fn.call(bind, this[key], key)) return false; + } + return true; + }, + + some: function(fn, bind){ + for (var key in this){ + if (this.hasOwnProperty(key) && fn.call(bind, this[key], key)) return true; + } + return false; + }, + + getKeys: function(){ + var keys = []; + Hash.each(this, function(value, key){ + keys.push(key); + }); + return keys; + }, + + getValues: function(){ + var values = []; + Hash.each(this, function(value){ + values.push(value); + }); + return values; + }, + + toQueryString: function(base){ + var queryString = []; + Hash.each(this, function(value, key){ + if (base) key = base + '[' + key + ']'; + var result; + switch ($type(value)){ + case 'object': result = Hash.toQueryString(value, key); break; + case 'array': + var qs = {}; + value.each(function(val, i){ + qs[i] = val; + }); + result = Hash.toQueryString(qs, key); + break; + default: result = key + '=' + encodeURIComponent(value); + } + if (value != undefined) queryString.push(result); + }); + + return queryString.join('&'); + } + +}); + +Hash.alias({keyOf: 'indexOf', hasValue: 'contains'}); + +/* +--- + +name: Class + +description: Contains the Class Function for easily creating, extending, and implementing reusable Classes. + +license: MIT-style license. + +requires: [$util, Native, Array, String, Function, Number, Hash] + +provides: Class + +... +*/ + +function Class(params){ + + if (params instanceof Function) params = {initialize: params}; + + var newClass = function(){ + Object.reset(this); + if (newClass._prototyping) return this; + this._current = $empty; + var value = (this.initialize) ? this.initialize.apply(this, arguments) : this; + delete this._current; delete this.caller; + return value; + }.extend(this); + + newClass.implement(params); + + newClass.constructor = Class; + newClass.prototype.constructor = newClass; + + return newClass; + +}; + +Function.prototype.protect = function(){ + this._protected = true; + return this; +}; + +Object.reset = function(object, key){ + + if (key == null){ + for (var p in object) Object.reset(object, p); + return object; + } + + delete object[key]; + + switch ($type(object[key])){ + case 'object': + var F = function(){}; + F.prototype = object[key]; + var i = new F; + object[key] = Object.reset(i); + break; + case 'array': object[key] = $unlink(object[key]); break; + } + + return object; + +}; + +new Native({name: 'Class', initialize: Class}).extend({ + + instantiate: function(F){ + F._prototyping = true; + var proto = new F; + delete F._prototyping; + return proto; + }, + + wrap: function(self, key, method){ + if (method._origin) method = method._origin; + + return function(){ + if (method._protected && this._current == null) throw new Error('The method "' + key + '" cannot be called.'); + var caller = this.caller, current = this._current; + this.caller = current; this._current = arguments.callee; + var result = method.apply(this, arguments); + this._current = current; this.caller = caller; + return result; + }.extend({_owner: self, _origin: method, _name: key}); + + } + +}); + +Class.implement({ + + implement: function(key, value){ + + if ($type(key) == 'object'){ + for (var p in key) this.implement(p, key[p]); + return this; + } + + var mutator = Class.Mutators[key]; + + if (mutator){ + value = mutator.call(this, value); + if (value == null) return this; + } + + var proto = this.prototype; + + switch ($type(value)){ + + case 'function': + if (value._hidden) return this; + proto[key] = Class.wrap(this, key, value); + break; + + case 'object': + var previous = proto[key]; + if ($type(previous) == 'object') $mixin(previous, value); + else proto[key] = $unlink(value); + break; + + case 'array': + proto[key] = $unlink(value); + break; + + default: proto[key] = value; + + } + + return this; + + } + +}); + +Class.Mutators = { + + Extends: function(parent){ + + this.parent = parent; + this.prototype = Class.instantiate(parent); + + this.implement('parent', function(){ + var name = this.caller._name, previous = this.caller._owner.parent.prototype[name]; + if (!previous) throw new Error('The method "' + name + '" has no parent.'); + return previous.apply(this, arguments); + }.protect()); + + }, + + Implements: function(items){ + $splat(items).each(function(item){ + if (item instanceof Function) item = Class.instantiate(item); + this.implement(item); + }, this); + + } + +}; + +/* +--- + +name: Class.Extras + +description: Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks. + +license: MIT-style license. + +requires: Class + +provides: [Chain, Events, Options, Class.Extras] + +... +*/ + +var Chain = new Class({ + + $chain: [], + + chain: function(){ + this.$chain.extend(Array.flatten(arguments)); + return this; + }, + + callChain: function(){ + return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false; + }, + + clearChain: function(){ + this.$chain.empty(); + return this; + } + +}); + +var Events = new Class({ + + $events: {}, + + addEvent: function(type, fn, internal){ + type = Events.removeOn(type); + if (fn != $empty){ + this.$events[type] = this.$events[type] || []; + this.$events[type].include(fn); + if (internal) fn.internal = true; + } + return this; + }, + + addEvents: function(events){ + for (var type in events) this.addEvent(type, events[type]); + return this; + }, + + fireEvent: function(type, args, delay){ + type = Events.removeOn(type); + if (!this.$events || !this.$events[type]) return this; + this.$events[type].each(function(fn){ + fn.create({'bind': this, 'delay': delay, 'arguments': args})(); + }, this); + return this; + }, + + removeEvent: function(type, fn){ + type = Events.removeOn(type); + if (!this.$events[type]) return this; + if (!fn.internal) this.$events[type].erase(fn); + return this; + }, + + removeEvents: function(events){ + var type; + if ($type(events) == 'object'){ + for (type in events) this.removeEvent(type, events[type]); + return this; + } + if (events) events = Events.removeOn(events); + for (type in this.$events){ + if (events && events != type) continue; + var fns = this.$events[type]; + for (var i = fns.length; i--; i) this.removeEvent(type, fns[i]); + } + return this; + } + +}); + +Events.removeOn = function(string){ + return string.replace(/^on([A-Z])/, function(full, first){ + return first.toLowerCase(); + }); +}; + +var Options = new Class({ + + setOptions: function(){ + this.options = $merge.run([this.options].extend(arguments)); + if (!this.addEvent) return this; + for (var option in this.options){ + if ($type(this.options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue; + this.addEvent(option, this.options[option]); + delete this.options[option]; + } + return this; + } + +}); + +/* +--- + +name: Browser + +description: The Browser Core. Contains Browser initialization, Window and Document, and the Browser Hash. + +license: MIT-style license. + +requires: [Native, $util] + +provides: [Browser, Window, Document, $exec] + +... +*/ + +var Browser = $merge({ + + Engine: {name: 'unknown', version: 0}, + + Platform: {name: (window.orientation != undefined) ? 'ipod' : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()}, + + Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)}, + + Plugins: {}, + + Engines: { + + presto: function(){ + return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925)); + }, + + trident: function(){ + return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? ((document.querySelectorAll) ? 6 : 5) : 4); + }, + + webkit: function(){ + return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419); + }, + + gecko: function(){ + return (!document.getBoxObjectFor && window.mozInnerScreenX == null) ? false : ((document.getElementsByClassName) ? 19 : 18); + } + + } + +}, Browser || {}); + +Browser.Platform[Browser.Platform.name] = true; + +Browser.detect = function(){ + + for (var engine in this.Engines){ + var version = this.Engines[engine](); + if (version){ + this.Engine = {name: engine, version: version}; + this.Engine[engine] = this.Engine[engine + version] = true; + break; + } + } + + return {name: engine, version: version}; + +}; + +Browser.detect(); + +Browser.Request = function(){ + return $try(function(){ + return new XMLHttpRequest(); + }, function(){ + return new ActiveXObject('MSXML2.XMLHTTP'); + }, function(){ + return new ActiveXObject('Microsoft.XMLHTTP'); + }); +}; + +Browser.Features.xhr = !!(Browser.Request()); + +Browser.Plugins.Flash = (function(){ + var version = ($try(function(){ + return navigator.plugins['Shockwave Flash'].description; + }, function(){ + return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version'); + }) || '0 r0').match(/\d+/g); + return {version: parseInt(version[0] || 0 + '.' + version[1], 10) || 0, build: parseInt(version[2], 10) || 0}; +})(); + +function $exec(text){ + if (!text) return text; + if (window.execScript){ + window.execScript(text); + } else { + var script = document.createElement('script'); + script.setAttribute('type', 'text/javascript'); + script[(Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerText' : 'text'] = text; + document.head.appendChild(script); + document.head.removeChild(script); + } + return text; +}; + +Native.UID = 1; + +var $uid = (Browser.Engine.trident) ? function(item){ + return (item.uid || (item.uid = [Native.UID++]))[0]; +} : function(item){ + return item.uid || (item.uid = Native.UID++); +}; + +var Window = new Native({ + + name: 'Window', + + legacy: (Browser.Engine.trident) ? null: window.Window, + + initialize: function(win){ + $uid(win); + if (!win.Element){ + win.Element = $empty; + if (Browser.Engine.webkit) win.document.createElement("iframe"); //fixes safari 2 + win.Element.prototype = (Browser.Engine.webkit) ? window["[[DOMElement.prototype]]"] : {}; + } + win.document.window = win; + return $extend(win, Window.Prototype); + }, + + afterImplement: function(property, value){ + window[property] = Window.Prototype[property] = value; + } + +}); + +Window.Prototype = {$family: {name: 'window'}}; + +new Window(window); + +var Document = new Native({ + + name: 'Document', + + legacy: (Browser.Engine.trident) ? null: window.Document, + + initialize: function(doc){ + $uid(doc); + doc.head = doc.getElementsByTagName('head')[0]; + doc.html = doc.getElementsByTagName('html')[0]; + if (Browser.Engine.trident && Browser.Engine.version <= 4) $try(function(){ + doc.execCommand("BackgroundImageCache", false, true); + }); + if (Browser.Engine.trident) doc.window.attachEvent('onunload', function(){ + doc.window.detachEvent('onunload', arguments.callee); + doc.head = doc.html = doc.window = null; + }); + return $extend(doc, Document.Prototype); + }, + + afterImplement: function(property, value){ + document[property] = Document.Prototype[property] = value; + } + +}); + +Document.Prototype = {$family: {name: 'document'}}; + +new Document(document); + +/* +--- + +name: Element + +description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements. + +license: MIT-style license. + +requires: [Window, Document, Array, String, Function, Number, Hash] + +provides: [Element, Elements, $, $$, Iframe] + +... +*/ + +var Element = new Native({ + + name: 'Element', + + legacy: window.Element, + + initialize: function(tag, props){ + var konstructor = Element.Constructors.get(tag); + if (konstructor) return konstructor(props); + if (typeof tag == 'string') return document.newElement(tag, props); + return document.id(tag).set(props); + }, + + afterImplement: function(key, value){ + Element.Prototype[key] = value; + if (Array[key]) return; + Elements.implement(key, function(){ + var items = [], elements = true; + for (var i = 0, j = this.length; i < j; i++){ + var returns = this[i][key].apply(this[i], arguments); + items.push(returns); + if (elements) elements = ($type(returns) == 'element'); + } + return (elements) ? new Elements(items) : items; + }); + } + +}); + +Element.Prototype = {$family: {name: 'element'}}; + +Element.Constructors = new Hash; + +var IFrame = new Native({ + + name: 'IFrame', + + generics: false, + + initialize: function(){ + var params = Array.link(arguments, {properties: Object.type, iframe: $defined}); + var props = params.properties || {}; + var iframe = document.id(params.iframe); + var onload = props.onload || $empty; + delete props.onload; + props.id = props.name = $pick(props.id, props.name, iframe ? (iframe.id || iframe.name) : 'IFrame_' + $time()); + iframe = new Element(iframe || 'iframe', props); + var onFrameLoad = function(){ + var host = $try(function(){ + return iframe.contentWindow.location.host; + }); + if (!host || host == window.location.host){ + var win = new Window(iframe.contentWindow); + new Document(iframe.contentWindow.document); + $extend(win.Element.prototype, Element.Prototype); + } + onload.call(iframe.contentWindow, iframe.contentWindow.document); + }; + var contentWindow = $try(function(){ + return iframe.contentWindow; + }); + ((contentWindow && contentWindow.document.body) || window.frames[props.id]) ? onFrameLoad() : iframe.addListener('load', onFrameLoad); + return iframe; + } + +}); + +var Elements = new Native({ + + initialize: function(elements, options){ + options = $extend({ddup: true, cash: true}, options); + elements = elements || []; + if (options.ddup || options.cash){ + var uniques = {}, returned = []; + for (var i = 0, l = elements.length; i < l; i++){ + var el = document.id(elements[i], !options.cash); + if (options.ddup){ + if (uniques[el.uid]) continue; + uniques[el.uid] = true; + } + if (el) returned.push(el); + } + elements = returned; + } + return (options.cash) ? $extend(elements, this) : elements; + } + +}); + +Elements.implement({ + + filter: function(filter, bind){ + if (!filter) return this; + return new Elements(Array.filter(this, (typeof filter == 'string') ? function(item){ + return item.match(filter); + } : filter, bind)); + } + +}); + +(function(){ + +/**/ +var createElementAcceptsHTML; +try { + var x = document.createElement(''); + createElementAcceptsHTML = (x.name == 'x'); +} catch(e){} + +var escapeQuotes = function(html){ + return ('' + html).replace(/&/g,'&').replace(/"/g,'"'); +}; +/**/ + +Document.implement({ + + newElement: function(tag, props){ + if (props && props.checked != null) props.defaultChecked = props.checked; + /**/// Fix for readonly name and type properties in IE < 8 + if (createElementAcceptsHTML && props){ + tag = '<' + tag; + if (props.name) tag += ' name="' + escapeQuotes(props.name) + '"'; + if (props.type) tag += ' type="' + escapeQuotes(props.type) + '"'; + tag += '>'; + delete props.name; + delete props.type; + } + /**/ + return this.id(this.createElement(tag)).set(props); + }, + + newTextNode: function(text){ + return this.createTextNode(text); + }, + + getDocument: function(){ + return this; + }, + + getWindow: function(){ + return this.window; + }, + + id: (function(){ + + var types = { + + string: function(id, nocash, doc){ + id = doc.getElementById(id); + return (id) ? types.element(id, nocash) : null; + }, + + element: function(el, nocash){ + $uid(el); + if (!nocash && !el.$family && !(/^object|embed$/i).test(el.tagName)){ + var proto = Element.Prototype; + for (var p in proto) el[p] = proto[p]; + }; + return el; + }, + + object: function(obj, nocash, doc){ + if (obj.toElement) return types.element(obj.toElement(doc), nocash); + return null; + } + + }; + + types.textnode = types.whitespace = types.window = types.document = $arguments(0); + + return function(el, nocash, doc){ + if (el && el.$family && el.uid) return el; + var type = $type(el); + return (types[type]) ? types[type](el, nocash, doc || document) : null; + }; + + })() + +}); + +})(); + +if (window.$ == null) Window.implement({ + $: function(el, nc){ + return document.id(el, nc, this.document); + } +}); + +Window.implement({ + + $$: function(selector){ + if (arguments.length == 1 && typeof selector == 'string') return this.document.getElements(selector); + var elements = []; + var args = Array.flatten(arguments); + for (var i = 0, l = args.length; i < l; i++){ + var item = args[i]; + switch ($type(item)){ + case 'element': elements.push(item); break; + case 'string': elements.extend(this.document.getElements(item, true)); + } + } + return new Elements(elements); + }, + + getDocument: function(){ + return this.document; + }, + + getWindow: function(){ + return this; + } + +}); + +Native.implement([Element, Document], { + + getElement: function(selector, nocash){ + return document.id(this.getElements(selector, true)[0] || null, nocash); + }, + + getElements: function(tags, nocash){ + tags = tags.split(','); + var elements = []; + var ddup = (tags.length > 1); + tags.each(function(tag){ + var partial = this.getElementsByTagName(tag.trim()); + (ddup) ? elements.extend(partial) : elements = partial; + }, this); + return new Elements(elements, {ddup: ddup, cash: !nocash}); + } + +}); + +(function(){ + +var collected = {}, storage = {}; +var props = {input: 'checked', option: 'selected', textarea: (Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerHTML' : 'value'}; + +var get = function(uid){ + return (storage[uid] || (storage[uid] = {})); +}; + +var clean = function(item, retain){ + if (!item) return; + var uid = item.uid; + if (retain !== true) retain = false; + if (Browser.Engine.trident){ + if (item.clearAttributes){ + var clone = retain && item.cloneNode(false); + item.clearAttributes(); + if (clone) item.mergeAttributes(clone); + } else if (item.removeEvents){ + item.removeEvents(); + } + if ((/object/i).test(item.tagName)){ + for (var p in item){ + if (typeof item[p] == 'function') item[p] = $empty; + } + Element.dispose(item); + } + } + if (!uid) return; + collected[uid] = storage[uid] = null; +}; + +var purge = function(){ + Hash.each(collected, clean); + if (Browser.Engine.trident) $A(document.getElementsByTagName('object')).each(clean); + if (window.CollectGarbage) CollectGarbage(); + collected = storage = null; +}; + +var walk = function(element, walk, start, match, all, nocash){ + var el = element[start || walk]; + var elements = []; + while (el){ + if (el.nodeType == 1 && (!match || Element.match(el, match))){ + if (!all) return document.id(el, nocash); + elements.push(el); + } + el = el[walk]; + } + return (all) ? new Elements(elements, {ddup: false, cash: !nocash}) : null; +}; + +var attributes = { + 'html': 'innerHTML', + 'class': 'className', + 'for': 'htmlFor', + 'defaultValue': 'defaultValue', + 'text': (Browser.Engine.trident || (Browser.Engine.webkit && Browser.Engine.version < 420)) ? 'innerText' : 'textContent' +}; +var bools = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readonly', 'multiple', 'selected', 'noresize', 'defer']; +var camels = ['value', 'type', 'defaultValue', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', 'frameBorder', 'maxLength', 'readOnly', 'rowSpan', 'tabIndex', 'useMap']; + +bools = bools.associate(bools); + +Hash.extend(attributes, bools); +Hash.extend(attributes, camels.associate(camels.map(String.toLowerCase))); + +var inserters = { + + before: function(context, element){ + if (element.parentNode) element.parentNode.insertBefore(context, element); + }, + + after: function(context, element){ + if (!element.parentNode) return; + var next = element.nextSibling; + (next) ? element.parentNode.insertBefore(context, next) : element.parentNode.appendChild(context); + }, + + bottom: function(context, element){ + element.appendChild(context); + }, + + top: function(context, element){ + var first = element.firstChild; + (first) ? element.insertBefore(context, first) : element.appendChild(context); + } + +}; + +inserters.inside = inserters.bottom; + +Hash.each(inserters, function(inserter, where){ + + where = where.capitalize(); + + Element.implement('inject' + where, function(el){ + inserter(this, document.id(el, true)); + return this; + }); + + Element.implement('grab' + where, function(el){ + inserter(document.id(el, true), this); + return this; + }); + +}); + +Element.implement({ + + set: function(prop, value){ + switch ($type(prop)){ + case 'object': + for (var p in prop) this.set(p, prop[p]); + break; + case 'string': + var property = Element.Properties.get(prop); + (property && property.set) ? property.set.apply(this, Array.slice(arguments, 1)) : this.setProperty(prop, value); + } + return this; + }, + + get: function(prop){ + var property = Element.Properties.get(prop); + return (property && property.get) ? property.get.apply(this, Array.slice(arguments, 1)) : this.getProperty(prop); + }, + + erase: function(prop){ + var property = Element.Properties.get(prop); + (property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop); + return this; + }, + + setProperty: function(attribute, value){ + var key = attributes[attribute]; + if (value == undefined) return this.removeProperty(attribute); + if (key && bools[attribute]) value = !!value; + (key) ? this[key] = value : this.setAttribute(attribute, '' + value); + return this; + }, + + setProperties: function(attributes){ + for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]); + return this; + }, + + getProperty: function(attribute){ + var key = attributes[attribute]; + var value = (key) ? this[key] : this.getAttribute(attribute, 2); + return (bools[attribute]) ? !!value : (key) ? value : value || null; + }, + + getProperties: function(){ + var args = $A(arguments); + return args.map(this.getProperty, this).associate(args); + }, + + removeProperty: function(attribute){ + var key = attributes[attribute]; + (key) ? this[key] = (key && bools[attribute]) ? false : '' : this.removeAttribute(attribute); + return this; + }, + + removeProperties: function(){ + Array.each(arguments, this.removeProperty, this); + return this; + }, + + hasClass: function(className){ + return this.className.contains(className, ' '); + }, + + addClass: function(className){ + if (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean(); + return this; + }, + + removeClass: function(className){ + this.className = this.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)'), '$1'); + return this; + }, + + toggleClass: function(className){ + return this.hasClass(className) ? this.removeClass(className) : this.addClass(className); + }, + + adopt: function(){ + Array.flatten(arguments).each(function(element){ + element = document.id(element, true); + if (element) this.appendChild(element); + }, this); + return this; + }, + + appendText: function(text, where){ + return this.grab(this.getDocument().newTextNode(text), where); + }, + + grab: function(el, where){ + inserters[where || 'bottom'](document.id(el, true), this); + return this; + }, + + inject: function(el, where){ + inserters[where || 'bottom'](this, document.id(el, true)); + return this; + }, + + replaces: function(el){ + el = document.id(el, true); + el.parentNode.replaceChild(this, el); + return this; + }, + + wraps: function(el, where){ + el = document.id(el, true); + return this.replaces(el).grab(el, where); + }, + + getPrevious: function(match, nocash){ + return walk(this, 'previousSibling', null, match, false, nocash); + }, + + getAllPrevious: function(match, nocash){ + return walk(this, 'previousSibling', null, match, true, nocash); + }, + + getNext: function(match, nocash){ + return walk(this, 'nextSibling', null, match, false, nocash); + }, + + getAllNext: function(match, nocash){ + return walk(this, 'nextSibling', null, match, true, nocash); + }, + + getFirst: function(match, nocash){ + return walk(this, 'nextSibling', 'firstChild', match, false, nocash); + }, + + getLast: function(match, nocash){ + return walk(this, 'previousSibling', 'lastChild', match, false, nocash); + }, + + getParent: function(match, nocash){ + return walk(this, 'parentNode', null, match, false, nocash); + }, + + getParents: function(match, nocash){ + return walk(this, 'parentNode', null, match, true, nocash); + }, + + getSiblings: function(match, nocash){ + return this.getParent().getChildren(match, nocash).erase(this); + }, + + getChildren: function(match, nocash){ + return walk(this, 'nextSibling', 'firstChild', match, true, nocash); + }, + + getWindow: function(){ + return this.ownerDocument.window; + }, + + getDocument: function(){ + return this.ownerDocument; + }, + + getElementById: function(id, nocash){ + var el = this.ownerDocument.getElementById(id); + if (!el) return null; + for (var parent = el.parentNode; parent != this; parent = parent.parentNode){ + if (!parent) return null; + } + return document.id(el, nocash); + }, + + getSelected: function(){ + return new Elements($A(this.options).filter(function(option){ + return option.selected; + })); + }, + + getComputedStyle: function(property){ + if (this.currentStyle) return this.currentStyle[property.camelCase()]; + var computed = this.getDocument().defaultView.getComputedStyle(this, null); + return (computed) ? computed.getPropertyValue([property.hyphenate()]) : null; + }, + + toQueryString: function(){ + var queryString = []; + this.getElements('input, select, textarea', true).each(function(el){ + if (!el.name || el.disabled || el.type == 'submit' || el.type == 'reset' || el.type == 'file') return; + var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){ + return opt.value; + }) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value; + $splat(value).each(function(val){ + if (typeof val != 'undefined') queryString.push(el.name + '=' + encodeURIComponent(val)); + }); + }); + return queryString.join('&'); + }, + + clone: function(contents, keepid){ + contents = contents !== false; + var clone = this.cloneNode(contents); + var clean = function(node, element){ + if (!keepid) node.removeAttribute('id'); + if (Browser.Engine.trident){ + node.clearAttributes(); + node.mergeAttributes(element); + node.removeAttribute('uid'); + if (node.options){ + var no = node.options, eo = element.options; + for (var j = no.length; j--;) no[j].selected = eo[j].selected; + } + } + var prop = props[element.tagName.toLowerCase()]; + if (prop && element[prop]) node[prop] = element[prop]; + }; + + if (contents){ + var ce = clone.getElementsByTagName('*'), te = this.getElementsByTagName('*'); + for (var i = ce.length; i--;) clean(ce[i], te[i]); + } + + clean(clone, this); + return document.id(clone); + }, + + destroy: function(){ + Element.empty(this); + Element.dispose(this); + clean(this, true); + return null; + }, + + empty: function(){ + $A(this.childNodes).each(function(node){ + Element.destroy(node); + }); + return this; + }, + + dispose: function(){ + return (this.parentNode) ? this.parentNode.removeChild(this) : this; + }, + + hasChild: function(el){ + el = document.id(el, true); + if (!el) return false; + if (Browser.Engine.webkit && Browser.Engine.version < 420) return $A(this.getElementsByTagName(el.tagName)).contains(el); + return (this.contains) ? (this != el && this.contains(el)) : !!(this.compareDocumentPosition(el) & 16); + }, + + match: function(tag){ + return (!tag || (tag == this) || (Element.get(this, 'tag') == tag)); + } + +}); + +Native.implement([Element, Window, Document], { + + addListener: function(type, fn){ + if (type == 'unload'){ + var old = fn, self = this; + fn = function(){ + self.removeListener('unload', fn); + old(); + }; + } else { + collected[this.uid] = this; + } + if (this.addEventListener) this.addEventListener(type, fn, false); + else this.attachEvent('on' + type, fn); + return this; + }, + + removeListener: function(type, fn){ + if (this.removeEventListener) this.removeEventListener(type, fn, false); + else this.detachEvent('on' + type, fn); + return this; + }, + + retrieve: function(property, dflt){ + var storage = get(this.uid), prop = storage[property]; + if (dflt != undefined && prop == undefined) prop = storage[property] = dflt; + return $pick(prop); + }, + + store: function(property, value){ + var storage = get(this.uid); + storage[property] = value; + return this; + }, + + eliminate: function(property){ + var storage = get(this.uid); + delete storage[property]; + return this; + } + +}); + +window.addListener('unload', purge); + +})(); + +Element.Properties = new Hash; + +Element.Properties.style = { + + set: function(style){ + this.style.cssText = style; + }, + + get: function(){ + return this.style.cssText; + }, + + erase: function(){ + this.style.cssText = ''; + } + +}; + +Element.Properties.tag = { + + get: function(){ + return this.tagName.toLowerCase(); + } + +}; + +Element.Properties.html = (function(){ + var wrapper = document.createElement('div'); + + var translations = { + table: [1, '', '
    '], + select: [1, ''], + tbody: [2, '', '
    '], + tr: [3, '', '
    '] + }; + translations.thead = translations.tfoot = translations.tbody; + + var html = { + set: function(){ + var html = Array.flatten(arguments).join(''); + var wrap = Browser.Engine.trident && translations[this.get('tag')]; + if (wrap){ + var first = wrapper; + first.innerHTML = wrap[1] + html + wrap[2]; + for (var i = wrap[0]; i--;) first = first.firstChild; + this.empty().adopt(first.childNodes); + } else { + this.innerHTML = html; + } + } + }; + + html.erase = html.set; + + return html; +})(); + +if (Browser.Engine.webkit && Browser.Engine.version < 420) Element.Properties.text = { + get: function(){ + if (this.innerText) return this.innerText; + var temp = this.ownerDocument.newElement('div', {html: this.innerHTML}).inject(this.ownerDocument.body); + var text = temp.innerText; + temp.destroy(); + return text; + } +}; + +/* +--- + +name: Element.Dimensions + +description: Contains methods to work with size, scroll, or positioning of Elements and the window object. + +license: MIT-style license. + +credits: + - Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html). + - Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html). + +requires: Element + +provides: Element.Dimensions + +... +*/ + +(function(){ + +Element.implement({ + + scrollTo: function(x, y){ + if (isBody(this)){ + this.getWindow().scrollTo(x, y); + } else { + this.scrollLeft = x; + this.scrollTop = y; + } + return this; + }, + + getSize: function(){ + if (isBody(this)) return this.getWindow().getSize(); + return {x: this.offsetWidth, y: this.offsetHeight}; + }, + + getScrollSize: function(){ + if (isBody(this)) return this.getWindow().getScrollSize(); + return {x: this.scrollWidth, y: this.scrollHeight}; + }, + + getScroll: function(){ + if (isBody(this)) return this.getWindow().getScroll(); + return {x: this.scrollLeft, y: this.scrollTop}; + }, + + getScrolls: function(){ + var element = this, position = {x: 0, y: 0}; + while (element && !isBody(element)){ + position.x += element.scrollLeft; + position.y += element.scrollTop; + element = element.parentNode; + } + return position; + }, + + getOffsetParent: function(){ + var element = this; + if (isBody(element)) return null; + if (!Browser.Engine.trident) return element.offsetParent; + while ((element = element.parentNode) && !isBody(element)){ + if (styleString(element, 'position') != 'static') return element; + } + return null; + }, + + getOffsets: function(){ + if (this.getBoundingClientRect){ + var bound = this.getBoundingClientRect(), + html = document.id(this.getDocument().documentElement), + htmlScroll = html.getScroll(), + elemScrolls = this.getScrolls(), + elemScroll = this.getScroll(), + isFixed = (styleString(this, 'position') == 'fixed'); + + return { + x: bound.left.toInt() + elemScrolls.x - elemScroll.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft, + y: bound.top.toInt() + elemScrolls.y - elemScroll.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop + }; + } + + var element = this, position = {x: 0, y: 0}; + if (isBody(this)) return position; + + while (element && !isBody(element)){ + position.x += element.offsetLeft; + position.y += element.offsetTop; + + if (Browser.Engine.gecko){ + if (!borderBox(element)){ + position.x += leftBorder(element); + position.y += topBorder(element); + } + var parent = element.parentNode; + if (parent && styleString(parent, 'overflow') != 'visible'){ + position.x += leftBorder(parent); + position.y += topBorder(parent); + } + } else if (element != this && Browser.Engine.webkit){ + position.x += leftBorder(element); + position.y += topBorder(element); + } + + element = element.offsetParent; + } + if (Browser.Engine.gecko && !borderBox(this)){ + position.x -= leftBorder(this); + position.y -= topBorder(this); + } + return position; + }, + + getPosition: function(relative){ + if (isBody(this)) return {x: 0, y: 0}; + var offset = this.getOffsets(), + scroll = this.getScrolls(); + var position = { + x: offset.x - scroll.x, + y: offset.y - scroll.y + }; + var relativePosition = (relative && (relative = document.id(relative))) ? relative.getPosition() : {x: 0, y: 0}; + return {x: position.x - relativePosition.x, y: position.y - relativePosition.y}; + }, + + getCoordinates: function(element){ + if (isBody(this)) return this.getWindow().getCoordinates(); + var position = this.getPosition(element), + size = this.getSize(); + var obj = { + left: position.x, + top: position.y, + width: size.x, + height: size.y + }; + obj.right = obj.left + obj.width; + obj.bottom = obj.top + obj.height; + return obj; + }, + + computePosition: function(obj){ + return { + left: obj.x - styleNumber(this, 'margin-left'), + top: obj.y - styleNumber(this, 'margin-top') + }; + }, + + setPosition: function(obj){ + return this.setStyles(this.computePosition(obj)); + } + +}); + +Native.implement([Document, Window], { + + getSize: function(){ + if (Browser.Engine.presto || Browser.Engine.webkit){ + var win = this.getWindow(); + return {x: win.innerWidth, y: win.innerHeight}; + } + var doc = getCompatElement(this); + return {x: doc.clientWidth, y: doc.clientHeight}; + }, + + getScroll: function(){ + var win = this.getWindow(), doc = getCompatElement(this); + return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop}; + }, + + getScrollSize: function(){ + var doc = getCompatElement(this), min = this.getSize(); + return {x: Math.max(doc.scrollWidth, min.x), y: Math.max(doc.scrollHeight, min.y)}; + }, + + getPosition: function(){ + return {x: 0, y: 0}; + }, + + getCoordinates: function(){ + var size = this.getSize(); + return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x}; + } + +}); + +// private methods + +var styleString = Element.getComputedStyle; + +function styleNumber(element, style){ + return styleString(element, style).toInt() || 0; +}; + +function borderBox(element){ + return styleString(element, '-moz-box-sizing') == 'border-box'; +}; + +function topBorder(element){ + return styleNumber(element, 'border-top-width'); +}; + +function leftBorder(element){ + return styleNumber(element, 'border-left-width'); +}; + +function isBody(element){ + return (/^(?:body|html)$/i).test(element.tagName); +}; + +function getCompatElement(element){ + var doc = element.getDocument(); + return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body; +}; + +})(); + +//aliases +Element.alias('setPosition', 'position'); //compatability + +Native.implement([Window, Document, Element], { + + getHeight: function(){ + return this.getSize().y; + }, + + getWidth: function(){ + return this.getSize().x; + }, + + getScrollTop: function(){ + return this.getScroll().y; + }, + + getScrollLeft: function(){ + return this.getScroll().x; + }, + + getScrollHeight: function(){ + return this.getScrollSize().y; + }, + + getScrollWidth: function(){ + return this.getScrollSize().x; + }, + + getTop: function(){ + return this.getPosition().y; + }, + + getLeft: function(){ + return this.getPosition().x; + } + +}); + +/* +--- + +name: Event + +description: Contains the Event Class, to make the event object cross-browser. + +license: MIT-style license. + +requires: [Window, Document, Hash, Array, Function, String] + +provides: Event + +... +*/ + +var Event = new Native({ + + name: 'Event', + + initialize: function(event, win){ + win = win || window; + var doc = win.document; + event = event || win.event; + if (event.$extended) return event; + this.$extended = true; + var type = event.type; + var target = event.target || event.srcElement; + while (target && target.nodeType == 3) target = target.parentNode; + + if (type.test(/key/)){ + var code = event.which || event.keyCode; + var key = Event.Keys.keyOf(code); + if (type == 'keydown'){ + var fKey = code - 111; + if (fKey > 0 && fKey < 13) key = 'f' + fKey; + } + key = key || String.fromCharCode(code).toLowerCase(); + } else if (type.match(/(click|mouse|menu)/i)){ + doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body; + var page = { + x: event.pageX || event.clientX + doc.scrollLeft, + y: event.pageY || event.clientY + doc.scrollTop + }; + var client = { + x: (event.pageX) ? event.pageX - win.pageXOffset : event.clientX, + y: (event.pageY) ? event.pageY - win.pageYOffset : event.clientY + }; + if (type.match(/DOMMouseScroll|mousewheel/)){ + var wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3; + } + var rightClick = (event.which == 3) || (event.button == 2); + var related = null; + if (type.match(/over|out/)){ + switch (type){ + case 'mouseover': related = event.relatedTarget || event.fromElement; break; + case 'mouseout': related = event.relatedTarget || event.toElement; + } + if (!(function(){ + while (related && related.nodeType == 3) related = related.parentNode; + return true; + }).create({attempt: Browser.Engine.gecko})()) related = false; + } + } + + return $extend(this, { + event: event, + type: type, + + page: page, + client: client, + rightClick: rightClick, + + wheel: wheel, + + relatedTarget: related, + target: target, + + code: code, + key: key, + + shift: event.shiftKey, + control: event.ctrlKey, + alt: event.altKey, + meta: event.metaKey + }); + } + +}); + +Event.Keys = new Hash({ + 'enter': 13, + 'up': 38, + 'down': 40, + 'left': 37, + 'right': 39, + 'esc': 27, + 'space': 32, + 'backspace': 8, + 'tab': 9, + 'delete': 46 +}); + +Event.implement({ + + stop: function(){ + return this.stopPropagation().preventDefault(); + }, + + stopPropagation: function(){ + if (this.event.stopPropagation) this.event.stopPropagation(); + else this.event.cancelBubble = true; + return this; + }, + + preventDefault: function(){ + if (this.event.preventDefault) this.event.preventDefault(); + else this.event.returnValue = false; + return this; + } + +}); + +/* +--- + +name: Element.Event + +description: Contains Element methods for dealing with events. This file also includes mouseenter and mouseleave custom Element Events. + +license: MIT-style license. + +requires: [Element, Event] + +provides: Element.Event + +... +*/ + +Element.Properties.events = {set: function(events){ + this.addEvents(events); +}}; + +Native.implement([Element, Window, Document], { + + addEvent: function(type, fn){ + var events = this.retrieve('events', {}); + events[type] = events[type] || {'keys': [], 'values': []}; + if (events[type].keys.contains(fn)) return this; + events[type].keys.push(fn); + var realType = type, custom = Element.Events.get(type), condition = fn, self = this; + if (custom){ + if (custom.onAdd) custom.onAdd.call(this, fn); + if (custom.condition){ + condition = function(event){ + if (custom.condition.call(this, event)) return fn.call(this, event); + return true; + }; + } + realType = custom.base || realType; + } + var defn = function(){ + return fn.call(self); + }; + var nativeEvent = Element.NativeEvents[realType]; + if (nativeEvent){ + if (nativeEvent == 2){ + defn = function(event){ + event = new Event(event, self.getWindow()); + if (condition.call(self, event) === false) event.stop(); + }; + } + this.addListener(realType, defn); + } + events[type].values.push(defn); + return this; + }, + + removeEvent: function(type, fn){ + var events = this.retrieve('events'); + if (!events || !events[type]) return this; + var pos = events[type].keys.indexOf(fn); + if (pos == -1) return this; + events[type].keys.splice(pos, 1); + var value = events[type].values.splice(pos, 1)[0]; + var custom = Element.Events.get(type); + if (custom){ + if (custom.onRemove) custom.onRemove.call(this, fn); + type = custom.base || type; + } + return (Element.NativeEvents[type]) ? this.removeListener(type, value) : this; + }, + + addEvents: function(events){ + for (var event in events) this.addEvent(event, events[event]); + return this; + }, + + removeEvents: function(events){ + var type; + if ($type(events) == 'object'){ + for (type in events) this.removeEvent(type, events[type]); + return this; + } + var attached = this.retrieve('events'); + if (!attached) return this; + if (!events){ + for (type in attached) this.removeEvents(type); + this.eliminate('events'); + } else if (attached[events]){ + while (attached[events].keys[0]) this.removeEvent(events, attached[events].keys[0]); + attached[events] = null; + } + return this; + }, + + fireEvent: function(type, args, delay){ + var events = this.retrieve('events'); + if (!events || !events[type]) return this; + events[type].keys.each(function(fn){ + fn.create({'bind': this, 'delay': delay, 'arguments': args})(); + }, this); + return this; + }, + + cloneEvents: function(from, type){ + from = document.id(from); + var fevents = from.retrieve('events'); + if (!fevents) return this; + if (!type){ + for (var evType in fevents) this.cloneEvents(from, evType); + } else if (fevents[type]){ + fevents[type].keys.each(function(fn){ + this.addEvent(type, fn); + }, this); + } + return this; + } + +}); + +// IE9 +try { + if (typeof HTMLElement != 'undefined') + HTMLElement.prototype.fireEvent = Element.prototype.fireEvent; +} catch(e){} + +Element.NativeEvents = { + click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons + mousewheel: 2, DOMMouseScroll: 2, //mouse wheel + mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement + keydown: 2, keypress: 2, keyup: 2, //keyboard + focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, //form elements + load: 1, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window + error: 1, abort: 1, scroll: 1 //misc +}; + +(function(){ + +var $check = function(event){ + var related = event.relatedTarget; + if (related == undefined) return true; + if (related === false) return false; + return ($type(this) != 'document' && related != this && related.prefix != 'xul' && !this.hasChild(related)); +}; + +Element.Events = new Hash({ + + mouseenter: { + base: 'mouseover', + condition: $check + }, + + mouseleave: { + base: 'mouseout', + condition: $check + }, + + mousewheel: { + base: (Browser.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel' + } + +}); + +})(); + +/* +--- + +name: Element.Style + +description: Contains methods for interacting with the styles of Elements in a fashionable way. + +license: MIT-style license. + +requires: Element + +provides: Element.Style + +... +*/ + +Element.Properties.styles = {set: function(styles){ + this.setStyles(styles); +}}; + +Element.Properties.opacity = { + + set: function(opacity, novisibility){ + if (!novisibility){ + if (opacity == 0){ + if (this.style.visibility != 'hidden') this.style.visibility = 'hidden'; + } else { + if (this.style.visibility != 'visible') this.style.visibility = 'visible'; + } + } + if (!this.currentStyle || !this.currentStyle.hasLayout) this.style.zoom = 1; + if (Browser.Engine.trident) this.style.filter = (opacity == 1) ? '' : 'alpha(opacity=' + opacity * 100 + ')'; + this.style.opacity = opacity; + this.store('opacity', opacity); + }, + + get: function(){ + return this.retrieve('opacity', 1); + } + +}; + +Element.implement({ + + setOpacity: function(value){ + return this.set('opacity', value, true); + }, + + getOpacity: function(){ + return this.get('opacity'); + }, + + setStyle: function(property, value){ + switch (property){ + case 'opacity': return this.set('opacity', parseFloat(value)); + case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat'; + } + property = property.camelCase(); + if ($type(value) != 'string'){ + var map = (Element.Styles.get(property) || '@').split(' '); + value = $splat(value).map(function(val, i){ + if (!map[i]) return ''; + return ($type(val) == 'number') ? map[i].replace('@', Math.round(val)) : val; + }).join(' '); + } else if (value == String(Number(value))){ + value = Math.round(value); + } + this.style[property] = value; + return this; + }, + + getStyle: function(property){ + switch (property){ + case 'opacity': return this.get('opacity'); + case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat'; + } + property = property.camelCase(); + var result = this.style[property]; + if (!$chk(result)){ + result = []; + for (var style in Element.ShortStyles){ + if (property != style) continue; + for (var s in Element.ShortStyles[style]) result.push(this.getStyle(s)); + return result.join(' '); + } + result = this.getComputedStyle(property); + } + if (result){ + result = String(result); + var color = result.match(/rgba?\([\d\s,]+\)/); + if (color) result = result.replace(color[0], color[0].rgbToHex()); + } + if (Browser.Engine.presto || (Browser.Engine.trident && !$chk(parseInt(result, 10)))){ + if (property.test(/^(height|width)$/)){ + var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0; + values.each(function(value){ + size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt(); + }, this); + return this['offset' + property.capitalize()] - size + 'px'; + } + if ((Browser.Engine.presto) && String(result).test('px')) return result; + if (property.test(/(border(.+)Width|margin|padding)/)) return '0px'; + } + return result; + }, + + setStyles: function(styles){ + for (var style in styles) this.setStyle(style, styles[style]); + return this; + }, + + getStyles: function(){ + var result = {}; + Array.flatten(arguments).each(function(key){ + result[key] = this.getStyle(key); + }, this); + return result; + } + +}); + +Element.Styles = new Hash({ + left: '@px', top: '@px', bottom: '@px', right: '@px', + width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px', + backgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)', + fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)', + margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)', + borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)', + zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@' +}); + +Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}}; + +['Top', 'Right', 'Bottom', 'Left'].each(function(direction){ + var Short = Element.ShortStyles; + var All = Element.Styles; + ['margin', 'padding'].each(function(style){ + var sd = style + direction; + Short[style][sd] = All[sd] = '@px'; + }); + var bd = 'border' + direction; + Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)'; + var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color'; + Short[bd] = {}; + Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px'; + Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@'; + Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)'; +}); + +/* +--- + +name: Fx + +description: Contains the basic animation logic to be extended by all other Fx Classes. + +license: MIT-style license. + +requires: [Chain, Events, Options] + +provides: Fx + +... +*/ + +var Fx = new Class({ + + Implements: [Chain, Events, Options], + + options: { + /* + onStart: $empty, + onCancel: $empty, + onComplete: $empty, + */ + fps: 50, + unit: false, + duration: 500, + link: 'ignore' + }, + + initialize: function(options){ + this.subject = this.subject || this; + this.setOptions(options); + this.options.duration = Fx.Durations[this.options.duration] || this.options.duration.toInt(); + var wait = this.options.wait; + if (wait === false) this.options.link = 'cancel'; + }, + + getTransition: function(){ + return function(p){ + return -(Math.cos(Math.PI * p) - 1) / 2; + }; + }, + + step: function(){ + var time = $time(); + if (time < this.time + this.options.duration){ + var delta = this.transition((time - this.time) / this.options.duration); + this.set(this.compute(this.from, this.to, delta)); + } else { + this.set(this.compute(this.from, this.to, 1)); + this.complete(); + } + }, + + set: function(now){ + return now; + }, + + compute: function(from, to, delta){ + return Fx.compute(from, to, delta); + }, + + check: function(){ + if (!this.timer) return true; + switch (this.options.link){ + case 'cancel': this.cancel(); return true; + case 'chain': this.chain(this.caller.bind(this, arguments)); return false; + } + return false; + }, + + start: function(from, to){ + if (!this.check(from, to)) return this; + this.from = from; + this.to = to; + this.time = 0; + this.transition = this.getTransition(); + this.startTimer(); + this.onStart(); + return this; + }, + + complete: function(){ + if (this.stopTimer()) this.onComplete(); + return this; + }, + + cancel: function(){ + if (this.stopTimer()) this.onCancel(); + return this; + }, + + onStart: function(){ + this.fireEvent('start', this.subject); + }, + + onComplete: function(){ + this.fireEvent('complete', this.subject); + if (!this.callChain()) this.fireEvent('chainComplete', this.subject); + }, + + onCancel: function(){ + this.fireEvent('cancel', this.subject).clearChain(); + }, + + pause: function(){ + this.stopTimer(); + return this; + }, + + resume: function(){ + this.startTimer(); + return this; + }, + + stopTimer: function(){ + if (!this.timer) return false; + this.time = $time() - this.time; + this.timer = $clear(this.timer); + return true; + }, + + startTimer: function(){ + if (this.timer) return false; + this.time = $time() - this.time; + this.timer = this.step.periodical(Math.round(1000 / this.options.fps), this); + return true; + } + +}); + +Fx.compute = function(from, to, delta){ + return (to - from) * delta + from; +}; + +Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000}; + +/* +--- + +name: Fx.CSS + +description: Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements. + +license: MIT-style license. + +requires: [Fx, Element.Style] + +provides: Fx.CSS + +... +*/ + +Fx.CSS = new Class({ + + Extends: Fx, + + //prepares the base from/to object + + prepare: function(element, property, values){ + values = $splat(values); + var values1 = values[1]; + if (!$chk(values1)){ + values[1] = values[0]; + values[0] = element.getStyle(property); + } + var parsed = values.map(this.parse); + return {from: parsed[0], to: parsed[1]}; + }, + + //parses a value into an array + + parse: function(value){ + value = $lambda(value)(); + value = (typeof value == 'string') ? value.split(' ') : $splat(value); + return value.map(function(val){ + val = String(val); + var found = false; + Fx.CSS.Parsers.each(function(parser, key){ + if (found) return; + var parsed = parser.parse(val); + if ($chk(parsed)) found = {value: parsed, parser: parser}; + }); + found = found || {value: val, parser: Fx.CSS.Parsers.String}; + return found; + }); + }, + + //computes by a from and to prepared objects, using their parsers. + + compute: function(from, to, delta){ + var computed = []; + (Math.min(from.length, to.length)).times(function(i){ + computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser}); + }); + computed.$family = {name: 'fx:css:value'}; + return computed; + }, + + //serves the value as settable + + serve: function(value, unit){ + if ($type(value) != 'fx:css:value') value = this.parse(value); + var returned = []; + value.each(function(bit){ + returned = returned.concat(bit.parser.serve(bit.value, unit)); + }); + return returned; + }, + + //renders the change to an element + + render: function(element, property, value, unit){ + element.setStyle(property, this.serve(value, unit)); + }, + + //searches inside the page css to find the values for a selector + + search: function(selector){ + if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector]; + var to = {}; + Array.each(document.styleSheets, function(sheet, j){ + var href = sheet.href; + if (href && href.contains('://') && !href.contains(document.domain)) return; + var rules = sheet.rules || sheet.cssRules; + Array.each(rules, function(rule, i){ + if (!rule.style) return; + var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){ + return m.toLowerCase(); + }) : null; + if (!selectorText || !selectorText.test('^' + selector + '$')) return; + Element.Styles.each(function(value, style){ + if (!rule.style[style] || Element.ShortStyles[style]) return; + value = String(rule.style[style]); + to[style] = (value.test(/^rgb/)) ? value.rgbToHex() : value; + }); + }); + }); + return Fx.CSS.Cache[selector] = to; + } + +}); + +Fx.CSS.Cache = {}; + +Fx.CSS.Parsers = new Hash({ + + Color: { + parse: function(value){ + if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true); + return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false; + }, + compute: function(from, to, delta){ + return from.map(function(value, i){ + return Math.round(Fx.compute(from[i], to[i], delta)); + }); + }, + serve: function(value){ + return value.map(Number); + } + }, + + Number: { + parse: parseFloat, + compute: Fx.compute, + serve: function(value, unit){ + return (unit) ? value + unit : value; + } + }, + + String: { + parse: $lambda(false), + compute: $arguments(1), + serve: $arguments(0) + } + +}); + +/* +--- + +name: Fx.Morph + +description: Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules. + +license: MIT-style license. + +requires: Fx.CSS + +provides: Fx.Morph + +... +*/ + +Fx.Morph = new Class({ + + Extends: Fx.CSS, + + initialize: function(element, options){ + this.element = this.subject = document.id(element); + this.parent(options); + }, + + set: function(now){ + if (typeof now == 'string') now = this.search(now); + for (var p in now) this.render(this.element, p, now[p], this.options.unit); + return this; + }, + + compute: function(from, to, delta){ + var now = {}; + for (var p in from) now[p] = this.parent(from[p], to[p], delta); + return now; + }, + + start: function(properties){ + if (!this.check(properties)) return this; + if (typeof properties == 'string') properties = this.search(properties); + var from = {}, to = {}; + for (var p in properties){ + var parsed = this.prepare(this.element, p, properties[p]); + from[p] = parsed.from; + to[p] = parsed.to; + } + return this.parent(from, to); + } + +}); + +Element.Properties.morph = { + + set: function(options){ + var morph = this.retrieve('morph'); + if (morph) morph.cancel(); + return this.eliminate('morph').store('morph:options', $extend({link: 'cancel'}, options)); + }, + + get: function(options){ + if (options || !this.retrieve('morph')){ + if (options || !this.retrieve('morph:options')) this.set('morph', options); + this.store('morph', new Fx.Morph(this, this.retrieve('morph:options'))); + } + return this.retrieve('morph'); + } + +}; + +Element.implement({ + + morph: function(props){ + this.get('morph').start(props); + return this; + } + +}); + +/* +--- + +name: Fx.Transitions + +description: Contains a set of advanced transitions to be used with any of the Fx Classes. + +license: MIT-style license. + +credits: Easing Equations by Robert Penner, , modified and optimized to be used with MooTools. + +requires: Fx + +provides: Fx.Transitions + +... +*/ + +Fx.implement({ + + getTransition: function(){ + var trans = this.options.transition || Fx.Transitions.Sine.easeInOut; + if (typeof trans == 'string'){ + var data = trans.split(':'); + trans = Fx.Transitions; + trans = trans[data[0]] || trans[data[0].capitalize()]; + if (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')]; + } + return trans; + } + +}); + +Fx.Transition = function(transition, params){ + params = $splat(params); + return $extend(transition, { + easeIn: function(pos){ + return transition(pos, params); + }, + easeOut: function(pos){ + return 1 - transition(1 - pos, params); + }, + easeInOut: function(pos){ + return (pos <= 0.5) ? transition(2 * pos, params) / 2 : (2 - transition(2 * (1 - pos), params)) / 2; + } + }); +}; + +Fx.Transitions = new Hash({ + + linear: $arguments(0) + +}); + +Fx.Transitions.extend = function(transitions){ + for (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]); +}; + +Fx.Transitions.extend({ + + Pow: function(p, x){ + return Math.pow(p, x[0] || 6); + }, + + Expo: function(p){ + return Math.pow(2, 8 * (p - 1)); + }, + + Circ: function(p){ + return 1 - Math.sin(Math.acos(p)); + }, + + Sine: function(p){ + return 1 - Math.sin((1 - p) * Math.PI / 2); + }, + + Back: function(p, x){ + x = x[0] || 1.618; + return Math.pow(p, 2) * ((x + 1) * p - x); + }, + + Bounce: function(p){ + var value; + for (var a = 0, b = 1; 1; a += b, b /= 2){ + if (p >= (7 - 4 * a) / 11){ + value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2); + break; + } + } + return value; + }, + + Elastic: function(p, x){ + return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x[0] || 1) / 3); + } + +}); + +['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){ + Fx.Transitions[transition] = new Fx.Transition(function(p){ + return Math.pow(p, [i + 2]); + }); +}); + +/* +--- + +name: Fx.Tween + +description: Formerly Fx.Style, effect to transition any CSS property for an element. + +license: MIT-style license. + +requires: Fx.CSS + +provides: [Fx.Tween, Element.fade, Element.highlight] + +... +*/ + +Fx.Tween = new Class({ + + Extends: Fx.CSS, + + initialize: function(element, options){ + this.element = this.subject = document.id(element); + this.parent(options); + }, + + set: function(property, now){ + if (arguments.length == 1){ + now = property; + property = this.property || this.options.property; + } + this.render(this.element, property, now, this.options.unit); + return this; + }, + + start: function(property, from, to){ + if (!this.check(property, from, to)) return this; + var args = Array.flatten(arguments); + this.property = this.options.property || args.shift(); + var parsed = this.prepare(this.element, this.property, args); + return this.parent(parsed.from, parsed.to); + } + +}); + +Element.Properties.tween = { + + set: function(options){ + var tween = this.retrieve('tween'); + if (tween) tween.cancel(); + return this.eliminate('tween').store('tween:options', $extend({link: 'cancel'}, options)); + }, + + get: function(options){ + if (options || !this.retrieve('tween')){ + if (options || !this.retrieve('tween:options')) this.set('tween', options); + this.store('tween', new Fx.Tween(this, this.retrieve('tween:options'))); + } + return this.retrieve('tween'); + } + +}; + +Element.implement({ + + tween: function(property, from, to){ + this.get('tween').start(arguments); + return this; + }, + + fade: function(how){ + var fade = this.get('tween'), o = 'opacity', toggle; + how = $pick(how, 'toggle'); + switch (how){ + case 'in': fade.start(o, 1); break; + case 'out': fade.start(o, 0); break; + case 'show': fade.set(o, 1); break; + case 'hide': fade.set(o, 0); break; + case 'toggle': + var flag = this.retrieve('fade:flag', this.get('opacity') == 1); + fade.start(o, (flag) ? 0 : 1); + this.store('fade:flag', !flag); + toggle = true; + break; + default: fade.start(o, arguments); + } + if (!toggle) this.eliminate('fade:flag'); + return this; + }, + + highlight: function(start, end){ + if (!end){ + end = this.retrieve('highlight:original', this.getStyle('background-color')); + end = (end == 'transparent') ? '#fff' : end; + } + var tween = this.get('tween'); + tween.start('background-color', start || '#ffff88', end).chain(function(){ + this.setStyle('background-color', this.retrieve('highlight:original')); + tween.callChain(); + }.bind(this)); + return this; + } + +}); + +/* +--- + +name: Request + +description: Powerful all purpose Request Class. Uses XMLHTTPRequest. + +license: MIT-style license. + +requires: [Element, Chain, Events, Options, Browser] + +provides: Request + +... +*/ + +var Request = new Class({ + + Implements: [Chain, Events, Options], + + options: {/* + onRequest: $empty, + onComplete: $empty, + onCancel: $empty, + onSuccess: $empty, + onFailure: $empty, + onException: $empty,*/ + url: '', + data: '', + headers: { + 'X-Requested-With': 'XMLHttpRequest', + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }, + async: true, + format: false, + method: 'post', + link: 'ignore', + isSuccess: null, + emulation: true, + urlEncoded: true, + encoding: 'utf-8', + evalScripts: false, + evalResponse: false, + noCache: false + }, + + initialize: function(options){ + this.xhr = new Browser.Request(); + this.setOptions(options); + this.options.isSuccess = this.options.isSuccess || this.isSuccess; + this.headers = new Hash(this.options.headers); + }, + + onStateChange: function(){ + if (this.xhr.readyState != 4 || !this.running) return; + this.running = false; + this.status = 0; + $try(function(){ + this.status = this.xhr.status; + }.bind(this)); + this.xhr.onreadystatechange = $empty; + if (this.options.isSuccess.call(this, this.status)){ + this.response = {text: this.xhr.responseText, xml: this.xhr.responseXML}; + this.success(this.response.text, this.response.xml); + } else { + this.response = {text: null, xml: null}; + this.failure(); + } + }, + + isSuccess: function(){ + return ((this.status >= 200) && (this.status < 300)); + }, + + processScripts: function(text){ + if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return $exec(text); + return text.stripScripts(this.options.evalScripts); + }, + + success: function(text, xml){ + this.onSuccess(this.processScripts(text), xml); + }, + + onSuccess: function(){ + this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain(); + }, + + failure: function(){ + this.onFailure(); + }, + + onFailure: function(){ + this.fireEvent('complete').fireEvent('failure', this.xhr); + }, + + setHeader: function(name, value){ + this.headers.set(name, value); + return this; + }, + + getHeader: function(name){ + return $try(function(){ + return this.xhr.getResponseHeader(name); + }.bind(this)); + }, + + check: function(){ + if (!this.running) return true; + switch (this.options.link){ + case 'cancel': this.cancel(); return true; + case 'chain': this.chain(this.caller.bind(this, arguments)); return false; + } + return false; + }, + + send: function(options){ + if (!this.check(options)) return this; + this.running = true; + + var type = $type(options); + if (type == 'string' || type == 'element') options = {data: options}; + + var old = this.options; + options = $extend({data: old.data, url: old.url, method: old.method}, options); + var data = options.data, url = String(options.url), method = options.method.toLowerCase(); + + switch ($type(data)){ + case 'element': data = document.id(data).toQueryString(); break; + case 'object': case 'hash': data = Hash.toQueryString(data); + } + + if (this.options.format){ + var format = 'format=' + this.options.format; + data = (data) ? format + '&' + data : format; + } + + if (this.options.emulation && !['get', 'post'].contains(method)){ + var _method = '_method=' + method; + data = (data) ? _method + '&' + data : _method; + method = 'post'; + } + + if (this.options.urlEncoded && method == 'post'){ + var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : ''; + this.headers.set('Content-type', 'application/x-www-form-urlencoded' + encoding); + } + + if (this.options.noCache){ + var noCache = 'noCache=' + new Date().getTime(); + data = (data) ? noCache + '&' + data : noCache; + } + + var trimPosition = url.lastIndexOf('/'); + if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition); + + if (data && method == 'get'){ + url = url + (url.contains('?') ? '&' : '?') + data; + data = null; + } + + this.xhr.open(method.toUpperCase(), url, this.options.async); + + this.xhr.onreadystatechange = this.onStateChange.bind(this); + + this.headers.each(function(value, key){ + try { + this.xhr.setRequestHeader(key, value); + } catch (e){ + this.fireEvent('exception', [key, value]); + } + }, this); + + this.fireEvent('request'); + this.xhr.send(data); + if (!this.options.async) this.onStateChange(); + return this; + }, + + cancel: function(){ + if (!this.running) return this; + this.running = false; + this.xhr.abort(); + this.xhr.onreadystatechange = $empty; + this.xhr = new Browser.Request(); + this.fireEvent('cancel'); + return this; + } + +}); + +(function(){ + +var methods = {}; +['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){ + methods[method] = function(){ + var params = Array.link(arguments, {url: String.type, data: $defined}); + return this.send($extend(params, {method: method})); + }; +}); + +Request.implement(methods); + +})(); + +Element.Properties.send = { + + set: function(options){ + var send = this.retrieve('send'); + if (send) send.cancel(); + return this.eliminate('send').store('send:options', $extend({ + data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action') + }, options)); + }, + + get: function(options){ + if (options || !this.retrieve('send')){ + if (options || !this.retrieve('send:options')) this.set('send', options); + this.store('send', new Request(this.retrieve('send:options'))); + } + return this.retrieve('send'); + } + +}; + +Element.implement({ + + send: function(url){ + var sender = this.get('send'); + sender.send({data: this, url: url || sender.options.url}); + return this; + } + +}); + +/* +--- + +name: Request.HTML + +description: Extends the basic Request Class with additional methods for interacting with HTML responses. + +license: MIT-style license. + +requires: [Request, Element] + +provides: Request.HTML + +... +*/ + +Request.HTML = new Class({ + + Extends: Request, + + options: { + update: false, + append: false, + evalScripts: true, + filter: false + }, + + processHTML: function(text){ + var match = text.match(/]*>([\s\S]*?)<\/body>/i); + text = (match) ? match[1] : text; + + var container = new Element('div'); + + return $try(function(){ + var root = '' + text + '', doc; + if (Browser.Engine.trident){ + doc = new ActiveXObject('Microsoft.XMLDOM'); + doc.async = false; + doc.loadXML(root); + } else { + doc = new DOMParser().parseFromString(root, 'text/xml'); + } + root = doc.getElementsByTagName('root')[0]; + if (!root) return null; + for (var i = 0, k = root.childNodes.length; i < k; i++){ + var child = Element.clone(root.childNodes[i], true, true); + if (child) container.grab(child); + } + return container; + }) || container.set('html', text); + }, + + success: function(text){ + var options = this.options, response = this.response; + + response.html = text.stripScripts(function(script){ + response.javascript = script; + }); + + var temp = this.processHTML(response.html); + + response.tree = temp.childNodes; + response.elements = temp.getElements('*'); + + if (options.filter) response.tree = response.elements.filter(options.filter); + if (options.update) document.id(options.update).empty().set('html', response.html); + else if (options.append) document.id(options.append).adopt(temp.getChildren()); + if (options.evalScripts) $exec(response.javascript); + + this.onSuccess(response.tree, response.elements, response.html, response.javascript); + } + +}); + +Element.Properties.load = { + + set: function(options){ + var load = this.retrieve('load'); + if (load) load.cancel(); + return this.eliminate('load').store('load:options', $extend({data: this, link: 'cancel', update: this, method: 'get'}, options)); + }, + + get: function(options){ + if (options || ! this.retrieve('load')){ + if (options || !this.retrieve('load:options')) this.set('load', options); + this.store('load', new Request.HTML(this.retrieve('load:options'))); + } + return this.retrieve('load'); + } + +}; + +Element.implement({ + + load: function(){ + this.get('load').send(Array.link(arguments, {data: Object.type, url: String.type})); + return this; + } + +}); + +/* +--- + +name: JSON + +description: JSON encoder and decoder. + +license: MIT-style license. + +see: + +requires: [Array, String, Number, Function, Hash] + +provides: JSON + +... +*/ + +var JSON = new Hash(this.JSON && { + stringify: JSON.stringify, + parse: JSON.parse +}).extend({ + + $specialChars: {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'}, + + $replaceChars: function(chr){ + return JSON.$specialChars[chr] || '\\u00' + Math.floor(chr.charCodeAt() / 16).toString(16) + (chr.charCodeAt() % 16).toString(16); + }, + + encode: function(obj){ + switch ($type(obj)){ + case 'string': + return '"' + obj.replace(/[\x00-\x1f\\"]/g, JSON.$replaceChars) + '"'; + case 'array': + return '[' + String(obj.map(JSON.encode).clean()) + ']'; + case 'object': case 'hash': + var string = []; + Hash.each(obj, function(value, key){ + var json = JSON.encode(value); + if (json) string.push(JSON.encode(key) + ':' + json); + }); + return '{' + string + '}'; + case 'number': case 'boolean': return String(obj); + case false: return 'null'; + } + return null; + }, + + decode: function(string, secure){ + if ($type(string) != 'string' || !string.length) return null; + if (secure && !(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) return null; + return eval('(' + string + ')'); + } + +}); + +/* +--- + +name: Request.JSON + +description: Extends the basic Request Class with additional methods for sending and receiving JSON data. + +license: MIT-style license. + +requires: [Request, JSON] + +provides: [Request.JSON] + +... +*/ + +Request.JSON = new Class({ + + Extends: Request, + + options: { + secure: true + }, + + initialize: function(options){ + this.parent(options); + this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'}); + }, + + success: function(text){ + this.response.json = JSON.decode(text, this.options.secure); + this.onSuccess(this.response.json, text); + } + +}); + +/* +--- + +name: Cookie + +description: Class for creating, reading, and deleting browser Cookies. + +license: MIT-style license. + +credits: Based on the functions by Peter-Paul Koch (http://quirksmode.org). + +requires: Options + +provides: Cookie + +... +*/ + +var Cookie = new Class({ + + Implements: Options, + + options: { + path: false, + domain: false, + duration: false, + secure: false, + document: document + }, + + initialize: function(key, options){ + this.key = key; + this.setOptions(options); + }, + + write: function(value){ + value = encodeURIComponent(value); + if (this.options.domain) value += '; domain=' + this.options.domain; + if (this.options.path) value += '; path=' + this.options.path; + if (this.options.duration){ + var date = new Date(); + date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000); + value += '; expires=' + date.toGMTString(); + } + if (this.options.secure) value += '; secure'; + this.options.document.cookie = this.key + '=' + value; + return this; + }, + + read: function(){ + var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)'); + return (value) ? decodeURIComponent(value[1]) : null; + }, + + dispose: function(){ + new Cookie(this.key, $merge(this.options, {duration: -1})).write(''); + return this; + } + +}); + +Cookie.write = function(key, value, options){ + return new Cookie(key, options).write(value); +}; + +Cookie.read = function(key){ + return new Cookie(key).read(); +}; + +Cookie.dispose = function(key, options){ + return new Cookie(key, options).dispose(); +}; + +/* +--- + +name: DomReady + +description: Contains the custom event domready. + +license: MIT-style license. + +requires: Element.Event + +provides: DomReady + +... +*/ + +Element.Events.domready = { + + onAdd: function(fn){ + if (Browser.loaded) fn.call(this); + } + +}; + +(function(){ + + var domready = function(){ + if (Browser.loaded) return; + Browser.loaded = true; + window.fireEvent('domready'); + document.fireEvent('domready'); + }; + + window.addEvent('load', domready); + + if (Browser.Engine.trident){ + var temp = document.createElement('div'); + (function(){ + ($try(function(){ + temp.doScroll(); // Technique by Diego Perini + return document.id(temp).inject(document.body).set('html', 'temp').dispose(); + })) ? domready() : arguments.callee.delay(50); + })(); + } else if (Browser.Engine.webkit && Browser.Engine.version < 525){ + (function(){ + (['loaded', 'complete'].contains(document.readyState)) ? domready() : arguments.callee.delay(50); + })(); + } else { + document.addEvent('DOMContentLoaded', domready); + } + +})(); + +/* +--- + +name: Selectors + +description: Adds advanced CSS-style querying capabilities for targeting HTML Elements. Includes pseudo selectors. + +license: MIT-style license. + +requires: Element + +provides: Selectors + +... +*/ + +Native.implement([Document, Element], { + + getElements: function(expression, nocash){ + expression = expression.split(','); + var items, local = {}; + for (var i = 0, l = expression.length; i < l; i++){ + var selector = expression[i], elements = Selectors.Utils.search(this, selector, local); + if (i != 0 && elements.item) elements = $A(elements); + items = (i == 0) ? elements : (items.item) ? $A(items).concat(elements) : items.concat(elements); + } + return new Elements(items, {ddup: (expression.length > 1), cash: !nocash}); + } + +}); + +Element.implement({ + + match: function(selector){ + if (!selector || (selector == this)) return true; + var tagid = Selectors.Utils.parseTagAndID(selector); + var tag = tagid[0], id = tagid[1]; + if (!Selectors.Filters.byID(this, id) || !Selectors.Filters.byTag(this, tag)) return false; + var parsed = Selectors.Utils.parseSelector(selector); + return (parsed) ? Selectors.Utils.filter(this, parsed, {}) : true; + } + +}); + +var Selectors = {Cache: {nth: {}, parsed: {}}}; + +Selectors.RegExps = { + id: (/#([\w-]+)/), + tag: (/^(\w+|\*)/), + quick: (/^(\w+|\*)$/), + splitter: (/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g), + combined: (/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g) +}; + +Selectors.Utils = { + + chk: function(item, uniques){ + if (!uniques) return true; + var uid = $uid(item); + if (!uniques[uid]) return uniques[uid] = true; + return false; + }, + + parseNthArgument: function(argument){ + if (Selectors.Cache.nth[argument]) return Selectors.Cache.nth[argument]; + var parsed = argument.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/); + if (!parsed) return false; + var inta = parseInt(parsed[1], 10); + var a = (inta || inta === 0) ? inta : 1; + var special = parsed[2] || false; + var b = parseInt(parsed[3], 10) || 0; + if (a != 0){ + b--; + while (b < 1) b += a; + while (b >= a) b -= a; + } else { + a = b; + special = 'index'; + } + switch (special){ + case 'n': parsed = {a: a, b: b, special: 'n'}; break; + case 'odd': parsed = {a: 2, b: 0, special: 'n'}; break; + case 'even': parsed = {a: 2, b: 1, special: 'n'}; break; + case 'first': parsed = {a: 0, special: 'index'}; break; + case 'last': parsed = {special: 'last-child'}; break; + case 'only': parsed = {special: 'only-child'}; break; + default: parsed = {a: (a - 1), special: 'index'}; + } + + return Selectors.Cache.nth[argument] = parsed; + }, + + parseSelector: function(selector){ + if (Selectors.Cache.parsed[selector]) return Selectors.Cache.parsed[selector]; + var m, parsed = {classes: [], pseudos: [], attributes: []}; + while ((m = Selectors.RegExps.combined.exec(selector))){ + var cn = m[1], an = m[2], ao = m[3], av = m[5], pn = m[6], pa = m[7]; + if (cn){ + parsed.classes.push(cn); + } else if (pn){ + var parser = Selectors.Pseudo.get(pn); + if (parser) parsed.pseudos.push({parser: parser, argument: pa}); + else parsed.attributes.push({name: pn, operator: '=', value: pa}); + } else if (an){ + parsed.attributes.push({name: an, operator: ao, value: av}); + } + } + if (!parsed.classes.length) delete parsed.classes; + if (!parsed.attributes.length) delete parsed.attributes; + if (!parsed.pseudos.length) delete parsed.pseudos; + if (!parsed.classes && !parsed.attributes && !parsed.pseudos) parsed = null; + return Selectors.Cache.parsed[selector] = parsed; + }, + + parseTagAndID: function(selector){ + var tag = selector.match(Selectors.RegExps.tag); + var id = selector.match(Selectors.RegExps.id); + return [(tag) ? tag[1] : '*', (id) ? id[1] : false]; + }, + + filter: function(item, parsed, local){ + var i; + if (parsed.classes){ + for (i = parsed.classes.length; i--; i){ + var cn = parsed.classes[i]; + if (!Selectors.Filters.byClass(item, cn)) return false; + } + } + if (parsed.attributes){ + for (i = parsed.attributes.length; i--; i){ + var att = parsed.attributes[i]; + if (!Selectors.Filters.byAttribute(item, att.name, att.operator, att.value)) return false; + } + } + if (parsed.pseudos){ + for (i = parsed.pseudos.length; i--; i){ + var psd = parsed.pseudos[i]; + if (!Selectors.Filters.byPseudo(item, psd.parser, psd.argument, local)) return false; + } + } + return true; + }, + + getByTagAndID: function(ctx, tag, id){ + if (id){ + var item = (ctx.getElementById) ? ctx.getElementById(id, true) : Element.getElementById(ctx, id, true); + return (item && Selectors.Filters.byTag(item, tag)) ? [item] : []; + } else { + return ctx.getElementsByTagName(tag); + } + }, + + search: function(self, expression, local){ + var splitters = []; + + var selectors = expression.trim().replace(Selectors.RegExps.splitter, function(m0, m1, m2){ + splitters.push(m1); + return ':)' + m2; + }).split(':)'); + + var items, filtered, item; + + for (var i = 0, l = selectors.length; i < l; i++){ + + var selector = selectors[i]; + + if (i == 0 && Selectors.RegExps.quick.test(selector)){ + items = self.getElementsByTagName(selector); + continue; + } + + var splitter = splitters[i - 1]; + + var tagid = Selectors.Utils.parseTagAndID(selector); + var tag = tagid[0], id = tagid[1]; + + if (i == 0){ + items = Selectors.Utils.getByTagAndID(self, tag, id); + } else { + var uniques = {}, found = []; + for (var j = 0, k = items.length; j < k; j++) found = Selectors.Getters[splitter](found, items[j], tag, id, uniques); + items = found; + } + + var parsed = Selectors.Utils.parseSelector(selector); + + if (parsed){ + filtered = []; + for (var m = 0, n = items.length; m < n; m++){ + item = items[m]; + if (Selectors.Utils.filter(item, parsed, local)) filtered.push(item); + } + items = filtered; + } + + } + + return items; + + } + +}; + +Selectors.Getters = { + + ' ': function(found, self, tag, id, uniques){ + var items = Selectors.Utils.getByTagAndID(self, tag, id); + for (var i = 0, l = items.length; i < l; i++){ + var item = items[i]; + if (Selectors.Utils.chk(item, uniques)) found.push(item); + } + return found; + }, + + '>': function(found, self, tag, id, uniques){ + var children = Selectors.Utils.getByTagAndID(self, tag, id); + for (var i = 0, l = children.length; i < l; i++){ + var child = children[i]; + if (child.parentNode == self && Selectors.Utils.chk(child, uniques)) found.push(child); + } + return found; + }, + + '+': function(found, self, tag, id, uniques){ + while ((self = self.nextSibling)){ + if (self.nodeType == 1){ + if (Selectors.Utils.chk(self, uniques) && Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self); + break; + } + } + return found; + }, + + '~': function(found, self, tag, id, uniques){ + while ((self = self.nextSibling)){ + if (self.nodeType == 1){ + if (!Selectors.Utils.chk(self, uniques)) break; + if (Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self); + } + } + return found; + } + +}; + +Selectors.Filters = { + + byTag: function(self, tag){ + return (tag == '*' || (self.tagName && self.tagName.toLowerCase() == tag)); + }, + + byID: function(self, id){ + return (!id || (self.id && self.id == id)); + }, + + byClass: function(self, klass){ + return (self.className && self.className.contains && self.className.contains(klass, ' ')); + }, + + byPseudo: function(self, parser, argument, local){ + return parser.call(self, argument, local); + }, + + byAttribute: function(self, name, operator, value){ + var result = Element.prototype.getProperty.call(self, name); + if (!result) return (operator == '!='); + if (!operator || value == undefined) return true; + switch (operator){ + case '=': return (result == value); + case '*=': return (result.contains(value)); + case '^=': return (result.substr(0, value.length) == value); + case '$=': return (result.substr(result.length - value.length) == value); + case '!=': return (result != value); + case '~=': return result.contains(value, ' '); + case '|=': return result.contains(value, '-'); + } + return false; + } + +}; + +Selectors.Pseudo = new Hash({ + + // w3c pseudo selectors + + checked: function(){ + return this.checked; + }, + + empty: function(){ + return !(this.innerText || this.textContent || '').length; + }, + + not: function(selector){ + return !Element.match(this, selector); + }, + + contains: function(text){ + return (this.innerText || this.textContent || '').contains(text); + }, + + 'first-child': function(){ + return Selectors.Pseudo.index.call(this, 0); + }, + + 'last-child': function(){ + var element = this; + while ((element = element.nextSibling)){ + if (element.nodeType == 1) return false; + } + return true; + }, + + 'only-child': function(){ + var prev = this; + while ((prev = prev.previousSibling)){ + if (prev.nodeType == 1) return false; + } + var next = this; + while ((next = next.nextSibling)){ + if (next.nodeType == 1) return false; + } + return true; + }, + + 'nth-child': function(argument, local){ + argument = (argument == undefined) ? 'n' : argument; + var parsed = Selectors.Utils.parseNthArgument(argument); + if (parsed.special != 'n') return Selectors.Pseudo[parsed.special].call(this, parsed.a, local); + var count = 0; + local.positions = local.positions || {}; + var uid = $uid(this); + if (!local.positions[uid]){ + var self = this; + while ((self = self.previousSibling)){ + if (self.nodeType != 1) continue; + count ++; + var position = local.positions[$uid(self)]; + if (position != undefined){ + count = position + count; + break; + } + } + local.positions[uid] = count; + } + return (local.positions[uid] % parsed.a == parsed.b); + }, + + // custom pseudo selectors + + index: function(index){ + var element = this, count = 0; + while ((element = element.previousSibling)){ + if (element.nodeType == 1 && ++count > index) return false; + } + return (count == index); + }, + + even: function(argument, local){ + return Selectors.Pseudo['nth-child'].call(this, '2n+1', local); + }, + + odd: function(argument, local){ + return Selectors.Pseudo['nth-child'].call(this, '2n', local); + }, + + selected: function(){ + return this.selected; + }, + + enabled: function(){ + return (this.disabled === false); + } + +}); + +/* +--- + +name: Swiff + +description: Wrapper for embedding SWF movies. Supports External Interface Communication. + +license: MIT-style license. + +credits: Flash detection & Internet Explorer + Flash Player 9 fix inspired by SWFObject. + +requires: [Options, $util] + +provides: Swiff + +... +*/ + +var Swiff = new Class({ + + Implements: [Options], + + options: { + id: null, + height: 1, + width: 1, + container: null, + properties: {}, + params: { + quality: 'high', + allowScriptAccess: 'always', + wMode: 'transparent', + swLiveConnect: true + }, + callBacks: {}, + vars: {} + }, + + toElement: function(){ + return this.object; + }, + + initialize: function(path, options){ + this.instance = 'Swiff_' + $time(); + + this.setOptions(options); + options = this.options; + var id = this.id = options.id || this.instance; + var container = document.id(options.container); + + Swiff.CallBacks[this.instance] = {}; + + var params = options.params, vars = options.vars, callBacks = options.callBacks; + var properties = $extend({height: options.height, width: options.width}, options.properties); + + var self = this; + + for (var callBack in callBacks){ + Swiff.CallBacks[this.instance][callBack] = (function(option){ + return function(){ + return option.apply(self.object, arguments); + }; + })(callBacks[callBack]); + vars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack; + } + + params.flashVars = Hash.toQueryString(vars); + if (Browser.Engine.trident){ + properties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; + params.movie = path; + } else { + properties.type = 'application/x-shockwave-flash'; + properties.data = path; + } + var build = ''; + } + build += ''; + this.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild; + }, + + replaces: function(element){ + element = document.id(element, true); + element.parentNode.replaceChild(this.toElement(), element); + return this; + }, + + inject: function(element){ + document.id(element, true).appendChild(this.toElement()); + return this; + }, + + remote: function(){ + return Swiff.remote.apply(Swiff, [this.toElement()].extend(arguments)); + } + +}); + +Swiff.CallBacks = {}; + +Swiff.remote = function(obj, fn){ + var rs = obj.CallFunction('' + __flash__argumentsToXML(arguments, 2) + ''); + return eval(rs); +}; + diff --git a/tests/javascript/frameworks/mootools/mootools-1.3.1.js b/tests/javascript/frameworks/mootools/mootools-1.3.1.js new file mode 100644 index 0000000000000000000000000000000000000000..3b000aa4476a941657f0b16bf281d6525f4b4475 --- /dev/null +++ b/tests/javascript/frameworks/mootools/mootools-1.3.1.js @@ -0,0 +1,5428 @@ +/* +--- +MooTools: the javascript framework + +web build: + - http://mootools.net/core/7c56cfef9dddcf170a5d68e3fb61cfd7 + +packager build: + - packager build Core/Core Core/Array Core/String Core/Number Core/Function Core/Object Core/Event Core/Browser Core/Class Core/Class.Extras Core/Slick.Parser Core/Slick.Finder Core/Element Core/Element.Style Core/Element.Event Core/Element.Dimensions Core/Fx Core/Fx.CSS Core/Fx.Tween Core/Fx.Morph Core/Fx.Transitions Core/Request Core/Request.HTML Core/Request.JSON Core/Cookie Core/JSON Core/DOMReady Core/Swiff + +/* +--- + +name: Core + +description: The heart of MooTools. + +license: MIT-style license. + +copyright: Copyright (c) 2006-2010 [Valerio Proietti](http://mad4milk.net/). + +authors: The MooTools production team (http://mootools.net/developers/) + +inspiration: + - Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php) + - Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php) + +provides: [Core, MooTools, Type, typeOf, instanceOf, Native] + +... +*/ + +(function(){ + +this.MooTools = { + version: '1.3.1', + build: 'af48c8d589f43f32212f9bb8ff68a127e6a3ba6c' +}; + +// typeOf, instanceOf + +var typeOf = this.typeOf = function(item){ + if (item == null) return 'null'; + if (item.$family) return item.$family(); + + if (item.nodeName){ + if (item.nodeType == 1) return 'element'; + if (item.nodeType == 3) return (/\S/).test(item.nodeValue) ? 'textnode' : 'whitespace'; + } else if (typeof item.length == 'number'){ + if (item.callee) return 'arguments'; + if ('item' in item) return 'collection'; + } + + return typeof item; +}; + +var instanceOf = this.instanceOf = function(item, object){ + if (item == null) return false; + var constructor = item.$constructor || item.constructor; + while (constructor){ + if (constructor === object) return true; + constructor = constructor.parent; + } + return item instanceof object; +}; + +// Function overloading + +var Function = this.Function; + +var enumerables = true; +for (var i in {toString: 1}) enumerables = null; +if (enumerables) enumerables = ['hasOwnProperty', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'constructor']; + +Function.prototype.overloadSetter = function(usePlural){ + var self = this; + return function(a, b){ + if (a == null) return this; + if (usePlural || typeof a != 'string'){ + for (var k in a) self.call(this, k, a[k]); + if (enumerables) for (var i = enumerables.length; i--;){ + k = enumerables[i]; + if (a.hasOwnProperty(k)) self.call(this, k, a[k]); + } + } else { + self.call(this, a, b); + } + return this; + }; +}; + +Function.prototype.overloadGetter = function(usePlural){ + var self = this; + return function(a){ + var args, result; + if (usePlural || typeof a != 'string') args = a; + else if (arguments.length > 1) args = arguments; + if (args){ + result = {}; + for (var i = 0; i < args.length; i++) result[args[i]] = self.call(this, args[i]); + } else { + result = self.call(this, a); + } + return result; + }; +}; + +Function.prototype.extend = function(key, value){ + this[key] = value; +}.overloadSetter(); + +Function.prototype.implement = function(key, value){ + this.prototype[key] = value; +}.overloadSetter(); + +// From + +var slice = Array.prototype.slice; + +Function.from = function(item){ + return (typeOf(item) == 'function') ? item : function(){ + return item; + }; +}; + +Array.from = function(item){ + if (item == null) return []; + return (Type.isEnumerable(item) && typeof item != 'string') ? (typeOf(item) == 'array') ? item : slice.call(item) : [item]; +}; + +Number.from = function(item){ + var number = parseFloat(item); + return isFinite(number) ? number : null; +}; + +String.from = function(item){ + return item + ''; +}; + +// hide, protect + +Function.implement({ + + hide: function(){ + this.$hidden = true; + return this; + }, + + protect: function(){ + this.$protected = true; + return this; + } + +}); + +// Type + +var Type = this.Type = function(name, object){ + if (name){ + var lower = name.toLowerCase(); + var typeCheck = function(item){ + return (typeOf(item) == lower); + }; + + Type['is' + name] = typeCheck; + if (object != null){ + object.prototype.$family = (function(){ + return lower; + }).hide(); + + } + } + + if (object == null) return null; + + object.extend(this); + object.$constructor = Type; + object.prototype.$constructor = object; + + return object; +}; + +var toString = Object.prototype.toString; + +Type.isEnumerable = function(item){ + return (item != null && typeof item.length == 'number' && toString.call(item) != '[object Function]' ); +}; + +var hooks = {}; + +var hooksOf = function(object){ + var type = typeOf(object.prototype); + return hooks[type] || (hooks[type] = []); +}; + +var implement = function(name, method){ + if (method && method.$hidden) return; + + var hooks = hooksOf(this); + + for (var i = 0; i < hooks.length; i++){ + var hook = hooks[i]; + if (typeOf(hook) == 'type') implement.call(hook, name, method); + else hook.call(this, name, method); + } + + var previous = this.prototype[name]; + if (previous == null || !previous.$protected) this.prototype[name] = method; + + if (this[name] == null && typeOf(method) == 'function') extend.call(this, name, function(item){ + return method.apply(item, slice.call(arguments, 1)); + }); +}; + +var extend = function(name, method){ + if (method && method.$hidden) return; + var previous = this[name]; + if (previous == null || !previous.$protected) this[name] = method; +}; + +Type.implement({ + + implement: implement.overloadSetter(), + + extend: extend.overloadSetter(), + + alias: function(name, existing){ + implement.call(this, name, this.prototype[existing]); + }.overloadSetter(), + + mirror: function(hook){ + hooksOf(this).push(hook); + return this; + } + +}); + +new Type('Type', Type); + +// Default Types + +var force = function(name, object, methods){ + var isType = (object != Object), + prototype = object.prototype; + + if (isType) object = new Type(name, object); + + for (var i = 0, l = methods.length; i < l; i++){ + var key = methods[i], + generic = object[key], + proto = prototype[key]; + + if (generic) generic.protect(); + + if (isType && proto){ + delete prototype[key]; + prototype[key] = proto.protect(); + } + } + + if (isType) object.implement(prototype); + + return force; +}; + +force('String', String, [ + 'charAt', 'charCodeAt', 'concat', 'indexOf', 'lastIndexOf', 'match', 'quote', 'replace', 'search', + 'slice', 'split', 'substr', 'substring', 'toLowerCase', 'toUpperCase' +])('Array', Array, [ + 'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice', + 'indexOf', 'lastIndexOf', 'filter', 'forEach', 'every', 'map', 'some', 'reduce', 'reduceRight' +])('Number', Number, [ + 'toExponential', 'toFixed', 'toLocaleString', 'toPrecision' +])('Function', Function, [ + 'apply', 'call', 'bind' +])('RegExp', RegExp, [ + 'exec', 'test' +])('Object', Object, [ + 'create', 'defineProperty', 'defineProperties', 'keys', + 'getPrototypeOf', 'getOwnPropertyDescriptor', 'getOwnPropertyNames', + 'preventExtensions', 'isExtensible', 'seal', 'isSealed', 'freeze', 'isFrozen' +])('Date', Date, ['now']); + +Object.extend = extend.overloadSetter(); + +Date.extend('now', function(){ + return +(new Date); +}); + +new Type('Boolean', Boolean); + +// fixes NaN returning as Number + +Number.prototype.$family = function(){ + return isFinite(this) ? 'number' : 'null'; +}.hide(); + +// Number.random + +Number.extend('random', function(min, max){ + return Math.floor(Math.random() * (max - min + 1) + min); +}); + +// forEach, each + +var hasOwnProperty = Object.prototype.hasOwnProperty; +Object.extend('forEach', function(object, fn, bind){ + for (var key in object){ + if (hasOwnProperty.call(object, key)) fn.call(bind, object[key], key, object); + } +}); + +Object.each = Object.forEach; + +Array.implement({ + + forEach: function(fn, bind){ + for (var i = 0, l = this.length; i < l; i++){ + if (i in this) fn.call(bind, this[i], i, this); + } + }, + + each: function(fn, bind){ + Array.forEach(this, fn, bind); + return this; + } + +}); + +// Array & Object cloning, Object merging and appending + +var cloneOf = function(item){ + switch (typeOf(item)){ + case 'array': return item.clone(); + case 'object': return Object.clone(item); + default: return item; + } +}; + +Array.implement('clone', function(){ + var i = this.length, clone = new Array(i); + while (i--) clone[i] = cloneOf(this[i]); + return clone; +}); + +var mergeOne = function(source, key, current){ + switch (typeOf(current)){ + case 'object': + if (typeOf(source[key]) == 'object') Object.merge(source[key], current); + else source[key] = Object.clone(current); + break; + case 'array': source[key] = current.clone(); break; + default: source[key] = current; + } + return source; +}; + +Object.extend({ + + merge: function(source, k, v){ + if (typeOf(k) == 'string') return mergeOne(source, k, v); + for (var i = 1, l = arguments.length; i < l; i++){ + var object = arguments[i]; + for (var key in object) mergeOne(source, key, object[key]); + } + return source; + }, + + clone: function(object){ + var clone = {}; + for (var key in object) clone[key] = cloneOf(object[key]); + return clone; + }, + + append: function(original){ + for (var i = 1, l = arguments.length; i < l; i++){ + var extended = arguments[i] || {}; + for (var key in extended) original[key] = extended[key]; + } + return original; + } + +}); + +// Object-less types + +['Object', 'WhiteSpace', 'TextNode', 'Collection', 'Arguments'].each(function(name){ + new Type(name); +}); + +// Unique ID + +var UID = Date.now(); + +String.extend('uniqueID', function(){ + return (UID++).toString(36); +}); + +}).call(this); + +/* +--- + +name: Array + +description: Contains Array Prototypes like each, contains, and erase. + +license: MIT-style license. + +requires: Type + +provides: Array + +... +*/ + +Array.implement({ + + invoke: function(methodName){ + var args = Array.slice(arguments, 1); + return this.map(function(item){ + return item[methodName].apply(item, args); + }); + }, + + every: function(fn, bind){ + for (var i = 0, l = this.length; i < l; i++){ + if ((i in this) && !fn.call(bind, this[i], i, this)) return false; + } + return true; + }, + + filter: function(fn, bind){ + var results = []; + for (var i = 0, l = this.length; i < l; i++){ + if ((i in this) && fn.call(bind, this[i], i, this)) results.push(this[i]); + } + return results; + }, + + clean: function(){ + return this.filter(function(item){ + return item != null; + }); + }, + + indexOf: function(item, from){ + var len = this.length; + for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){ + if (this[i] === item) return i; + } + return -1; + }, + + map: function(fn, bind){ + var results = []; + for (var i = 0, l = this.length; i < l; i++){ + if (i in this) results[i] = fn.call(bind, this[i], i, this); + } + return results; + }, + + some: function(fn, bind){ + for (var i = 0, l = this.length; i < l; i++){ + if ((i in this) && fn.call(bind, this[i], i, this)) return true; + } + return false; + }, + + associate: function(keys){ + var obj = {}, length = Math.min(this.length, keys.length); + for (var i = 0; i < length; i++) obj[keys[i]] = this[i]; + return obj; + }, + + link: function(object){ + var result = {}; + for (var i = 0, l = this.length; i < l; i++){ + for (var key in object){ + if (object[key](this[i])){ + result[key] = this[i]; + delete object[key]; + break; + } + } + } + return result; + }, + + contains: function(item, from){ + return this.indexOf(item, from) != -1; + }, + + append: function(array){ + this.push.apply(this, array); + return this; + }, + + getLast: function(){ + return (this.length) ? this[this.length - 1] : null; + }, + + getRandom: function(){ + return (this.length) ? this[Number.random(0, this.length - 1)] : null; + }, + + include: function(item){ + if (!this.contains(item)) this.push(item); + return this; + }, + + combine: function(array){ + for (var i = 0, l = array.length; i < l; i++) this.include(array[i]); + return this; + }, + + erase: function(item){ + for (var i = this.length; i--;){ + if (this[i] === item) this.splice(i, 1); + } + return this; + }, + + empty: function(){ + this.length = 0; + return this; + }, + + flatten: function(){ + var array = []; + for (var i = 0, l = this.length; i < l; i++){ + var type = typeOf(this[i]); + if (type == 'null') continue; + array = array.concat((type == 'array' || type == 'collection' || type == 'arguments' || instanceOf(this[i], Array)) ? Array.flatten(this[i]) : this[i]); + } + return array; + }, + + pick: function(){ + for (var i = 0, l = this.length; i < l; i++){ + if (this[i] != null) return this[i]; + } + return null; + }, + + hexToRgb: function(array){ + if (this.length != 3) return null; + var rgb = this.map(function(value){ + if (value.length == 1) value += value; + return value.toInt(16); + }); + return (array) ? rgb : 'rgb(' + rgb + ')'; + }, + + rgbToHex: function(array){ + if (this.length < 3) return null; + if (this.length == 4 && this[3] == 0 && !array) return 'transparent'; + var hex = []; + for (var i = 0; i < 3; i++){ + var bit = (this[i] - 0).toString(16); + hex.push((bit.length == 1) ? '0' + bit : bit); + } + return (array) ? hex : '#' + hex.join(''); + } + +}); + +/* +--- + +name: String + +description: Contains String Prototypes like camelCase, capitalize, test, and toInt. + +license: MIT-style license. + +requires: Type + +provides: String + +... +*/ + +String.implement({ + + test: function(regex, params){ + return ((typeOf(regex) == 'regexp') ? regex : new RegExp('' + regex, params)).test(this); + }, + + contains: function(string, separator){ + return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1; + }, + + trim: function(){ + return this.replace(/^\s+|\s+$/g, ''); + }, + + clean: function(){ + return this.replace(/\s+/g, ' ').trim(); + }, + + camelCase: function(){ + return this.replace(/-\D/g, function(match){ + return match.charAt(1).toUpperCase(); + }); + }, + + hyphenate: function(){ + return this.replace(/[A-Z]/g, function(match){ + return ('-' + match.charAt(0).toLowerCase()); + }); + }, + + capitalize: function(){ + return this.replace(/\b[a-z]/g, function(match){ + return match.toUpperCase(); + }); + }, + + escapeRegExp: function(){ + return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1'); + }, + + toInt: function(base){ + return parseInt(this, base || 10); + }, + + toFloat: function(){ + return parseFloat(this); + }, + + hexToRgb: function(array){ + var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/); + return (hex) ? hex.slice(1).hexToRgb(array) : null; + }, + + rgbToHex: function(array){ + var rgb = this.match(/\d{1,3}/g); + return (rgb) ? rgb.rgbToHex(array) : null; + }, + + substitute: function(object, regexp){ + return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){ + if (match.charAt(0) == '\\') return match.slice(1); + return (object[name] != null) ? object[name] : ''; + }); + } + +}); + +/* +--- + +name: Number + +description: Contains Number Prototypes like limit, round, times, and ceil. + +license: MIT-style license. + +requires: Type + +provides: Number + +... +*/ + +Number.implement({ + + limit: function(min, max){ + return Math.min(max, Math.max(min, this)); + }, + + round: function(precision){ + precision = Math.pow(10, precision || 0).toFixed(precision < 0 ? -precision : 0); + return Math.round(this * precision) / precision; + }, + + times: function(fn, bind){ + for (var i = 0; i < this; i++) fn.call(bind, i, this); + }, + + toFloat: function(){ + return parseFloat(this); + }, + + toInt: function(base){ + return parseInt(this, base || 10); + } + +}); + +Number.alias('each', 'times'); + +(function(math){ + var methods = {}; + math.each(function(name){ + if (!Number[name]) methods[name] = function(){ + return Math[name].apply(null, [this].concat(Array.from(arguments))); + }; + }); + Number.implement(methods); +})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']); + +/* +--- + +name: Function + +description: Contains Function Prototypes like create, bind, pass, and delay. + +license: MIT-style license. + +requires: Type + +provides: Function + +... +*/ + +Function.extend({ + + attempt: function(){ + for (var i = 0, l = arguments.length; i < l; i++){ + try { + return arguments[i](); + } catch (e){} + } + return null; + } + +}); + +Function.implement({ + + attempt: function(args, bind){ + try { + return this.apply(bind, Array.from(args)); + } catch (e){} + + return null; + }, + + bind: function(bind){ + var self = this, + args = (arguments.length > 1) ? Array.slice(arguments, 1) : null; + + return function(){ + if (!args && !arguments.length) return self.call(bind); + if (args && arguments.length) return self.apply(bind, args.concat(Array.from(arguments))); + return self.apply(bind, args || arguments); + }; + }, + + pass: function(args, bind){ + var self = this; + if (args != null) args = Array.from(args); + return function(){ + return self.apply(bind, args || arguments); + }; + }, + + delay: function(delay, bind, args){ + return setTimeout(this.pass((args == null ? [] : args), bind), delay); + }, + + periodical: function(periodical, bind, args){ + return setInterval(this.pass((args == null ? [] : args), bind), periodical); + } + +}); + +/* +--- + +name: Object + +description: Object generic methods + +license: MIT-style license. + +requires: Type + +provides: [Object, Hash] + +... +*/ + +(function(){ + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +Object.extend({ + + subset: function(object, keys){ + var results = {}; + for (var i = 0, l = keys.length; i < l; i++){ + var k = keys[i]; + results[k] = object[k]; + } + return results; + }, + + map: function(object, fn, bind){ + var results = {}; + for (var key in object){ + if (hasOwnProperty.call(object, key)) results[key] = fn.call(bind, object[key], key, object); + } + return results; + }, + + filter: function(object, fn, bind){ + var results = {}; + Object.each(object, function(value, key){ + if (fn.call(bind, value, key, object)) results[key] = value; + }); + return results; + }, + + every: function(object, fn, bind){ + for (var key in object){ + if (hasOwnProperty.call(object, key) && !fn.call(bind, object[key], key)) return false; + } + return true; + }, + + some: function(object, fn, bind){ + for (var key in object){ + if (hasOwnProperty.call(object, key) && fn.call(bind, object[key], key)) return true; + } + return false; + }, + + keys: function(object){ + var keys = []; + for (var key in object){ + if (hasOwnProperty.call(object, key)) keys.push(key); + } + return keys; + }, + + values: function(object){ + var values = []; + for (var key in object){ + if (hasOwnProperty.call(object, key)) values.push(object[key]); + } + return values; + }, + + getLength: function(object){ + return Object.keys(object).length; + }, + + keyOf: function(object, value){ + for (var key in object){ + if (hasOwnProperty.call(object, key) && object[key] === value) return key; + } + return null; + }, + + contains: function(object, value){ + return Object.keyOf(object, value) != null; + }, + + toQueryString: function(object, base){ + var queryString = []; + + Object.each(object, function(value, key){ + if (base) key = base + '[' + key + ']'; + var result; + switch (typeOf(value)){ + case 'object': result = Object.toQueryString(value, key); break; + case 'array': + var qs = {}; + value.each(function(val, i){ + qs[i] = val; + }); + result = Object.toQueryString(qs, key); + break; + default: result = key + '=' + encodeURIComponent(value); + } + if (value != null) queryString.push(result); + }); + + return queryString.join('&'); + } + +}); + +})(); + +/* +--- + +name: Browser + +description: The Browser Object. Contains Browser initialization, Window and Document, and the Browser Hash. + +license: MIT-style license. + +requires: [Array, Function, Number, String] + +provides: [Browser, Window, Document] + +... +*/ + +(function(){ + +var document = this.document; +var window = document.window = this; + +var UID = 1; + +this.$uid = (window.ActiveXObject) ? function(item){ + return (item.uid || (item.uid = [UID++]))[0]; +} : function(item){ + return item.uid || (item.uid = UID++); +}; + +$uid(window); +$uid(document); + +var ua = navigator.userAgent.toLowerCase(), + platform = navigator.platform.toLowerCase(), + UA = ua.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/) || [null, 'unknown', 0], + mode = UA[1] == 'ie' && document.documentMode; + +var Browser = this.Browser = { + + extend: Function.prototype.extend, + + name: (UA[1] == 'version') ? UA[3] : UA[1], + + version: mode || parseFloat((UA[1] == 'opera' && UA[4]) ? UA[4] : UA[2]), + + Platform: { + name: ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || platform.match(/mac|win|linux/) || ['other'])[0] + }, + + Features: { + xpath: !!(document.evaluate), + air: !!(window.runtime), + query: !!(document.querySelector), + json: !!(window.JSON) + }, + + Plugins: {} + +}; + +Browser[Browser.name] = true; +Browser[Browser.name + parseInt(Browser.version, 10)] = true; +Browser.Platform[Browser.Platform.name] = true; + +// Request + +Browser.Request = (function(){ + + var XMLHTTP = function(){ + return new XMLHttpRequest(); + }; + + var MSXML2 = function(){ + return new ActiveXObject('MSXML2.XMLHTTP'); + }; + + var MSXML = function(){ + return new ActiveXObject('Microsoft.XMLHTTP'); + }; + + return Function.attempt(function(){ + XMLHTTP(); + return XMLHTTP; + }, function(){ + MSXML2(); + return MSXML2; + }, function(){ + MSXML(); + return MSXML; + }); + +})(); + +Browser.Features.xhr = !!(Browser.Request); + +// Flash detection + +var version = (Function.attempt(function(){ + return navigator.plugins['Shockwave Flash'].description; +}, function(){ + return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version'); +}) || '0 r0').match(/\d+/g); + +Browser.Plugins.Flash = { + version: Number(version[0] || '0.' + version[1]) || 0, + build: Number(version[2]) || 0 +}; + +// String scripts + +Browser.exec = function(text){ + if (!text) return text; + if (window.execScript){ + window.execScript(text); + } else { + var script = document.createElement('script'); + script.setAttribute('type', 'text/javascript'); + script.text = text; + document.head.appendChild(script); + document.head.removeChild(script); + } + return text; +}; + +String.implement('stripScripts', function(exec){ + var scripts = ''; + var text = this.replace(/]*>([\s\S]*?)<\/script>/gi, function(all, code){ + scripts += code + '\n'; + return ''; + }); + if (exec === true) Browser.exec(scripts); + else if (typeOf(exec) == 'function') exec(scripts, text); + return text; +}); + +// Window, Document + +Browser.extend({ + Document: this.Document, + Window: this.Window, + Element: this.Element, + Event: this.Event +}); + +this.Window = this.$constructor = new Type('Window', function(){}); + +this.$family = Function.from('window').hide(); + +Window.mirror(function(name, method){ + window[name] = method; +}); + +this.Document = document.$constructor = new Type('Document', function(){}); + +document.$family = Function.from('document').hide(); + +Document.mirror(function(name, method){ + document[name] = method; +}); + +document.html = document.documentElement; +document.head = document.getElementsByTagName('head')[0]; + +if (document.execCommand) try { + document.execCommand("BackgroundImageCache", false, true); +} catch (e){} + +if (this.attachEvent && !this.addEventListener){ + var unloadEvent = function(){ + this.detachEvent('onunload', unloadEvent); + document.head = document.html = document.window = null; + }; + this.attachEvent('onunload', unloadEvent); +} + +// IE fails on collections and ) +var arrayFrom = Array.from; +try { + arrayFrom(document.html.childNodes); +} catch(e){ + Array.from = function(item){ + if (typeof item != 'string' && Type.isEnumerable(item) && typeOf(item) != 'array'){ + var i = item.length, array = new Array(i); + while (i--) array[i] = item[i]; + return array; + } + return arrayFrom(item); + }; + + var prototype = Array.prototype, + slice = prototype.slice; + ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice'].each(function(name){ + var method = prototype[name]; + Array[name] = function(item){ + return method.apply(Array.from(item), slice.call(arguments, 1)); + }; + }); +} + +}).call(this); + +/* +--- + +name: Event + +description: Contains the Event Class, to make the event object cross-browser. + +license: MIT-style license. + +requires: [Window, Document, Array, Function, String, Object] + +provides: Event + +... +*/ + +var Event = new Type('Event', function(event, win){ + if (!win) win = window; + var doc = win.document; + event = event || win.event; + if (event.$extended) return event; + this.$extended = true; + var type = event.type, + target = event.target || event.srcElement, + page = {}, + client = {}, + related = null, + rightClick, wheel, code, key; + while (target && target.nodeType == 3) target = target.parentNode; + + if (type.indexOf('key') != -1){ + code = event.which || event.keyCode; + key = Object.keyOf(Event.Keys, code); + if (type == 'keydown'){ + var fKey = code - 111; + if (fKey > 0 && fKey < 13) key = 'f' + fKey; + } + if (!key) key = String.fromCharCode(code).toLowerCase(); + } else if ((/click|mouse|menu/i).test(type)){ + doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body; + page = { + x: (event.pageX != null) ? event.pageX : event.clientX + doc.scrollLeft, + y: (event.pageY != null) ? event.pageY : event.clientY + doc.scrollTop + }; + client = { + x: (event.pageX != null) ? event.pageX - win.pageXOffset : event.clientX, + y: (event.pageY != null) ? event.pageY - win.pageYOffset : event.clientY + }; + if ((/DOMMouseScroll|mousewheel/).test(type)){ + wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3; + } + rightClick = (event.which == 3) || (event.button == 2); + if ((/over|out/).test(type)){ + related = event.relatedTarget || event[(type == 'mouseover' ? 'from' : 'to') + 'Element']; + var testRelated = function(){ + while (related && related.nodeType == 3) related = related.parentNode; + return true; + }; + var hasRelated = (Browser.firefox2) ? testRelated.attempt() : testRelated(); + related = (hasRelated) ? related : null; + } + } else if ((/gesture|touch/i).test(type)){ + this.rotation = event.rotation; + this.scale = event.scale; + this.targetTouches = event.targetTouches; + this.changedTouches = event.changedTouches; + var touches = this.touches = event.touches; + if (touches && touches[0]){ + var touch = touches[0]; + page = {x: touch.pageX, y: touch.pageY}; + client = {x: touch.clientX, y: touch.clientY}; + } + } + + return Object.append(this, { + event: event, + type: type, + + page: page, + client: client, + rightClick: rightClick, + + wheel: wheel, + + relatedTarget: document.id(related), + target: document.id(target), + + code: code, + key: key, + + shift: event.shiftKey, + control: event.ctrlKey, + alt: event.altKey, + meta: event.metaKey + }); +}); + +Event.Keys = { + 'enter': 13, + 'up': 38, + 'down': 40, + 'left': 37, + 'right': 39, + 'esc': 27, + 'space': 32, + 'backspace': 8, + 'tab': 9, + 'delete': 46 +}; + +Event.implement({ + + stop: function(){ + return this.stopPropagation().preventDefault(); + }, + + stopPropagation: function(){ + if (this.event.stopPropagation) this.event.stopPropagation(); + else this.event.cancelBubble = true; + return this; + }, + + preventDefault: function(){ + if (this.event.preventDefault) this.event.preventDefault(); + else this.event.returnValue = false; + return this; + } + +}); + +/* +--- + +name: Class + +description: Contains the Class Function for easily creating, extending, and implementing reusable Classes. + +license: MIT-style license. + +requires: [Array, String, Function, Number] + +provides: Class + +... +*/ + +(function(){ + +var Class = this.Class = new Type('Class', function(params){ + if (instanceOf(params, Function)) params = {initialize: params}; + + var newClass = function(){ + reset(this); + if (newClass.$prototyping) return this; + this.$caller = null; + var value = (this.initialize) ? this.initialize.apply(this, arguments) : this; + this.$caller = this.caller = null; + return value; + }.extend(this).implement(params); + + newClass.$constructor = Class; + newClass.prototype.$constructor = newClass; + newClass.prototype.parent = parent; + + return newClass; +}); + +var parent = function(){ + if (!this.$caller) throw new Error('The method "parent" cannot be called.'); + var name = this.$caller.$name, + parent = this.$caller.$owner.parent, + previous = (parent) ? parent.prototype[name] : null; + if (!previous) throw new Error('The method "' + name + '" has no parent.'); + return previous.apply(this, arguments); +}; + +var reset = function(object){ + for (var key in object){ + var value = object[key]; + switch (typeOf(value)){ + case 'object': + var F = function(){}; + F.prototype = value; + object[key] = reset(new F); + break; + case 'array': object[key] = value.clone(); break; + } + } + return object; +}; + +var wrap = function(self, key, method){ + if (method.$origin) method = method.$origin; + var wrapper = function(){ + if (method.$protected && this.$caller == null) throw new Error('The method "' + key + '" cannot be called.'); + var caller = this.caller, current = this.$caller; + this.caller = current; this.$caller = wrapper; + var result = method.apply(this, arguments); + this.$caller = current; this.caller = caller; + return result; + }.extend({$owner: self, $origin: method, $name: key}); + return wrapper; +}; + +var implement = function(key, value, retain){ + if (Class.Mutators.hasOwnProperty(key)){ + value = Class.Mutators[key].call(this, value); + if (value == null) return this; + } + + if (typeOf(value) == 'function'){ + if (value.$hidden) return this; + this.prototype[key] = (retain) ? value : wrap(this, key, value); + } else { + Object.merge(this.prototype, key, value); + } + + return this; +}; + +var getInstance = function(klass){ + klass.$prototyping = true; + var proto = new klass; + delete klass.$prototyping; + return proto; +}; + +Class.implement('implement', implement.overloadSetter()); + +Class.Mutators = { + + Extends: function(parent){ + this.parent = parent; + this.prototype = getInstance(parent); + }, + + Implements: function(items){ + Array.from(items).each(function(item){ + var instance = new item; + for (var key in instance) implement.call(this, key, instance[key], true); + }, this); + } +}; + +}).call(this); + +/* +--- + +name: Class.Extras + +description: Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks. + +license: MIT-style license. + +requires: Class + +provides: [Class.Extras, Chain, Events, Options] + +... +*/ + +(function(){ + +this.Chain = new Class({ + + $chain: [], + + chain: function(){ + this.$chain.append(Array.flatten(arguments)); + return this; + }, + + callChain: function(){ + return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false; + }, + + clearChain: function(){ + this.$chain.empty(); + return this; + } + +}); + +var removeOn = function(string){ + return string.replace(/^on([A-Z])/, function(full, first){ + return first.toLowerCase(); + }); +}; + +this.Events = new Class({ + + $events: {}, + + addEvent: function(type, fn, internal){ + type = removeOn(type); + + this.$events[type] = (this.$events[type] || []).include(fn); + if (internal) fn.internal = true; + return this; + }, + + addEvents: function(events){ + for (var type in events) this.addEvent(type, events[type]); + return this; + }, + + fireEvent: function(type, args, delay){ + type = removeOn(type); + var events = this.$events[type]; + if (!events) return this; + args = Array.from(args); + events.each(function(fn){ + if (delay) fn.delay(delay, this, args); + else fn.apply(this, args); + }, this); + return this; + }, + + removeEvent: function(type, fn){ + type = removeOn(type); + var events = this.$events[type]; + if (events && !fn.internal){ + var index = events.indexOf(fn); + if (index != -1) delete events[index]; + } + return this; + }, + + removeEvents: function(events){ + var type; + if (typeOf(events) == 'object'){ + for (type in events) this.removeEvent(type, events[type]); + return this; + } + if (events) events = removeOn(events); + for (type in this.$events){ + if (events && events != type) continue; + var fns = this.$events[type]; + for (var i = fns.length; i--;) if (i in fns){ + this.removeEvent(type, fns[i]); + } + } + return this; + } + +}); + +this.Options = new Class({ + + setOptions: function(){ + var options = this.options = Object.merge.apply(null, [{}, this.options].append(arguments)); + if (this.addEvent) for (var option in options){ + if (typeOf(options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue; + this.addEvent(option, options[option]); + delete options[option]; + } + return this; + } + +}); + +}).call(this); + +/* +--- +name: Slick.Parser +description: Standalone CSS3 Selector parser +provides: Slick.Parser +... +*/ + +;(function(){ + +var parsed, + separatorIndex, + combinatorIndex, + reversed, + cache = {}, + reverseCache = {}, + reUnescape = /\\/g; + +var parse = function(expression, isReversed){ + if (expression == null) return null; + if (expression.Slick === true) return expression; + expression = ('' + expression).replace(/^\s+|\s+$/g, ''); + reversed = !!isReversed; + var currentCache = (reversed) ? reverseCache : cache; + if (currentCache[expression]) return currentCache[expression]; + parsed = { + Slick: true, + expressions: [], + raw: expression, + reverse: function(){ + return parse(this.raw, true); + } + }; + separatorIndex = -1; + while (expression != (expression = expression.replace(regexp, parser))); + parsed.length = parsed.expressions.length; + return currentCache[parsed.raw] = (reversed) ? reverse(parsed) : parsed; +}; + +var reverseCombinator = function(combinator){ + if (combinator === '!') return ' '; + else if (combinator === ' ') return '!'; + else if ((/^!/).test(combinator)) return combinator.replace(/^!/, ''); + else return '!' + combinator; +}; + +var reverse = function(expression){ + var expressions = expression.expressions; + for (var i = 0; i < expressions.length; i++){ + var exp = expressions[i]; + var last = {parts: [], tag: '*', combinator: reverseCombinator(exp[0].combinator)}; + + for (var j = 0; j < exp.length; j++){ + var cexp = exp[j]; + if (!cexp.reverseCombinator) cexp.reverseCombinator = ' '; + cexp.combinator = cexp.reverseCombinator; + delete cexp.reverseCombinator; + } + + exp.reverse().push(last); + } + return expression; +}; + +var escapeRegExp = function(string){// Credit: XRegExp 0.6.1 (c) 2007-2008 Steven Levithan MIT License + return string.replace(/[-[\]{}()*+?.\\^$|,#\s]/g, function(match){ + return '\\' + match; + }); +}; + +var regexp = new RegExp( +/* +#!/usr/bin/env ruby +puts "\t\t" + DATA.read.gsub(/\(\?x\)|\s+#.*$|\s+|\\$|\\n/,'') +__END__ + "(?x)^(?:\ + \\s* ( , ) \\s* # Separator \n\ + | \\s* ( + ) \\s* # Combinator \n\ + | ( \\s+ ) # CombinatorChildren \n\ + | ( + | \\* ) # Tag \n\ + | \\# ( + ) # ID \n\ + | \\. ( + ) # ClassName \n\ + | # Attribute \n\ + \\[ \ + \\s* (+) (?: \ + \\s* ([*^$!~|]?=) (?: \ + \\s* (?:\ + ([\"']?)(.*?)\\9 \ + )\ + ) \ + )? \\s* \ + \\](?!\\]) \n\ + | :+ ( + )(?:\ + \\( (?:\ + (?:([\"'])([^\\12]*)\\12)|((?:\\([^)]+\\)|[^()]*)+)\ + ) \\)\ + )?\ + )" +*/ + "^(?:\\s*(,)\\s*|\\s*(+)\\s*|(\\s+)|(+|\\*)|\\#(+)|\\.(+)|\\[\\s*(+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)" + .replace(//, '[' + escapeRegExp(">+~`!@$%^&={}\\;/g, '(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])') + .replace(//g, '(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])') +); + +function parser( + rawMatch, + + separator, + combinator, + combinatorChildren, + + tagName, + id, + className, + + attributeKey, + attributeOperator, + attributeQuote, + attributeValue, + + pseudoMarker, + pseudoClass, + pseudoQuote, + pseudoClassQuotedValue, + pseudoClassValue +){ + if (separator || separatorIndex === -1){ + parsed.expressions[++separatorIndex] = []; + combinatorIndex = -1; + if (separator) return ''; + } + + if (combinator || combinatorChildren || combinatorIndex === -1){ + combinator = combinator || ' '; + var currentSeparator = parsed.expressions[separatorIndex]; + if (reversed && currentSeparator[combinatorIndex]) + currentSeparator[combinatorIndex].reverseCombinator = reverseCombinator(combinator); + currentSeparator[++combinatorIndex] = {combinator: combinator, tag: '*'}; + } + + var currentParsed = parsed.expressions[separatorIndex][combinatorIndex]; + + if (tagName){ + currentParsed.tag = tagName.replace(reUnescape, ''); + + } else if (id){ + currentParsed.id = id.replace(reUnescape, ''); + + } else if (className){ + className = className.replace(reUnescape, ''); + + if (!currentParsed.classList) currentParsed.classList = []; + if (!currentParsed.classes) currentParsed.classes = []; + currentParsed.classList.push(className); + currentParsed.classes.push({ + value: className, + regexp: new RegExp('(^|\\s)' + escapeRegExp(className) + '(\\s|$)') + }); + + } else if (pseudoClass){ + pseudoClassValue = pseudoClassValue || pseudoClassQuotedValue; + pseudoClassValue = pseudoClassValue ? pseudoClassValue.replace(reUnescape, '') : null; + + if (!currentParsed.pseudos) currentParsed.pseudos = []; + currentParsed.pseudos.push({ + key: pseudoClass.replace(reUnescape, ''), + value: pseudoClassValue, + type: pseudoMarker.length == 1 ? 'class' : 'element' + }); + + } else if (attributeKey){ + attributeKey = attributeKey.replace(reUnescape, ''); + attributeValue = (attributeValue || '').replace(reUnescape, ''); + + var test, regexp; + + switch (attributeOperator){ + case '^=' : regexp = new RegExp( '^'+ escapeRegExp(attributeValue) ); break; + case '$=' : regexp = new RegExp( escapeRegExp(attributeValue) +'$' ); break; + case '~=' : regexp = new RegExp( '(^|\\s)'+ escapeRegExp(attributeValue) +'(\\s|$)' ); break; + case '|=' : regexp = new RegExp( '^'+ escapeRegExp(attributeValue) +'(-|$)' ); break; + case '=' : test = function(value){ + return attributeValue == value; + }; break; + case '*=' : test = function(value){ + return value && value.indexOf(attributeValue) > -1; + }; break; + case '!=' : test = function(value){ + return attributeValue != value; + }; break; + default : test = function(value){ + return !!value; + }; + } + + if (attributeValue == '' && (/^[*$^]=$/).test(attributeOperator)) test = function(){ + return false; + }; + + if (!test) test = function(value){ + return value && regexp.test(value); + }; + + if (!currentParsed.attributes) currentParsed.attributes = []; + currentParsed.attributes.push({ + key: attributeKey, + operator: attributeOperator, + value: attributeValue, + test: test + }); + + } + + return ''; +}; + +// Slick NS + +var Slick = (this.Slick || {}); + +Slick.parse = function(expression){ + return parse(expression); +}; + +Slick.escapeRegExp = escapeRegExp; + +if (!this.Slick) this.Slick = Slick; + +}).apply(/**/(typeof exports != 'undefined') ? exports : /**/this); + +/* +--- +name: Slick.Finder +description: The new, superfast css selector engine. +provides: Slick.Finder +requires: Slick.Parser +... +*/ + +;(function(){ + +var local = {}, + featuresCache = {}, + toString = Object.prototype.toString; + +// Feature / Bug detection + +local.isNativeCode = function(fn){ + return (/\{\s*\[native code\]\s*\}/).test('' + fn); +}; + +local.isXML = function(document){ + return (!!document.xmlVersion) || (!!document.xml) || (toString.call(document) == '[object XMLDocument]') || + (document.nodeType == 9 && document.documentElement.nodeName != 'HTML'); +}; + +local.setDocument = function(document){ + + // convert elements / window arguments to document. if document cannot be extrapolated, the function returns. + var nodeType = document.nodeType; + if (nodeType == 9); // document + else if (nodeType) document = document.ownerDocument; // node + else if (document.navigator) document = document.document; // window + else return; + + // check if it's the old document + + if (this.document === document) return; + this.document = document; + + // check if we have done feature detection on this document before + + var root = document.documentElement, + rootUid = this.getUIDXML(root), + features = featuresCache[rootUid], + feature; + + if (features){ + for (feature in features){ + this[feature] = features[feature]; + } + return; + } + + features = featuresCache[rootUid] = {}; + + features.root = root; + features.isXMLDocument = this.isXML(document); + + features.brokenStarGEBTN + = features.starSelectsClosedQSA + = features.idGetsName + = features.brokenMixedCaseQSA + = features.brokenGEBCN + = features.brokenCheckedQSA + = features.brokenEmptyAttributeQSA + = features.isHTMLDocument + = features.nativeMatchesSelector + = false; + + var starSelectsClosed, starSelectsComments, + brokenSecondClassNameGEBCN, cachedGetElementsByClassName, + brokenFormAttributeGetter; + + var selected, id = 'slick_uniqueid'; + var testNode = document.createElement('div'); + + var testRoot = document.body || document.getElementsByTagName('body')[0] || root; + testRoot.appendChild(testNode); + + // on non-HTML documents innerHTML and getElementsById doesnt work properly + try { + testNode.innerHTML = ''; + features.isHTMLDocument = !!document.getElementById(id); + } catch(e){}; + + if (features.isHTMLDocument){ + + testNode.style.display = 'none'; + + // IE returns comment nodes for getElementsByTagName('*') for some documents + testNode.appendChild(document.createComment('')); + starSelectsComments = (testNode.getElementsByTagName('*').length > 1); + + // IE returns closed nodes (EG:"") for getElementsByTagName('*') for some documents + try { + testNode.innerHTML = 'foo'; + selected = testNode.getElementsByTagName('*'); + starSelectsClosed = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/'); + } catch(e){}; + + features.brokenStarGEBTN = starSelectsComments || starSelectsClosed; + + // IE returns elements with the name instead of just id for getElementsById for some documents + try { + testNode.innerHTML = ''; + features.idGetsName = document.getElementById(id) === testNode.firstChild; + } catch(e){}; + + if (testNode.getElementsByClassName){ + + // Safari 3.2 getElementsByClassName caches results + try { + testNode.innerHTML = ''; + testNode.getElementsByClassName('b').length; + testNode.firstChild.className = 'b'; + cachedGetElementsByClassName = (testNode.getElementsByClassName('b').length != 2); + } catch(e){}; + + // Opera 9.6 getElementsByClassName doesnt detects the class if its not the first one + try { + testNode.innerHTML = ''; + brokenSecondClassNameGEBCN = (testNode.getElementsByClassName('a').length != 2); + } catch(e){}; + + features.brokenGEBCN = cachedGetElementsByClassName || brokenSecondClassNameGEBCN; + } + + if (testNode.querySelectorAll){ + // IE 8 returns closed nodes (EG:"") for querySelectorAll('*') for some documents + try { + testNode.innerHTML = 'foo'; + selected = testNode.querySelectorAll('*'); + features.starSelectsClosedQSA = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/'); + } catch(e){}; + + // Safari 3.2 querySelectorAll doesnt work with mixedcase on quirksmode + try { + testNode.innerHTML = ''; + features.brokenMixedCaseQSA = !testNode.querySelectorAll('.MiX').length; + } catch(e){}; + + // Webkit and Opera dont return selected options on querySelectorAll + try { + testNode.innerHTML = ''; + features.brokenCheckedQSA = (testNode.querySelectorAll(':checked').length == 0); + } catch(e){}; + + // IE returns incorrect results for attr[*^$]="" selectors on querySelectorAll + try { + testNode.innerHTML = ''; + features.brokenEmptyAttributeQSA = (testNode.querySelectorAll('[class*=""]').length != 0); + } catch(e){}; + + } + + // IE6-7, if a form has an input of id x, form.getAttribute(x) returns a reference to the input + try { + testNode.innerHTML = '
    '; + brokenFormAttributeGetter = (testNode.firstChild.getAttribute('action') != 's'); + } catch(e){}; + + // native matchesSelector function + + features.nativeMatchesSelector = root.matchesSelector || /*root.msMatchesSelector ||*/ root.mozMatchesSelector || root.webkitMatchesSelector; + if (features.nativeMatchesSelector) try { + // if matchesSelector trows errors on incorrect sintaxes we can use it + features.nativeMatchesSelector.call(root, ':slick'); + features.nativeMatchesSelector = null; + } catch(e){}; + + } + + try { + root.slick_expando = 1; + delete root.slick_expando; + features.getUID = this.getUIDHTML; + } catch(e) { + features.getUID = this.getUIDXML; + } + + testRoot.removeChild(testNode); + testNode = selected = testRoot = null; + + // getAttribute + + features.getAttribute = (features.isHTMLDocument && brokenFormAttributeGetter) ? function(node, name){ + var method = this.attributeGetters[name]; + if (method) return method.call(node); + var attributeNode = node.getAttributeNode(name); + return (attributeNode) ? attributeNode.nodeValue : null; + } : function(node, name){ + var method = this.attributeGetters[name]; + return (method) ? method.call(node) : node.getAttribute(name); + }; + + // hasAttribute + + features.hasAttribute = (root && this.isNativeCode(root.hasAttribute)) ? function(node, attribute) { + return node.hasAttribute(attribute); + } : function(node, attribute) { + node = node.getAttributeNode(attribute); + return !!(node && (node.specified || node.nodeValue)); + }; + + // contains + // FIXME: Add specs: local.contains should be different for xml and html documents? + features.contains = (root && this.isNativeCode(root.contains)) ? function(context, node){ + return context.contains(node); + } : (root && root.compareDocumentPosition) ? function(context, node){ + return context === node || !!(context.compareDocumentPosition(node) & 16); + } : function(context, node){ + if (node) do { + if (node === context) return true; + } while ((node = node.parentNode)); + return false; + }; + + // document order sorting + // credits to Sizzle (http://sizzlejs.com/) + + features.documentSorter = (root.compareDocumentPosition) ? function(a, b){ + if (!a.compareDocumentPosition || !b.compareDocumentPosition) return 0; + return a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; + } : ('sourceIndex' in root) ? function(a, b){ + if (!a.sourceIndex || !b.sourceIndex) return 0; + return a.sourceIndex - b.sourceIndex; + } : (document.createRange) ? function(a, b){ + if (!a.ownerDocument || !b.ownerDocument) return 0; + var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); + aRange.setStart(a, 0); + aRange.setEnd(a, 0); + bRange.setStart(b, 0); + bRange.setEnd(b, 0); + return aRange.compareBoundaryPoints(Range.START_TO_END, bRange); + } : null ; + + root = null; + + for (feature in features){ + this[feature] = features[feature]; + } +}; + +// Main Method + +var reSimpleSelector = /^([#.]?)((?:[\w-]+|\*))$/, + reEmptyAttribute = /\[.+[*$^]=(?:""|'')?\]/, + qsaFailExpCache = {}; + +local.search = function(context, expression, append, first){ + + var found = this.found = (first) ? null : (append || []); + + if (!context) return found; + else if (context.navigator) context = context.document; // Convert the node from a window to a document + else if (!context.nodeType) return found; + + // setup + + var parsed, i, + uniques = this.uniques = {}, + hasOthers = !!(append && append.length), + contextIsDocument = (context.nodeType == 9); + + if (this.document !== (contextIsDocument ? context : context.ownerDocument)) this.setDocument(context); + + // avoid duplicating items already in the append array + if (hasOthers) for (i = found.length; i--;) uniques[this.getUID(found[i])] = true; + + // expression checks + + if (typeof expression == 'string'){ // expression is a string + + /**/ + var simpleSelector = expression.match(reSimpleSelector); + simpleSelectors: if (simpleSelector) { + + var symbol = simpleSelector[1], + name = simpleSelector[2], + node, nodes; + + if (!symbol){ + + if (name == '*' && this.brokenStarGEBTN) break simpleSelectors; + nodes = context.getElementsByTagName(name); + if (first) return nodes[0] || null; + for (i = 0; node = nodes[i++];){ + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + } + + } else if (symbol == '#'){ + + if (!this.isHTMLDocument || !contextIsDocument) break simpleSelectors; + node = context.getElementById(name); + if (!node) return found; + if (this.idGetsName && node.getAttributeNode('id').nodeValue != name) break simpleSelectors; + if (first) return node || null; + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + + } else if (symbol == '.'){ + + if (!this.isHTMLDocument || ((!context.getElementsByClassName || this.brokenGEBCN) && context.querySelectorAll)) break simpleSelectors; + if (context.getElementsByClassName && !this.brokenGEBCN){ + nodes = context.getElementsByClassName(name); + if (first) return nodes[0] || null; + for (i = 0; node = nodes[i++];){ + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + } + } else { + var matchClass = new RegExp('(^|\\s)'+ Slick.escapeRegExp(name) +'(\\s|$)'); + nodes = context.getElementsByTagName('*'); + for (i = 0; node = nodes[i++];){ + className = node.className; + if (!(className && matchClass.test(className))) continue; + if (first) return node; + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + } + } + + } + + if (hasOthers) this.sort(found); + return (first) ? null : found; + + } + /**/ + + /**/ + querySelector: if (context.querySelectorAll) { + + if (!this.isHTMLDocument || this.brokenMixedCaseQSA || qsaFailExpCache[expression] || + (this.brokenCheckedQSA && expression.indexOf(':checked') > -1) || + (this.brokenEmptyAttributeQSA && reEmptyAttribute.test(expression)) || Slick.disableQSA) break querySelector; + + var _expression = expression; + if (!contextIsDocument){ + // non-document rooted QSA + // credits to Andrew Dupont + var currentId = context.getAttribute('id'), slickid = 'slickid__'; + context.setAttribute('id', slickid); + _expression = '#' + slickid + ' ' + _expression; + } + + try { + if (first) return context.querySelector(_expression) || null; + else nodes = context.querySelectorAll(_expression); + } catch(e) { + qsaFailExpCache[expression] = 1; + break querySelector; + } finally { + if (!contextIsDocument){ + if (currentId) context.setAttribute('id', currentId); + else context.removeAttribute('id'); + } + } + + if (this.starSelectsClosedQSA) for (i = 0; node = nodes[i++];){ + if (node.nodeName > '@' && !(hasOthers && uniques[this.getUID(node)])) found.push(node); + } else for (i = 0; node = nodes[i++];){ + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + } + + if (hasOthers) this.sort(found); + return found; + + } + /**/ + + parsed = this.Slick.parse(expression); + if (!parsed.length) return found; + } else if (expression == null){ // there is no expression + return found; + } else if (expression.Slick){ // expression is a parsed Slick object + parsed = expression; + } else if (this.contains(context.documentElement || context, expression)){ // expression is a node + (found) ? found.push(expression) : found = expression; + return found; + } else { // other junk + return found; + } + + /**//**/ + + // cache elements for the nth selectors + + this.posNTH = {}; + this.posNTHLast = {}; + this.posNTHType = {}; + this.posNTHTypeLast = {}; + + /**//**/ + + // if append is null and there is only a single selector with one expression use pushArray, else use pushUID + this.push = (!hasOthers && (first || (parsed.length == 1 && parsed.expressions[0].length == 1))) ? this.pushArray : this.pushUID; + + if (found == null) found = []; + + // default engine + + var j, m, n; + var combinator, tag, id, classList, classes, attributes, pseudos; + var currentItems, currentExpression, currentBit, lastBit, expressions = parsed.expressions; + + search: for (i = 0; (currentExpression = expressions[i]); i++) for (j = 0; (currentBit = currentExpression[j]); j++){ + + combinator = 'combinator:' + currentBit.combinator; + if (!this[combinator]) continue search; + + tag = (this.isXMLDocument) ? currentBit.tag : currentBit.tag.toUpperCase(); + id = currentBit.id; + classList = currentBit.classList; + classes = currentBit.classes; + attributes = currentBit.attributes; + pseudos = currentBit.pseudos; + lastBit = (j === (currentExpression.length - 1)); + + this.bitUniques = {}; + + if (lastBit){ + this.uniques = uniques; + this.found = found; + } else { + this.uniques = {}; + this.found = []; + } + + if (j === 0){ + this[combinator](context, tag, id, classes, attributes, pseudos, classList); + if (first && lastBit && found.length) break search; + } else { + if (first && lastBit) for (m = 0, n = currentItems.length; m < n; m++){ + this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList); + if (found.length) break search; + } else for (m = 0, n = currentItems.length; m < n; m++) this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList); + } + + currentItems = this.found; + } + + // should sort if there are nodes in append and if you pass multiple expressions. + if (hasOthers || (parsed.expressions.length > 1)) this.sort(found); + + return (first) ? (found[0] || null) : found; +}; + +// Utils + +local.uidx = 1; +local.uidk = 'slick-uniqueid'; + +local.getUIDXML = function(node){ + var uid = node.getAttribute(this.uidk); + if (!uid){ + uid = this.uidx++; + node.setAttribute(this.uidk, uid); + } + return uid; +}; + +local.getUIDHTML = function(node){ + return node.uniqueNumber || (node.uniqueNumber = this.uidx++); +}; + +// sort based on the setDocument documentSorter method. + +local.sort = function(results){ + if (!this.documentSorter) return results; + results.sort(this.documentSorter); + return results; +}; + +/**//**/ + +local.cacheNTH = {}; + +local.matchNTH = /^([+-]?\d*)?([a-z]+)?([+-]\d+)?$/; + +local.parseNTHArgument = function(argument){ + var parsed = argument.match(this.matchNTH); + if (!parsed) return false; + var special = parsed[2] || false; + var a = parsed[1] || 1; + if (a == '-') a = -1; + var b = +parsed[3] || 0; + parsed = + (special == 'n') ? {a: a, b: b} : + (special == 'odd') ? {a: 2, b: 1} : + (special == 'even') ? {a: 2, b: 0} : {a: 0, b: a}; + + return (this.cacheNTH[argument] = parsed); +}; + +local.createNTHPseudo = function(child, sibling, positions, ofType){ + return function(node, argument){ + var uid = this.getUID(node); + if (!this[positions][uid]){ + var parent = node.parentNode; + if (!parent) return false; + var el = parent[child], count = 1; + if (ofType){ + var nodeName = node.nodeName; + do { + if (el.nodeName != nodeName) continue; + this[positions][this.getUID(el)] = count++; + } while ((el = el[sibling])); + } else { + do { + if (el.nodeType != 1) continue; + this[positions][this.getUID(el)] = count++; + } while ((el = el[sibling])); + } + } + argument = argument || 'n'; + var parsed = this.cacheNTH[argument] || this.parseNTHArgument(argument); + if (!parsed) return false; + var a = parsed.a, b = parsed.b, pos = this[positions][uid]; + if (a == 0) return b == pos; + if (a > 0){ + if (pos < b) return false; + } else { + if (b < pos) return false; + } + return ((pos - b) % a) == 0; + }; +}; + +/**//**/ + +local.pushArray = function(node, tag, id, classes, attributes, pseudos){ + if (this.matchSelector(node, tag, id, classes, attributes, pseudos)) this.found.push(node); +}; + +local.pushUID = function(node, tag, id, classes, attributes, pseudos){ + var uid = this.getUID(node); + if (!this.uniques[uid] && this.matchSelector(node, tag, id, classes, attributes, pseudos)){ + this.uniques[uid] = true; + this.found.push(node); + } +}; + +local.matchNode = function(node, selector){ + if (this.isHTMLDocument && this.nativeMatchesSelector){ + try { + return this.nativeMatchesSelector.call(node, selector.replace(/\[([^=]+)=\s*([^'"\]]+?)\s*\]/g, '[$1="$2"]')); + } catch(matchError) {} + } + + var parsed = this.Slick.parse(selector); + if (!parsed) return true; + + // simple (single) selectors + var expressions = parsed.expressions, reversedExpressions, simpleExpCounter = 0, i; + for (i = 0; (currentExpression = expressions[i]); i++){ + if (currentExpression.length == 1){ + var exp = currentExpression[0]; + if (this.matchSelector(node, (this.isXMLDocument) ? exp.tag : exp.tag.toUpperCase(), exp.id, exp.classes, exp.attributes, exp.pseudos)) return true; + simpleExpCounter++; + } + } + + if (simpleExpCounter == parsed.length) return false; + + var nodes = this.search(this.document, parsed), item; + for (i = 0; item = nodes[i++];){ + if (item === node) return true; + } + return false; +}; + +local.matchPseudo = function(node, name, argument){ + var pseudoName = 'pseudo:' + name; + if (this[pseudoName]) return this[pseudoName](node, argument); + var attribute = this.getAttribute(node, name); + return (argument) ? argument == attribute : !!attribute; +}; + +local.matchSelector = function(node, tag, id, classes, attributes, pseudos){ + if (tag){ + var nodeName = (this.isXMLDocument) ? node.nodeName : node.nodeName.toUpperCase(); + if (tag == '*'){ + if (nodeName < '@') return false; // Fix for comment nodes and closed nodes + } else { + if (nodeName != tag) return false; + } + } + + if (id && node.getAttribute('id') != id) return false; + + var i, part, cls; + if (classes) for (i = classes.length; i--;){ + cls = node.getAttribute('class') || node.className; + if (!(cls && classes[i].regexp.test(cls))) return false; + } + if (attributes) for (i = attributes.length; i--;){ + part = attributes[i]; + if (part.operator ? !part.test(this.getAttribute(node, part.key)) : !this.hasAttribute(node, part.key)) return false; + } + if (pseudos) for (i = pseudos.length; i--;){ + part = pseudos[i]; + if (!this.matchPseudo(node, part.key, part.value)) return false; + } + return true; +}; + +var combinators = { + + ' ': function(node, tag, id, classes, attributes, pseudos, classList){ // all child nodes, any level + + var i, item, children; + + if (this.isHTMLDocument){ + getById: if (id){ + item = this.document.getElementById(id); + if ((!item && node.all) || (this.idGetsName && item && item.getAttributeNode('id').nodeValue != id)){ + // all[id] returns all the elements with that name or id inside node + // if theres just one it will return the element, else it will be a collection + children = node.all[id]; + if (!children) return; + if (!children[0]) children = [children]; + for (i = 0; item = children[i++];){ + var idNode = item.getAttributeNode('id'); + if (idNode && idNode.nodeValue == id){ + this.push(item, tag, null, classes, attributes, pseudos); + break; + } + } + return; + } + if (!item){ + // if the context is in the dom we return, else we will try GEBTN, breaking the getById label + if (this.contains(this.root, node)) return; + else break getById; + } else if (this.document !== node && !this.contains(node, item)) return; + this.push(item, tag, null, classes, attributes, pseudos); + return; + } + getByClass: if (classes && node.getElementsByClassName && !this.brokenGEBCN){ + children = node.getElementsByClassName(classList.join(' ')); + if (!(children && children.length)) break getByClass; + for (i = 0; item = children[i++];) this.push(item, tag, id, null, attributes, pseudos); + return; + } + } + getByTag: { + children = node.getElementsByTagName(tag); + if (!(children && children.length)) break getByTag; + if (!this.brokenStarGEBTN) tag = null; + for (i = 0; item = children[i++];) this.push(item, tag, id, classes, attributes, pseudos); + } + }, + + '>': function(node, tag, id, classes, attributes, pseudos){ // direct children + if ((node = node.firstChild)) do { + if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos); + } while ((node = node.nextSibling)); + }, + + '+': function(node, tag, id, classes, attributes, pseudos){ // next sibling + while ((node = node.nextSibling)) if (node.nodeType == 1){ + this.push(node, tag, id, classes, attributes, pseudos); + break; + } + }, + + '^': function(node, tag, id, classes, attributes, pseudos){ // first child + node = node.firstChild; + if (node){ + if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos); + else this['combinator:+'](node, tag, id, classes, attributes, pseudos); + } + }, + + '~': function(node, tag, id, classes, attributes, pseudos){ // next siblings + while ((node = node.nextSibling)){ + if (node.nodeType != 1) continue; + var uid = this.getUID(node); + if (this.bitUniques[uid]) break; + this.bitUniques[uid] = true; + this.push(node, tag, id, classes, attributes, pseudos); + } + }, + + '++': function(node, tag, id, classes, attributes, pseudos){ // next sibling and previous sibling + this['combinator:+'](node, tag, id, classes, attributes, pseudos); + this['combinator:!+'](node, tag, id, classes, attributes, pseudos); + }, + + '~~': function(node, tag, id, classes, attributes, pseudos){ // next siblings and previous siblings + this['combinator:~'](node, tag, id, classes, attributes, pseudos); + this['combinator:!~'](node, tag, id, classes, attributes, pseudos); + }, + + '!': function(node, tag, id, classes, attributes, pseudos){ // all parent nodes up to document + while ((node = node.parentNode)) if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos); + }, + + '!>': function(node, tag, id, classes, attributes, pseudos){ // direct parent (one level) + node = node.parentNode; + if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos); + }, + + '!+': function(node, tag, id, classes, attributes, pseudos){ // previous sibling + while ((node = node.previousSibling)) if (node.nodeType == 1){ + this.push(node, tag, id, classes, attributes, pseudos); + break; + } + }, + + '!^': function(node, tag, id, classes, attributes, pseudos){ // last child + node = node.lastChild; + if (node){ + if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos); + else this['combinator:!+'](node, tag, id, classes, attributes, pseudos); + } + }, + + '!~': function(node, tag, id, classes, attributes, pseudos){ // previous siblings + while ((node = node.previousSibling)){ + if (node.nodeType != 1) continue; + var uid = this.getUID(node); + if (this.bitUniques[uid]) break; + this.bitUniques[uid] = true; + this.push(node, tag, id, classes, attributes, pseudos); + } + } + +}; + +for (var c in combinators) local['combinator:' + c] = combinators[c]; + +var pseudos = { + + /**/ + + 'empty': function(node){ + var child = node.firstChild; + return !(child && child.nodeType == 1) && !(node.innerText || node.textContent || '').length; + }, + + 'not': function(node, expression){ + return !this.matchNode(node, expression); + }, + + 'contains': function(node, text){ + return (node.innerText || node.textContent || '').indexOf(text) > -1; + }, + + 'first-child': function(node){ + while ((node = node.previousSibling)) if (node.nodeType == 1) return false; + return true; + }, + + 'last-child': function(node){ + while ((node = node.nextSibling)) if (node.nodeType == 1) return false; + return true; + }, + + 'only-child': function(node){ + var prev = node; + while ((prev = prev.previousSibling)) if (prev.nodeType == 1) return false; + var next = node; + while ((next = next.nextSibling)) if (next.nodeType == 1) return false; + return true; + }, + + /**/ + + 'nth-child': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTH'), + + 'nth-last-child': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHLast'), + + 'nth-of-type': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTHType', true), + + 'nth-last-of-type': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHTypeLast', true), + + 'index': function(node, index){ + return this['pseudo:nth-child'](node, '' + index + 1); + }, + + 'even': function(node){ + return this['pseudo:nth-child'](node, '2n'); + }, + + 'odd': function(node){ + return this['pseudo:nth-child'](node, '2n+1'); + }, + + /**/ + + /**/ + + 'first-of-type': function(node){ + var nodeName = node.nodeName; + while ((node = node.previousSibling)) if (node.nodeName == nodeName) return false; + return true; + }, + + 'last-of-type': function(node){ + var nodeName = node.nodeName; + while ((node = node.nextSibling)) if (node.nodeName == nodeName) return false; + return true; + }, + + 'only-of-type': function(node){ + var prev = node, nodeName = node.nodeName; + while ((prev = prev.previousSibling)) if (prev.nodeName == nodeName) return false; + var next = node; + while ((next = next.nextSibling)) if (next.nodeName == nodeName) return false; + return true; + }, + + /**/ + + // custom pseudos + + 'enabled': function(node){ + return !node.disabled; + }, + + 'disabled': function(node){ + return node.disabled; + }, + + 'checked': function(node){ + return node.checked || node.selected; + }, + + 'focus': function(node){ + return this.isHTMLDocument && this.document.activeElement === node && (node.href || node.type || this.hasAttribute(node, 'tabindex')); + }, + + 'root': function(node){ + return (node === this.root); + }, + + 'selected': function(node){ + return node.selected; + } + + /**/ +}; + +for (var p in pseudos) local['pseudo:' + p] = pseudos[p]; + +// attributes methods + +local.attributeGetters = { + + 'class': function(){ + return this.getAttribute('class') || this.className; + }, + + 'for': function(){ + return ('htmlFor' in this) ? this.htmlFor : this.getAttribute('for'); + }, + + 'href': function(){ + return ('href' in this) ? this.getAttribute('href', 2) : this.getAttribute('href'); + }, + + 'style': function(){ + return (this.style) ? this.style.cssText : this.getAttribute('style'); + }, + + 'tabindex': function(){ + var attributeNode = this.getAttributeNode('tabindex'); + return (attributeNode && attributeNode.specified) ? attributeNode.nodeValue : null; + }, + + 'type': function(){ + return this.getAttribute('type'); + } + +}; + +// Slick + +var Slick = local.Slick = (this.Slick || {}); + +Slick.version = '1.1.5'; + +// Slick finder + +Slick.search = function(context, expression, append){ + return local.search(context, expression, append); +}; + +Slick.find = function(context, expression){ + return local.search(context, expression, null, true); +}; + +// Slick containment checker + +Slick.contains = function(container, node){ + local.setDocument(container); + return local.contains(container, node); +}; + +// Slick attribute getter + +Slick.getAttribute = function(node, name){ + return local.getAttribute(node, name); +}; + +// Slick matcher + +Slick.match = function(node, selector){ + if (!(node && selector)) return false; + if (!selector || selector === node) return true; + local.setDocument(node); + return local.matchNode(node, selector); +}; + +// Slick attribute accessor + +Slick.defineAttributeGetter = function(name, fn){ + local.attributeGetters[name] = fn; + return this; +}; + +Slick.lookupAttributeGetter = function(name){ + return local.attributeGetters[name]; +}; + +// Slick pseudo accessor + +Slick.definePseudo = function(name, fn){ + local['pseudo:' + name] = function(node, argument){ + return fn.call(node, argument); + }; + return this; +}; + +Slick.lookupPseudo = function(name){ + var pseudo = local['pseudo:' + name]; + if (pseudo) return function(argument){ + return pseudo.call(this, argument); + }; + return null; +}; + +// Slick overrides accessor + +Slick.override = function(regexp, fn){ + local.override(regexp, fn); + return this; +}; + +Slick.isXML = local.isXML; + +Slick.uidOf = function(node){ + return local.getUIDHTML(node); +}; + +if (!this.Slick) this.Slick = Slick; + +}).apply(/**/(typeof exports != 'undefined') ? exports : /**/this); + +/* +--- + +name: Element + +description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements. + +license: MIT-style license. + +requires: [Window, Document, Array, String, Function, Number, Slick.Parser, Slick.Finder] + +provides: [Element, Elements, $, $$, Iframe, Selectors] + +... +*/ + +var Element = function(tag, props){ + var konstructor = Element.Constructors[tag]; + if (konstructor) return konstructor(props); + if (typeof tag != 'string') return document.id(tag).set(props); + + if (!props) props = {}; + + if (!(/^[\w-]+$/).test(tag)){ + var parsed = Slick.parse(tag).expressions[0][0]; + tag = (parsed.tag == '*') ? 'div' : parsed.tag; + if (parsed.id && props.id == null) props.id = parsed.id; + + var attributes = parsed.attributes; + if (attributes) for (var i = 0, l = attributes.length; i < l; i++){ + var attr = attributes[i]; + if (attr.value != null && attr.operator == '=' && props[attr.key] == null) + props[attr.key] = attr.value; + } + + if (parsed.classList && props['class'] == null) props['class'] = parsed.classList.join(' '); + } + + return document.newElement(tag, props); +}; + +if (Browser.Element) Element.prototype = Browser.Element.prototype; + +new Type('Element', Element).mirror(function(name){ + if (Array.prototype[name]) return; + + var obj = {}; + obj[name] = function(){ + var results = [], args = arguments, elements = true; + for (var i = 0, l = this.length; i < l; i++){ + var element = this[i], result = results[i] = element[name].apply(element, args); + elements = (elements && typeOf(result) == 'element'); + } + return (elements) ? new Elements(results) : results; + }; + + Elements.implement(obj); +}); + +if (!Browser.Element){ + Element.parent = Object; + + Element.Prototype = {'$family': Function.from('element').hide()}; + + Element.mirror(function(name, method){ + Element.Prototype[name] = method; + }); +} + +Element.Constructors = {}; + +var IFrame = new Type('IFrame', function(){ + var params = Array.link(arguments, { + properties: Type.isObject, + iframe: function(obj){ + return (obj != null); + } + }); + + var props = params.properties || {}, iframe; + if (params.iframe) iframe = document.id(params.iframe); + var onload = props.onload || function(){}; + delete props.onload; + props.id = props.name = [props.id, props.name, iframe ? (iframe.id || iframe.name) : 'IFrame_' + String.uniqueID()].pick(); + iframe = new Element(iframe || 'iframe', props); + + var onLoad = function(){ + onload.call(iframe.contentWindow); + }; + + if (window.frames[props.id]) onLoad(); + else iframe.addListener('load', onLoad); + return iframe; +}); + +var Elements = this.Elements = function(nodes){ + if (nodes && nodes.length){ + var uniques = {}, node; + for (var i = 0; node = nodes[i++];){ + var uid = Slick.uidOf(node); + if (!uniques[uid]){ + uniques[uid] = true; + this.push(node); + } + } + } +}; + +Elements.prototype = {length: 0}; +Elements.parent = Array; + +new Type('Elements', Elements).implement({ + + filter: function(filter, bind){ + if (!filter) return this; + return new Elements(Array.filter(this, (typeOf(filter) == 'string') ? function(item){ + return item.match(filter); + } : filter, bind)); + }.protect(), + + push: function(){ + var length = this.length; + for (var i = 0, l = arguments.length; i < l; i++){ + var item = document.id(arguments[i]); + if (item) this[length++] = item; + } + return (this.length = length); + }.protect(), + + unshift: function(){ + var items = []; + for (var i = 0, l = arguments.length; i < l; i++){ + var item = document.id(arguments[i]); + if (item) items.push(item); + } + return Array.prototype.unshift.apply(this, items); + }.protect(), + + concat: function(){ + var newElements = new Elements(this); + for (var i = 0, l = arguments.length; i < l; i++){ + var item = arguments[i]; + if (Type.isEnumerable(item)) newElements.append(item); + else newElements.push(item); + } + return newElements; + }.protect(), + + append: function(collection){ + for (var i = 0, l = collection.length; i < l; i++) this.push(collection[i]); + return this; + }.protect(), + + empty: function(){ + while (this.length) delete this[--this.length]; + return this; + }.protect() + +}); + +(function(){ + +// FF, IE +var splice = Array.prototype.splice, object = {'0': 0, '1': 1, length: 2}; + +splice.call(object, 1, 1); +if (object[1] == 1) Elements.implement('splice', function(){ + var length = this.length; + splice.apply(this, arguments); + while (length >= this.length) delete this[length--]; + return this; +}.protect()); + +Elements.implement(Array.prototype); + +Array.mirror(Elements); + +/**/ +var createElementAcceptsHTML; +try { + var x = document.createElement(''); + createElementAcceptsHTML = (x.name == 'x'); +} catch(e){} + +var escapeQuotes = function(html){ + return ('' + html).replace(/&/g, '&').replace(/"/g, '"'); +}; +/**/ + +Document.implement({ + + newElement: function(tag, props){ + if (props && props.checked != null) props.defaultChecked = props.checked; + /**/// Fix for readonly name and type properties in IE < 8 + if (createElementAcceptsHTML && props){ + tag = '<' + tag; + if (props.name) tag += ' name="' + escapeQuotes(props.name) + '"'; + if (props.type) tag += ' type="' + escapeQuotes(props.type) + '"'; + tag += '>'; + delete props.name; + delete props.type; + } + /**/ + return this.id(this.createElement(tag)).set(props); + } + +}); + +})(); + +Document.implement({ + + newTextNode: function(text){ + return this.createTextNode(text); + }, + + getDocument: function(){ + return this; + }, + + getWindow: function(){ + return this.window; + }, + + id: (function(){ + + var types = { + + string: function(id, nocash, doc){ + id = Slick.find(doc, '#' + id.replace(/(\W)/g, '\\$1')); + return (id) ? types.element(id, nocash) : null; + }, + + element: function(el, nocash){ + $uid(el); + if (!nocash && !el.$family && !(/^(?:object|embed)$/i).test(el.tagName)){ + Object.append(el, Element.Prototype); + } + return el; + }, + + object: function(obj, nocash, doc){ + if (obj.toElement) return types.element(obj.toElement(doc), nocash); + return null; + } + + }; + + types.textnode = types.whitespace = types.window = types.document = function(zero){ + return zero; + }; + + return function(el, nocash, doc){ + if (el && el.$family && el.uid) return el; + var type = typeOf(el); + return (types[type]) ? types[type](el, nocash, doc || document) : null; + }; + + })() + +}); + +if (window.$ == null) Window.implement('$', function(el, nc){ + return document.id(el, nc, this.document); +}); + +Window.implement({ + + getDocument: function(){ + return this.document; + }, + + getWindow: function(){ + return this; + } + +}); + +[Document, Element].invoke('implement', { + + getElements: function(expression){ + return Slick.search(this, expression, new Elements); + }, + + getElement: function(expression){ + return document.id(Slick.find(this, expression)); + } + +}); + +if (window.$$ == null) Window.implement('$$', function(selector){ + if (arguments.length == 1){ + if (typeof selector == 'string') return Slick.search(this.document, selector, new Elements); + else if (Type.isEnumerable(selector)) return new Elements(selector); + } + return new Elements(arguments); +}); + +(function(){ + +var collected = {}, storage = {}; +var formProps = {input: 'checked', option: 'selected', textarea: 'value'}; + +var get = function(uid){ + return (storage[uid] || (storage[uid] = {})); +}; + +var clean = function(item){ + var uid = item.uid; + if (item.removeEvents) item.removeEvents(); + if (item.clearAttributes) item.clearAttributes(); + if (uid != null){ + delete collected[uid]; + delete storage[uid]; + } + return item; +}; + +var camels = ['defaultValue', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', 'frameBorder', 'maxLength', 'readOnly', + 'rowSpan', 'tabIndex', 'useMap' +]; +var bools = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readOnly', 'multiple', 'selected', + 'noresize', 'defer', 'defaultChecked' +]; + var attributes = { + 'html': 'innerHTML', + 'class': 'className', + 'for': 'htmlFor', + 'text': (function(){ + var temp = document.createElement('div'); + return (temp.textContent == null) ? 'innerText' : 'textContent'; + })() +}; +var readOnly = ['type']; +var expandos = ['value', 'defaultValue']; +var uriAttrs = /^(?:href|src|usemap)$/i; + +bools = bools.associate(bools); +camels = camels.associate(camels.map(String.toLowerCase)); +readOnly = readOnly.associate(readOnly); + +Object.append(attributes, expandos.associate(expandos)); + +var inserters = { + + before: function(context, element){ + var parent = element.parentNode; + if (parent) parent.insertBefore(context, element); + }, + + after: function(context, element){ + var parent = element.parentNode; + if (parent) parent.insertBefore(context, element.nextSibling); + }, + + bottom: function(context, element){ + element.appendChild(context); + }, + + top: function(context, element){ + element.insertBefore(context, element.firstChild); + } + +}; + +inserters.inside = inserters.bottom; + +var injectCombinator = function(expression, combinator){ + if (!expression) return combinator; + + expression = Object.clone(Slick.parse(expression)); + + var expressions = expression.expressions; + for (var i = expressions.length; i--;) + expressions[i][0].combinator = combinator; + + return expression; +}; + +Element.implement({ + + set: function(prop, value){ + var property = Element.Properties[prop]; + (property && property.set) ? property.set.call(this, value) : this.setProperty(prop, value); + }.overloadSetter(), + + get: function(prop){ + var property = Element.Properties[prop]; + return (property && property.get) ? property.get.apply(this) : this.getProperty(prop); + }.overloadGetter(), + + erase: function(prop){ + var property = Element.Properties[prop]; + (property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop); + return this; + }, + + setProperty: function(attribute, value){ + attribute = camels[attribute] || attribute; + if (value == null) return this.removeProperty(attribute); + var key = attributes[attribute]; + (key) ? this[key] = value : + (bools[attribute]) ? this[attribute] = !!value : this.setAttribute(attribute, '' + value); + return this; + }, + + setProperties: function(attributes){ + for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]); + return this; + }, + + getProperty: function(attribute){ + attribute = camels[attribute] || attribute; + var key = attributes[attribute] || readOnly[attribute]; + return (key) ? this[key] : + (bools[attribute]) ? !!this[attribute] : + (uriAttrs.test(attribute) ? this.getAttribute(attribute, 2) : + (key = this.getAttributeNode(attribute)) ? key.nodeValue : null) || null; + }, + + getProperties: function(){ + var args = Array.from(arguments); + return args.map(this.getProperty, this).associate(args); + }, + + removeProperty: function(attribute){ + attribute = camels[attribute] || attribute; + var key = attributes[attribute]; + (key) ? this[key] = '' : + (bools[attribute]) ? this[attribute] = false : this.removeAttribute(attribute); + return this; + }, + + removeProperties: function(){ + Array.each(arguments, this.removeProperty, this); + return this; + }, + + hasClass: function(className){ + return this.className.clean().contains(className, ' '); + }, + + addClass: function(className){ + if (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean(); + return this; + }, + + removeClass: function(className){ + this.className = this.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)'), '$1'); + return this; + }, + + toggleClass: function(className, force){ + if (force == null) force = !this.hasClass(className); + return (force) ? this.addClass(className) : this.removeClass(className); + }, + + adopt: function(){ + var parent = this, fragment, elements = Array.flatten(arguments), length = elements.length; + if (length > 1) parent = fragment = document.createDocumentFragment(); + + for (var i = 0; i < length; i++){ + var element = document.id(elements[i], true); + if (element) parent.appendChild(element); + } + + if (fragment) this.appendChild(fragment); + + return this; + }, + + appendText: function(text, where){ + return this.grab(this.getDocument().newTextNode(text), where); + }, + + grab: function(el, where){ + inserters[where || 'bottom'](document.id(el, true), this); + return this; + }, + + inject: function(el, where){ + inserters[where || 'bottom'](this, document.id(el, true)); + return this; + }, + + replaces: function(el){ + el = document.id(el, true); + el.parentNode.replaceChild(this, el); + return this; + }, + + wraps: function(el, where){ + el = document.id(el, true); + return this.replaces(el).grab(el, where); + }, + + getPrevious: function(expression){ + return document.id(Slick.find(this, injectCombinator(expression, '!~'))); + }, + + getAllPrevious: function(expression){ + return Slick.search(this, injectCombinator(expression, '!~'), new Elements); + }, + + getNext: function(expression){ + return document.id(Slick.find(this, injectCombinator(expression, '~'))); + }, + + getAllNext: function(expression){ + return Slick.search(this, injectCombinator(expression, '~'), new Elements); + }, + + getFirst: function(expression){ + return document.id(Slick.search(this, injectCombinator(expression, '>'))[0]); + }, + + getLast: function(expression){ + return document.id(Slick.search(this, injectCombinator(expression, '>')).getLast()); + }, + + getParent: function(expression){ + return document.id(Slick.find(this, injectCombinator(expression, '!'))); + }, + + getParents: function(expression){ + return Slick.search(this, injectCombinator(expression, '!'), new Elements); + }, + + getSiblings: function(expression){ + return Slick.search(this, injectCombinator(expression, '~~'), new Elements); + }, + + getChildren: function(expression){ + return Slick.search(this, injectCombinator(expression, '>'), new Elements); + }, + + getWindow: function(){ + return this.ownerDocument.window; + }, + + getDocument: function(){ + return this.ownerDocument; + }, + + getElementById: function(id){ + return document.id(Slick.find(this, '#' + ('' + id).replace(/(\W)/g, '\\$1'))); + }, + + getSelected: function(){ + this.selectedIndex; // Safari 3.2.1 + return new Elements(Array.from(this.options).filter(function(option){ + return option.selected; + })); + }, + + toQueryString: function(){ + var queryString = []; + this.getElements('input, select, textarea').each(function(el){ + var type = el.type; + if (!el.name || el.disabled || type == 'submit' || type == 'reset' || type == 'file' || type == 'image') return; + + var value = (el.get('tag') == 'select') ? el.getSelected().map(function(opt){ + // IE + return document.id(opt).get('value'); + }) : ((type == 'radio' || type == 'checkbox') && !el.checked) ? null : el.get('value'); + + Array.from(value).each(function(val){ + if (typeof val != 'undefined') queryString.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(val)); + }); + }); + return queryString.join('&'); + }, + + destroy: function(){ + var children = clean(this).getElementsByTagName('*'); + Array.each(children, clean); + Element.dispose(this); + return null; + }, + + empty: function(){ + Array.from(this.childNodes).each(Element.dispose); + return this; + }, + + dispose: function(){ + return (this.parentNode) ? this.parentNode.removeChild(this) : this; + }, + + match: function(expression){ + return !expression || Slick.match(this, expression); + } + +}); + +var cleanClone = function(node, element, keepid){ + if (!keepid) node.setAttributeNode(document.createAttribute('id')); + if (node.clearAttributes){ + node.clearAttributes(); + node.mergeAttributes(element); + node.removeAttribute('uid'); + if (node.options){ + var no = node.options, eo = element.options; + for (var i = no.length; i--;) no[i].selected = eo[i].selected; + } + } + + var prop = formProps[element.tagName.toLowerCase()]; + if (prop && element[prop]) node[prop] = element[prop]; +}; + +Element.implement('clone', function(contents, keepid){ + contents = contents !== false; + var clone = this.cloneNode(contents), i; + + if (contents){ + var ce = clone.getElementsByTagName('*'), te = this.getElementsByTagName('*'); + for (i = ce.length; i--;) cleanClone(ce[i], te[i], keepid); + } + + cleanClone(clone, this, keepid); + + if (Browser.ie){ + var co = clone.getElementsByTagName('object'), to = this.getElementsByTagName('object'); + for (i = co.length; i--;) co[i].outerHTML = to[i].outerHTML; + } + return document.id(clone); +}); + +var contains = {contains: function(element){ + return Slick.contains(this, element); +}}; + +if (!document.contains) Document.implement(contains); +if (!document.createElement('div').contains) Element.implement(contains); + +[Element, Window, Document].invoke('implement', { + + addListener: function(type, fn){ + if (type == 'unload'){ + var old = fn, self = this; + fn = function(){ + self.removeListener('unload', fn); + old(); + }; + } else { + collected[$uid(this)] = this; + } + if (this.addEventListener) this.addEventListener(type, fn, !!arguments[2]); + else this.attachEvent('on' + type, fn); + return this; + }, + + removeListener: function(type, fn){ + if (this.removeEventListener) this.removeEventListener(type, fn, !!arguments[2]); + else this.detachEvent('on' + type, fn); + return this; + }, + + retrieve: function(property, dflt){ + var storage = get($uid(this)), prop = storage[property]; + if (dflt != null && prop == null) prop = storage[property] = dflt; + return prop != null ? prop : null; + }, + + store: function(property, value){ + var storage = get($uid(this)); + storage[property] = value; + return this; + }, + + eliminate: function(property){ + var storage = get($uid(this)); + delete storage[property]; + return this; + } + +}); + +// IE purge +if (window.attachEvent && !window.addEventListener) window.addListener('unload', function(){ + Object.each(collected, clean); + if (window.CollectGarbage) CollectGarbage(); +}); + +})(); + +Element.Properties = {}; + +Element.Properties.style = { + + set: function(style){ + this.style.cssText = style; + }, + + get: function(){ + return this.style.cssText; + }, + + erase: function(){ + this.style.cssText = ''; + } + +}; + +Element.Properties.tag = { + + get: function(){ + return this.tagName.toLowerCase(); + } + +}; + +(function(maxLength){ + if (maxLength != null) Element.Properties.maxlength = Element.Properties.maxLength = { + get: function(){ + var maxlength = this.getAttribute('maxLength'); + return maxlength == maxLength ? null : maxlength; + } + }; +})(document.createElement('input').getAttribute('maxLength')); + +Element.Properties.html = (function(){ + + var tableTest = Function.attempt(function(){ + var table = document.createElement('table'); + table.innerHTML = ''; + }); + + var wrapper = document.createElement('div'); + + var translations = { + table: [1, '', '
    '], + select: [1, ''], + tbody: [2, '', '
    '], + tr: [3, '', '
    '] + }; + translations.thead = translations.tfoot = translations.tbody; + + var html = { + set: function(){ + var html = Array.flatten(arguments).join(''); + var wrap = (!tableTest && translations[this.get('tag')]); + if (wrap){ + var first = wrapper; + first.innerHTML = wrap[1] + html + wrap[2]; + for (var i = wrap[0]; i--;) first = first.firstChild; + this.empty().adopt(first.childNodes); + } else { + this.innerHTML = html; + } + } + }; + + html.erase = html.set; + + return html; +})(); + +/* +--- + +name: Element.Style + +description: Contains methods for interacting with the styles of Elements in a fashionable way. + +license: MIT-style license. + +requires: Element + +provides: Element.Style + +... +*/ + +(function(){ + +var html = document.html; + +Element.Properties.styles = {set: function(styles){ + this.setStyles(styles); +}}; + +var hasOpacity = (html.style.opacity != null); +var reAlpha = /alpha\(opacity=([\d.]+)\)/i; + +var setOpacity = function(element, opacity){ + if (!element.currentStyle || !element.currentStyle.hasLayout) element.style.zoom = 1; + if (hasOpacity){ + element.style.opacity = opacity; + } else { + opacity = (opacity == 1) ? '' : 'alpha(opacity=' + opacity * 100 + ')'; + var filter = element.style.filter || element.getComputedStyle('filter') || ''; + element.style.filter = reAlpha.test(filter) ? filter.replace(reAlpha, opacity) : filter + opacity; + } +}; + +Element.Properties.opacity = { + + set: function(opacity){ + var visibility = this.style.visibility; + if (opacity == 0 && visibility != 'hidden') this.style.visibility = 'hidden'; + else if (opacity != 0 && visibility != 'visible') this.style.visibility = 'visible'; + + setOpacity(this, opacity); + }, + + get: (hasOpacity) ? function(){ + var opacity = this.style.opacity || this.getComputedStyle('opacity'); + return (opacity == '') ? 1 : opacity; + } : function(){ + var opacity, filter = (this.style.filter || this.getComputedStyle('filter')); + if (filter) opacity = filter.match(reAlpha); + return (opacity == null || filter == null) ? 1 : (opacity[1] / 100); + } + +}; + +var floatName = (html.style.cssFloat == null) ? 'styleFloat' : 'cssFloat'; + +Element.implement({ + + getComputedStyle: function(property){ + if (this.currentStyle) return this.currentStyle[property.camelCase()]; + var defaultView = Element.getDocument(this).defaultView, + computed = defaultView ? defaultView.getComputedStyle(this, null) : null; + return (computed) ? computed.getPropertyValue((property == floatName) ? 'float' : property.hyphenate()) : null; + }, + + setOpacity: function(value){ + setOpacity(this, value); + return this; + }, + + getOpacity: function(){ + return this.get('opacity'); + }, + + setStyle: function(property, value){ + switch (property){ + case 'opacity': return this.set('opacity', parseFloat(value)); + case 'float': property = floatName; + } + property = property.camelCase(); + if (typeOf(value) != 'string'){ + var map = (Element.Styles[property] || '@').split(' '); + value = Array.from(value).map(function(val, i){ + if (!map[i]) return ''; + return (typeOf(val) == 'number') ? map[i].replace('@', Math.round(val)) : val; + }).join(' '); + } else if (value == String(Number(value))){ + value = Math.round(value); + } + this.style[property] = value; + return this; + }, + + getStyle: function(property){ + switch (property){ + case 'opacity': return this.get('opacity'); + case 'float': property = floatName; + } + property = property.camelCase(); + var result = this.style[property]; + if (!result || property == 'zIndex'){ + result = []; + for (var style in Element.ShortStyles){ + if (property != style) continue; + for (var s in Element.ShortStyles[style]) result.push(this.getStyle(s)); + return result.join(' '); + } + result = this.getComputedStyle(property); + } + if (result){ + result = String(result); + var color = result.match(/rgba?\([\d\s,]+\)/); + if (color) result = result.replace(color[0], color[0].rgbToHex()); + } + if (Browser.opera || (Browser.ie && isNaN(parseFloat(result)))){ + if ((/^(height|width)$/).test(property)){ + var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0; + values.each(function(value){ + size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt(); + }, this); + return this['offset' + property.capitalize()] - size + 'px'; + } + if (Browser.opera && String(result).indexOf('px') != -1) return result; + if ((/^border(.+)Width|margin|padding/).test(property)) return '0px'; + } + return result; + }, + + setStyles: function(styles){ + for (var style in styles) this.setStyle(style, styles[style]); + return this; + }, + + getStyles: function(){ + var result = {}; + Array.flatten(arguments).each(function(key){ + result[key] = this.getStyle(key); + }, this); + return result; + } + +}); + +Element.Styles = { + left: '@px', top: '@px', bottom: '@px', right: '@px', + width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px', + backgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)', + fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)', + margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)', + borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)', + zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@' +}; + +Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}}; + +['Top', 'Right', 'Bottom', 'Left'].each(function(direction){ + var Short = Element.ShortStyles; + var All = Element.Styles; + ['margin', 'padding'].each(function(style){ + var sd = style + direction; + Short[style][sd] = All[sd] = '@px'; + }); + var bd = 'border' + direction; + Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)'; + var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color'; + Short[bd] = {}; + Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px'; + Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@'; + Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)'; +}); + +}).call(this); + +/* +--- + +name: Element.Event + +description: Contains Element methods for dealing with events. This file also includes mouseenter and mouseleave custom Element Events. + +license: MIT-style license. + +requires: [Element, Event] + +provides: Element.Event + +... +*/ + +(function(){ + +Element.Properties.events = {set: function(events){ + this.addEvents(events); +}}; + +[Element, Window, Document].invoke('implement', { + + addEvent: function(type, fn){ + var events = this.retrieve('events', {}); + if (!events[type]) events[type] = {keys: [], values: []}; + if (events[type].keys.contains(fn)) return this; + events[type].keys.push(fn); + var realType = type, + custom = Element.Events[type], + condition = fn, + self = this; + if (custom){ + if (custom.onAdd) custom.onAdd.call(this, fn); + if (custom.condition){ + condition = function(event){ + if (custom.condition.call(this, event)) return fn.call(this, event); + return true; + }; + } + realType = custom.base || realType; + } + var defn = function(){ + return fn.call(self); + }; + var nativeEvent = Element.NativeEvents[realType]; + if (nativeEvent){ + if (nativeEvent == 2){ + defn = function(event){ + event = new Event(event, self.getWindow()); + if (condition.call(self, event) === false) event.stop(); + }; + } + this.addListener(realType, defn, arguments[2]); + } + events[type].values.push(defn); + return this; + }, + + removeEvent: function(type, fn){ + var events = this.retrieve('events'); + if (!events || !events[type]) return this; + var list = events[type]; + var index = list.keys.indexOf(fn); + if (index == -1) return this; + var value = list.values[index]; + delete list.keys[index]; + delete list.values[index]; + var custom = Element.Events[type]; + if (custom){ + if (custom.onRemove) custom.onRemove.call(this, fn); + type = custom.base || type; + } + return (Element.NativeEvents[type]) ? this.removeListener(type, value, arguments[2]) : this; + }, + + addEvents: function(events){ + for (var event in events) this.addEvent(event, events[event]); + return this; + }, + + removeEvents: function(events){ + var type; + if (typeOf(events) == 'object'){ + for (type in events) this.removeEvent(type, events[type]); + return this; + } + var attached = this.retrieve('events'); + if (!attached) return this; + if (!events){ + for (type in attached) this.removeEvents(type); + this.eliminate('events'); + } else if (attached[events]){ + attached[events].keys.each(function(fn){ + this.removeEvent(events, fn); + }, this); + delete attached[events]; + } + return this; + }, + + fireEvent: function(type, args, delay){ + var events = this.retrieve('events'); + if (!events || !events[type]) return this; + args = Array.from(args); + + events[type].keys.each(function(fn){ + if (delay) fn.delay(delay, this, args); + else fn.apply(this, args); + }, this); + return this; + }, + + cloneEvents: function(from, type){ + from = document.id(from); + var events = from.retrieve('events'); + if (!events) return this; + if (!type){ + for (var eventType in events) this.cloneEvents(from, eventType); + } else if (events[type]){ + events[type].keys.each(function(fn){ + this.addEvent(type, fn); + }, this); + } + return this; + } + +}); + +Element.NativeEvents = { + click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons + mousewheel: 2, DOMMouseScroll: 2, //mouse wheel + mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement + keydown: 2, keypress: 2, keyup: 2, //keyboard + orientationchange: 2, // mobile + touchstart: 2, touchmove: 2, touchend: 2, touchcancel: 2, // touch + gesturestart: 2, gesturechange: 2, gestureend: 2, // gesture + focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, //form elements + load: 2, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window + error: 1, abort: 1, scroll: 1 //misc +}; + +var check = function(event){ + var related = event.relatedTarget; + if (related == null) return true; + if (!related) return false; + return (related != this && related.prefix != 'xul' && typeOf(this) != 'document' && !this.contains(related)); +}; + +Element.Events = { + + mouseenter: { + base: 'mouseover', + condition: check + }, + + mouseleave: { + base: 'mouseout', + condition: check + }, + + mousewheel: { + base: (Browser.firefox) ? 'DOMMouseScroll' : 'mousewheel' + } + +}; + +}).call(this); + +/* +--- + +name: Element.Dimensions + +description: Contains methods to work with size, scroll, or positioning of Elements and the window object. + +license: MIT-style license. + +credits: + - Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html). + - Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html). + +requires: [Element, Element.Style] + +provides: [Element.Dimensions] + +... +*/ + +(function(){ + +var element = document.createElement('div'), + child = document.createElement('div'); +element.style.height = '0'; +element.appendChild(child); +var brokenOffsetParent = (child.offsetParent === element); +element = child = null; + +var isOffset = function(el){ + return styleString(el, 'position') != 'static' || isBody(el); +}; + +var isOffsetStatic = function(el){ + return isOffset(el) || (/^(?:table|td|th)$/i).test(el.tagName); +}; + +Element.implement({ + + scrollTo: function(x, y){ + if (isBody(this)){ + this.getWindow().scrollTo(x, y); + } else { + this.scrollLeft = x; + this.scrollTop = y; + } + return this; + }, + + getSize: function(){ + if (isBody(this)) return this.getWindow().getSize(); + return {x: this.offsetWidth, y: this.offsetHeight}; + }, + + getScrollSize: function(){ + if (isBody(this)) return this.getWindow().getScrollSize(); + return {x: this.scrollWidth, y: this.scrollHeight}; + }, + + getScroll: function(){ + if (isBody(this)) return this.getWindow().getScroll(); + return {x: this.scrollLeft, y: this.scrollTop}; + }, + + getScrolls: function(){ + var element = this.parentNode, position = {x: 0, y: 0}; + while (element && !isBody(element)){ + position.x += element.scrollLeft; + position.y += element.scrollTop; + element = element.parentNode; + } + return position; + }, + + getOffsetParent: brokenOffsetParent ? function(){ + var element = this; + if (isBody(element) || styleString(element, 'position') == 'fixed') return null; + + var isOffsetCheck = (styleString(element, 'position') == 'static') ? isOffsetStatic : isOffset; + while ((element = element.parentNode)){ + if (isOffsetCheck(element)) return element; + } + return null; + } : function(){ + var element = this; + if (isBody(element) || styleString(element, 'position') == 'fixed') return null; + + try { + return element.offsetParent; + } catch(e) {} + return null; + }, + + getOffsets: function(){ + if (this.getBoundingClientRect && !Browser.Platform.ios){ + var bound = this.getBoundingClientRect(), + html = document.id(this.getDocument().documentElement), + htmlScroll = html.getScroll(), + elemScrolls = this.getScrolls(), + isFixed = (styleString(this, 'position') == 'fixed'); + + return { + x: bound.left.toInt() + elemScrolls.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft, + y: bound.top.toInt() + elemScrolls.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop + }; + } + + var element = this, position = {x: 0, y: 0}; + if (isBody(this)) return position; + + while (element && !isBody(element)){ + position.x += element.offsetLeft; + position.y += element.offsetTop; + + if (Browser.firefox){ + if (!borderBox(element)){ + position.x += leftBorder(element); + position.y += topBorder(element); + } + var parent = element.parentNode; + if (parent && styleString(parent, 'overflow') != 'visible'){ + position.x += leftBorder(parent); + position.y += topBorder(parent); + } + } else if (element != this && Browser.safari){ + position.x += leftBorder(element); + position.y += topBorder(element); + } + + element = element.offsetParent; + } + if (Browser.firefox && !borderBox(this)){ + position.x -= leftBorder(this); + position.y -= topBorder(this); + } + return position; + }, + + getPosition: function(relative){ + if (isBody(this)) return {x: 0, y: 0}; + var offset = this.getOffsets(), + scroll = this.getScrolls(); + var position = { + x: offset.x - scroll.x, + y: offset.y - scroll.y + }; + + if (relative && (relative = document.id(relative))){ + var relativePosition = relative.getPosition(); + return {x: position.x - relativePosition.x - leftBorder(relative), y: position.y - relativePosition.y - topBorder(relative)}; + } + return position; + }, + + getCoordinates: function(element){ + if (isBody(this)) return this.getWindow().getCoordinates(); + var position = this.getPosition(element), + size = this.getSize(); + var obj = { + left: position.x, + top: position.y, + width: size.x, + height: size.y + }; + obj.right = obj.left + obj.width; + obj.bottom = obj.top + obj.height; + return obj; + }, + + computePosition: function(obj){ + return { + left: obj.x - styleNumber(this, 'margin-left'), + top: obj.y - styleNumber(this, 'margin-top') + }; + }, + + setPosition: function(obj){ + return this.setStyles(this.computePosition(obj)); + } + +}); + +[Document, Window].invoke('implement', { + + getSize: function(){ + var doc = getCompatElement(this); + return {x: doc.clientWidth, y: doc.clientHeight}; + }, + + getScroll: function(){ + var win = this.getWindow(), doc = getCompatElement(this); + return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop}; + }, + + getScrollSize: function(){ + var doc = getCompatElement(this), + min = this.getSize(), + body = this.getDocument().body; + + return {x: Math.max(doc.scrollWidth, body.scrollWidth, min.x), y: Math.max(doc.scrollHeight, body.scrollHeight, min.y)}; + }, + + getPosition: function(){ + return {x: 0, y: 0}; + }, + + getCoordinates: function(){ + var size = this.getSize(); + return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x}; + } + +}); + +// private methods + +var styleString = Element.getComputedStyle; + +function styleNumber(element, style){ + return styleString(element, style).toInt() || 0; +} + +function borderBox(element){ + return styleString(element, '-moz-box-sizing') == 'border-box'; +} + +function topBorder(element){ + return styleNumber(element, 'border-top-width'); +} + +function leftBorder(element){ + return styleNumber(element, 'border-left-width'); +} + +function isBody(element){ + return (/^(?:body|html)$/i).test(element.tagName); +} + +function getCompatElement(element){ + var doc = element.getDocument(); + return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body; +} + +}).call(this); + +//aliases +Element.alias({position: 'setPosition'}); //compatability + +[Window, Document, Element].invoke('implement', { + + getHeight: function(){ + return this.getSize().y; + }, + + getWidth: function(){ + return this.getSize().x; + }, + + getScrollTop: function(){ + return this.getScroll().y; + }, + + getScrollLeft: function(){ + return this.getScroll().x; + }, + + getScrollHeight: function(){ + return this.getScrollSize().y; + }, + + getScrollWidth: function(){ + return this.getScrollSize().x; + }, + + getTop: function(){ + return this.getPosition().y; + }, + + getLeft: function(){ + return this.getPosition().x; + } + +}); + +/* +--- + +name: Fx + +description: Contains the basic animation logic to be extended by all other Fx Classes. + +license: MIT-style license. + +requires: [Chain, Events, Options] + +provides: Fx + +... +*/ + +(function(){ + +var Fx = this.Fx = new Class({ + + Implements: [Chain, Events, Options], + + options: { + /* + onStart: nil, + onCancel: nil, + onComplete: nil, + */ + fps: 60, + unit: false, + duration: 500, + frames: null, + frameSkip: true, + link: 'ignore' + }, + + initialize: function(options){ + this.subject = this.subject || this; + this.setOptions(options); + }, + + getTransition: function(){ + return function(p){ + return -(Math.cos(Math.PI * p) - 1) / 2; + }; + }, + + step: function(now){ + if (this.options.frameSkip){ + var diff = (this.time != null) ? (now - this.time) : 0, frames = diff / this.frameInterval; + this.time = now; + this.frame += frames; + } else { + this.frame++; + } + + if (this.frame < this.frames){ + var delta = this.transition(this.frame / this.frames); + this.set(this.compute(this.from, this.to, delta)); + } else { + this.frame = this.frames; + this.set(this.compute(this.from, this.to, 1)); + this.stop(); + } + }, + + set: function(now){ + return now; + }, + + compute: function(from, to, delta){ + return Fx.compute(from, to, delta); + }, + + check: function(){ + if (!this.isRunning()) return true; + switch (this.options.link){ + case 'cancel': this.cancel(); return true; + case 'chain': this.chain(this.caller.pass(arguments, this)); return false; + } + return false; + }, + + start: function(from, to){ + if (!this.check(from, to)) return this; + this.from = from; + this.to = to; + this.frame = (this.options.frameSkip) ? 0 : -1; + this.time = null; + this.transition = this.getTransition(); + var frames = this.options.frames, fps = this.options.fps, duration = this.options.duration; + this.duration = Fx.Durations[duration] || duration.toInt(); + this.frameInterval = 1000 / fps; + this.frames = frames || Math.round(this.duration / this.frameInterval); + this.fireEvent('start', this.subject); + pushInstance.call(this, fps); + return this; + }, + + stop: function(){ + if (this.isRunning()){ + this.time = null; + pullInstance.call(this, this.options.fps); + if (this.frames == this.frame){ + this.fireEvent('complete', this.subject); + if (!this.callChain()) this.fireEvent('chainComplete', this.subject); + } else { + this.fireEvent('stop', this.subject); + } + } + return this; + }, + + cancel: function(){ + if (this.isRunning()){ + this.time = null; + pullInstance.call(this, this.options.fps); + this.frame = this.frames; + this.fireEvent('cancel', this.subject).clearChain(); + } + return this; + }, + + pause: function(){ + if (this.isRunning()){ + this.time = null; + pullInstance.call(this, this.options.fps); + } + return this; + }, + + resume: function(){ + if ((this.frame < this.frames) && !this.isRunning()) pushInstance.call(this, this.options.fps); + return this; + }, + + isRunning: function(){ + var list = instances[this.options.fps]; + return list && list.contains(this); + } + +}); + +Fx.compute = function(from, to, delta){ + return (to - from) * delta + from; +}; + +Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000}; + +// global timers + +var instances = {}, timers = {}; + +var loop = function(){ + var now = Date.now(); + for (var i = this.length; i--;){ + var instance = this[i]; + if (instance) instance.step(now); + } +}; + +var pushInstance = function(fps){ + var list = instances[fps] || (instances[fps] = []); + list.push(this); + if (!timers[fps]) timers[fps] = loop.periodical(Math.round(1000 / fps), list); +}; + +var pullInstance = function(fps){ + var list = instances[fps]; + if (list){ + list.erase(this); + if (!list.length && timers[fps]){ + delete instances[fps]; + timers[fps] = clearInterval(timers[fps]); + } + } +}; + +}).call(this); + +/* +--- + +name: Fx.CSS + +description: Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements. + +license: MIT-style license. + +requires: [Fx, Element.Style] + +provides: Fx.CSS + +... +*/ + +Fx.CSS = new Class({ + + Extends: Fx, + + //prepares the base from/to object + + prepare: function(element, property, values){ + values = Array.from(values); + if (values[1] == null){ + values[1] = values[0]; + values[0] = element.getStyle(property); + } + var parsed = values.map(this.parse); + return {from: parsed[0], to: parsed[1]}; + }, + + //parses a value into an array + + parse: function(value){ + value = Function.from(value)(); + value = (typeof value == 'string') ? value.split(' ') : Array.from(value); + return value.map(function(val){ + val = String(val); + var found = false; + Object.each(Fx.CSS.Parsers, function(parser, key){ + if (found) return; + var parsed = parser.parse(val); + if (parsed || parsed === 0) found = {value: parsed, parser: parser}; + }); + found = found || {value: val, parser: Fx.CSS.Parsers.String}; + return found; + }); + }, + + //computes by a from and to prepared objects, using their parsers. + + compute: function(from, to, delta){ + var computed = []; + (Math.min(from.length, to.length)).times(function(i){ + computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser}); + }); + computed.$family = Function.from('fx:css:value'); + return computed; + }, + + //serves the value as settable + + serve: function(value, unit){ + if (typeOf(value) != 'fx:css:value') value = this.parse(value); + var returned = []; + value.each(function(bit){ + returned = returned.concat(bit.parser.serve(bit.value, unit)); + }); + return returned; + }, + + //renders the change to an element + + render: function(element, property, value, unit){ + element.setStyle(property, this.serve(value, unit)); + }, + + //searches inside the page css to find the values for a selector + + search: function(selector){ + if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector]; + var to = {}, selectorTest = new RegExp('^' + selector.escapeRegExp() + '$'); + Array.each(document.styleSheets, function(sheet, j){ + var href = sheet.href; + if (href && href.contains('://') && !href.contains(document.domain)) return; + var rules = sheet.rules || sheet.cssRules; + Array.each(rules, function(rule, i){ + if (!rule.style) return; + var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){ + return m.toLowerCase(); + }) : null; + if (!selectorText || !selectorTest.test(selectorText)) return; + Object.each(Element.Styles, function(value, style){ + if (!rule.style[style] || Element.ShortStyles[style]) return; + value = String(rule.style[style]); + to[style] = ((/^rgb/).test(value)) ? value.rgbToHex() : value; + }); + }); + }); + return Fx.CSS.Cache[selector] = to; + } + +}); + +Fx.CSS.Cache = {}; + +Fx.CSS.Parsers = { + + Color: { + parse: function(value){ + if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true); + return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false; + }, + compute: function(from, to, delta){ + return from.map(function(value, i){ + return Math.round(Fx.compute(from[i], to[i], delta)); + }); + }, + serve: function(value){ + return value.map(Number); + } + }, + + Number: { + parse: parseFloat, + compute: Fx.compute, + serve: function(value, unit){ + return (unit) ? value + unit : value; + } + }, + + String: { + parse: Function.from(false), + compute: function(zero, one){ + return one; + }, + serve: function(zero){ + return zero; + } + } + +}; + +/* +--- + +name: Fx.Tween + +description: Formerly Fx.Style, effect to transition any CSS property for an element. + +license: MIT-style license. + +requires: Fx.CSS + +provides: [Fx.Tween, Element.fade, Element.highlight] + +... +*/ + +Fx.Tween = new Class({ + + Extends: Fx.CSS, + + initialize: function(element, options){ + this.element = this.subject = document.id(element); + this.parent(options); + }, + + set: function(property, now){ + if (arguments.length == 1){ + now = property; + property = this.property || this.options.property; + } + this.render(this.element, property, now, this.options.unit); + return this; + }, + + start: function(property, from, to){ + if (!this.check(property, from, to)) return this; + var args = Array.flatten(arguments); + this.property = this.options.property || args.shift(); + var parsed = this.prepare(this.element, this.property, args); + return this.parent(parsed.from, parsed.to); + } + +}); + +Element.Properties.tween = { + + set: function(options){ + this.get('tween').cancel().setOptions(options); + return this; + }, + + get: function(){ + var tween = this.retrieve('tween'); + if (!tween){ + tween = new Fx.Tween(this, {link: 'cancel'}); + this.store('tween', tween); + } + return tween; + } + +}; + +Element.implement({ + + tween: function(property, from, to){ + this.get('tween').start(arguments); + return this; + }, + + fade: function(how){ + var fade = this.get('tween'), o = 'opacity', toggle; + how = [how, 'toggle'].pick(); + switch (how){ + case 'in': fade.start(o, 1); break; + case 'out': fade.start(o, 0); break; + case 'show': fade.set(o, 1); break; + case 'hide': fade.set(o, 0); break; + case 'toggle': + var flag = this.retrieve('fade:flag', this.get('opacity') == 1); + fade.start(o, (flag) ? 0 : 1); + this.store('fade:flag', !flag); + toggle = true; + break; + default: fade.start(o, arguments); + } + if (!toggle) this.eliminate('fade:flag'); + return this; + }, + + highlight: function(start, end){ + if (!end){ + end = this.retrieve('highlight:original', this.getStyle('background-color')); + end = (end == 'transparent') ? '#fff' : end; + } + var tween = this.get('tween'); + tween.start('background-color', start || '#ffff88', end).chain(function(){ + this.setStyle('background-color', this.retrieve('highlight:original')); + tween.callChain(); + }.bind(this)); + return this; + } + +}); + +/* +--- + +name: Fx.Morph + +description: Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules. + +license: MIT-style license. + +requires: Fx.CSS + +provides: Fx.Morph + +... +*/ + +Fx.Morph = new Class({ + + Extends: Fx.CSS, + + initialize: function(element, options){ + this.element = this.subject = document.id(element); + this.parent(options); + }, + + set: function(now){ + if (typeof now == 'string') now = this.search(now); + for (var p in now) this.render(this.element, p, now[p], this.options.unit); + return this; + }, + + compute: function(from, to, delta){ + var now = {}; + for (var p in from) now[p] = this.parent(from[p], to[p], delta); + return now; + }, + + start: function(properties){ + if (!this.check(properties)) return this; + if (typeof properties == 'string') properties = this.search(properties); + var from = {}, to = {}; + for (var p in properties){ + var parsed = this.prepare(this.element, p, properties[p]); + from[p] = parsed.from; + to[p] = parsed.to; + } + return this.parent(from, to); + } + +}); + +Element.Properties.morph = { + + set: function(options){ + this.get('morph').cancel().setOptions(options); + return this; + }, + + get: function(){ + var morph = this.retrieve('morph'); + if (!morph){ + morph = new Fx.Morph(this, {link: 'cancel'}); + this.store('morph', morph); + } + return morph; + } + +}; + +Element.implement({ + + morph: function(props){ + this.get('morph').start(props); + return this; + } + +}); + +/* +--- + +name: Fx.Transitions + +description: Contains a set of advanced transitions to be used with any of the Fx Classes. + +license: MIT-style license. + +credits: + - Easing Equations by Robert Penner, , modified and optimized to be used with MooTools. + +requires: Fx + +provides: Fx.Transitions + +... +*/ + +Fx.implement({ + + getTransition: function(){ + var trans = this.options.transition || Fx.Transitions.Sine.easeInOut; + if (typeof trans == 'string'){ + var data = trans.split(':'); + trans = Fx.Transitions; + trans = trans[data[0]] || trans[data[0].capitalize()]; + if (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')]; + } + return trans; + } + +}); + +Fx.Transition = function(transition, params){ + params = Array.from(params); + var easeIn = function(pos){ + return transition(pos, params); + }; + return Object.append(easeIn, { + easeIn: easeIn, + easeOut: function(pos){ + return 1 - transition(1 - pos, params); + }, + easeInOut: function(pos){ + return (pos <= 0.5 ? transition(2 * pos, params) : (2 - transition(2 * (1 - pos), params))) / 2; + } + }); +}; + +Fx.Transitions = { + + linear: function(zero){ + return zero; + } + +}; + +Fx.Transitions.extend = function(transitions){ + for (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]); +}; + +Fx.Transitions.extend({ + + Pow: function(p, x){ + return Math.pow(p, x && x[0] || 6); + }, + + Expo: function(p){ + return Math.pow(2, 8 * (p - 1)); + }, + + Circ: function(p){ + return 1 - Math.sin(Math.acos(p)); + }, + + Sine: function(p){ + return 1 - Math.cos(p * Math.PI / 2); + }, + + Back: function(p, x){ + x = x && x[0] || 1.618; + return Math.pow(p, 2) * ((x + 1) * p - x); + }, + + Bounce: function(p){ + var value; + for (var a = 0, b = 1; 1; a += b, b /= 2){ + if (p >= (7 - 4 * a) / 11){ + value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2); + break; + } + } + return value; + }, + + Elastic: function(p, x){ + return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x && x[0] || 1) / 3); + } + +}); + +['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){ + Fx.Transitions[transition] = new Fx.Transition(function(p){ + return Math.pow(p, i + 2); + }); +}); + +/* +--- + +name: Request + +description: Powerful all purpose Request Class. Uses XMLHTTPRequest. + +license: MIT-style license. + +requires: [Object, Element, Chain, Events, Options, Browser] + +provides: Request + +... +*/ + +(function(){ + +var empty = function(){}, + progressSupport = ('onprogress' in new Browser.Request); + +var Request = this.Request = new Class({ + + Implements: [Chain, Events, Options], + + options: {/* + onRequest: function(){}, + onLoadstart: function(event, xhr){}, + onProgress: function(event, xhr){}, + onComplete: function(){}, + onCancel: function(){}, + onSuccess: function(responseText, responseXML){}, + onFailure: function(xhr){}, + onException: function(headerName, value){}, + onTimeout: function(){}, + user: '', + password: '',*/ + url: '', + data: '', + headers: { + 'X-Requested-With': 'XMLHttpRequest', + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }, + async: true, + format: false, + method: 'post', + link: 'ignore', + isSuccess: null, + emulation: true, + urlEncoded: true, + encoding: 'utf-8', + evalScripts: false, + evalResponse: false, + timeout: 0, + noCache: false + }, + + initialize: function(options){ + this.xhr = new Browser.Request(); + this.setOptions(options); + this.headers = this.options.headers; + }, + + onStateChange: function(){ + var xhr = this.xhr; + if (xhr.readyState != 4 || !this.running) return; + this.running = false; + this.status = 0; + Function.attempt(function(){ + var status = xhr.status; + this.status = (status == 1223) ? 204 : status; + }.bind(this)); + xhr.onreadystatechange = empty; + if (progressSupport) xhr.onprogress = xhr.onloadstart = empty; + clearTimeout(this.timer); + + this.response = {text: this.xhr.responseText || '', xml: this.xhr.responseXML}; + if (this.options.isSuccess.call(this, this.status)) + this.success(this.response.text, this.response.xml); + else + this.failure(); + }, + + isSuccess: function(){ + var status = this.status; + return (status >= 200 && status < 300); + }, + + isRunning: function(){ + return !!this.running; + }, + + processScripts: function(text){ + if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return Browser.exec(text); + return text.stripScripts(this.options.evalScripts); + }, + + success: function(text, xml){ + this.onSuccess(this.processScripts(text), xml); + }, + + onSuccess: function(){ + this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain(); + }, + + failure: function(){ + this.onFailure(); + }, + + onFailure: function(){ + this.fireEvent('complete').fireEvent('failure', this.xhr); + }, + + loadstart: function(event){ + this.fireEvent('loadstart', [event, this.xhr]); + }, + + progress: function(event){ + this.fireEvent('progress', [event, this.xhr]); + }, + + timeout: function(){ + this.fireEvent('timeout', this.xhr); + }, + + setHeader: function(name, value){ + this.headers[name] = value; + return this; + }, + + getHeader: function(name){ + return Function.attempt(function(){ + return this.xhr.getResponseHeader(name); + }.bind(this)); + }, + + check: function(){ + if (!this.running) return true; + switch (this.options.link){ + case 'cancel': this.cancel(); return true; + case 'chain': this.chain(this.caller.pass(arguments, this)); return false; + } + return false; + }, + + send: function(options){ + if (!this.check(options)) return this; + + this.options.isSuccess = this.options.isSuccess || this.isSuccess; + this.running = true; + + var type = typeOf(options); + if (type == 'string' || type == 'element') options = {data: options}; + + var old = this.options; + options = Object.append({data: old.data, url: old.url, method: old.method}, options); + var data = options.data, url = String(options.url), method = options.method.toLowerCase(); + + switch (typeOf(data)){ + case 'element': data = document.id(data).toQueryString(); break; + case 'object': case 'hash': data = Object.toQueryString(data); + } + + if (this.options.format){ + var format = 'format=' + this.options.format; + data = (data) ? format + '&' + data : format; + } + + if (this.options.emulation && !['get', 'post'].contains(method)){ + var _method = '_method=' + method; + data = (data) ? _method + '&' + data : _method; + method = 'post'; + } + + if (this.options.urlEncoded && ['post', 'put'].contains(method)){ + var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : ''; + this.headers['Content-type'] = 'application/x-www-form-urlencoded' + encoding; + } + + if (!url) url = document.location.pathname; + + var trimPosition = url.lastIndexOf('/'); + if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition); + + if (this.options.noCache) + url += (url.contains('?') ? '&' : '?') + String.uniqueID(); + + if (data && method == 'get'){ + url += (url.contains('?') ? '&' : '?') + data; + data = null; + } + + var xhr = this.xhr; + if (progressSupport){ + xhr.onloadstart = this.loadstart.bind(this); + xhr.onprogress = this.progress.bind(this); + } + + xhr.open(method.toUpperCase(), url, this.options.async, this.options.user, this.options.password); + if (this.options.user && 'withCredentials' in xhr) xhr.withCredentials = true; + + xhr.onreadystatechange = this.onStateChange.bind(this); + + Object.each(this.headers, function(value, key){ + try { + xhr.setRequestHeader(key, value); + } catch (e){ + this.fireEvent('exception', [key, value]); + } + }, this); + + this.fireEvent('request'); + xhr.send(data); + if (!this.options.async) this.onStateChange(); + if (this.options.timeout) this.timer = this.timeout.delay(this.options.timeout, this); + return this; + }, + + cancel: function(){ + if (!this.running) return this; + this.running = false; + var xhr = this.xhr; + xhr.abort(); + clearTimeout(this.timer); + xhr.onreadystatechange = empty; + if (progressSupport) xhr.onprogress = xhr.onloadstart = empty; + this.xhr = new Browser.Request(); + this.fireEvent('cancel'); + return this; + } + +}); + +var methods = {}; +['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){ + methods[method] = function(data){ + var object = { + method: method + }; + if (data != null) object.data = data; + return this.send(object); + }; +}); + +Request.implement(methods); + +Element.Properties.send = { + + set: function(options){ + var send = this.get('send').cancel(); + send.setOptions(options); + return this; + }, + + get: function(){ + var send = this.retrieve('send'); + if (!send){ + send = new Request({ + data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action') + }); + this.store('send', send); + } + return send; + } + +}; + +Element.implement({ + + send: function(url){ + var sender = this.get('send'); + sender.send({data: this, url: url || sender.options.url}); + return this; + } + +}); + +})(); + +/* +--- + +name: Request.HTML + +description: Extends the basic Request Class with additional methods for interacting with HTML responses. + +license: MIT-style license. + +requires: [Element, Request] + +provides: Request.HTML + +... +*/ + +Request.HTML = new Class({ + + Extends: Request, + + options: { + update: false, + append: false, + evalScripts: true, + filter: false, + headers: { + Accept: 'text/html, application/xml, text/xml, */*' + } + }, + + success: function(text){ + var options = this.options, response = this.response; + + response.html = text.stripScripts(function(script){ + response.javascript = script; + }); + + var match = response.html.match(/]*>([\s\S]*?)<\/body>/i); + if (match) response.html = match[1]; + var temp = new Element('div').set('html', response.html); + + response.tree = temp.childNodes; + response.elements = temp.getElements('*'); + + if (options.filter) response.tree = response.elements.filter(options.filter); + if (options.update) document.id(options.update).empty().set('html', response.html); + else if (options.append) document.id(options.append).adopt(temp.getChildren()); + if (options.evalScripts) Browser.exec(response.javascript); + + this.onSuccess(response.tree, response.elements, response.html, response.javascript); + } + +}); + +Element.Properties.load = { + + set: function(options){ + var load = this.get('load').cancel(); + load.setOptions(options); + return this; + }, + + get: function(){ + var load = this.retrieve('load'); + if (!load){ + load = new Request.HTML({data: this, link: 'cancel', update: this, method: 'get'}); + this.store('load', load); + } + return load; + } + +}; + +Element.implement({ + + load: function(){ + this.get('load').send(Array.link(arguments, {data: Type.isObject, url: Type.isString})); + return this; + } + +}); + +/* +--- + +name: JSON + +description: JSON encoder and decoder. + +license: MIT-style license. + +See Also: + +requires: [Array, String, Number, Function] + +provides: JSON + +... +*/ + +if (typeof JSON == 'undefined') this.JSON = {}; + +(function(){ + +var special = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'}; + +var escape = function(chr){ + return special[chr] || '\\u' + ('0000' + chr.charCodeAt(0).toString(16)).slice(-4); +}; + +JSON.validate = function(string){ + string = string.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'). + replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). + replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + + return (/^[\],:{}\s]*$/).test(string); +}; + +JSON.encode = JSON.stringify ? function(obj){ + return JSON.stringify(obj); +} : function(obj){ + if (obj && obj.toJSON) obj = obj.toJSON(); + + switch (typeOf(obj)){ + case 'string': + return '"' + obj.replace(/[\x00-\x1f\\"]/g, escape) + '"'; + case 'array': + return '[' + obj.map(JSON.encode).clean() + ']'; + case 'object': case 'hash': + var string = []; + Object.each(obj, function(value, key){ + var json = JSON.encode(value); + if (json) string.push(JSON.encode(key) + ':' + json); + }); + return '{' + string + '}'; + case 'number': case 'boolean': return '' + obj; + case 'null': return 'null'; + } + + return null; +}; + +JSON.decode = function(string, secure){ + if (!string || typeOf(string) != 'string') return null; + + if (secure || JSON.secure){ + if (JSON.parse) return JSON.parse(string); + if (!JSON.validate(string)) throw new Error('JSON could not decode the input; security is enabled and the value is not secure.'); + } + + return eval('(' + string + ')'); +}; + +}).call(this); + +/* +--- + +name: Request.JSON + +description: Extends the basic Request Class with additional methods for sending and receiving JSON data. + +license: MIT-style license. + +requires: [Request, JSON] + +provides: Request.JSON + +... +*/ + +Request.JSON = new Class({ + + Extends: Request, + + options: { + /*onError: function(text, error){},*/ + secure: true + }, + + initialize: function(options){ + this.parent(options); + Object.append(this.headers, { + 'Accept': 'application/json', + 'X-Request': 'JSON' + }); + }, + + success: function(text){ + var json; + try { + json = this.response.json = JSON.decode(text, this.options.secure); + } catch (error){ + this.fireEvent('error', [text, error]); + return; + } + if (json == null) this.onFailure(); + else this.onSuccess(json, text); + } + +}); + +/* +--- + +name: Cookie + +description: Class for creating, reading, and deleting browser Cookies. + +license: MIT-style license. + +credits: + - Based on the functions by Peter-Paul Koch (http://quirksmode.org). + +requires: [Options, Browser] + +provides: Cookie + +... +*/ + +var Cookie = new Class({ + + Implements: Options, + + options: { + path: '/', + domain: false, + duration: false, + secure: false, + document: document, + encode: true + }, + + initialize: function(key, options){ + this.key = key; + this.setOptions(options); + }, + + write: function(value){ + if (this.options.encode) value = encodeURIComponent(value); + if (this.options.domain) value += '; domain=' + this.options.domain; + if (this.options.path) value += '; path=' + this.options.path; + if (this.options.duration){ + var date = new Date(); + date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000); + value += '; expires=' + date.toGMTString(); + } + if (this.options.secure) value += '; secure'; + this.options.document.cookie = this.key + '=' + value; + return this; + }, + + read: function(){ + var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)'); + return (value) ? decodeURIComponent(value[1]) : null; + }, + + dispose: function(){ + new Cookie(this.key, Object.merge({}, this.options, {duration: -1})).write(''); + return this; + } + +}); + +Cookie.write = function(key, value, options){ + return new Cookie(key, options).write(value); +}; + +Cookie.read = function(key){ + return new Cookie(key).read(); +}; + +Cookie.dispose = function(key, options){ + return new Cookie(key, options).dispose(); +}; + +/* +--- + +name: DOMReady + +description: Contains the custom event domready. + +license: MIT-style license. + +requires: [Browser, Element, Element.Event] + +provides: [DOMReady, DomReady] + +... +*/ + +(function(window, document){ + +var ready, + loaded, + checks = [], + shouldPoll, + timer, + isFramed = true; + +// Thanks to Rich Dougherty +try { + isFramed = window.frameElement != null; +} catch(e){} + +var domready = function(){ + clearTimeout(timer); + if (ready) return; + Browser.loaded = ready = true; + document.removeListener('DOMContentLoaded', domready).removeListener('readystatechange', check); + + document.fireEvent('domready'); + window.fireEvent('domready'); +}; + +var check = function(){ + for (var i = checks.length; i--;) if (checks[i]()){ + domready(); + return true; + } + + return false; +}; + +var poll = function(){ + clearTimeout(timer); + if (!check()) timer = setTimeout(poll, 10); +}; + +document.addListener('DOMContentLoaded', domready); + +// doScroll technique by Diego Perini http://javascript.nwbox.com/IEContentLoaded/ +var testElement = document.createElement('div'); +if (testElement.doScroll && !isFramed){ + checks.push(function(){ + try { + testElement.doScroll(); + return true; + } catch (e){} + + return false; + }); + shouldPoll = true; +} + +if (document.readyState) checks.push(function(){ + var state = document.readyState; + return (state == 'loaded' || state == 'complete'); +}); + +if ('onreadystatechange' in document) document.addListener('readystatechange', check); +else shouldPoll = true; + +if (shouldPoll) poll(); + +Element.Events.domready = { + onAdd: function(fn){ + if (ready) fn.call(this); + } +}; + +// Make sure that domready fires before load +Element.Events.load = { + base: 'load', + onAdd: function(fn){ + if (loaded && this == window) fn.call(this); + }, + condition: function(){ + if (this == window){ + domready(); + delete Element.Events.load; + } + + return true; + } +}; + +// This is based on the custom load event +window.addEvent('load', function(){ + loaded = true; +}); + +})(window, document); + +/* +--- + +name: Swiff + +description: Wrapper for embedding SWF movies. Supports External Interface Communication. + +license: MIT-style license. + +credits: + - Flash detection & Internet Explorer + Flash Player 9 fix inspired by SWFObject. + +requires: [Options, Object, Element] + +provides: Swiff + +... +*/ + +(function(){ + +var Swiff = this.Swiff = new Class({ + + Implements: Options, + + options: { + id: null, + height: 1, + width: 1, + container: null, + properties: {}, + params: { + quality: 'high', + allowScriptAccess: 'always', + wMode: 'window', + swLiveConnect: true + }, + callBacks: {}, + vars: {} + }, + + toElement: function(){ + return this.object; + }, + + initialize: function(path, options){ + this.instance = 'Swiff_' + String.uniqueID(); + + this.setOptions(options); + options = this.options; + var id = this.id = options.id || this.instance; + var container = document.id(options.container); + + Swiff.CallBacks[this.instance] = {}; + + var params = options.params, vars = options.vars, callBacks = options.callBacks; + var properties = Object.append({height: options.height, width: options.width}, options.properties); + + var self = this; + + for (var callBack in callBacks){ + Swiff.CallBacks[this.instance][callBack] = (function(option){ + return function(){ + return option.apply(self.object, arguments); + }; + })(callBacks[callBack]); + vars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack; + } + + params.flashVars = Object.toQueryString(vars); + if (Browser.ie){ + properties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; + params.movie = path; + } else { + properties.type = 'application/x-shockwave-flash'; + } + properties.data = path; + + var build = ''; + } + build += ''; + this.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild; + }, + + replaces: function(element){ + element = document.id(element, true); + element.parentNode.replaceChild(this.toElement(), element); + return this; + }, + + inject: function(element){ + document.id(element, true).appendChild(this.toElement()); + return this; + }, + + remote: function(){ + return Swiff.remote.apply(Swiff, [this.toElement()].append(arguments)); + } + +}); + +Swiff.CallBacks = {}; + +Swiff.remote = function(obj, fn){ + var rs = obj.CallFunction('' + __flash__argumentsToXML(arguments, 2) + ''); + return eval(rs); +}; + +}).call(this); + diff --git a/tests/javascript/frameworks/prototype/prototype-1.5.0.js b/tests/javascript/frameworks/prototype/prototype-1.5.0.js new file mode 100644 index 0000000000000000000000000000000000000000..505822177b81910ba7426835e5014c1f3de374de --- /dev/null +++ b/tests/javascript/frameworks/prototype/prototype-1.5.0.js @@ -0,0 +1,2515 @@ +/* Prototype JavaScript framework, version 1.5.0 + * (c) 2005-2007 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://prototype.conio.net/ + * +/*--------------------------------------------------------------------------*/ + +var Prototype = { + Version: '1.5.0', + BrowserFeatures: { + XPath: !!document.evaluate + }, + + ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)', + emptyFunction: function() {}, + K: function(x) { return x } +} + +var Class = { + create: function() { + return function() { + this.initialize.apply(this, arguments); + } + } +} + +var Abstract = new Object(); + +Object.extend = function(destination, source) { + for (var property in source) { + destination[property] = source[property]; + } + return destination; +} + +Object.extend(Object, { + inspect: function(object) { + try { + if (object === undefined) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : object.toString(); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + }, + + keys: function(object) { + var keys = []; + for (var property in object) + keys.push(property); + return keys; + }, + + values: function(object) { + var values = []; + for (var property in object) + values.push(object[property]); + return values; + }, + + clone: function(object) { + return Object.extend({}, object); + } +}); + +Function.prototype.bind = function() { + var __method = this, args = $A(arguments), object = args.shift(); + return function() { + return __method.apply(object, args.concat($A(arguments))); + } +} + +Function.prototype.bindAsEventListener = function(object) { + var __method = this, args = $A(arguments), object = args.shift(); + return function(event) { + return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments))); + } +} + +Object.extend(Number.prototype, { + toColorPart: function() { + var digits = this.toString(16); + if (this < 16) return '0' + digits; + return digits; + }, + + succ: function() { + return this + 1; + }, + + times: function(iterator) { + $R(0, this, true).each(iterator); + return this; + } +}); + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) {} + } + + return returnValue; + } +} + +/*--------------------------------------------------------------------------*/ + +var PeriodicalExecuter = Class.create(); +PeriodicalExecuter.prototype = { + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.callback(this); + } finally { + this.currentlyExecuting = false; + } + } + } +} +String.interpret = function(value){ + return value == null ? '' : String(value); +} + +Object.extend(String.prototype, { + gsub: function(pattern, replacement) { + var result = '', source = this, match; + replacement = arguments.callee.prepareReplacement(replacement); + + while (source.length > 0) { + if (match = source.match(pattern)) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + }, + + sub: function(pattern, replacement, count) { + replacement = this.gsub.prepareReplacement(replacement); + count = count === undefined ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + }, + + scan: function(pattern, iterator) { + this.gsub(pattern, iterator); + return this; + }, + + truncate: function(length, truncation) { + length = length || 30; + truncation = truncation === undefined ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : this; + }, + + strip: function() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + }, + + stripTags: function() { + return this.replace(/<\/?[^>]+>/gi, ''); + }, + + stripScripts: function() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + }, + + extractScripts: function() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); + var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + }, + + evalScripts: function() { + return this.extractScripts().map(function(script) { return eval(script) }); + }, + + escapeHTML: function() { + var div = document.createElement('div'); + var text = document.createTextNode(this); + div.appendChild(text); + return div.innerHTML; + }, + + unescapeHTML: function() { + var div = document.createElement('div'); + div.innerHTML = this.stripTags(); + return div.childNodes[0] ? (div.childNodes.length > 1 ? + $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) : + div.childNodes[0].nodeValue) : ''; + }, + + toQueryParams: function(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return {}; + + return match[1].split(separator || '&').inject({}, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var name = decodeURIComponent(pair[0]); + var value = pair[1] ? decodeURIComponent(pair[1]) : undefined; + + if (hash[name] !== undefined) { + if (hash[name].constructor != Array) + hash[name] = [hash[name]]; + if (value) hash[name].push(value); + } + else hash[name] = value; + } + return hash; + }); + }, + + toArray: function() { + return this.split(''); + }, + + succ: function() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + }, + + camelize: function() { + var parts = this.split('-'), len = parts.length; + if (len == 1) return parts[0]; + + var camelized = this.charAt(0) == '-' + ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) + : parts[0]; + + for (var i = 1; i < len; i++) + camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); + + return camelized; + }, + + capitalize: function(){ + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + }, + + underscore: function() { + return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); + }, + + dasherize: function() { + return this.gsub(/_/,'-'); + }, + + inspect: function(useDoubleQuotes) { + var escapedString = this.replace(/\\/g, '\\\\'); + if (useDoubleQuotes) + return '"' + escapedString.replace(/"/g, '\\"') + '"'; + else + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } +}); + +String.prototype.gsub.prepareReplacement = function(replacement) { + if (typeof replacement == 'function') return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; +} + +String.prototype.parseQuery = String.prototype.toQueryParams; + +var Template = Class.create(); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; +Template.prototype = { + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + return this.template.gsub(this.pattern, function(match) { + var before = match[1]; + if (before == '\\') return match[2]; + return before + String.interpret(object[match[3]]); + }); + } +} + +var $break = new Object(); +var $continue = new Object(); + +var Enumerable = { + each: function(iterator) { + var index = 0; + try { + this._each(function(value) { + try { + iterator(value, index++); + } catch (e) { + if (e != $continue) throw e; + } + }); + } catch (e) { + if (e != $break) throw e; + } + return this; + }, + + eachSlice: function(number, iterator) { + var index = -number, slices = [], array = this.toArray(); + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.map(iterator); + }, + + all: function(iterator) { + var result = true; + this.each(function(value, index) { + result = result && !!(iterator || Prototype.K)(value, index); + if (!result) throw $break; + }); + return result; + }, + + any: function(iterator) { + var result = false; + this.each(function(value, index) { + if (result = !!(iterator || Prototype.K)(value, index)) + throw $break; + }); + return result; + }, + + collect: function(iterator) { + var results = []; + this.each(function(value, index) { + results.push((iterator || Prototype.K)(value, index)); + }); + return results; + }, + + detect: function(iterator) { + var result; + this.each(function(value, index) { + if (iterator(value, index)) { + result = value; + throw $break; + } + }); + return result; + }, + + findAll: function(iterator) { + var results = []; + this.each(function(value, index) { + if (iterator(value, index)) + results.push(value); + }); + return results; + }, + + grep: function(pattern, iterator) { + var results = []; + this.each(function(value, index) { + var stringValue = value.toString(); + if (stringValue.match(pattern)) + results.push((iterator || Prototype.K)(value, index)); + }) + return results; + }, + + include: function(object) { + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + }, + + inGroupsOf: function(number, fillWith) { + fillWith = fillWith === undefined ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + }, + + inject: function(memo, iterator) { + this.each(function(value, index) { + memo = iterator(memo, value, index); + }); + return memo; + }, + + invoke: function(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + }, + + max: function(iterator) { + var result; + this.each(function(value, index) { + value = (iterator || Prototype.K)(value, index); + if (result == undefined || value >= result) + result = value; + }); + return result; + }, + + min: function(iterator) { + var result; + this.each(function(value, index) { + value = (iterator || Prototype.K)(value, index); + if (result == undefined || value < result) + result = value; + }); + return result; + }, + + partition: function(iterator) { + var trues = [], falses = []; + this.each(function(value, index) { + ((iterator || Prototype.K)(value, index) ? + trues : falses).push(value); + }); + return [trues, falses]; + }, + + pluck: function(property) { + var results = []; + this.each(function(value, index) { + results.push(value[property]); + }); + return results; + }, + + reject: function(iterator) { + var results = []; + this.each(function(value, index) { + if (!iterator(value, index)) + results.push(value); + }); + return results; + }, + + sortBy: function(iterator) { + return this.map(function(value, index) { + return {value: value, criteria: iterator(value, index)}; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + }, + + toArray: function() { + return this.map(); + }, + + zip: function() { + var iterator = Prototype.K, args = $A(arguments); + if (typeof args.last() == 'function') + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + }, + + size: function() { + return this.toArray().length; + }, + + inspect: function() { + return '#'; + } +} + +Object.extend(Enumerable, { + map: Enumerable.collect, + find: Enumerable.detect, + select: Enumerable.findAll, + member: Enumerable.include, + entries: Enumerable.toArray +}); +var $A = Array.from = function(iterable) { + if (!iterable) return []; + if (iterable.toArray) { + return iterable.toArray(); + } else { + var results = []; + for (var i = 0, length = iterable.length; i < length; i++) + results.push(iterable[i]); + return results; + } +} + +Object.extend(Array.prototype, Enumerable); + +if (!Array.prototype._reverse) + Array.prototype._reverse = Array.prototype.reverse; + +Object.extend(Array.prototype, { + _each: function(iterator) { + for (var i = 0, length = this.length; i < length; i++) + iterator(this[i]); + }, + + clear: function() { + this.length = 0; + return this; + }, + + first: function() { + return this[0]; + }, + + last: function() { + return this[this.length - 1]; + }, + + compact: function() { + return this.select(function(value) { + return value != null; + }); + }, + + flatten: function() { + return this.inject([], function(array, value) { + return array.concat(value && value.constructor == Array ? + value.flatten() : [value]); + }); + }, + + without: function() { + var values = $A(arguments); + return this.select(function(value) { + return !values.include(value); + }); + }, + + indexOf: function(object) { + for (var i = 0, length = this.length; i < length; i++) + if (this[i] == object) return i; + return -1; + }, + + reverse: function(inline) { + return (inline !== false ? this : this.toArray())._reverse(); + }, + + reduce: function() { + return this.length > 1 ? this : this[0]; + }, + + uniq: function() { + return this.inject([], function(array, value) { + return array.include(value) ? array : array.concat([value]); + }); + }, + + clone: function() { + return [].concat(this); + }, + + size: function() { + return this.length; + }, + + inspect: function() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } +}); + +Array.prototype.toArray = Array.prototype.clone; + +function $w(string){ + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +if(window.opera){ + Array.prototype.concat = function(){ + var array = []; + for(var i = 0, length = this.length; i < length; i++) array.push(this[i]); + for(var i = 0, length = arguments.length; i < length; i++) { + if(arguments[i].constructor == Array) { + for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) + array.push(arguments[i][j]); + } else { + array.push(arguments[i]); + } + } + return array; + } +} +var Hash = function(obj) { + Object.extend(this, obj || {}); +}; + +Object.extend(Hash, { + toQueryString: function(obj) { + var parts = []; + + this.prototype._each.call(obj, function(pair) { + if (!pair.key) return; + + if (pair.value && pair.value.constructor == Array) { + var values = pair.value.compact(); + if (values.length < 2) pair.value = values.reduce(); + else { + key = encodeURIComponent(pair.key); + values.each(function(value) { + value = value != undefined ? encodeURIComponent(value) : ''; + parts.push(key + '=' + encodeURIComponent(value)); + }); + return; + } + } + if (pair.value == undefined) pair[1] = ''; + parts.push(pair.map(encodeURIComponent).join('=')); + }); + + return parts.join('&'); + } +}); + +Object.extend(Hash.prototype, Enumerable); +Object.extend(Hash.prototype, { + _each: function(iterator) { + for (var key in this) { + var value = this[key]; + if (value && value == Hash.prototype[key]) continue; + + var pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + }, + + keys: function() { + return this.pluck('key'); + }, + + values: function() { + return this.pluck('value'); + }, + + merge: function(hash) { + return $H(hash).inject(this, function(mergedHash, pair) { + mergedHash[pair.key] = pair.value; + return mergedHash; + }); + }, + + remove: function() { + var result; + for(var i = 0, length = arguments.length; i < length; i++) { + var value = this[arguments[i]]; + if (value !== undefined){ + if (result === undefined) result = value; + else { + if (result.constructor != Array) result = [result]; + result.push(value) + } + } + delete this[arguments[i]]; + } + return result; + }, + + toQueryString: function() { + return Hash.toQueryString(this); + }, + + inspect: function() { + return '#'; + } +}); + +function $H(object) { + if (object && object.constructor == Hash) return object; + return new Hash(object); +}; +ObjectRange = Class.create(); +Object.extend(ObjectRange.prototype, Enumerable); +Object.extend(ObjectRange.prototype, { + initialize: function(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + }, + + _each: function(iterator) { + var value = this.start; + while (this.include(value)) { + iterator(value); + value = value.succ(); + } + }, + + include: function(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } +}); + +var $R = function(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +} + +Ajax.Responders = { + responders: [], + + _each: function(iterator) { + this.responders._each(iterator); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (typeof responder[callback] == 'function') { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) {} + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { + Ajax.activeRequestCount++; + }, + onComplete: function() { + Ajax.activeRequestCount--; + } +}); + +Ajax.Base = function() {}; +Ajax.Base.prototype = { + setOptions: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '' + } + Object.extend(this.options, options || {}); + + this.options.method = this.options.method.toLowerCase(); + if (typeof this.options.parameters == 'string') + this.options.parameters = this.options.parameters.toQueryParams(); + } +} + +Ajax.Request = Class.create(); +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + +Ajax.Request.prototype = Object.extend(new Ajax.Base(), { + _complete: false, + + initialize: function(url, options) { + this.transport = Ajax.getTransport(); + this.setOptions(options); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = this.options.parameters; + + if (!['get', 'post'].include(this.method)) { + // simulate other verbs over post + params['_method'] = this.method; + this.method = 'post'; + } + + params = Hash.toQueryString(params); + if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_=' + + // when GET, append parameters to URL + if (this.method == 'get' && params) + this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params; + + try { + Ajax.Responders.dispatch('onCreate', this, this.transport); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) + setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + var body = this.method == 'post' ? (this.options.postBody || params) : null; + + this.transport.send(body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + // user-defined headers + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (typeof extras.push == 'function') + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + return !this.transport.status + || (this.transport.status >= 200 && this.transport.status < 300); + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState]; + var transport = this.transport, json = this.evalJSON(); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + this.transport.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(transport, json); + } catch (e) { + this.dispatchException(e); + } + + if ((this.getHeader('Content-type') || 'text/javascript').strip(). + match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i)) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(transport, json); + Ajax.Responders.dispatch('on' + state, this, transport, json); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + // avoid memory leak in MSIE: clean up + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name); + } catch (e) { return null } + }, + + evalJSON: function() { + try { + var json = this.getHeader('X-JSON'); + return json ? eval('(' + json + ')') : null; + } catch (e) { return null } + }, + + evalResponse: function() { + try { + return eval(this.transport.responseText); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Updater = Class.create(); + +Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { + initialize: function(container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + } + + this.transport = Ajax.getTransport(); + this.setOptions(options); + + var onComplete = this.options.onComplete || Prototype.emptyFunction; + this.options.onComplete = (function(transport, param) { + this.updateContent(); + onComplete(transport, param); + }).bind(this); + + this.request(url); + }, + + updateContent: function() { + var receiver = this.container[this.success() ? 'success' : 'failure']; + var response = this.transport.responseText; + + if (!this.options.evalScripts) response = response.stripScripts(); + + if (receiver = $(receiver)) { + if (this.options.insertion) + new this.options.insertion(receiver, response); + else + receiver.update(response); + } + + if (this.success()) { + if (this.onComplete) + setTimeout(this.onComplete.bind(this), 10); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(); +Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { + initialize: function(container, url, options) { + this.setOptions(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = {}; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(request) { + if (this.options.decay) { + this.decay = (request.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = request.responseText; + } + this.timer = setTimeout(this.onTimerEvent.bind(this), + this.decay * this.frequency * 1000); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); +function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + if (typeof element == 'string') + element = document.getElementById(element); + return Element.extend(element); +} + +if (Prototype.BrowserFeatures.XPath) { + document._getElementsByXPath = function(expression, parentElement) { + var results = []; + var query = document.evaluate(expression, $(parentElement) || document, + null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + for (var i = 0, length = query.snapshotLength; i < length; i++) + results.push(query.snapshotItem(i)); + return results; + }; +} + +document.getElementsByClassName = function(className, parentElement) { + if (Prototype.BrowserFeatures.XPath) { + var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; + return document._getElementsByXPath(q, parentElement); + } else { + var children = ($(parentElement) || document.body).getElementsByTagName('*'); + var elements = [], child; + for (var i = 0, length = children.length; i < length; i++) { + child = children[i]; + if (Element.hasClassName(child, className)) + elements.push(Element.extend(child)); + } + return elements; + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!window.Element) + var Element = new Object(); + +Element.extend = function(element) { + if (!element || _nativeExtensions || element.nodeType == 3) return element; + + if (!element._extended && element.tagName && element != window) { + var methods = Object.clone(Element.Methods), cache = Element.extend.cache; + + if (element.tagName == 'FORM') + Object.extend(methods, Form.Methods); + if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName)) + Object.extend(methods, Form.Element.Methods); + + Object.extend(methods, Element.Methods.Simulated); + + for (var property in methods) { + var value = methods[property]; + if (typeof value == 'function' && !(property in element)) + element[property] = cache.findOrStore(value); + } + } + + element._extended = true; + return element; +}; + +Element.extend.cache = { + findOrStore: function(value) { + return this[value] = this[value] || function() { + return value.apply(null, [this].concat($A(arguments))); + } + } +}; + +Element.Methods = { + visible: function(element) { + return $(element).style.display != 'none'; + }, + + toggle: function(element) { + element = $(element); + Element[Element.visible(element) ? 'hide' : 'show'](element); + return element; + }, + + hide: function(element) { + $(element).style.display = 'none'; + return element; + }, + + show: function(element) { + $(element).style.display = ''; + return element; + }, + + remove: function(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + }, + + update: function(element, html) { + html = typeof html == 'undefined' ? '' : html.toString(); + $(element).innerHTML = html.stripScripts(); + setTimeout(function() {html.evalScripts()}, 10); + return element; + }, + + replace: function(element, html) { + element = $(element); + html = typeof html == 'undefined' ? '' : html.toString(); + if (element.outerHTML) { + element.outerHTML = html.stripScripts(); + } else { + var range = element.ownerDocument.createRange(); + range.selectNodeContents(element); + element.parentNode.replaceChild( + range.createContextualFragment(html.stripScripts()), element); + } + setTimeout(function() {html.evalScripts()}, 10); + return element; + }, + + inspect: function(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + $H({'id': 'id', 'className': 'class'}).each(function(pair) { + var property = pair.first(), attribute = pair.last(); + var value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + }); + return result + '>'; + }, + + recursivelyCollect: function(element, property) { + element = $(element); + var elements = []; + while (element = element[property]) + if (element.nodeType == 1) + elements.push(Element.extend(element)); + return elements; + }, + + ancestors: function(element) { + return $(element).recursivelyCollect('parentNode'); + }, + + descendants: function(element) { + return $A($(element).getElementsByTagName('*')); + }, + + immediateDescendants: function(element) { + if (!(element = $(element).firstChild)) return []; + while (element && element.nodeType != 1) element = element.nextSibling; + if (element) return [element].concat($(element).nextSiblings()); + return []; + }, + + previousSiblings: function(element) { + return $(element).recursivelyCollect('previousSibling'); + }, + + nextSiblings: function(element) { + return $(element).recursivelyCollect('nextSibling'); + }, + + siblings: function(element) { + element = $(element); + return element.previousSiblings().reverse().concat(element.nextSiblings()); + }, + + match: function(element, selector) { + if (typeof selector == 'string') + selector = new Selector(selector); + return selector.match($(element)); + }, + + up: function(element, expression, index) { + return Selector.findElement($(element).ancestors(), expression, index); + }, + + down: function(element, expression, index) { + return Selector.findElement($(element).descendants(), expression, index); + }, + + previous: function(element, expression, index) { + return Selector.findElement($(element).previousSiblings(), expression, index); + }, + + next: function(element, expression, index) { + return Selector.findElement($(element).nextSiblings(), expression, index); + }, + + getElementsBySelector: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element, args); + }, + + getElementsByClassName: function(element, className) { + return document.getElementsByClassName(className, element); + }, + + readAttribute: function(element, name) { + element = $(element); + if (document.all && !window.opera) { + var t = Element._attributeTranslations; + if (t.values[name]) return t.values[name](element, name); + if (t.names[name]) name = t.names[name]; + var attribute = element.attributes[name]; + if(attribute) return attribute.nodeValue; + } + return element.getAttribute(name); + }, + + getHeight: function(element) { + return $(element).getDimensions().height; + }, + + getWidth: function(element) { + return $(element).getDimensions().width; + }, + + classNames: function(element) { + return new Element.ClassNames(element); + }, + + hasClassName: function(element, className) { + if (!(element = $(element))) return; + var elementClassName = element.className; + if (elementClassName.length == 0) return false; + if (elementClassName == className || + elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) + return true; + return false; + }, + + addClassName: function(element, className) { + if (!(element = $(element))) return; + Element.classNames(element).add(className); + return element; + }, + + removeClassName: function(element, className) { + if (!(element = $(element))) return; + Element.classNames(element).remove(className); + return element; + }, + + toggleClassName: function(element, className) { + if (!(element = $(element))) return; + Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className); + return element; + }, + + observe: function() { + Event.observe.apply(Event, arguments); + return $A(arguments).first(); + }, + + stopObserving: function() { + Event.stopObserving.apply(Event, arguments); + return $A(arguments).first(); + }, + + // removes whitespace-only text node children + cleanWhitespace: function(element) { + element = $(element); + var node = element.firstChild; + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + }, + + empty: function(element) { + return $(element).innerHTML.match(/^\s*$/); + }, + + descendantOf: function(element, ancestor) { + element = $(element), ancestor = $(ancestor); + while (element = element.parentNode) + if (element == ancestor) return true; + return false; + }, + + scrollTo: function(element) { + element = $(element); + var pos = Position.cumulativeOffset(element); + window.scrollTo(pos[0], pos[1]); + return element; + }, + + getStyle: function(element, style) { + element = $(element); + if (['float','cssFloat'].include(style)) + style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat'); + style = style.camelize(); + var value = element.style[style]; + if (!value) { + if (document.defaultView && document.defaultView.getComputedStyle) { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } else if (element.currentStyle) { + value = element.currentStyle[style]; + } + } + + if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none')) + value = element['offset'+style.capitalize()] + 'px'; + + if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) + if (Element.getStyle(element, 'position') == 'static') value = 'auto'; + if(style == 'opacity') { + if(value) return parseFloat(value); + if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) + if(value[1]) return parseFloat(value[1]) / 100; + return 1.0; + } + return value == 'auto' ? null : value; + }, + + setStyle: function(element, style) { + element = $(element); + for (var name in style) { + var value = style[name]; + if(name == 'opacity') { + if (value == 1) { + value = (/Gecko/.test(navigator.userAgent) && + !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0; + if(/MSIE/.test(navigator.userAgent) && !window.opera) + element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); + } else if(value == '') { + if(/MSIE/.test(navigator.userAgent) && !window.opera) + element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); + } else { + if(value < 0.00001) value = 0; + if(/MSIE/.test(navigator.userAgent) && !window.opera) + element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') + + 'alpha(opacity='+value*100+')'; + } + } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat'; + element.style[name.camelize()] = value; + } + return element; + }, + + getDimensions: function(element) { + element = $(element); + var display = $(element).getStyle('display'); + if (display != 'none' && display != null) // Safari bug + return {width: element.offsetWidth, height: element.offsetHeight}; + + // All *Width and *Height properties give 0 on elements with display none, + // so enable the element temporarily + var els = element.style; + var originalVisibility = els.visibility; + var originalPosition = els.position; + var originalDisplay = els.display; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = 'block'; + var originalWidth = element.clientWidth; + var originalHeight = element.clientHeight; + els.display = originalDisplay; + els.position = originalPosition; + els.visibility = originalVisibility; + return {width: originalWidth, height: originalHeight}; + }, + + makePositioned: function(element) { + element = $(element); + var pos = Element.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element._madePositioned = true; + element.style.position = 'relative'; + // Opera returns the offset relative to the positioning context, when an + // element is position relative but top and left have not been defined + if (window.opera) { + element.style.top = 0; + element.style.left = 0; + } + } + return element; + }, + + undoPositioned: function(element) { + element = $(element); + if (element._madePositioned) { + element._madePositioned = undefined; + element.style.position = + element.style.top = + element.style.left = + element.style.bottom = + element.style.right = ''; + } + return element; + }, + + makeClipping: function(element) { + element = $(element); + if (element._overflow) return element; + element._overflow = element.style.overflow || 'auto'; + if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') + element.style.overflow = 'hidden'; + return element; + }, + + undoClipping: function(element) { + element = $(element); + if (!element._overflow) return element; + element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; + element._overflow = null; + return element; + } +}; + +Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf}); + +Element._attributeTranslations = {}; + +Element._attributeTranslations.names = { + colspan: "colSpan", + rowspan: "rowSpan", + valign: "vAlign", + datetime: "dateTime", + accesskey: "accessKey", + tabindex: "tabIndex", + enctype: "encType", + maxlength: "maxLength", + readonly: "readOnly", + longdesc: "longDesc" +}; + +Element._attributeTranslations.values = { + _getAttr: function(element, attribute) { + return element.getAttribute(attribute, 2); + }, + + _flag: function(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + }, + + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + + title: function(element) { + var node = element.getAttributeNode('title'); + return node.specified ? node.nodeValue : null; + } +}; + +Object.extend(Element._attributeTranslations.values, { + href: Element._attributeTranslations.values._getAttr, + src: Element._attributeTranslations.values._getAttr, + disabled: Element._attributeTranslations.values._flag, + checked: Element._attributeTranslations.values._flag, + readonly: Element._attributeTranslations.values._flag, + multiple: Element._attributeTranslations.values._flag +}); + +Element.Methods.Simulated = { + hasAttribute: function(element, attribute) { + var t = Element._attributeTranslations; + attribute = t.names[attribute] || attribute; + return $(element).getAttributeNode(attribute).specified; + } +}; + +// IE is missing .innerHTML support for TABLE-related elements +if (document.all && !window.opera){ + Element.Methods.update = function(element, html) { + element = $(element); + html = typeof html == 'undefined' ? '' : html.toString(); + var tagName = element.tagName.toUpperCase(); + if (['THEAD','TBODY','TR','TD'].include(tagName)) { + var div = document.createElement('div'); + switch (tagName) { + case 'THEAD': + case 'TBODY': + div.innerHTML = '' + html.stripScripts() + '
    '; + depth = 2; + break; + case 'TR': + div.innerHTML = '' + html.stripScripts() + '
    '; + depth = 3; + break; + case 'TD': + div.innerHTML = '
    ' + html.stripScripts() + '
    '; + depth = 4; + } + $A(element.childNodes).each(function(node){ + element.removeChild(node) + }); + depth.times(function(){ div = div.firstChild }); + + $A(div.childNodes).each( + function(node){ element.appendChild(node) }); + } else { + element.innerHTML = html.stripScripts(); + } + setTimeout(function() {html.evalScripts()}, 10); + return element; + } +}; + +Object.extend(Element, Element.Methods); + +var _nativeExtensions = false; + +if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)) + ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) { + var className = 'HTML' + tag + 'Element'; + if(window[className]) return; + var klass = window[className] = {}; + klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__; + }); + +Element.addMethods = function(methods) { + Object.extend(Element.Methods, methods || {}); + + function copy(methods, destination, onlyIfAbsent) { + onlyIfAbsent = onlyIfAbsent || false; + var cache = Element.extend.cache; + for (var property in methods) { + var value = methods[property]; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = cache.findOrStore(value); + } + } + + if (typeof HTMLElement != 'undefined') { + copy(Element.Methods, HTMLElement.prototype); + copy(Element.Methods.Simulated, HTMLElement.prototype, true); + copy(Form.Methods, HTMLFormElement.prototype); + [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) { + copy(Form.Element.Methods, klass.prototype); + }); + _nativeExtensions = true; + } +} + +var Toggle = new Object(); +Toggle.display = Element.toggle; + +/*--------------------------------------------------------------------------*/ + +Abstract.Insertion = function(adjacency) { + this.adjacency = adjacency; +} + +Abstract.Insertion.prototype = { + initialize: function(element, content) { + this.element = $(element); + this.content = content.stripScripts(); + + if (this.adjacency && this.element.insertAdjacentHTML) { + try { + this.element.insertAdjacentHTML(this.adjacency, this.content); + } catch (e) { + var tagName = this.element.tagName.toUpperCase(); + if (['TBODY', 'TR'].include(tagName)) { + this.insertContent(this.contentFromAnonymousTable()); + } else { + throw e; + } + } + } else { + this.range = this.element.ownerDocument.createRange(); + if (this.initializeRange) this.initializeRange(); + this.insertContent([this.range.createContextualFragment(this.content)]); + } + + setTimeout(function() {content.evalScripts()}, 10); + }, + + contentFromAnonymousTable: function() { + var div = document.createElement('div'); + div.innerHTML = '' + this.content + '
    '; + return $A(div.childNodes[0].childNodes[0].childNodes); + } +} + +var Insertion = new Object(); + +Insertion.Before = Class.create(); +Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { + initializeRange: function() { + this.range.setStartBefore(this.element); + }, + + insertContent: function(fragments) { + fragments.each((function(fragment) { + this.element.parentNode.insertBefore(fragment, this.element); + }).bind(this)); + } +}); + +Insertion.Top = Class.create(); +Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { + initializeRange: function() { + this.range.selectNodeContents(this.element); + this.range.collapse(true); + }, + + insertContent: function(fragments) { + fragments.reverse(false).each((function(fragment) { + this.element.insertBefore(fragment, this.element.firstChild); + }).bind(this)); + } +}); + +Insertion.Bottom = Class.create(); +Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { + initializeRange: function() { + this.range.selectNodeContents(this.element); + this.range.collapse(this.element); + }, + + insertContent: function(fragments) { + fragments.each((function(fragment) { + this.element.appendChild(fragment); + }).bind(this)); + } +}); + +Insertion.After = Class.create(); +Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { + initializeRange: function() { + this.range.setStartAfter(this.element); + }, + + insertContent: function(fragments) { + fragments.each((function(fragment) { + this.element.parentNode.insertBefore(fragment, + this.element.nextSibling); + }).bind(this)); + } +}); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); +var Selector = Class.create(); +Selector.prototype = { + initialize: function(expression) { + this.params = {classNames: []}; + this.expression = expression.toString().strip(); + this.parseExpression(); + this.compileMatcher(); + }, + + parseExpression: function() { + function abort(message) { throw 'Parse error in selector: ' + message; } + + if (this.expression == '') abort('empty expression'); + + var params = this.params, expr = this.expression, match, modifier, clause, rest; + while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) { + params.attributes = params.attributes || []; + params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''}); + expr = match[1]; + } + + if (expr == '*') return this.params.wildcard = true; + + while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) { + modifier = match[1], clause = match[2], rest = match[3]; + switch (modifier) { + case '#': params.id = clause; break; + case '.': params.classNames.push(clause); break; + case '': + case undefined: params.tagName = clause.toUpperCase(); break; + default: abort(expr.inspect()); + } + expr = rest; + } + + if (expr.length > 0) abort(expr.inspect()); + }, + + buildMatchExpression: function() { + var params = this.params, conditions = [], clause; + + if (params.wildcard) + conditions.push('true'); + if (clause = params.id) + conditions.push('element.readAttribute("id") == ' + clause.inspect()); + if (clause = params.tagName) + conditions.push('element.tagName.toUpperCase() == ' + clause.inspect()); + if ((clause = params.classNames).length > 0) + for (var i = 0, length = clause.length; i < length; i++) + conditions.push('element.hasClassName(' + clause[i].inspect() + ')'); + if (clause = params.attributes) { + clause.each(function(attribute) { + var value = 'element.readAttribute(' + attribute.name.inspect() + ')'; + var splitValueBy = function(delimiter) { + return value + ' && ' + value + '.split(' + delimiter.inspect() + ')'; + } + + switch (attribute.operator) { + case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break; + case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break; + case '|=': conditions.push( + splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect() + ); break; + case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break; + case '': + case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break; + default: throw 'Unknown operator ' + attribute.operator + ' in selector'; + } + }); + } + + return conditions.join(' && '); + }, + + compileMatcher: function() { + this.match = new Function('element', 'if (!element.tagName) return false; \ + element = $(element); \ + return ' + this.buildMatchExpression()); + }, + + findElements: function(scope) { + var element; + + if (element = $(this.params.id)) + if (this.match(element)) + if (!scope || Element.childOf(element, scope)) + return [element]; + + scope = (scope || document).getElementsByTagName(this.params.tagName || '*'); + + var results = []; + for (var i = 0, length = scope.length; i < length; i++) + if (this.match(element = scope[i])) + results.push(Element.extend(element)); + + return results; + }, + + toString: function() { + return this.expression; + } +} + +Object.extend(Selector, { + matchElements: function(elements, expression) { + var selector = new Selector(expression); + return elements.select(selector.match.bind(selector)).map(Element.extend); + }, + + findElement: function(elements, expression, index) { + if (typeof expression == 'number') index = expression, expression = false; + return Selector.matchElements(elements, expression || '*')[index || 0]; + }, + + findChildElements: function(element, expressions) { + return expressions.map(function(expression) { + return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) { + var selector = new Selector(expr); + return results.inject([], function(elements, result) { + return elements.concat(selector.findElements(result || element)); + }); + }); + }).flatten(); + } +}); + +function $$() { + return Selector.findChildElements(document, $A(arguments)); +} +var Form = { + reset: function(form) { + $(form).reset(); + return form; + }, + + serializeElements: function(elements, getHash) { + var data = elements.inject({}, function(result, element) { + if (!element.disabled && element.name) { + var key = element.name, value = $(element).getValue(); + if (value != undefined) { + if (result[key]) { + if (result[key].constructor != Array) result[key] = [result[key]]; + result[key].push(value); + } + else result[key] = value; + } + } + return result; + }); + + return getHash ? data : Hash.toQueryString(data); + } +}; + +Form.Methods = { + serialize: function(form, getHash) { + return Form.serializeElements(Form.getElements(form), getHash); + }, + + getElements: function(form) { + return $A($(form).getElementsByTagName('*')).inject([], + function(elements, child) { + if (Form.Element.Serializers[child.tagName.toLowerCase()]) + elements.push(Element.extend(child)); + return elements; + } + ); + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + form.getElements().each(function(element) { + element.blur(); + element.disabled = 'true'; + }); + return form; + }, + + enable: function(form) { + form = $(form); + form.getElements().each(function(element) { + element.disabled = ''; + }); + return form; + }, + + findFirstElement: function(form) { + return $(form).getElements().find(function(element) { + return element.type != 'hidden' && !element.disabled && + ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + form.findFirstElement().activate(); + return form; + } +} + +Object.extend(Form, Form.Methods); + +/*--------------------------------------------------------------------------*/ + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +} + +Form.Element.Methods = { + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = {}; + pair[element.name] = value; + return Hash.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + element.focus(); + if (element.select && ( element.tagName.toLowerCase() != 'input' || + !['button', 'reset', 'submit'].include(element.type) ) ) + element.select(); + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.blur(); + element.disabled = false; + return element; + } +} + +Object.extend(Form.Element, Form.Element.Methods); +var Field = Form.Element; +var $F = Form.Element.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = { + input: function(element) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return Form.Element.Serializers.inputSelector(element); + default: + return Form.Element.Serializers.textarea(element); + } + }, + + inputSelector: function(element) { + return element.checked ? element.value : null; + }, + + textarea: function(element) { + return element.value; + }, + + select: function(element) { + return this[element.type == 'select-one' ? + 'selectOne' : 'selectMany'](element); + }, + + selectOne: function(element) { + var index = element.selectedIndex; + return index >= 0 ? this.optionValue(element.options[index]) : null; + }, + + selectMany: function(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(this.optionValue(opt)); + } + return values; + }, + + optionValue: function(opt) { + // extend element because hasAttribute may not be native + return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; + } +} + +/*--------------------------------------------------------------------------*/ + +Abstract.TimedObserver = function() {} +Abstract.TimedObserver.prototype = { + initialize: function(element, frequency, callback) { + this.frequency = frequency; + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + this.registerCallback(); + }, + + registerCallback: function() { + setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + onTimerEvent: function() { + var value = this.getValue(); + var changed = ('string' == typeof this.lastValue && 'string' == typeof value + ? this.lastValue != value : String(this.lastValue) != String(value)); + if (changed) { + this.callback(this.element, value); + this.lastValue = value; + } + } +} + +Form.Element.Observer = Class.create(); +Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(); +Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = function() {} +Abstract.EventObserver.prototype = { + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback.bind(this)); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +} + +Form.Element.EventObserver = Class.create(); +Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(); +Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { + getValue: function() { + return Form.serialize(this.element); + } +}); +if (!window.Event) { + var Event = new Object(); +} + +Object.extend(Event, { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + + element: function(event) { + return event.target || event.srcElement; + }, + + isLeftClick: function(event) { + return (((event.which) && (event.which == 1)) || + ((event.button) && (event.button == 1))); + }, + + pointerX: function(event) { + return event.pageX || (event.clientX + + (document.documentElement.scrollLeft || document.body.scrollLeft)); + }, + + pointerY: function(event) { + return event.pageY || (event.clientY + + (document.documentElement.scrollTop || document.body.scrollTop)); + }, + + stop: function(event) { + if (event.preventDefault) { + event.preventDefault(); + event.stopPropagation(); + } else { + event.returnValue = false; + event.cancelBubble = true; + } + }, + + // find the first node with the given tagName, starting from the + // node the event was triggered on; traverses the DOM upwards + findElement: function(event, tagName) { + var element = Event.element(event); + while (element.parentNode && (!element.tagName || + (element.tagName.toUpperCase() != tagName.toUpperCase()))) + element = element.parentNode; + return element; + }, + + observers: false, + + _observeAndCache: function(element, name, observer, useCapture) { + if (!this.observers) this.observers = []; + if (element.addEventListener) { + this.observers.push([element, name, observer, useCapture]); + element.addEventListener(name, observer, useCapture); + } else if (element.attachEvent) { + this.observers.push([element, name, observer, useCapture]); + element.attachEvent('on' + name, observer); + } + }, + + unloadCache: function() { + if (!Event.observers) return; + for (var i = 0, length = Event.observers.length; i < length; i++) { + Event.stopObserving.apply(this, Event.observers[i]); + Event.observers[i][0] = null; + } + Event.observers = false; + }, + + observe: function(element, name, observer, useCapture) { + element = $(element); + useCapture = useCapture || false; + + if (name == 'keypress' && + (navigator.appVersion.match(/Konqueror|Safari|KHTML/) + || element.attachEvent)) + name = 'keydown'; + + Event._observeAndCache(element, name, observer, useCapture); + }, + + stopObserving: function(element, name, observer, useCapture) { + element = $(element); + useCapture = useCapture || false; + + if (name == 'keypress' && + (navigator.appVersion.match(/Konqueror|Safari|KHTML/) + || element.detachEvent)) + name = 'keydown'; + + if (element.removeEventListener) { + element.removeEventListener(name, observer, useCapture); + } else if (element.detachEvent) { + try { + element.detachEvent('on' + name, observer); + } catch (e) {} + } + } +}); + +/* prevent memory leaks in IE */ +if (navigator.appVersion.match(/\bMSIE\b/)) + Event.observe(window, 'unload', Event.unloadCache, false); +var Position = { + // set to true if needed, warning: firefox performance problems + // NOT neeeded for page scrolling, only if draggable contained in + // scrollable elements + includeScrollOffsets: false, + + // must be called before calling withinIncludingScrolloffset, every time the + // page is scrolled + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + realOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return [valueL, valueT]; + }, + + cumulativeOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return [valueL, valueT]; + }, + + positionedOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if(element.tagName=='BODY') break; + var p = Element.getStyle(element, 'position'); + if (p == 'relative' || p == 'absolute') break; + } + } while (element); + return [valueL, valueT]; + }, + + offsetParent: function(element) { + if (element.offsetParent) return element.offsetParent; + if (element == document.body) return element; + + while ((element = element.parentNode) && element != document.body) + if (Element.getStyle(element, 'position') != 'static') + return element; + + return document.body; + }, + + // caches x/y coordinate pair to use with overlap + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = this.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = this.realOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = this.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + // within must be called directly before + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + page: function(forElement) { + var valueT = 0, valueL = 0; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + + // Safari fix + if (element.offsetParent==document.body) + if (Element.getStyle(element,'position')=='absolute') break; + + } while (element = element.offsetParent); + + element = forElement; + do { + if (!window.opera || element.tagName=='BODY') { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + + return [valueL, valueT]; + }, + + clone: function(source, target) { + var options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, arguments[2] || {}) + + // find page position of source + source = $(source); + var p = Position.page(source); + + // find coordinate system to use + target = $(target); + var delta = [0, 0]; + var parent = null; + // delta [0,0] will do fine with position: fixed elements, + // position:absolute needs offsetParent deltas + if (Element.getStyle(target,'position') == 'absolute') { + parent = Position.offsetParent(target); + delta = Position.page(parent); + } + + // correct by body offsets (fixes Safari) + if (parent == document.body) { + delta[0] -= document.body.offsetLeft; + delta[1] -= document.body.offsetTop; + } + + // set position + if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + if(options.setWidth) target.style.width = source.offsetWidth + 'px'; + if(options.setHeight) target.style.height = source.offsetHeight + 'px'; + }, + + absolutize: function(element) { + element = $(element); + if (element.style.position == 'absolute') return; + Position.prepare(); + + var offsets = Position.positionedOffset(element); + var top = offsets[1]; + var left = offsets[0]; + var width = element.clientWidth; + var height = element.clientHeight; + + element._originalLeft = left - parseFloat(element.style.left || 0); + element._originalTop = top - parseFloat(element.style.top || 0); + element._originalWidth = element.style.width; + element._originalHeight = element.style.height; + + element.style.position = 'absolute'; + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.width = width + 'px'; + element.style.height = height + 'px'; + }, + + relativize: function(element) { + element = $(element); + if (element.style.position == 'relative') return; + Position.prepare(); + + element.style.position = 'relative'; + var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); + var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); + + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.height = element._originalHeight; + element.style.width = element._originalWidth; + } +} + +// Safari returns margins on body which is incorrect if the child is absolutely +// positioned. For performance reasons, redefine Position.cumulativeOffset for +// KHTML/WebKit only. +if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { + Position.cumulativeOffset = function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) + if (Element.getStyle(element, 'position') == 'absolute') break; + + element = element.offsetParent; + } while (element); + + return [valueL, valueT]; + } +} + +Element.addMethods(); \ No newline at end of file diff --git a/tests/javascript/frameworks/prototype/prototype-1.6.0.js b/tests/javascript/frameworks/prototype/prototype-1.6.0.js new file mode 100644 index 0000000000000000000000000000000000000000..b09f73ba04888679150f96fec1582fb780b711db --- /dev/null +++ b/tests/javascript/frameworks/prototype/prototype-1.6.0.js @@ -0,0 +1,4183 @@ +/* Prototype JavaScript framework, version 1.6.0 + * (c) 2005-2007 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + Version: '1.6.0', + + Browser: { + IE: !!(window.attachEvent && !window.opera), + Opera: !!window.opera, + WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, + Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1, + MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) + }, + + BrowserFeatures: { + XPath: !!document.evaluate, + ElementExtensions: !!window.HTMLElement, + SpecificElementExtensions: + document.createElement('div').__proto__ && + document.createElement('div').__proto__ !== + document.createElement('form').__proto__ + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; + +if (Prototype.Browser.WebKit) + Prototype.BrowserFeatures.XPath = false; + +/* Based on Alex Arnell's inheritance implementation. */ +var Class = { + create: function() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + var subclass = function() { }; + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0; i < properties.length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + + return klass; + } +}; + +Class.Methods = { + addMethods: function(source) { + var ancestor = this.superclass && this.superclass.prototype; + var properties = Object.keys(source); + + if (!Object.keys({ toString: true }).length) + properties.push("toString", "valueOf"); + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames().first() == "$super") { + var method = value, value = Object.extend((function(m) { + return function() { return ancestor[m].apply(this, arguments) }; + })(property).wrap(method), { + valueOf: function() { return method }, + toString: function() { return method.toString() } + }); + } + this.prototype[property] = value; + } + + return this; + } +}; + +var Abstract = { }; + +Object.extend = function(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; +}; + +Object.extend(Object, { + inspect: function(object) { + try { + if (object === undefined) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : object.toString(); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + }, + + toJSON: function(object) { + var type = typeof object; + switch (type) { + case 'undefined': + case 'function': + case 'unknown': return; + case 'boolean': return object.toString(); + } + + if (object === null) return 'null'; + if (object.toJSON) return object.toJSON(); + if (Object.isElement(object)) return; + + var results = []; + for (var property in object) { + var value = Object.toJSON(object[property]); + if (value !== undefined) + results.push(property.toJSON() + ': ' + value); + } + + return '{' + results.join(', ') + '}'; + }, + + toQueryString: function(object) { + return $H(object).toQueryString(); + }, + + toHTML: function(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + }, + + keys: function(object) { + var keys = []; + for (var property in object) + keys.push(property); + return keys; + }, + + values: function(object) { + var values = []; + for (var property in object) + values.push(object[property]); + return values; + }, + + clone: function(object) { + return Object.extend({ }, object); + }, + + isElement: function(object) { + return object && object.nodeType == 1; + }, + + isArray: function(object) { + return object && object.constructor === Array; + }, + + isHash: function(object) { + return object instanceof Hash; + }, + + isFunction: function(object) { + return typeof object == "function"; + }, + + isString: function(object) { + return typeof object == "string"; + }, + + isNumber: function(object) { + return typeof object == "number"; + }, + + isUndefined: function(object) { + return typeof object == "undefined"; + } +}); + +Object.extend(Function.prototype, { + argumentNames: function() { + var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip"); + return names.length == 1 && !names[0] ? [] : names; + }, + + bind: function() { + if (arguments.length < 2 && arguments[0] === undefined) return this; + var __method = this, args = $A(arguments), object = args.shift(); + return function() { + return __method.apply(object, args.concat($A(arguments))); + } + }, + + bindAsEventListener: function() { + var __method = this, args = $A(arguments), object = args.shift(); + return function(event) { + return __method.apply(object, [event || window.event].concat(args)); + } + }, + + curry: function() { + if (!arguments.length) return this; + var __method = this, args = $A(arguments); + return function() { + return __method.apply(this, args.concat($A(arguments))); + } + }, + + delay: function() { + var __method = this, args = $A(arguments), timeout = args.shift() * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + }, + + wrap: function(wrapper) { + var __method = this; + return function() { + return wrapper.apply(this, [__method.bind(this)].concat($A(arguments))); + } + }, + + methodize: function() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + return __method.apply(null, [this].concat($A(arguments))); + }; + } +}); + +Function.prototype.defer = Function.prototype.delay.curry(0.01); + +Date.prototype.toJSON = function() { + return '"' + this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z"'; +}; + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; + +/*--------------------------------------------------------------------------*/ + +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + } finally { + this.currentlyExecuting = false; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, { + gsub: function(pattern, replacement) { + var result = '', source = this, match; + replacement = arguments.callee.prepareReplacement(replacement); + + while (source.length > 0) { + if (match = source.match(pattern)) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + }, + + sub: function(pattern, replacement, count) { + replacement = this.gsub.prepareReplacement(replacement); + count = count === undefined ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + }, + + scan: function(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + }, + + truncate: function(length, truncation) { + length = length || 30; + truncation = truncation === undefined ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + }, + + strip: function() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + }, + + stripTags: function() { + return this.replace(/<\/?[^>]+>/gi, ''); + }, + + stripScripts: function() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + }, + + extractScripts: function() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); + var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + }, + + evalScripts: function() { + return this.extractScripts().map(function(script) { return eval(script) }); + }, + + escapeHTML: function() { + var self = arguments.callee; + self.text.data = this; + return self.div.innerHTML; + }, + + unescapeHTML: function() { + var div = new Element('div'); + div.innerHTML = this.stripTags(); + return div.childNodes[0] ? (div.childNodes.length > 1 ? + $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) : + div.childNodes[0].nodeValue) : ''; + }, + + toQueryParams: function(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()); + var value = pair.length > 1 ? pair.join('=') : pair[0]; + if (value != undefined) value = decodeURIComponent(value); + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + }, + + toArray: function() { + return this.split(''); + }, + + succ: function() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + }, + + times: function(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + }, + + camelize: function() { + var parts = this.split('-'), len = parts.length; + if (len == 1) return parts[0]; + + var camelized = this.charAt(0) == '-' + ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) + : parts[0]; + + for (var i = 1; i < len; i++) + camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); + + return camelized; + }, + + capitalize: function() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + }, + + underscore: function() { + return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); + }, + + dasherize: function() { + return this.gsub(/_/,'-'); + }, + + inspect: function(useDoubleQuotes) { + var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) { + var character = String.specialChar[match[0]]; + return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + }, + + toJSON: function() { + return this.inspect(true); + }, + + unfilterJSON: function(filter) { + return this.sub(filter || Prototype.JSONFilter, '#{1}'); + }, + + isJSON: function() { + var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''); + return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str); + }, + + evalJSON: function(sanitize) { + var json = this.unfilterJSON(); + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + }, + + include: function(pattern) { + return this.indexOf(pattern) > -1; + }, + + startsWith: function(pattern) { + return this.indexOf(pattern) === 0; + }, + + endsWith: function(pattern) { + var d = this.length - pattern.length; + return d >= 0 && this.lastIndexOf(pattern) === d; + }, + + empty: function() { + return this == ''; + }, + + blank: function() { + return /^\s*$/.test(this); + }, + + interpolate: function(object, pattern) { + return new Template(this, pattern).evaluate(object); + } +}); + +if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, { + escapeHTML: function() { + return this.replace(/&/g,'&').replace(//g,'>'); + }, + unescapeHTML: function() { + return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); + } +}); + +String.prototype.gsub.prepareReplacement = function(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; +}; + +String.prototype.parseQuery = String.prototype.toQueryParams; + +Object.extend(String.prototype.escapeHTML, { + div: document.createElement('div'), + text: document.createTextNode('') +}); + +with (String.prototype.escapeHTML) div.appendChild(text); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return ''; + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3]; + var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }.bind(this)); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = { + each: function(iterator, context) { + var index = 0; + iterator = iterator.bind(context); + try { + this._each(function(value) { + iterator(value, index++); + }); + } catch (e) { + if (e != $break) throw e; + } + return this; + }, + + eachSlice: function(number, iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var index = -number, slices = [], array = this.toArray(); + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + }, + + all: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator(value, index); + if (!result) throw $break; + }); + return result; + }, + + any: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator(value, index)) + throw $break; + }); + return result; + }, + + collect: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator(value, index)); + }); + return results; + }, + + detect: function(iterator, context) { + iterator = iterator.bind(context); + var result; + this.each(function(value, index) { + if (iterator(value, index)) { + result = value; + throw $break; + } + }); + return result; + }, + + findAll: function(iterator, context) { + iterator = iterator.bind(context); + var results = []; + this.each(function(value, index) { + if (iterator(value, index)) + results.push(value); + }); + return results; + }, + + grep: function(filter, iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(filter); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator(value, index)); + }); + return results; + }, + + include: function(object) { + if (Object.isFunction(this.indexOf)) + if (this.indexOf(object) != -1) return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + }, + + inGroupsOf: function(number, fillWith) { + fillWith = fillWith === undefined ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + }, + + inject: function(memo, iterator, context) { + iterator = iterator.bind(context); + this.each(function(value, index) { + memo = iterator(memo, value, index); + }); + return memo; + }, + + invoke: function(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + }, + + max: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result; + this.each(function(value, index) { + value = iterator(value, index); + if (result == undefined || value >= result) + result = value; + }); + return result; + }, + + min: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result; + this.each(function(value, index) { + value = iterator(value, index); + if (result == undefined || value < result) + result = value; + }); + return result; + }, + + partition: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator(value, index) ? + trues : falses).push(value); + }); + return [trues, falses]; + }, + + pluck: function(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + }, + + reject: function(iterator, context) { + iterator = iterator.bind(context); + var results = []; + this.each(function(value, index) { + if (!iterator(value, index)) + results.push(value); + }); + return results; + }, + + sortBy: function(iterator, context) { + iterator = iterator.bind(context); + return this.map(function(value, index) { + return {value: value, criteria: iterator(value, index)}; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + }, + + toArray: function() { + return this.map(); + }, + + zip: function() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + }, + + size: function() { + return this.toArray().length; + }, + + inspect: function() { + return '#'; + } +}; + +Object.extend(Enumerable, { + map: Enumerable.collect, + find: Enumerable.detect, + select: Enumerable.findAll, + filter: Enumerable.findAll, + member: Enumerable.include, + entries: Enumerable.toArray, + every: Enumerable.all, + some: Enumerable.any +}); +function $A(iterable) { + if (!iterable) return []; + if (iterable.toArray) return iterable.toArray(); + var length = iterable.length, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + +if (Prototype.Browser.WebKit) { + function $A(iterable) { + if (!iterable) return []; + if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') && + iterable.toArray) return iterable.toArray(); + var length = iterable.length, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; + } +} + +Array.from = $A; + +Object.extend(Array.prototype, Enumerable); + +if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; + +Object.extend(Array.prototype, { + _each: function(iterator) { + for (var i = 0, length = this.length; i < length; i++) + iterator(this[i]); + }, + + clear: function() { + this.length = 0; + return this; + }, + + first: function() { + return this[0]; + }, + + last: function() { + return this[this.length - 1]; + }, + + compact: function() { + return this.select(function(value) { + return value != null; + }); + }, + + flatten: function() { + return this.inject([], function(array, value) { + return array.concat(Object.isArray(value) ? + value.flatten() : [value]); + }); + }, + + without: function() { + var values = $A(arguments); + return this.select(function(value) { + return !values.include(value); + }); + }, + + reverse: function(inline) { + return (inline !== false ? this : this.toArray())._reverse(); + }, + + reduce: function() { + return this.length > 1 ? this : this[0]; + }, + + uniq: function(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + }, + + intersect: function(array) { + return this.uniq().findAll(function(item) { + return array.detect(function(value) { return item === value }); + }); + }, + + clone: function() { + return [].concat(this); + }, + + size: function() { + return this.length; + }, + + inspect: function() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + }, + + toJSON: function() { + var results = []; + this.each(function(object) { + var value = Object.toJSON(object); + if (value !== undefined) results.push(value); + }); + return '[' + results.join(', ') + ']'; + } +}); + +// use native browser JS 1.6 implementation if available +if (Object.isFunction(Array.prototype.forEach)) + Array.prototype._each = Array.prototype.forEach; + +if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) { + i || (i = 0); + var length = this.length; + if (i < 0) i = length + i; + for (; i < length; i++) + if (this[i] === item) return i; + return -1; +}; + +if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) { + i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; + var n = this.slice(0, i).reverse().indexOf(item); + return (n < 0) ? n : i - n - 1; +}; + +Array.prototype.toArray = Array.prototype.clone; + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +if (Prototype.Browser.Opera){ + Array.prototype.concat = function() { + var array = []; + for (var i = 0, length = this.length; i < length; i++) array.push(this[i]); + for (var i = 0, length = arguments.length; i < length; i++) { + if (Object.isArray(arguments[i])) { + for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) + array.push(arguments[i][j]); + } else { + array.push(arguments[i]); + } + } + return array; + }; +} +Object.extend(Number.prototype, { + toColorPart: function() { + return this.toPaddedString(2, 16); + }, + + succ: function() { + return this + 1; + }, + + times: function(iterator) { + $R(0, this, true).each(iterator); + return this; + }, + + toPaddedString: function(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + }, + + toJSON: function() { + return isFinite(this) ? this.toString() : 'null'; + } +}); + +$w('abs round ceil floor').each(function(method){ + Number.prototype[method] = Math[method].methodize(); +}); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + if (function() { + var i = 0, Test = function(value) { this.key = value }; + Test.prototype.key = 'foo'; + for (var property in new Test('bar')) i++; + return i > 1; + }()) { + function each(iterator) { + var cache = []; + for (var key in this._object) { + var value = this._object[key]; + if (cache.include(key)) continue; + cache.push(key); + var pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + } + } else { + function each(iterator) { + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + } + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + return key + '=' + encodeURIComponent(String.interpret(value)); + } + + return { + initialize: function(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + }, + + _each: each, + + set: function(key, value) { + return this._object[key] = value; + }, + + get: function(key) { + return this._object[key]; + }, + + unset: function(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + }, + + toObject: function() { + return Object.clone(this._object); + }, + + keys: function() { + return this.pluck('key'); + }, + + values: function() { + return this.pluck('value'); + }, + + index: function(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + }, + + merge: function(object) { + return this.clone().update(object); + }, + + update: function(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + }, + + toQueryString: function() { + return this.map(function(pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) + return values.map(toQueryPair.curry(key)).join('&'); + } + return toQueryPair(key, values); + }).join('&'); + }, + + inspect: function() { + return '#'; + }, + + toJSON: function() { + return Object.toJSON(this.toObject()); + }, + + clone: function() { + return new Hash(this); + } + } +})()); + +Hash.prototype.toTemplateReplacements = Hash.prototype.toObject; +Hash.from = $H; +var ObjectRange = Class.create(Enumerable, { + initialize: function(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + }, + + _each: function(iterator) { + var value = this.start; + while (this.include(value)) { + iterator(value); + value = value.succ(); + } + }, + + include: function(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } +}); + +var $R = function(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator) { + this.responders._each(iterator); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); + +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + if (Object.isString(this.options.parameters)) + this.options.parameters = this.options.parameters.toQueryParams(); + } +}); + +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.clone(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + // simulate other verbs over post + params['_method'] = this.method; + this.method = 'post'; + } + + this.parameters = params; + + if (params = Object.toQueryString(params)) { + // when GET, append parameters to URL + if (this.method == 'get') + this.url += (this.url.include('?') ? '&' : '?') + params; + else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) + params += '&_='; + } + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + // user-defined headers + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300); + }, + + getStatus: function() { + try { + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + // avoid memory leak in MSIE: clean up + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name); + } catch (e) { return null } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if(readyState == 4) { + var xml = transport.responseXML; + this.responseXML = xml === undefined ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + json = decodeURIComponent(escape(json)); + try { + return json.evalJSON(this.request.options.sanitizeJSON); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json'))) + return null; + try { + return this.transport.responseText.evalJSON(options.sanitizeJSON); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = options || { }; + var onComplete = options.onComplete; + options.onComplete = (function(response, param) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, param); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + + if (this.success()) { + if (this.onComplete) this.onComplete.bind(this).defer(); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); +function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); +} + +if (Prototype.BrowserFeatures.XPath) { + document._getElementsByXPath = function(expression, parentElement) { + var results = []; + var query = document.evaluate(expression, $(parentElement) || document, + null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + for (var i = 0, length = query.snapshotLength; i < length; i++) + results.push(Element.extend(query.snapshotItem(i))); + return results; + }; +} + +/*--------------------------------------------------------------------------*/ + +if (!window.Node) var Node = { }; + +if (!Node.ELEMENT_NODE) { + // DOM level 2 ECMAScript Language Binding + Object.extend(Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); +} + +(function() { + var element = this.Element; + this.Element = function(tagName, attributes) { + attributes = attributes || { }; + tagName = tagName.toLowerCase(); + var cache = Element.cache; + if (Prototype.Browser.IE && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); + return Element.writeAttribute(cache[tagName].cloneNode(false), attributes); + }; + Object.extend(this.Element, element || { }); +}).call(window); + +Element.cache = { }; + +Element.Methods = { + visible: function(element) { + return $(element).style.display != 'none'; + }, + + toggle: function(element) { + element = $(element); + Element[Element.visible(element) ? 'hide' : 'show'](element); + return element; + }, + + hide: function(element) { + $(element).style.display = 'none'; + return element; + }, + + show: function(element) { + $(element).style.display = ''; + return element; + }, + + remove: function(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + }, + + update: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) return element.update().insert(content); + content = Object.toHTML(content); + element.innerHTML = content.stripScripts(); + content.evalScripts.bind(content).defer(); + return element; + }, + + replace: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + element.parentNode.replaceChild(content, element); + return element; + }, + + insert: function(element, insertions) { + element = $(element); + + if (Object.isString(insertions) || Object.isNumber(insertions) || + Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) + insertions = {bottom:insertions}; + + var content, t, range; + + for (position in insertions) { + content = insertions[position]; + position = position.toLowerCase(); + t = Element._insertionTranslations[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + t.insert(element, content); + continue; + } + + content = Object.toHTML(content); + + range = element.ownerDocument.createRange(); + t.initializeRange(element, range); + t.insert(element, range.createContextualFragment(content.stripScripts())); + + content.evalScripts.bind(content).defer(); + } + + return element; + }, + + wrap: function(element, wrapper, attributes) { + element = $(element); + if (Object.isElement(wrapper)) + $(wrapper).writeAttribute(attributes || { }); + else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes); + else wrapper = new Element('div', wrapper); + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + wrapper.appendChild(element); + return wrapper; + }, + + inspect: function(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + $H({'id': 'id', 'className': 'class'}).each(function(pair) { + var property = pair.first(), attribute = pair.last(); + var value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + }); + return result + '>'; + }, + + recursivelyCollect: function(element, property) { + element = $(element); + var elements = []; + while (element = element[property]) + if (element.nodeType == 1) + elements.push(Element.extend(element)); + return elements; + }, + + ancestors: function(element) { + return $(element).recursivelyCollect('parentNode'); + }, + + descendants: function(element) { + return $A($(element).getElementsByTagName('*')).each(Element.extend); + }, + + firstDescendant: function(element) { + element = $(element).firstChild; + while (element && element.nodeType != 1) element = element.nextSibling; + return $(element); + }, + + immediateDescendants: function(element) { + if (!(element = $(element).firstChild)) return []; + while (element && element.nodeType != 1) element = element.nextSibling; + if (element) return [element].concat($(element).nextSiblings()); + return []; + }, + + previousSiblings: function(element) { + return $(element).recursivelyCollect('previousSibling'); + }, + + nextSiblings: function(element) { + return $(element).recursivelyCollect('nextSibling'); + }, + + siblings: function(element) { + element = $(element); + return element.previousSiblings().reverse().concat(element.nextSiblings()); + }, + + match: function(element, selector) { + if (Object.isString(selector)) + selector = new Selector(selector); + return selector.match($(element)); + }, + + up: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(element.parentNode); + var ancestors = element.ancestors(); + return expression ? Selector.findElement(ancestors, expression, index) : + ancestors[index || 0]; + }, + + down: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return element.firstDescendant(); + var descendants = element.descendants(); + return expression ? Selector.findElement(descendants, expression, index) : + descendants[index || 0]; + }, + + previous: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element)); + var previousSiblings = element.previousSiblings(); + return expression ? Selector.findElement(previousSiblings, expression, index) : + previousSiblings[index || 0]; + }, + + next: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element)); + var nextSiblings = element.nextSiblings(); + return expression ? Selector.findElement(nextSiblings, expression, index) : + nextSiblings[index || 0]; + }, + + select: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element, args); + }, + + adjacent: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element.parentNode, args).without(element); + }, + + identify: function(element) { + element = $(element); + var id = element.readAttribute('id'), self = arguments.callee; + if (id) return id; + do { id = 'anonymous_element_' + self.counter++ } while ($(id)); + element.writeAttribute('id', id); + return id; + }, + + readAttribute: function(element, name) { + element = $(element); + if (Prototype.Browser.IE) { + var t = Element._attributeTranslations.read; + if (t.values[name]) return t.values[name](element, name); + if (t.names[name]) name = t.names[name]; + if (name.include(':')) { + return (!element.attributes || !element.attributes[name]) ? null : + element.attributes[name].value; + } + } + return element.getAttribute(name); + }, + + writeAttribute: function(element, name, value) { + element = $(element); + var attributes = { }, t = Element._attributeTranslations.write; + + if (typeof name == 'object') attributes = name; + else attributes[name] = value === undefined ? true : value; + + for (var attr in attributes) { + var name = t.names[attr] || attr, value = attributes[attr]; + if (t.values[attr]) name = t.values[attr](element, value); + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + return element; + }, + + getHeight: function(element) { + return $(element).getDimensions().height; + }, + + getWidth: function(element) { + return $(element).getDimensions().width; + }, + + classNames: function(element) { + return new Element.ClassNames(element); + }, + + hasClassName: function(element, className) { + if (!(element = $(element))) return; + var elementClassName = element.className; + return (elementClassName.length > 0 && (elementClassName == className || + new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); + }, + + addClassName: function(element, className) { + if (!(element = $(element))) return; + if (!element.hasClassName(className)) + element.className += (element.className ? ' ' : '') + className; + return element; + }, + + removeClassName: function(element, className) { + if (!(element = $(element))) return; + element.className = element.className.replace( + new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip(); + return element; + }, + + toggleClassName: function(element, className) { + if (!(element = $(element))) return; + return element[element.hasClassName(className) ? + 'removeClassName' : 'addClassName'](className); + }, + + // removes whitespace-only text node children + cleanWhitespace: function(element) { + element = $(element); + var node = element.firstChild; + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + }, + + empty: function(element) { + return $(element).innerHTML.blank(); + }, + + descendantOf: function(element, ancestor) { + element = $(element), ancestor = $(ancestor); + + if (element.compareDocumentPosition) + return (element.compareDocumentPosition(ancestor) & 8) === 8; + + if (element.sourceIndex && !Prototype.Browser.Opera) { + var e = element.sourceIndex, a = ancestor.sourceIndex, + nextAncestor = ancestor.nextSibling; + if (!nextAncestor) { + do { ancestor = ancestor.parentNode; } + while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode); + } + if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex); + } + + while (element = element.parentNode) + if (element == ancestor) return true; + return false; + }, + + scrollTo: function(element) { + element = $(element); + var pos = element.cumulativeOffset(); + window.scrollTo(pos[0], pos[1]); + return element; + }, + + getStyle: function(element, style) { + element = $(element); + style = style == 'float' ? 'cssFloat' : style.camelize(); + var value = element.style[style]; + if (!value) { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + if (style == 'opacity') return value ? parseFloat(value) : 1.0; + return value == 'auto' ? null : value; + }, + + getOpacity: function(element) { + return $(element).getStyle('opacity'); + }, + + setStyle: function(element, styles) { + element = $(element); + var elementStyle = element.style, match; + if (Object.isString(styles)) { + element.style.cssText += ';' + styles; + return styles.include('opacity') ? + element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element; + } + for (var property in styles) + if (property == 'opacity') element.setOpacity(styles[property]); + else + elementStyle[(property == 'float' || property == 'cssFloat') ? + (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') : + property] = styles[property]; + + return element; + }, + + setOpacity: function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + return element; + }, + + getDimensions: function(element) { + element = $(element); + var display = $(element).getStyle('display'); + if (display != 'none' && display != null) // Safari bug + return {width: element.offsetWidth, height: element.offsetHeight}; + + // All *Width and *Height properties give 0 on elements with display none, + // so enable the element temporarily + var els = element.style; + var originalVisibility = els.visibility; + var originalPosition = els.position; + var originalDisplay = els.display; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = 'block'; + var originalWidth = element.clientWidth; + var originalHeight = element.clientHeight; + els.display = originalDisplay; + els.position = originalPosition; + els.visibility = originalVisibility; + return {width: originalWidth, height: originalHeight}; + }, + + makePositioned: function(element) { + element = $(element); + var pos = Element.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element._madePositioned = true; + element.style.position = 'relative'; + // Opera returns the offset relative to the positioning context, when an + // element is position relative but top and left have not been defined + if (window.opera) { + element.style.top = 0; + element.style.left = 0; + } + } + return element; + }, + + undoPositioned: function(element) { + element = $(element); + if (element._madePositioned) { + element._madePositioned = undefined; + element.style.position = + element.style.top = + element.style.left = + element.style.bottom = + element.style.right = ''; + } + return element; + }, + + makeClipping: function(element) { + element = $(element); + if (element._overflow) return element; + element._overflow = Element.getStyle(element, 'overflow') || 'auto'; + if (element._overflow !== 'hidden') + element.style.overflow = 'hidden'; + return element; + }, + + undoClipping: function(element) { + element = $(element); + if (!element._overflow) return element; + element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; + element._overflow = null; + return element; + }, + + cumulativeOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + positionedOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (element.tagName == 'BODY') break; + var p = Element.getStyle(element, 'position'); + if (p == 'relative' || p == 'absolute') break; + } + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + absolutize: function(element) { + element = $(element); + if (element.getStyle('position') == 'absolute') return; + // Position.prepare(); // To be done manually by Scripty when it needs it. + + var offsets = element.positionedOffset(); + var top = offsets[1]; + var left = offsets[0]; + var width = element.clientWidth; + var height = element.clientHeight; + + element._originalLeft = left - parseFloat(element.style.left || 0); + element._originalTop = top - parseFloat(element.style.top || 0); + element._originalWidth = element.style.width; + element._originalHeight = element.style.height; + + element.style.position = 'absolute'; + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.width = width + 'px'; + element.style.height = height + 'px'; + return element; + }, + + relativize: function(element) { + element = $(element); + if (element.getStyle('position') == 'relative') return; + // Position.prepare(); // To be done manually by Scripty when it needs it. + + element.style.position = 'relative'; + var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); + var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); + + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.height = element._originalHeight; + element.style.width = element._originalWidth; + return element; + }, + + cumulativeScrollOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + getOffsetParent: function(element) { + if (element.offsetParent) return $(element.offsetParent); + if (element == document.body) return $(element); + + while ((element = element.parentNode) && element != document.body) + if (Element.getStyle(element, 'position') != 'static') + return $(element); + + return $(document.body); + }, + + viewportOffset: function(forElement) { + var valueT = 0, valueL = 0; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + + // Safari fix + if (element.offsetParent == document.body && + Element.getStyle(element, 'position') == 'absolute') break; + + } while (element = element.offsetParent); + + element = forElement; + do { + if (!Prototype.Browser.Opera || element.tagName == 'BODY') { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + + return Element._returnOffset(valueL, valueT); + }, + + clonePosition: function(element, source) { + var options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, arguments[2] || { }); + + // find page position of source + source = $(source); + var p = source.viewportOffset(); + + // find coordinate system to use + element = $(element); + var delta = [0, 0]; + var parent = null; + // delta [0,0] will do fine with position: fixed elements, + // position:absolute needs offsetParent deltas + if (Element.getStyle(element, 'position') == 'absolute') { + parent = element.getOffsetParent(); + delta = parent.viewportOffset(); + } + + // correct by body offsets (fixes Safari) + if (parent == document.body) { + delta[0] -= document.body.offsetLeft; + delta[1] -= document.body.offsetTop; + } + + // set position + if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + if (options.setWidth) element.style.width = source.offsetWidth + 'px'; + if (options.setHeight) element.style.height = source.offsetHeight + 'px'; + return element; + } +}; + +Element.Methods.identify.counter = 1; + +Object.extend(Element.Methods, { + getElementsBySelector: Element.Methods.select, + childElements: Element.Methods.immediateDescendants +}); + +Element._attributeTranslations = { + write: { + names: { + className: 'class', + htmlFor: 'for' + }, + values: { } + } +}; + +if (!document.createRange || Prototype.Browser.Opera) { + Element.Methods.insert = function(element, insertions) { + element = $(element); + + if (Object.isString(insertions) || Object.isNumber(insertions) || + Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) + insertions = { bottom: insertions }; + + var t = Element._insertionTranslations, content, position, pos, tagName; + + for (position in insertions) { + content = insertions[position]; + position = position.toLowerCase(); + pos = t[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + pos.insert(element, content); + continue; + } + + content = Object.toHTML(content); + tagName = ((position == 'before' || position == 'after') + ? element.parentNode : element).tagName.toUpperCase(); + + if (t.tags[tagName]) { + var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + if (position == 'top' || position == 'after') fragments.reverse(); + fragments.each(pos.insert.curry(element)); + } + else element.insertAdjacentHTML(pos.adjacency, content.stripScripts()); + + content.evalScripts.bind(content).defer(); + } + + return element; + }; +} + +if (Prototype.Browser.Opera) { + Element.Methods._getStyle = Element.Methods.getStyle; + Element.Methods.getStyle = function(element, style) { + switch(style) { + case 'left': + case 'top': + case 'right': + case 'bottom': + if (Element._getStyle(element, 'position') == 'static') return null; + default: return Element._getStyle(element, style); + } + }; + Element.Methods._readAttribute = Element.Methods.readAttribute; + Element.Methods.readAttribute = function(element, attribute) { + if (attribute == 'title') return element.title; + return Element._readAttribute(element, attribute); + }; +} + +else if (Prototype.Browser.IE) { + $w('positionedOffset getOffsetParent viewportOffset').each(function(method) { + Element.Methods[method] = Element.Methods[method].wrap( + function(proceed, element) { + element = $(element); + var position = element.getStyle('position'); + if (position != 'static') return proceed(element); + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + }); + + Element.Methods.getStyle = function(element, style) { + element = $(element); + style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); + var value = element.style[style]; + if (!value && element.currentStyle) value = element.currentStyle[style]; + + if (style == 'opacity') { + if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) + if (value[1]) return parseFloat(value[1]) / 100; + return 1.0; + } + + if (value == 'auto') { + if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) + return element['offset' + style.capitalize()] + 'px'; + return null; + } + return value; + }; + + Element.Methods.setOpacity = function(element, value) { + function stripAlpha(filter){ + return filter.replace(/alpha\([^\)]*\)/gi,''); + } + element = $(element); + var currentStyle = element.currentStyle; + if ((currentStyle && !currentStyle.hasLayout) || + (!currentStyle && element.style.zoom == 'normal')) + element.style.zoom = 1; + + var filter = element.getStyle('filter'), style = element.style; + if (value == 1 || value === '') { + (filter = stripAlpha(filter)) ? + style.filter = filter : style.removeAttribute('filter'); + return element; + } else if (value < 0.00001) value = 0; + style.filter = stripAlpha(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + return element; + }; + + Element._attributeTranslations = { + read: { + names: { + 'class': 'className', + 'for': 'htmlFor' + }, + values: { + _getAttr: function(element, attribute) { + return element.getAttribute(attribute, 2); + }, + _getAttrNode: function(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ""; + }, + _getEv: function(element, attribute) { + var attribute = element.getAttribute(attribute); + return attribute ? attribute.toString().slice(23, -2) : null; + }, + _flag: function(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + }, + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + } + }; + + Element._attributeTranslations.write = { + names: Object.clone(Element._attributeTranslations.read.names), + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + Element._attributeTranslations.has = {}; + + $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' + + 'encType maxLength readOnly longDesc').each(function(attr) { + Element._attributeTranslations.write.names[attr.toLowerCase()] = attr; + Element._attributeTranslations.has[attr.toLowerCase()] = attr; + }); + + (function(v) { + Object.extend(v, { + href: v._getAttr, + src: v._getAttr, + type: v._getAttr, + action: v._getAttrNode, + disabled: v._flag, + checked: v._flag, + readonly: v._flag, + multiple: v._flag, + onload: v._getEv, + onunload: v._getEv, + onclick: v._getEv, + ondblclick: v._getEv, + onmousedown: v._getEv, + onmouseup: v._getEv, + onmouseover: v._getEv, + onmousemove: v._getEv, + onmouseout: v._getEv, + onfocus: v._getEv, + onblur: v._getEv, + onkeypress: v._getEv, + onkeydown: v._getEv, + onkeyup: v._getEv, + onsubmit: v._getEv, + onreset: v._getEv, + onselect: v._getEv, + onchange: v._getEv + }); + })(Element._attributeTranslations.read.values); +} + +else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1) ? 0.999999 : + (value === '') ? '' : (value < 0.00001) ? 0 : value; + return element; + }; +} + +else if (Prototype.Browser.WebKit) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + + if (value == 1) + if(element.tagName == 'IMG' && element.width) { + element.width++; element.width--; + } else try { + var n = document.createTextNode(' '); + element.appendChild(n); + element.removeChild(n); + } catch (e) { } + + return element; + }; + + // Safari returns margins on body which is incorrect if the child is absolutely + // positioned. For performance reasons, redefine Position.cumulativeOffset for + // KHTML/WebKit only. + Element.Methods.cumulativeOffset = function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) + if (Element.getStyle(element, 'position') == 'absolute') break; + + element = element.offsetParent; + } while (element); + + return Element._returnOffset(valueL, valueT); + }; +} + +if (Prototype.Browser.IE || Prototype.Browser.Opera) { + // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements + Element.Methods.update = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) return element.update().insert(content); + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName in Element._insertionTranslations.tags) { + $A(element.childNodes).each(function(node) { element.removeChild(node) }); + Element._getContentFromAnonymousElement(tagName, content.stripScripts()) + .each(function(node) { element.appendChild(node) }); + } + else element.innerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +if (document.createElement('div').outerHTML) { + Element.Methods.replace = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (Element._insertionTranslations.tags[tagName]) { + var nextSibling = element.next(); + var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + parent.removeChild(element); + if (nextSibling) + fragments.each(function(node) { parent.insertBefore(node, nextSibling) }); + else + fragments.each(function(node) { parent.appendChild(node) }); + } + else element.outerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +Element._returnOffset = function(l, t) { + var result = [l, t]; + result.left = l; + result.top = t; + return result; +}; + +Element._getContentFromAnonymousElement = function(tagName, html) { + var div = new Element('div'), t = Element._insertionTranslations.tags[tagName]; + div.innerHTML = t[0] + html + t[1]; + t[2].times(function() { div = div.firstChild }); + return $A(div.childNodes); +}; + +Element._insertionTranslations = { + before: { + adjacency: 'beforeBegin', + insert: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + initializeRange: function(element, range) { + range.setStartBefore(element); + } + }, + top: { + adjacency: 'afterBegin', + insert: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + initializeRange: function(element, range) { + range.selectNodeContents(element); + range.collapse(true); + } + }, + bottom: { + adjacency: 'beforeEnd', + insert: function(element, node) { + element.appendChild(node); + } + }, + after: { + adjacency: 'afterEnd', + insert: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + initializeRange: function(element, range) { + range.setStartAfter(element); + } + }, + tags: { + TABLE: ['', '
    ', 1], + TBODY: ['', '
    ', 2], + TR: ['', '
    ', 3], + TD: ['
    ', '
    ', 4], + SELECT: ['', 1] + } +}; + +(function() { + this.bottom.initializeRange = this.top.initializeRange; + Object.extend(this.tags, { + THEAD: this.tags.TBODY, + TFOOT: this.tags.TBODY, + TH: this.tags.TD + }); +}).call(Element._insertionTranslations); + +Element.Methods.Simulated = { + hasAttribute: function(element, attribute) { + attribute = Element._attributeTranslations.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return node && node.specified; + } +}; + +Element.Methods.ByTag = { }; + +Object.extend(Element, Element.Methods); + +if (!Prototype.BrowserFeatures.ElementExtensions && + document.createElement('div').__proto__) { + window.HTMLElement = { }; + window.HTMLElement.prototype = document.createElement('div').__proto__; + Prototype.BrowserFeatures.ElementExtensions = true; +} + +Element.extend = (function() { + if (Prototype.BrowserFeatures.SpecificElementExtensions) + return Prototype.K; + + var Methods = { }, ByTag = Element.Methods.ByTag; + + var extend = Object.extend(function(element) { + if (!element || element._extendedByPrototype || + element.nodeType != 1 || element == window) return element; + + var methods = Object.clone(Methods), + tagName = element.tagName, property, value; + + // extend methods for specific tags + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + for (property in methods) { + value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + + element._extendedByPrototype = Prototype.emptyFunction; + return element; + + }, { + refresh: function() { + // extend methods for all tags (Safari doesn't need this) + if (!Prototype.BrowserFeatures.ElementExtensions) { + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + } + } + }); + + extend.refresh(); + return extend; +})(); + +Element.hasAttribute = function(element, attribute) { + if (element.hasAttribute) return element.hasAttribute(attribute); + return Element.Methods.Simulated.hasAttribute(element, attribute); +}; + +Element.addMethods = function(methods) { + var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; + + if (!methods) { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods) + }); + } + + if (arguments.length == 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) Object.extend(Element.Methods, methods || { }); + else { + if (Object.isArray(tagName)) tagName.each(extend); + else extend(tagName); + } + + function extend(tagName) { + tagName = tagName.toUpperCase(); + if (!Element.Methods.ByTag[tagName]) + Element.Methods.ByTag[tagName] = { }; + Object.extend(Element.Methods.ByTag[tagName], methods); + } + + function copy(methods, destination, onlyIfAbsent) { + onlyIfAbsent = onlyIfAbsent || false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + window[klass] = { }; + window[klass].prototype = document.createElement(tagName).__proto__; + return window[klass]; + } + + if (F.ElementExtensions) { + copy(Element.Methods, HTMLElement.prototype); + copy(Element.Methods.Simulated, HTMLElement.prototype, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + copy(T[tag], klass.prototype); + } + } + + Object.extend(Element, Element.Methods); + delete Element.ByTag; + + if (Element.extend.refresh) Element.extend.refresh(); + Element.cache = { }; +}; + +document.viewport = { + getDimensions: function() { + var dimensions = { }; + $w('width height').each(function(d) { + var D = d.capitalize(); + dimensions[d] = self['inner' + D] || + (document.documentElement['client' + D] || document.body['client' + D]); + }); + return dimensions; + }, + + getWidth: function() { + return this.getDimensions().width; + }, + + getHeight: function() { + return this.getDimensions().height; + }, + + getScrollOffsets: function() { + return Element._returnOffset( + window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, + window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); + } +}; +/* Portions of the Selector class are derived from Jack Slocum’s DomQuery, + * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style + * license. Please see http://www.yui-ext.com/ for more information. */ + +var Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + this.compileMatcher(); + }, + + compileMatcher: function() { + // Selectors with namespaced attributes can't use the XPath version + if (Prototype.BrowserFeatures.XPath && !(/(\[[\w-]*?:|:checked)/).test(this.expression)) + return this.compileXPathMatcher(); + + var e = this.expression, ps = Selector.patterns, h = Selector.handlers, + c = Selector.criteria, le, p, m; + + if (Selector._cache[e]) { + this.matcher = Selector._cache[e]; + return; + } + + this.matcher = ["this.matcher = function(root) {", + "var r = root, h = Selector.handlers, c = false, n;"]; + + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + p = ps[i]; + if (m = e.match(p)) { + this.matcher.push(Object.isFunction(c[i]) ? c[i](m) : + new Template(c[i]).evaluate(m)); + e = e.replace(m[0], ''); + break; + } + } + } + + this.matcher.push("return h.unique(n);\n}"); + eval(this.matcher.join('\n')); + Selector._cache[this.expression] = this.matcher; + }, + + compileXPathMatcher: function() { + var e = this.expression, ps = Selector.patterns, + x = Selector.xpath, le, m; + + if (Selector._cache[e]) { + this.xpath = Selector._cache[e]; return; + } + + this.matcher = ['.//*']; + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + if (m = e.match(ps[i])) { + this.matcher.push(Object.isFunction(x[i]) ? x[i](m) : + new Template(x[i]).evaluate(m)); + e = e.replace(m[0], ''); + break; + } + } + } + + this.xpath = this.matcher.join(''); + Selector._cache[this.expression] = this.xpath; + }, + + findElements: function(root) { + root = root || document; + if (this.xpath) return document._getElementsByXPath(this.xpath, root); + return this.matcher(root); + }, + + match: function(element) { + this.tokens = []; + + var e = this.expression, ps = Selector.patterns, as = Selector.assertions; + var le, p, m; + + while (e && le !== e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + p = ps[i]; + if (m = e.match(p)) { + // use the Selector.assertions methods unless the selector + // is too complex. + if (as[i]) { + this.tokens.push([i, Object.clone(m)]); + e = e.replace(m[0], ''); + } else { + // reluctantly do a document-wide search + // and look for a match in the array + return this.findElements(document).include(element); + } + } + } + } + + var match = true, name, matches; + for (var i = 0, token; token = this.tokens[i]; i++) { + name = token[0], matches = token[1]; + if (!Selector.assertions[name](element, matches)) { + match = false; break; + } + } + + return match; + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } +}); + +Object.extend(Selector, { + _cache: { }, + + xpath: { + descendant: "//*", + child: "/*", + adjacent: "/following-sibling::*[1]", + laterSibling: '/following-sibling::*', + tagName: function(m) { + if (m[1] == '*') return ''; + return "[local-name()='" + m[1].toLowerCase() + + "' or local-name()='" + m[1].toUpperCase() + "']"; + }, + className: "[contains(concat(' ', @class, ' '), ' #{1} ')]", + id: "[@id='#{1}']", + attrPresence: "[@#{1}]", + attr: function(m) { + m[3] = m[5] || m[6]; + return new Template(Selector.xpath.operators[m[2]]).evaluate(m); + }, + pseudo: function(m) { + var h = Selector.xpath.pseudos[m[1]]; + if (!h) return ''; + if (Object.isFunction(h)) return h(m); + return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m); + }, + operators: { + '=': "[@#{1}='#{3}']", + '!=': "[@#{1}!='#{3}']", + '^=': "[starts-with(@#{1}, '#{3}')]", + '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']", + '*=': "[contains(@#{1}, '#{3}')]", + '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]", + '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]" + }, + pseudos: { + 'first-child': '[not(preceding-sibling::*)]', + 'last-child': '[not(following-sibling::*)]', + 'only-child': '[not(preceding-sibling::* or following-sibling::*)]', + 'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]", + 'checked': "[@checked]", + 'disabled': "[@disabled]", + 'enabled': "[not(@disabled)]", + 'not': function(m) { + var e = m[6], p = Selector.patterns, + x = Selector.xpath, le, m, v; + + var exclusion = []; + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in p) { + if (m = e.match(p[i])) { + v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m); + exclusion.push("(" + v.substring(1, v.length - 1) + ")"); + e = e.replace(m[0], ''); + break; + } + } + } + return "[not(" + exclusion.join(" and ") + ")]"; + }, + 'nth-child': function(m) { + return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m); + }, + 'nth-last-child': function(m) { + return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m); + }, + 'nth-of-type': function(m) { + return Selector.xpath.pseudos.nth("position() ", m); + }, + 'nth-last-of-type': function(m) { + return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m); + }, + 'first-of-type': function(m) { + m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m); + }, + 'last-of-type': function(m) { + m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m); + }, + 'only-of-type': function(m) { + var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m); + }, + nth: function(fragment, m) { + var mm, formula = m[6], predicate; + if (formula == 'even') formula = '2n+0'; + if (formula == 'odd') formula = '2n+1'; + if (mm = formula.match(/^(\d+)$/)) // digit only + return '[' + fragment + "= " + mm[1] + ']'; + if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b + if (mm[1] == "-") mm[1] = -1; + var a = mm[1] ? Number(mm[1]) : 1; + var b = mm[2] ? Number(mm[2]) : 0; + predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " + + "((#{fragment} - #{b}) div #{a} >= 0)]"; + return new Template(predicate).evaluate({ + fragment: fragment, a: a, b: b }); + } + } + } + }, + + criteria: { + tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;', + className: 'n = h.className(n, r, "#{1}", c); c = false;', + id: 'n = h.id(n, r, "#{1}", c); c = false;', + attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;', + attr: function(m) { + m[3] = (m[5] || m[6]); + return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m); + }, + pseudo: function(m) { + if (m[6]) m[6] = m[6].replace(/"/g, '\\"'); + return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m); + }, + descendant: 'c = "descendant";', + child: 'c = "child";', + adjacent: 'c = "adjacent";', + laterSibling: 'c = "laterSibling";' + }, + + patterns: { + // combinators must be listed first + // (and descendant needs to be last combinator) + laterSibling: /^\s*~\s*/, + child: /^\s*>\s*/, + adjacent: /^\s*\+\s*/, + descendant: /^\s/, + + // selectors follow + tagName: /^\s*(\*|[\w\-]+)(\b|$)?/, + id: /^#([\w\-\*]+)(\b|$)/, + className: /^\.([\w\-\*]+)(\b|$)/, + pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s)|(?=:))/, + attrPresence: /^\[([\w]+)\]/, + attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ + }, + + // for Selector.match and Element#match + assertions: { + tagName: function(element, matches) { + return matches[1].toUpperCase() == element.tagName.toUpperCase(); + }, + + className: function(element, matches) { + return Element.hasClassName(element, matches[1]); + }, + + id: function(element, matches) { + return element.id === matches[1]; + }, + + attrPresence: function(element, matches) { + return Element.hasAttribute(element, matches[1]); + }, + + attr: function(element, matches) { + var nodeValue = Element.readAttribute(element, matches[1]); + return Selector.operators[matches[2]](nodeValue, matches[3]); + } + }, + + handlers: { + // UTILITY FUNCTIONS + // joins two collections + concat: function(a, b) { + for (var i = 0, node; node = b[i]; i++) + a.push(node); + return a; + }, + + // marks an array of nodes for counting + mark: function(nodes) { + for (var i = 0, node; node = nodes[i]; i++) + node._counted = true; + return nodes; + }, + + unmark: function(nodes) { + for (var i = 0, node; node = nodes[i]; i++) + node._counted = undefined; + return nodes; + }, + + // mark each child node with its position (for nth calls) + // "ofType" flag indicates whether we're indexing for nth-of-type + // rather than nth-child + index: function(parentNode, reverse, ofType) { + parentNode._counted = true; + if (reverse) { + for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) { + var node = nodes[i]; + if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++; + } + } else { + for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++) + if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++; + } + }, + + // filters out duplicates and extends all nodes + unique: function(nodes) { + if (nodes.length == 0) return nodes; + var results = [], n; + for (var i = 0, l = nodes.length; i < l; i++) + if (!(n = nodes[i])._counted) { + n._counted = true; + results.push(Element.extend(n)); + } + return Selector.handlers.unmark(results); + }, + + // COMBINATOR FUNCTIONS + descendant: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + h.concat(results, node.getElementsByTagName('*')); + return results; + }, + + child: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) { + for (var j = 0, children = [], child; child = node.childNodes[j]; j++) + if (child.nodeType == 1 && child.tagName != '!') results.push(child); + } + return results; + }, + + adjacent: function(nodes) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + var next = this.nextElementSibling(node); + if (next) results.push(next); + } + return results; + }, + + laterSibling: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + h.concat(results, Element.nextSiblings(node)); + return results; + }, + + nextElementSibling: function(node) { + while (node = node.nextSibling) + if (node.nodeType == 1) return node; + return null; + }, + + previousElementSibling: function(node) { + while (node = node.previousSibling) + if (node.nodeType == 1) return node; + return null; + }, + + // TOKEN FUNCTIONS + tagName: function(nodes, root, tagName, combinator) { + tagName = tagName.toUpperCase(); + var results = [], h = Selector.handlers; + if (nodes) { + if (combinator) { + // fastlane for ordinary descendant combinators + if (combinator == "descendant") { + for (var i = 0, node; node = nodes[i]; i++) + h.concat(results, node.getElementsByTagName(tagName)); + return results; + } else nodes = this[combinator](nodes); + if (tagName == "*") return nodes; + } + for (var i = 0, node; node = nodes[i]; i++) + if (node.tagName.toUpperCase() == tagName) results.push(node); + return results; + } else return root.getElementsByTagName(tagName); + }, + + id: function(nodes, root, id, combinator) { + var targetNode = $(id), h = Selector.handlers; + if (!targetNode) return []; + if (!nodes && root == document) return [targetNode]; + if (nodes) { + if (combinator) { + if (combinator == 'child') { + for (var i = 0, node; node = nodes[i]; i++) + if (targetNode.parentNode == node) return [targetNode]; + } else if (combinator == 'descendant') { + for (var i = 0, node; node = nodes[i]; i++) + if (Element.descendantOf(targetNode, node)) return [targetNode]; + } else if (combinator == 'adjacent') { + for (var i = 0, node; node = nodes[i]; i++) + if (Selector.handlers.previousElementSibling(targetNode) == node) + return [targetNode]; + } else nodes = h[combinator](nodes); + } + for (var i = 0, node; node = nodes[i]; i++) + if (node == targetNode) return [targetNode]; + return []; + } + return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : []; + }, + + className: function(nodes, root, className, combinator) { + if (nodes && combinator) nodes = this[combinator](nodes); + return Selector.handlers.byClassName(nodes, root, className); + }, + + byClassName: function(nodes, root, className) { + if (!nodes) nodes = Selector.handlers.descendant([root]); + var needle = ' ' + className + ' '; + for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) { + nodeClassName = node.className; + if (nodeClassName.length == 0) continue; + if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle)) + results.push(node); + } + return results; + }, + + attrPresence: function(nodes, root, attr) { + if (!nodes) nodes = root.getElementsByTagName("*"); + var results = []; + for (var i = 0, node; node = nodes[i]; i++) + if (Element.hasAttribute(node, attr)) results.push(node); + return results; + }, + + attr: function(nodes, root, attr, value, operator) { + if (!nodes) nodes = root.getElementsByTagName("*"); + var handler = Selector.operators[operator], results = []; + for (var i = 0, node; node = nodes[i]; i++) { + var nodeValue = Element.readAttribute(node, attr); + if (nodeValue === null) continue; + if (handler(nodeValue, value)) results.push(node); + } + return results; + }, + + pseudo: function(nodes, name, value, root, combinator) { + if (nodes && combinator) nodes = this[combinator](nodes); + if (!nodes) nodes = root.getElementsByTagName("*"); + return Selector.pseudos[name](nodes, value, root); + } + }, + + pseudos: { + 'first-child': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + if (Selector.handlers.previousElementSibling(node)) continue; + results.push(node); + } + return results; + }, + 'last-child': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + if (Selector.handlers.nextElementSibling(node)) continue; + results.push(node); + } + return results; + }, + 'only-child': function(nodes, value, root) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!h.previousElementSibling(node) && !h.nextElementSibling(node)) + results.push(node); + return results; + }, + 'nth-child': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root); + }, + 'nth-last-child': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, true); + }, + 'nth-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, false, true); + }, + 'nth-last-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, true, true); + }, + 'first-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, "1", root, false, true); + }, + 'last-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, "1", root, true, true); + }, + 'only-of-type': function(nodes, formula, root) { + var p = Selector.pseudos; + return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root); + }, + + // handles the an+b logic + getIndices: function(a, b, total) { + if (a == 0) return b > 0 ? [b] : []; + return $R(1, total).inject([], function(memo, i) { + if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i); + return memo; + }); + }, + + // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type + nth: function(nodes, formula, root, reverse, ofType) { + if (nodes.length == 0) return []; + if (formula == 'even') formula = '2n+0'; + if (formula == 'odd') formula = '2n+1'; + var h = Selector.handlers, results = [], indexed = [], m; + h.mark(nodes); + for (var i = 0, node; node = nodes[i]; i++) { + if (!node.parentNode._counted) { + h.index(node.parentNode, reverse, ofType); + indexed.push(node.parentNode); + } + } + if (formula.match(/^\d+$/)) { // just a number + formula = Number(formula); + for (var i = 0, node; node = nodes[i]; i++) + if (node.nodeIndex == formula) results.push(node); + } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b + if (m[1] == "-") m[1] = -1; + var a = m[1] ? Number(m[1]) : 1; + var b = m[2] ? Number(m[2]) : 0; + var indices = Selector.pseudos.getIndices(a, b, nodes.length); + for (var i = 0, node, l = indices.length; node = nodes[i]; i++) { + for (var j = 0; j < l; j++) + if (node.nodeIndex == indices[j]) results.push(node); + } + } + h.unmark(nodes); + h.unmark(indexed); + return results; + }, + + 'empty': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + // IE treats comments as element nodes + if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue; + results.push(node); + } + return results; + }, + + 'not': function(nodes, selector, root) { + var h = Selector.handlers, selectorType, m; + var exclusions = new Selector(selector).findElements(root); + h.mark(exclusions); + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!node._counted) results.push(node); + h.unmark(exclusions); + return results; + }, + + 'enabled': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!node.disabled) results.push(node); + return results; + }, + + 'disabled': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (node.disabled) results.push(node); + return results; + }, + + 'checked': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (node.checked) results.push(node); + return results; + } + }, + + operators: { + '=': function(nv, v) { return nv == v; }, + '!=': function(nv, v) { return nv != v; }, + '^=': function(nv, v) { return nv.startsWith(v); }, + '$=': function(nv, v) { return nv.endsWith(v); }, + '*=': function(nv, v) { return nv.include(v); }, + '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); }, + '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); } + }, + + matchElements: function(elements, expression) { + var matches = new Selector(expression).findElements(), h = Selector.handlers; + h.mark(matches); + for (var i = 0, results = [], element; element = elements[i]; i++) + if (element._counted) results.push(element); + h.unmark(matches); + return results; + }, + + findElement: function(elements, expression, index) { + if (Object.isNumber(expression)) { + index = expression; expression = false; + } + return Selector.matchElements(elements, expression || '*')[index || 0]; + }, + + findChildElements: function(element, expressions) { + var exprs = expressions.join(','), expressions = []; + exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) { + expressions.push(m[1].strip()); + }); + var results = [], h = Selector.handlers; + for (var i = 0, l = expressions.length, selector; i < l; i++) { + selector = new Selector(expressions[i].strip()); + h.concat(results, selector.findElements(element)); + } + return (l > 1) ? h.unique(results) : results; + } +}); + +function $$() { + return Selector.findChildElements(document, $A(arguments)); +} +var Form = { + reset: function(form) { + $(form).reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (options.hash === undefined) options.hash = true; + var key, value, submitted = false, submit = options.submit; + + var data = elements.inject({ }, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + if (key in result) { + // a key is already present; construct an array of values + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key].push(value); + } + else result[key] = value; + } + } + return result; + }); + + return options.hash ? data : Object.toQueryString(data); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + getElements: function(form) { + return $A($(form).getElementsByTagName('*')).inject([], + function(elements, child) { + if (Form.Element.Serializers[child.tagName.toLowerCase()]) + elements.push(Element.extend(child)); + return elements; + } + ); + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + form.findFirstElement().activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !['button', 'reset', 'submit'].include(element.type))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.blur(); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = { + input: function(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return Form.Element.Serializers.inputSelector(element, value); + default: + return Form.Element.Serializers.textarea(element, value); + } + }, + + inputSelector: function(element, value) { + if (value === undefined) return element.checked ? element.value : null; + else element.checked = !!value; + }, + + textarea: function(element, value) { + if (value === undefined) return element.value; + else element.value = value; + }, + + select: function(element, index) { + if (index === undefined) + return this[element.type == 'select-one' ? + 'selectOne' : 'selectMany'](element); + else { + var opt, value, single = !Object.isArray(index); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + value = this.optionValue(opt); + if (single) { + if (value == index) { + opt.selected = true; + return; + } + } + else opt.selected = index.include(value); + } + } + }, + + selectOne: function(element) { + var index = element.selectedIndex; + return index >= 0 ? this.optionValue(element.options[index]) : null; + }, + + selectMany: function(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(this.optionValue(opt)); + } + return values; + }, + + optionValue: function(opt) { + // extend element because hasAttribute may not be native + return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; + } +}; + +/*--------------------------------------------------------------------------*/ + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +if (!window.Event) var Event = { }; + +Object.extend(Event, { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45, + + cache: { }, + + relatedTarget: function(event) { + var element; + switch(event.type) { + case 'mouseover': element = event.fromElement; break; + case 'mouseout': element = event.toElement; break; + default: return null; + } + return Element.extend(element); + } +}); + +Event.Methods = (function() { + var isButton; + + if (Prototype.Browser.IE) { + var buttonMap = { 0: 1, 1: 4, 2: 2 }; + isButton = function(event, code) { + return event.button == buttonMap[code]; + }; + + } else if (Prototype.Browser.WebKit) { + isButton = function(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 1 && event.metaKey; + default: return false; + } + }; + + } else { + isButton = function(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + }; + } + + return { + isLeftClick: function(event) { return isButton(event, 0) }, + isMiddleClick: function(event) { return isButton(event, 1) }, + isRightClick: function(event) { return isButton(event, 2) }, + + element: function(event) { + var node = Event.extend(event).target; + return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node); + }, + + findElement: function(event, expression) { + var element = Event.element(event); + return element.match(expression) ? element : element.up(expression); + }, + + pointer: function(event) { + return { + x: event.pageX || (event.clientX + + (document.documentElement.scrollLeft || document.body.scrollLeft)), + y: event.pageY || (event.clientY + + (document.documentElement.scrollTop || document.body.scrollTop)) + }; + }, + + pointerX: function(event) { return Event.pointer(event).x }, + pointerY: function(event) { return Event.pointer(event).y }, + + stop: function(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + event.stopped = true; + } + }; +})(); + +Event.extend = (function() { + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (Prototype.Browser.IE) { + Object.extend(methods, { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return "[object Event]" } + }); + + return function(event) { + if (!event) return false; + if (event._extendedByPrototype) return event; + + event._extendedByPrototype = Prototype.emptyFunction; + var pointer = Event.pointer(event); + Object.extend(event, { + target: event.srcElement, + relatedTarget: Event.relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + return Object.extend(event, methods); + }; + + } else { + Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__; + Object.extend(Event.prototype, methods); + return Prototype.K; + } +})(); + +Object.extend(Event, (function() { + var cache = Event.cache; + + function getEventID(element) { + if (element._eventID) return element._eventID; + arguments.callee.id = arguments.callee.id || 1; + return element._eventID = ++arguments.callee.id; + } + + function getDOMEventName(eventName) { + if (eventName && eventName.include(':')) return "dataavailable"; + return eventName; + } + + function getCacheForID(id) { + return cache[id] = cache[id] || { }; + } + + function getWrappersForEventName(id, eventName) { + var c = getCacheForID(id); + return c[eventName] = c[eventName] || []; + } + + function createWrapper(element, eventName, handler) { + var id = getEventID(element); + var c = getWrappersForEventName(id, eventName); + if (c.pluck("handler").include(handler)) return false; + + var wrapper = function(event) { + if (!Event || !Event.extend || + (event.eventName && event.eventName != eventName)) + return false; + + Event.extend(event); + handler.call(element, event) + }; + + wrapper.handler = handler; + c.push(wrapper); + return wrapper; + } + + function findWrapper(id, eventName, handler) { + var c = getWrappersForEventName(id, eventName); + return c.find(function(wrapper) { return wrapper.handler == handler }); + } + + function destroyWrapper(id, eventName, handler) { + var c = getCacheForID(id); + if (!c[eventName]) return false; + c[eventName] = c[eventName].without(findWrapper(id, eventName, handler)); + } + + function destroyCache() { + for (var id in cache) + for (var eventName in cache[id]) + cache[id][eventName] = null; + } + + if (window.attachEvent) { + window.attachEvent("onunload", destroyCache); + } + + return { + observe: function(element, eventName, handler) { + element = $(element); + var name = getDOMEventName(eventName); + + var wrapper = createWrapper(element, eventName, handler); + if (!wrapper) return element; + + if (element.addEventListener) { + element.addEventListener(name, wrapper, false); + } else { + element.attachEvent("on" + name, wrapper); + } + + return element; + }, + + stopObserving: function(element, eventName, handler) { + element = $(element); + var id = getEventID(element), name = getDOMEventName(eventName); + + if (!handler && eventName) { + getWrappersForEventName(id, eventName).each(function(wrapper) { + element.stopObserving(eventName, wrapper.handler); + }); + return element; + + } else if (!eventName) { + Object.keys(getCacheForID(id)).each(function(eventName) { + element.stopObserving(eventName); + }); + return element; + } + + var wrapper = findWrapper(id, eventName, handler); + if (!wrapper) return element; + + if (element.removeEventListener) { + element.removeEventListener(name, wrapper, false); + } else { + element.detachEvent("on" + name, wrapper); + } + + destroyWrapper(id, eventName, handler); + + return element; + }, + + fire: function(element, eventName, memo) { + element = $(element); + if (element == document && document.createEvent && !element.dispatchEvent) + element = document.documentElement; + + if (document.createEvent) { + var event = document.createEvent("HTMLEvents"); + event.initEvent("dataavailable", true, true); + } else { + var event = document.createEventObject(); + event.eventType = "ondataavailable"; + } + + event.eventName = eventName; + event.memo = memo || { }; + + if (document.createEvent) { + element.dispatchEvent(event); + } else { + element.fireEvent(event.eventType, event); + } + + return event; + } + }; +})()); + +Object.extend(Event, Event.Methods); + +Element.addMethods({ + fire: Event.fire, + observe: Event.observe, + stopObserving: Event.stopObserving +}); + +Object.extend(document, { + fire: Element.Methods.fire.methodize(), + observe: Element.Methods.observe.methodize(), + stopObserving: Element.Methods.stopObserving.methodize() +}); + +(function() { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards and John Resig. */ + + var timer, fired = false; + + function fireContentLoadedEvent() { + if (fired) return; + if (timer) window.clearInterval(timer); + document.fire("dom:loaded"); + fired = true; + } + + if (document.addEventListener) { + if (Prototype.Browser.WebKit) { + timer = window.setInterval(function() { + if (/loaded|complete/.test(document.readyState)) + fireContentLoadedEvent(); + }, 0); + + Event.observe(window, "load", fireContentLoadedEvent); + + } else { + document.addEventListener("DOMContentLoaded", + fireContentLoadedEvent, false); + } + + } else { + document.write(" + + + + + + + + + + + + + + + + + +

    piwik.js: Unit Tests

    +

    +
    +

    + + + + Matomo + Matomo2 + + +
      + + + + + + + +
      + +
      + + + diff --git a/tests/javascript/jash/Jash.css b/tests/javascript/jash/Jash.css new file mode 100644 index 0000000000000000000000000000000000000000..4bb5a50c0b2e519e862acd46eba7655efb8f9be3 --- /dev/null +++ b/tests/javascript/jash/Jash.css @@ -0,0 +1,148 @@ +/** +* +* Jash - JavaScript Shell +* Copyright: 2007, Billy Reisinger +* Documentation: http://www.billyreisinger.com/jash/ +* License: GNU General Public License - http://www.gnu.org/licenses/gpl.html +* +* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +**/ +#JashParent { + width: 581px; + height: 450px; + border: 1px solid gray; + color: black; + z-index: 10000; + overflow: hidden; + background: #ccc; + opacity: 0.90; + filter: alpha(opacity=90); + position: absolute; + left: 25%; + color: black; + font-family: monospace; +} +#JashParent a, #JashParent a:visited, #JashParent a:active, #JashParent a:hover { + text-decoration: none; + color: black; +} +.transparentMode { + opacity: 0.20 !important; + filter: alpha(opacity=20) !important; +} +#JashDragBar { + BACKGROUND: gray; + CURSOR: move; + COLOR: white; + font-family: monospace; + font-weight: bold; + text-indent: 4px; + font-size: 14px; + HEIGHT: 25px; + TEXT-ALIGN: left; + overflow: hidden; + border: 1px outset white; +} +.JashXButton { + border: 1px solid white; + color: white !important; + position: absolute; + background: #bbb; + width: 20px; + text-align: center; + display: block; + right: 3px; _right: 1px; + top: 4px; _top: 1px; + font-family: Arial sans-serif; + font-size: 18px; + cursor: pointer; +} +a.JashXButton:hover { + background: #ddd; +} +#JashTextareaWrap { + width: 100%; + _height: 420px; +} +html>body #JashTextareaWrap { + height: 100%; +} +#JashOutput { + border: 2px inset white; + FONT-SIZE: 10px; + font-family: "Lucida Console", monaco, monospace; + BACKGROUND: black; + width: 99%; + COLOR: lightgreen; + PADDING: 2px; + height: 60%; + height: expression(parseInt(this.parentNode.parentNode.offsetHeight * (3/5)) + 'px'); + +} +#JashInput { + padding: 2px; + WIDTH: 99%; + border: 2px inset white; + HEIGHT: 25%; + font-family: monospace; + font-size: 11px; + height: expression(parseInt(this.parentNode.parentNode.offsetHeight * (3/13)) + 'px'); +} +#JashParent .cssEntry { + background: lightgreen; + font-size: 11px; + font-family: monospace; +} +#JashBottomBar { + BACKGROUND: #ccc; + POSITION: relative; + HEIGHT: 20px; + overflow: hidden; + margin-top: 2px; +} +#JashBottomBar a { + HEIGHT: 14px; + font-size: 9px; + font-weight: normal; + font-family: arial; + float: left; + padding: 4px; + background: #eee; + cursor: pointer; + border: 1px outset white; + margin-right: 1px; +} +#JashBottomBar a:hover { + padding-top: 3px; + padding-bottom: 5px; + background-color: white; +} +#JashBottomBar a:active, #JashBottomBar a:focus { + padding-top: 5px; + padding-bottom: 3px; + background-color: #ddd; +} +#JashResizeButton { + BORDER: 1px solid gray; + BACKGROUND: #eee; + WIDTH: 17px; + height: 17px; + line-height: 0; + CURSOR: move; + position: absolute; + bottom: 0px; + right: 0px; + z-index: 2000; +} diff --git a/tests/javascript/jash/Jash.js b/tests/javascript/jash/Jash.js new file mode 100644 index 0000000000000000000000000000000000000000..de05745d48d1fb64aed2eaa1e4edd111d400b201 --- /dev/null +++ b/tests/javascript/jash/Jash.js @@ -0,0 +1,1640 @@ +function Jash() { + /* location of source code (used to find css file) */ + this.jashRoot = "http://www.billyreisinger.com/jash/source/latest/"; + + /* functions that take element ids or class names as pricincipal arguments */ + this.domGetElFunctions = { + id: new Array("document.getElementById","$"), + className: new Array("getElementsByClassName","$C") + }; + + /* output line separator for major blocks of content */ + var line = "-------------------------------------------------"; + + /* this is returned by internal methods to avoid printing null output */ + var _null = "nooutput"; + var self = this; + + this.version = "1.35.7"; + this.versionDate = "2009/09/05 09:10"; + + /** + * Set environment, create HTML + */ + this.main = function() { + this.browser = this.returnBrowserType(); /* User's browser type */ + this.lineNumber = 0; /* Current output line number */ + this.mainBlock; /* HTML element parent wrapper */ + this.output = document.getElementById("JashOutput"); /* HTML element for console output */ + this.input; /* HTML element for user input */ + this.outputHistory = new Array(); /* All output is stored here */ + this.cssEvalFlag = false; /* flag: are we in CSS input mode? */ + this.innerHtmlInspection = false; + this.accessKeyText = this.getAccessKeyText(); + this.defaultText = "Jash, v" + this.version + "\nEnter \"jash.help()\" for a list of commands.\n"; + this.cls = this.clear; /* clear function alias */ + this.tabIndexIndex = 0; + this.currentNode = {}; + this.triedDomInserts = 0; + this.tips = [ + "Did you know?\nThe DOM Inspector will automatically put\n an element with an ID in the input field for you.", + "Did you know?\nYou can tie this script into your own to jash scripts. Use 'jash.methodName' anywhere\n in your scripts, and pull\n up this window before executing to see\n the results.", + "Did you know?\nUse jash.stopWatch.start() and jash.stopWatch.stop() to\n time execution speeds! Handy for optimization.", + "Did you know?\nPress TAB to complete a function, method, or property name.\n If more than one match is found, a list of possible\n matches will appear.", + "Did you know?\nYou can use jash.show() to show a list of the names\nand types of an object's members.\nOn the other hand, jash.dump will show names and\n_values_ of an object's members.", + "Whoa ---- you can now tab-complete HTML element ids after typing document.getElementsById(' (or the '$' shorthand if using Prototype). This also works with class names (i.e. document.getElementsByClassName)" + ] + this.defaultText += line + "\n" + this.tips[(parseInt((Math.random()*10)%this.tips.length))] + "\n" + line + "\n"; + this.loopOnDomInserts(); + } + + this.loopOnDomInserts = function() { + try { + self.testDomInsert(); + } catch(e) { + self.triedDomInserts++; + if(self.triedDomInserts < 30) { + window.setTimeout(self.loopOnDomInserts, 250); + } + return; + } + document.body.removeChild(document.getElementById("JashTestElement")); + self.doDomInserts(); + self.finishInit(); + } + + this.testDomInsert = function() { + document.body.appendChild(document.createElement("em")).id = "JashTestElement"; + } + this.finishInit = function() { + /* create tab complete object */ + Jash.TabComplete.prototype = this; + this.tabComplete = new Jash.TabComplete(); + + /* create new evaluation instance */ + Jash.Evaluator.prototype = this; + this.evaluation = new Jash.Evaluator(); + + /* create new history object */ + this.history = new Jash.History(); + window.setTimeout(function() { + self.input.focus(); + },500); + } + + /** + * Import stylesheet and insert dom nodes + */ + this.doDomInserts = function() { +/* + if(self.returnBrowserType() != "sa") { + self.stylesheet=document.body.appendChild(document.createElement('link')); + } else { + self.stylesheet = document.getElementsByTagName("head")[0].appendChild(document.createElement("link")); + } + self.stylesheet.type='text/css'; + self.stylesheet.rel='stylesheet'; + self.stylesheet.href=self.jashRoot +'Jash.css'; +*/ + self.create(); + } + + /** + * return string representing browser type + */ + this.returnBrowserType = function() { + if(window.navigator.userAgent.toLowerCase().indexOf("opera") != -1) { + return "op"; + } + if(window.navigator.userAgent.toLowerCase().indexOf("msie") != -1) { + return "ie"; + } + if(window.navigator.userAgent.toLowerCase().indexOf("firefox") != -1) { + return "ff"; + } + if(window.navigator.userAgent.toLowerCase().indexOf("safari") != -1) { + return "sa"; + } + } + /** + * return string representing os + */ + this.returnOsType = function() { + var ua = window.navigator.userAgent.toLowerCase(); + if(ua.indexOf("macintosh") != -1) { + return "mac"; + } else if(ua.indexOf("windows") != -1) { + return "win"; + } else if(ua.indexOf("linux i686") != -1) { + return "linux"; + } + } + + /** + * return access key text based on what browser we're using. Access keys are + * different for every browser, and even between the same browsers on + * different platforms. + */ + this.getAccessKeyText = function() { + var txt; + var agt = this.returnOsType(); + switch(this.browser) { + case "ie": + txt = "Alt"; + break; + case "ff": + /* FF/Win = alt/shift; FF/Mac = ctrl; FF/Linux/x86 = alt */ + if (agt == "mac") { + txt = "Ctrl"; + } else if(agt == "linux") { + txt = "Alt"; + } else { + txt = "Alt-Shift"; + } + break; + case "op": + txt = "Shift-Esc"; + break; + case "sa": + if(agt == "mac") { + txt = "Ctrl"; + } else { + txt = "Alt"; + } + break; + default: + txt = "Alt"; + break; + } + return txt; + } + + /** + * Print simple output to the console + * @param {string} text text to print + * @param {bool} clear clear console before printing, default is false + * @param {bool} suppressLineNumbers print line number before text, default is true + * @param {bool} autoscroll scroll output console to bottom when printing + */ + this.print = function(text,clear,suppressLineNumbers,autoscroll) { + clear = (typeof clear != "undefined") ? clear : false; + autoscroll = (typeof autoscroll != "undefined") ? autoscroll : true; + + if(this.output == null || document.getElementById("JashParent") == null) { + this.create(); + this.output = document.getElementById("JashOutput"); + this.mainBlock = document.getElementById("JashParent"); + } + if(clear) { + this.clear(); + } + if(text != "") { + if(typeof suppressLineNumbers != "undefined" && !suppressLineNumbers) { + this.output.value += this.lineNumber + ". "; + } + this.output.value += text + "\n"; + if(autoscroll) { + this.output.scrollTop = this.output.scrollHeight; + } + this.lineNumber++; + } + return _null; + } + /** + * Show terse output (name and type) of an object's members + * @param {object} obj an object whose members are to be shown + * @returns {string} _null + */ + this.show = function(obj) { + this.print(line,false,true); + var out = ""; + this.lineNumber = 0; + + for(var p in obj) { + if(typeof obj[p] == "function") { + var t = obj[p].toString(); + t = t.replace(/[\x0A\x0D]/g,"").replace(/\s+/g,"").replace(/\{.+\}/g,"{ ... }"); + t = t.replace(p,""); + t = p + ": " + t; + } else { + t = p + ": " + typeof obj[p]; + } + out += ++this.lineNumber + ". " + t + "\n"; + } + this.print(out,false,true); + this.print(line,false,true); + this.output.scrollTop = this.output.scrollHeight; + return _null; + } + + /** + * Dump - show verbose output of all of an object's members + * @param {object} obj object whose members should be dumped + * @returns _null or other string, see above + */ + this.dump = function(obj) { + if(typeof obj == "string") { + this.print(obj); + } else { + this.print(line,false,true); + var out = new Array(); + /* object */ + if(typeof obj.push == "undefined") { + for(var th in obj) { + out.push(++this.lineNumber + ". " + th + " = " + obj[th]); + } + /* array */ + } else { + for(var i = 0; i 0) { + alert("Jash currently does not support pages with frames."); + return; + } + var self = this; + + /* outermost container */ + var debugParent = document.createElement("div"); + var windowScrollY = 0; + + if (document.documentElement && document.documentElement.scrollTop) { + windowScrollY = document.documentElement.scrollTop; + } else if (document.body) { + windowScrollY = document.body.scrollTop + } else { + windowScrollY = window.scrollY; + } + debugParent.style.top = windowScrollY + 50 + "px"; + debugParent.id = "JashParent"; + + /* close on ESC key press */ + this.addEvent(document,"keydown", function(e) { + e = (typeof window.event != "undefined") ? window.event : e; + if (parseInt(e.keyCode) == 27) { + /* in Opera, shift-esc is precursor to access key usage */ + if(typeof e.shiftKey == "undefined" || !e.shiftKey) { + self.close(); + } + } + }); + + /* WRAPPERS FOR TEXTAREAS */ + var textareaWrap = document.createElement("div"); + textareaWrap.id = "JashTextareaWrap"; + + /* OUTPUT FIELD */ + var debugOutput = document.createElement("textarea"); + debugOutput.id = "JashOutput"; + debugOutput.wrap = "off"; + debugOutput.readOnly = "true"; + debugOutput.value = this.defaultText; + + /* INPUT FIELD */ + var inp = document.createElement("textarea"); + inp.id = "JashInput"; + var last = ""; + + /* listen for certain keystrokes, map them */ + inp.onkeydown = function(e) { + e = (typeof window.event != "undefined") ? window.event : e; + return self.assignInputKeyEvent(e); + } + /* Supress certain keystrokes */ + inp.onkeypress = function(e) { + e = (typeof window.event != "undefined") ? window.event : e; + var k = e.keyCode; + /* suppress certain key strokes */ + if(!self.evaluation.cssEvalFlag) { + /* tab or return or up or down */ + if(k==9 || (k==13 && !e.shiftKey) || (k==38 && !e.shiftKey) || k==40) { + if(k!=40 && this.browser != "ie") { + return false; + } + } + /* suppress tabs in css mode */ + } else if(k==9) { + return false; + } + } + + /* DRAG / TITLE BAR */ + var dragBut = document.createElement("div"); + dragBut.innerHTML = "Jash"; + dragBut.id = "JashDragBar"; + dragBut.onmousedown = function(e) { + e = (typeof window.event != "undefined") ? window.event : e; + var xplus = (typeof e.layerX == "undefined") ? e.offsetX : e.layerX; + var yplus = (typeof e.layerY == "undefined") ? e.offsetY : e.layerY; + document.onmousemove = function(e) { + var coords = self.getMouseXY(e); + document.getElementById("JashParent").style.top = coords.y - yplus + "px"; + document.getElementById("JashParent").style.left = coords.x - xplus + "px"; + } + return false; + } + document.onmouseup = function() { + document.onmousemove = null; + }; + /* cancel click event to prevent text selection */ + dragBut.onclick = function() { return false; } + + /** + * BUTTONS + */ + /* CLOSE BUTTON (SMALL ONE) */ + var xBut = document.createElement("a"); + xBut.className = "JashXButton"; + xBut.innerHTML = "X"; + xBut.href = "#"; + xBut.onclick = function() { + self.close(); + return false; + } + + /* CLEAR BUTTON */ + var clearBut = document.createElement("a"); + clearBut.innerHTML = "Clear (" + this.accessKeyText + "-C)"; + clearBut.accessKey = "C"; + clearBut.className = "JashButton"; + clearBut.onclick = function() { + self.clear(); + return false; + } + this.setCrossBrowserAccessKeyFunctionForAnchor(clearBut); + + /* EVALUATE BUTTON */ + var evalBut = document.createElement("a"); + evalBut.value = "Evaluate (" + this.accessKeyText + "-Z)"; + evalBut.innerHTML = "Evaluate (" + this.accessKeyText + "-Z)"; + evalBut.accessKey = "Z"; + evalBut.className = "JashButton"; + evalBut.title = "Evaluate current input (" + this.accessKeyText + "-Z)"; + evalBut.onclick = function() { + self.evaluation.evaluate(inp.value); + if(!self.evaluation.cssEvalFlag) { + inp.value = ""; + } + inp.focus(); + return false; + } + this.setCrossBrowserAccessKeyFunctionForAnchor(evalBut); + + /* HELP BUTTON */ + var helpBut = document.createElement("a"); + helpBut.innerHTML = "Help"; + helpBut.className = "JashButton"; + helpBut.title = "Help: show list of commands (or type jash.help(); )"; + helpBut.onclick = function() { + self.help(); + } + + /* DOM BUTTON */ + var domBut = document.createElement("a"); + domBut.innerHTML = "Mouseover DOM (" + this.accessKeyText + "-X)"; + domBut.title = "Mouseover DOM: toggle to turn on/off inspection of document nodes (" + this.accessKeyText + "-X)"; + domBut.className = "JashButton"; + domBut.accessKey = "X"; + domBut.tabIndex = "4"; + this.domActive = false; + domBut.onclick = function() { + if(!self.domActive) { + document.body.onmouseover = function(e) { + if(typeof e == "undefined") { e = window.event; } + self.showNodes(e); + } + self.setButtonVisualActiveState(domBut,"on"); + self.domActive = true; + } else { + document.body.onmouseover = function() {} + self.domActive = false; + self.setButtonVisualActiveState(domBut,"off"); + } + return _null; + } + this.setCrossBrowserAccessKeyFunctionForAnchor(domBut); + + /* INNER HTML INSPECT BUTTON */ + var innerHtmlInspectBut = document.createElement("a"); + innerHtmlInspectBut.innerHTML = "innerHTML Dump (" + this.accessKeyText + "-A)"; + innerHtmlInspectBut.title = "innerHTML Inspect: toggle to turn on/off innerHTML inspection of document nodes (" + this.accessKeyText + "-A)"; + innerHtmlInspectBut.className = "JashButton"; + innerHtmlInspectBut.accessKey = "A"; + innerHtmlInspectBut.tabIndex = "5"; + this.innerHtmlInspection = false; + innerHtmlInspectBut.onclick = function() { + self.innerHtmlInspection = !self.innerHtmlInspection; + self.setButtonVisualActiveState(innerHtmlInspectBut,self.innerHtmlInspection ? "on" : "off"); + return _null; + } + this.setCrossBrowserAccessKeyFunctionForAnchor(innerHtmlInspectBut); + + /* CSS BUTTON */ + var cssBut = document.createElement("a"); + cssBut.innerHTML = "CSS Input (" + this.accessKeyText + "-S)"; + cssBut.title = "CSS Input: turn on CSS input to enter arbitrary CSS (" + this.accessKeyText + "-S)"; + cssBut.className = "JashButton"; + cssBut.accessKey = "S"; + cssBut.onclick = function() { + if(!self.evaluation.cssEvalFlag) { + self.setButtonVisualActiveState(cssBut,"on"); + self.evaluation.cssEvalFlag = true; + inp.className = "cssEntry"; + if(document.getElementById("JashStyleInput") != null) { + self.evaluation.styleInputTag.disabled = false; + } + inp.value = ""; + } else { + self.setButtonVisualActiveState(cssBut,"off"); + inp.className = ""; + self.evaluation.cssEvalFlag = false; + if(document.getElementById("JashStyleInput") != null) { + self.evaluation.styleInputTag.disabled = true; + } + inp.value = ""; + } + inp.focus(); + return _null; + } + this.setCrossBrowserAccessKeyFunctionForAnchor(cssBut); + + /* RESIZE BUTTON */ + var resizeBut = document.createElement("div"); + resizeBut.id = "JashResizeButton"; + this.minDims = { x:100,y:100 }; + resizeBut.onmousedown = function(e) { + e = (typeof window.event != "undefined") ? window.event : e; + var originalDims = self.getDimensions(textareaWrap); + var originMouseDims = self.getMouseXY(e); + document.onmousemove = function(e) { + var newMouseDims = self.getMouseXY(e); + var newWidth = originalDims.x + (newMouseDims.x - originMouseDims.x); + if(newWidth < self.minDims.x) { newWidth = self.minDims.x; } + textareaWrap.style.width = newWidth + "px"; + debugParent.style.width = newWidth + "px"; + + var newHeight = originalDims.y + (newMouseDims.y - originMouseDims.y); + if(newHeight < self.minDims.y) { newHeight = self.minDims.y; } + textareaWrap.style.height = newHeight + "px"; + debugParent.style.height = newHeight + "px"; + } + document.onmouseup = function() { + document.onmousemove = ""; + } + } + + var bottomBar = document.createElement("div"); + bottomBar.id = "JashBottomBar"; + + /* append nodes to DOM */ + + debugParent.appendChild(dragBut); + debugParent.appendChild(xBut); + + bottomBar.appendChild(evalBut); + bottomBar.appendChild(cssBut); + bottomBar.appendChild(domBut); + bottomBar.appendChild(innerHtmlInspectBut); + bottomBar.appendChild(clearBut); + bottomBar.appendChild(helpBut); + debugParent.appendChild(bottomBar); + + debugParent.appendChild(resizeBut); + document.body.appendChild(debugParent); + + /* the textareas should be last to get w/h calculated correctly */ + textareaWrap.appendChild(debugOutput); + textareaWrap.appendChild(inp); + debugParent.appendChild(textareaWrap); + + this.bottomBar = document.getElementById("JashBottomBar"); + this.dragBar = document.getElementById("JashDragBar") + this.output = document.getElementById("JashOutput"); + this.input = document.getElementById("JashInput"); + this.mainBlock = debugParent; + + /* When user scrolls page, move debug window, too */ + this.addEvent(window,'scroll',function() { + debugParent.style.top = 50 + self.getXBrowserYOffset() + 'px'; + }); + } + + /** + * set the visual state of a button + * @param {HTML Element} button element to change visual state of + * @param {string} state "on" | "off" + */ + this.setButtonVisualActiveState = function(button,state) { + if(state == "on") { + button.style.backgroundColor = "lightgreen"; + } else { + button.style.backgroundColor = ""; + } + } + /** + * Print some useful information + */ + this.help = function() { + var out = new Array(); + out.push(line); + out.push("Jash v" + this.version + " " + this.versionDate,true); + out.push("http://www.billyreisinger.com/jash/documentation.html"); + out.push(line); + out.push("METHODS"); + out.push(line); + out.push("jash.cls() - clear console"); + out.push("jash.print(str,clear) - output str to console ~~ str = string ~~ clear = true|false: clear console before output"); + out.push("jash.close() - close this console"); + out.push("jash.dump(obj) - output object and members to console"); + out.push("jash.show(obj) - print out the names and types (only) of all members of obj"); + out.push("jash.stopWatch.start() - start timer"); + out.push("jash.stopWatch.stop() - end timer and return result in ms"); + out.push("jash.kill(HTML Element) - remove an element from the page."); + out.push("jash.getDimensions(HTML Element) - get width, height dimensions of an html element. Returns an object [x,y]"); + out.push(line); + out.push("KEYSTROKES"); + out.push(line); + out.push("press up arrow in input field to retrieve last input"); + out.push("press ESC to show/hide console"); + out.push("press ENTER in input field to enter a command"); + out.push("press TAB to auto-complete input"); + out.push("press " + this.accessKeyText + "-Z to evaluate input"); + out.push("press " + this.accessKeyText + "-X to activate/deactivate DOM inspector"); + out.push("press " + this.accessKeyText + "-A to activate/deactivate innerHTML dump (only works w/ DOM inspector)"); + out.push("press " + this.accessKeyText + "-C to clear output and input"); + out.push("press " + this.accessKeyText + "-S to turn on/off CSS input mode. In CSS input mode, you can enter arbitrary CSS selectors and rules, as you would normally do in a CSS stylesheet."); + + this.print(out.join("\n")); + + return _null; + } + /** + * show/hide Jash + */ + this.close = function() { + if(this.mainBlock.style.display == "none") { + this.mainBlock.style.display = "block"; + this.input.focus(); + } else { + this.mainBlock.style.display = "none"; + } + } + + /** + * Cross-browser access key + * @param {HTML Element} el element to simulate access key event on + */ + this.setCrossBrowserAccessKeyFunctionForAnchor = function(el) { + var self = this; + el.tabIndex = ++this.tabIndexIndex; + /* IE only focuses on anchors with access keys, but FF fires click. */ + if(this.browser == "ie") { + el.onfocus = function() { + /* access key is being used; fire button's click event */ + if(window.event.altKey) { + el.onclick(); + } + self.input.focus(); + } + } + + } + + /** + * Time execution in ms + */ + this.stopWatch = { + t_start: 0, + t_end: 0, + t_total: 0, + /** + * Start the timer + * @returns {int} epoch time in ms + */ + start: function() { + t_start = new Date().getTime(); + return t_start; + }, + /** + * Stop the timer + * @returns {int} time between start and stop in ms + */ + stop: function() { + t_end = new Date().getTime(); + t_total = t_end - t_start; + return (t_total); + } + } + + /** + * DOM inspection: Show parent node structure, and possibly innerHTML, of node + * under mouse cursor. + * @param {object} e Event object + */ + this.showNodes = function(e) { + if(typeof e == "undefined") e = window.event; + var el = typeof e.target == "undefined" ? e.srcElement : e.target; + /* store first node for later use */ + this.currentNode = el; + + /* see what first node is */ + var childMost = this.identifyNode(el,false); + + /* step through parent nodes */ + var out = ""; + var childmostTxt = "childmost..... " + childMost.txt + "\n"; + while(el = el.parentNode) { + if(el.nodeName.toLowerCase() == "html") { + out = "parentmost.... \n" + out; + break; + } + out = this.identifyNode(el).txt + "\n" + out; + } + out = "**** PRESS " + this.accessKeyText + "-X TO PAUSE / UNPAUSE ****\n" + out; + out += childmostTxt; + this.print(out,true,true,false); + if(this.innerHtmlInspection) { + this.print("INNER HTML"); + if(this.currentNode.innerHTML.indexOf("<") != -1) { + this.print(Jash.Indenter.indent(this.currentNode.innerHTML),false,true,false); + } else { + this.print(this.currentNode.innerHTML,false,true,false); + } + } + + if(!this.evaluation.cssEvalFlag) { + if(childMost.id != "") { + if(typeof $ != "undefined") { + this.input.value = '$("' + childMost.id + '")'; + } else { + this.input.value = 'document.getElementById("' + childMost.id + '")'; + } + } else { + + this.input.value = "this.currentNode"; + } + } + } + + /** + * Return a string containing information about HTML element 'el' - node name, id, class, etc. + * @param {HTML Element} el Element to inspect + * @param {bool} showDots precede returned text with dots + * @returns {object} {txt: string ,id: string elementId} + */ + this.identifyNode = function(el,showDots) { + showDots = typeof showDots == "boolean" ? showDots : true; + + var out = { + txt: "", + id: "" + }; + + if(showDots) out.txt += ".............. "; + out.txt += "<" + el.nodeName.toLowerCase(); + if(el.id != "") { + out.id = el.id; + out.txt += ' id="' + el.id + '"'; + } + if(el.name) { + out.txt += ' name="' + el.name + '"'; + } + if(el.className !="") { + out.txt += ' class="' + el.className + '"'; + } + if(el.href) { + out.txt += ' href="' + el.href + '"'; + } + + out.txt += ">"; + + return out; + } + /** + * Remove node under cursor + */ + this.kill = function() { + this.currentNode.parentNode.removeChild(this.currentNode); + } +} +/** +* Class to evaluate input text as javascript or CSS +* @class Jash.Evaluator +* @inherits Jash +* @returns {object} a new copy of Evaluator +*/ +Jash.Evaluator = function() { + /* are we in CSS-edit mode? bool */ + this.cssEvalFlag = false; + /* this is returned by internal methods to avoid printing null output */ + var _null = "nooutput"; + /** + * Delegate evaluation of input string appropriately + * @param {string} input input string to evaluate + */ + this.evaluate = function(input) { + if(input == "") return false; + this.history.add(input); + if(this.cssEvalFlag) { + this.evalCss(input); + this.print(input); + } else { + var output = this.evalJs(input); + if(typeof output != "undefined") { + this.print(">> " + input); + this.print(output); + } + } + } + /** + * Evaluate 'input' string as javascript + * @param {string} input input string to evaluate as javascript + * @returns {string} result of evaluation (or undefined if this.returnInsteadOfPrint is true) + */ + this.evalJs = function(input) { + try { + var result; + if(this.browser == "ie") { + result = eval(input); + } else { + result = window.eval(input); + } + if(result !== null && result.toString() != _null) { + return(result.toString()); + } else { + return "null" + } + } catch(e) { + return(e.message); + } + } + /** + * evaluate 'input' string as css + * @param {string} input an input string to evaluate as css (selector(s) followed by rules) + * @returns {sring} the input string unmodified + */ + this.evalCss = function(input) { + try { + this.insertStyleRule(input); + } catch (e) { + //input = e.message; + } + return input; + } + /** + * Write style rule in stylesheet + * @param {string} rule a series of selectors and rules separated by the newline character '\n' + * @returns {string} empty string + */ + this.insertStyleRule = function(rule) { + var lastStyleSheetIndex = document.styleSheets.length - 1; + if(document.getElementById("JashStyleInput") == null) { + this.styleInputTag = document.createElement("style"); + this.styleInputTag.id = "JashStyleInput"; + this.styleInputTag.type = "text/css"; + document.body.appendChild(this.styleInputTag); + } + if(this.browser == "ff" || this.browser == "op") { + /* wow, I can't believe this works in FF and Opera. It shouldn't */ + this.styleInputTag.innerHTML += rule + "\n"; + } else if (this.browser == "ie" || this.browser == "sa") { + /* in IE, stylesheets are added to the top of the stack */ + if(this.browser == "ie") { + var i = 0; + } else if (this.browser = "sa") { + var i = document.styleSheets.length - 1; + } + /* create array of rules */ + var rulesArray = rule.split("}"); + for(var t = 0; t < rulesArray.length; t++) { + var ruleSplit = rulesArray[t].split("{"); + /* IE wont take multiple selectors in one rule in addRule */ + var selectors = ruleSplit[0].split(","); + for(var k = 0; k < selectors.length; k++) { + document.styleSheets[i].addRule(selectors[k],ruleSplit[1]); + } + } + } + return ""; + } + return this; +} + +/** +* Store input for later retrieval. Provide methods for retrieving input in a +* linear fashion. +* @class Jash.History +*/ +Jash.History = function() { + /* Array where entries will be stored */ + this.entries = new Array(''); + this.position = 0; +} +Jash.History.prototype = { + /** + * Add input string to history array + * @param {string} input input to add to history + */ + add: function(input) { + this.entries.push(input); + this.position = this.entries.length - 1; + }, + /** + * Find the previous input in history relative to current position + * @returns {string} blank if no history value, or string + */ + getPreviousInput: function() { + if(this.position < 0) { + return ''; + } + var entry = typeof this.entries[this.position] != "undefined" ? this.entries[this.position] : ''; + if(this.position > 0) { + this.position--; + } + return entry; + }, + /** + * Get the next input string in history relative to the current position + * @returns {string} blank if no history value, or string + */ + getNextInput: function() { + if(this.position < this.entries.length) { + var entry = typeof this.entries[this.position] != "undefined" ? this.entries[this.position] : ''; + if(this.entries.length <= this.position++) { + this.position++; + } + return entry; + } else return ''; + } +} +/** +* Indent, add line breaks, and close tags in an HTML string +* Example usage: +*
      +* Jash.Indenter.indent(document.getElementById("someDiv").innerHTML);
      +* 
      +* +* @class Jash.Indenter +*/ +Jash.Indenter = { + indentChar: "\t", + nodesCommonlyUnclosed: new Array("link ", "img ", "meta ", "!DOCTYPE ", "input ", "param", "hr", "br"), + /** + * repeat stringToRepeat times times and return concatenated string with no separator + * @param {string} stringToRepeat a string that should be repeated times times + * @param {int} times number of times to repeat string + * @returns {string} string repeated times times + */ + stringRepeat: function(stringToRepeat,times) { + var string = new Array(); + for(var i = 0; i < times; i++) { + string.push(stringToRepeat); + } + return string.join(''); + }, + /** + * Find unclosed tags (a list of which is in this.nodesCommonlyUnclosed) in str and + * close them. + * @param {string} str string representing one node + * @returns {str} string with tag(s) closed + */ + closeUnclosedNode: function(str) { + for(var k=0;k","/>"); + } + } + return str; + }, + /** + * Indent a text string level times and add it to arr + * @param {int} level number of times to indent string + * @param {string} string string to indent + * @param {Array} arr array of indented strings (i.e., result set) + * @returns {Array} array "arr" with new entry + */ + indentAndAdd: function(level,string,arr) { + var indents = this.stringRepeat(this.indentChar,level); + arr.push(indents + string); + return arr; + }, + /** + * indent string source and return indented result + * @param {string} source a string representing unformatted HTML + * @returns {string} prettified HTML + */ + indent: function(source) { + var source = source; + var arr = new Array(); + + /* remove new lines and tabs */ + source = source.replace(/[\n\r\t]/g, ''); + /* remove spaces before and after html tags */ + source = source.replace(/>\s+/g, ">"); + source = source.replace(/\s+ +* var profile = new Jash.Profiler(function() { +* document.getElementById("something"); +* }); +* profile.multiPass(1000); +* +* +* @class Jash.Profiler +* @param {function} func Function to profile +* @param {function} func (optional) callback function to fire when profiler is done +* @returns {object} an instance of this object +*/ +Jash.Profiler = function(func,onFinish) { + /* function to profile */ + this.func = func; + this.time = 0; + /* set a default callback */ + this.defaultOnFinish = function() {}; + /* array where all result sets will be stored */ + this.results = new Array(); + this.onFinish = typeof onFinish != "function" ? this.defaultOnFinish : onFinish; + var self = this; + + /** + * Do this.func 'reps' times in a reverse while loop + * @param {int} reps Amount of times to execute this.func + * @returns {int} Time, in milliseconds, it took to perform loop + */ + this.reverseWhile = function(reps) { + this.stopWatch.start(); + while(reps > 0) { + this.func(); + reps--; + } + return this.stopWatch.stop(); + } + /** + * Do this.func reps times in a for loop + * @param {int} reps Amount of times to execute this.func + * @returns {int} Time, in milliseconds, it took to perform loop + */ + this.forLoop = function(reps) { + this.stopWatch.start(); + for(i=0;i 0) { + /*how many )'s are after the last ( ?*/ + numClosingParens = lastWord.split("(")[numOpeningParens].split(")").length - 1; + /*now we can figure out how many )'s we care about*/ + var numRealDanglers = numOpeningParens - numClosingParens; + scope = lastWord.split("(").slice(numRealDanglers).join("("); + } else if (diff < 0) { + this.print("error: too many closing parentheses"); + return false; + } else { + scope = lastWord; + } + + scope = scope.split("."); + var fragment = scope.pop(); + scope = scope.join("."); + + if(scope == "") scope = "window"; + + var members = this.getMembers(scope); + var results = this.findTextMatchesInArray(members,fragment); + + /*no match was found*/ + if(results == false) { + /*no match*/ + /*several matches have been found*/ + } else if(typeof results != "string") { + this.dump(results); + var bestMatch = this.findBestStringMatch(fragment,results); + if(fragment != '') { + fragReg = new RegExp(fragment + "$"); + this.input.value = this.input.value.replace(fragReg,bestMatch); + } else { + this.input.value += bestMatch; + } + /*one match was found*/ + } else { + var reggie = new RegExp(fragment + "$"); + this.input.value = this.input.value.replace(reggie,results); + } + + return false; + } + /** + * Return true if all characters in an array of strings at a certain position + * are the same + * + * @param {int} index 0 start int position of character to look at + * @param {array} arr array of strings to test + * @returns {boolean} True if all characters match at position 'index', false if not + **/ + this.doAllStringsInArrayHaveSameCharacterAtIndex = function(index,arr) { + var matched = 0; + if(!arr[0].charAt(index)) return false; + var character = arr[0].charAt(index); + for(var i = 1; i < arr.length; i++) { + if(!arr[i].charAt(index) || arr[i].charAt(index) != character) { + return false; + } + } + return true; + } + + /** + * Try to find the longest possible match in an array of strings starting from the + * left + * + * @param {str} str String to look for + * @param {array} arr Array of strings to look through + * @returns {str} Longest match, starting from left, of all strings in arr + */ + this.findBestStringMatch = function(str,arr) { + var fragLength = str.length; + var matches = this.doAllStringsInArrayHaveSameCharacterAtIndex(fragLength,arr); + while(matches) { + fragLength++; + matches = this.doAllStringsInArrayHaveSameCharacterAtIndex(fragLength,arr); + } + return arr[0].slice(0,fragLength); + } + /** + * Attempt to complete an element id or class name based on what is available in all + * elements in the current DOM; assume the input text is a javascript function call containing (" before + * the string in question. + * @param {string} inputText Text to try to complete + * @param {string} type "id" | "class" : element id or class name completion + **/ + this.tabCompleteIdOrClassInJavascript = function(inputText,type) { + + /*parse out query*/ + var query = inputText.split("("); + query = query[query.length - 1].replace(/\W/g,''); + + /*loop through dom to find els that match query*/ + var matches = new Array(); + + var els = document.getElementsByTagName("*"); + if(type == "id") { + for(var i = 0; i 1) + * @returns {str} string match (if matches == 1) + * @returns {boolean} false (if matches == 0) + **/ + this.findTextMatchesInArray = function(arrayToTest,findMe) { + var resultsArray = new Array(); + var tester = new RegExp("^" + findMe); + + for(var i=0;i 1) { + resultsArray.sort(); + return resultsArray; + } else if (resultsArray.length == 1) { + return resultsArray[0]; + } else { + return false; + } + } + /** + * Scan an object and return just the member names + * @param {string} context name of object to scan + **/ + this.getMembers = function(context) { + var members = new Array(); + for(memberName in eval(context)) { + members.push(memberName); + } + return members; + } + return this; +} +/** +* Anonymous function to create new instance of Jash +*/ +new function() { + if("jash" in window) { + /* toggle display of jash */ + window.jash.close(); + } else { + window.jash = new Jash(); + window.jash.main(); + } +} diff --git a/tests/javascript/jslint/jslint.js b/tests/javascript/jslint/jslint.js new file mode 100644 index 0000000000000000000000000000000000000000..455820a0cb1287d3498dcc3e1f631cad963e5a15 --- /dev/null +++ b/tests/javascript/jslint/jslint.js @@ -0,0 +1,4453 @@ +// jslint.js +// 2013-03-19 + +// Copyright (c) 2002 Douglas Crockford (www.JSLint.com) + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// The Software shall be used for Good, not Evil. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +// WARNING: JSLint will hurt your feelings. + +// JSLINT is a global function. It takes two parameters. + +// var myResult = JSLINT(source, option); + +// The first parameter is either a string or an array of strings. If it is a +// string, it will be split on '\n' or '\r'. If it is an array of strings, it +// is assumed that each string represents one line. The source can be a +// JavaScript text or a JSON text. + +// The second parameter is an optional object of options that control the +// operation of JSLINT. Most of the options are booleans: They are all +// optional and have a default value of false. One of the options, predef, +// can be an array of names, which will be used to declare global variables, +// or an object whose keys are used as global names, with a boolean value +// that determines if they are assignable. + +// If it checks out, JSLINT returns true. Otherwise, it returns false. + +// If false, you can inspect JSLINT.errors to find out the problems. +// JSLINT.errors is an array of objects containing these properties: + +// { +// line : The line (relative to 0) at which the lint was found +// character : The character (relative to 0) at which the lint was found +// reason : The problem +// evidence : The text line in which the problem occurred +// raw : The raw message before the details were inserted +// a : The first detail +// b : The second detail +// c : The third detail +// d : The fourth detail +// } + +// If a stopping error was found, a null will be the last element of the +// JSLINT.errors array. A stopping error means that JSLint was not confident +// enough to continue. It does not necessarily mean that the error was +// especially heinous. + +// You can request a data structure that contains JSLint's results. + +// var myData = JSLINT.data(); + +// It returns a structure with this form: + +// { +// errors: [ +// { +// line: NUMBER, +// character: NUMBER, +// reason: STRING, +// evidence: STRING +// } +// ], +// functions: [ +// { +// name: STRING, +// line: NUMBER, +// last: NUMBER, +// params: [ +// { +// string: STRING +// } +// ], +// closure: [ +// STRING +// ], +// var: [ +// STRING +// ], +// exception: [ +// STRING +// ], +// outer: [ +// STRING +// ], +// unused: [ +// STRING +// ], +// undef: [ +// STRING +// ], +// global: [ +// STRING +// ], +// label: [ +// STRING +// ] +// } +// ], +// globals: [ +// STRING +// ], +// member: { +// STRING: NUMBER +// }, +// urls: [ +// STRING +// ], +// json: BOOLEAN +// } + +// Empty arrays will not be included. + +// You can request a Function Report, which shows all of the functions +// and the parameters and vars that they use. This can be used to find +// implied global variables and other problems. The report is in HTML and +// can be inserted in an HTML . It should be given the result of the +// JSLINT.data function. + +// var myReport = JSLINT.report(data); + +// You can request an HTML error report. + +// var myErrorReport = JSLINT.error_report(data); + +// You can obtain an object containing all of the properties found in the +// file. JSLINT.property contains an object containing a key for each +// property used in the program, the value being the number of times that +// property name was used in the file. + +// You can request a properties report, which produces a list of the program's +// properties in the form of a /*properties*/ declaration. + +// var myPropertyReport = JSLINT.properties_report(JSLINT.property); + +// You can obtain the parse tree that JSLint constructed while parsing. The +// latest tree is kept in JSLINT.tree. A nice stringification can be produced +// with + +// JSON.stringify(JSLINT.tree, [ +// 'string', 'arity', 'name', 'first', +// 'second', 'third', 'block', 'else' +// ], 4)); + +// You can request a context coloring table. It contains information that can be +// applied to the file that was analyzed. Context coloring colors functions +// based on their nesting level, and variables on the color of the functions +// in which they are defined. + +// var myColorization = JSLINT.color(data); + +// It returns an array containing objects of this form: + +// { +// from: COLUMN, +// thru: COLUMN, +// line: ROW, +// level: 0 or higher +// } + +// JSLint provides three inline directives. They look like slashstar comments, +// and allow for setting options, declaring global variables, and establishing a +// set of allowed property names. + +// These directives respect function scope. + +// The jslint directive is a special comment that can set one or more options. +// For example: + +/*jslint + es5: true, evil: true, nomen: true, regexp: true, todo: true +*/ + +// The current option set is + +// bitwise true, if bitwise operators should be allowed +// browser true, if the standard browser globals should be predefined +// 'continue' true, if the continuation statement should be tolerated +// debug true, if debugger statements should be allowed +// devel true, if logging should be allowed (console, alert, etc.) +// eqeq true, if == should be allowed +// es5 true, if ES5 syntax should be allowed +// evil true, if eval should be allowed +// forin true, if for in statements need not filter +// indent the indentation factor +// maxerr the maximum number of errors to allow +// maxlen the maximum length of a source line +// newcap true, if constructor names capitalization is ignored +// node true, if Node.js globals should be predefined +// nomen true, if names may have dangling _ +// passfail true, if the scan should stop on first error +// plusplus true, if increment/decrement should be allowed +// properties true, if all property names must be declared with /*properties*/ +// regexp true, if the . should be allowed in regexp literals +// rhino true, if the Rhino environment globals should be predefined +// undef true, if variables can be declared out of order +// unparam true, if unused parameters should be tolerated +// sloppy true, if the 'use strict'; pragma is optional +// stupid true, if really stupid practices are tolerated +// sub true, if all forms of subscript notation are tolerated +// todo true, if TODO comments are tolerated +// vars true, if multiple var statements per function should be allowed +// white true, if sloppy whitespace is tolerated +// windows true, if MS Windows-specific globals should be predefined + +// The properties directive declares an exclusive list of property names. +// Any properties named in the program that are not in the list will +// produce a warning. + +// For example: + +/*properties + '\b', '\t', '\n', '\f', '\r', '!', '!=', '!==', '"', '%', '\'', + '(arguments)', '(begin)', '(breakage)', '(context)', '(error)', + '(identifier)', '(level)', '(line)', '(loopage)', '(name)', '(params)', + '(scope)', '(token)', '(vars)', '(verb)', '*', '+', '-', '/', '<', '<=', + '==', '===', '>', '>=', '\\', a, a_label, a_scope, already_defined, and, + apply, arity, assign, assign_exception, assignment_function_expression, at, + avoid_a, b, bad_assignment, bad_constructor, bad_in_a, bad_invocation, + bad_new, bad_number, bad_operand, bad_wrap, bitwise, block, browser, c, + call, charAt, charCodeAt, character, closure, color, combine_var, + conditional_assignment, confusing_a, confusing_regexp, constructor_name_a, + continue, control_a, create, d, dangling_a, data, debug, deleted, devel, + disrupt, duplicate_a, edge, edition, else, empty_block, empty_case, + empty_class, entityify, eqeq, error_report, errors, es5, evidence, evil, + exception, exec, expected_a, expected_a_at_b_c, expected_a_b, + expected_a_b_from_c_d, expected_id_a, expected_identifier_a, + expected_identifier_a_reserved, expected_number_a, expected_operator_a, + expected_percent_a, expected_positive_a, expected_small_a, + expected_space_a_b, expected_string_a, f, filter, first, flag, floor, + forEach, for_if, forin, from, fromCharCode, fud, function, function_block, + function_eval, function_loop, function_statement, function_strict, + functions, global, globals, hasOwnProperty, id, identifier, + identifier_function, immed, implied_evil, indent, indexOf, infix_in, init, + insecure_a, isAlpha, isArray, isDigit, isNaN, join, jslint, json, keys, + label, labeled, lbp, leading_decimal_a, led, left, length, level, line, + match, maxerr, maxlen, message, missing_a, missing_a_after_b, + missing_property, missing_space_a_b, missing_use_strict, mode, + move_invocation, move_var, n, name, name_function, nested_comment, newcap, + node, nomen, not, not_a_constructor, not_a_defined, not_a_function, + not_a_label, not_a_scope, not_greater, nud, number, octal_a, open, outer, + parameter_a_get_b, parameter_arguments_a, parameter_set_a, params, paren, + passfail, plusplus, postscript, predef, properties, properties_report, + property, prototype, push, quote, r, radix, range, raw, read_only, reason, + regexp, replace, report, reserved, reserved_a, rhino, right, scanned_a_b, + search, second, shift, slash_equal, slice, sloppy, sort, split, + statement_block, stopping, strange_loop, strict, string, stupid, sub, + subscript, substr, supplant, sync_a, t, tag_a_in_b, test, third, thru, + toString, todo, todo_comment, token, tokens, too_long, too_many, + trailing_decimal_a, tree, unclosed, unclosed_comment, unclosed_regexp, + undef, undefined, unescaped_a, unexpected_a, unexpected_char_a, + unexpected_comment, unexpected_else, unexpected_label_a, + unexpected_property_a, unexpected_space_a_b, unexpected_typeof_a, + unnecessary_initialize, unnecessary_use, unparam, unreachable_a_b, unsafe, + unused, url, urls, use_array, use_braces, use_object, use_or, use_param, + use_spaces, used_before_a, var, var_a_not, vars, was, weird_assignment, + weird_condition, weird_new, weird_program, weird_relation, weird_ternary, + white, windows, wrap, wrap_immediate, wrap_regexp, write_is_wrong, + writeable +*/ + +// The global directive is used to declare global variables that can +// be accessed by the program. If a declaration is true, then the variable +// is writeable. Otherwise, it is read-only. + +// We build the application inside a function so that we produce only a single +// global variable. That function will be invoked immediately, and its return +// value is the JSLINT function itself. That function is also an object that +// can contain data and other functions. + +var JSLINT = (function () { + 'use strict'; + + function array_to_object(array, value) { + +// Make an object from an array of keys and a common value. + + var i, length = array.length, object = {}; + for (i = 0; i < length; i += 1) { + object[array[i]] = value; + } + return object; + } + + var allowed_option = { + bitwise : true, + browser : true, + 'continue': true, + couch : true, + debug : true, + devel : true, + eqeq : true, + es5 : true, + evil : true, + forin : true, + indent : 10, + maxerr : 1000, + maxlen : 256, + newcap : true, + node : true, + nomen : true, + passfail : true, + plusplus : true, + properties: true, + regexp : true, + rhino : true, + undef : true, + unparam : true, + sloppy : true, + stupid : true, + sub : true, + todo : true, + vars : true, + white : true, + windows : true + }, + anonname, // The guessed name for anonymous functions. + +// These are operators that should not be used with the ! operator. + + bang = { + '<' : true, + '<=' : true, + '==' : true, + '===': true, + '!==': true, + '!=' : true, + '>' : true, + '>=' : true, + '+' : true, + '-' : true, + '*' : true, + '/' : true, + '%' : true + }, + begin, // The root token + +// browser contains a set of global names that are commonly provided by a +// web browser environment. + + browser = array_to_object([ + 'clearInterval', 'clearTimeout', 'document', 'event', 'FormData', + 'frames', 'history', 'Image', 'localStorage', 'location', 'name', + 'navigator', 'Option', 'parent', 'screen', 'sessionStorage', + 'setInterval', 'setTimeout', 'Storage', 'window', 'XMLHttpRequest' + ], false), + +// bundle contains the text messages. + + bundle = { + a_label: "'{a}' is a statement label.", + a_scope: "'{a}' used out of scope.", + already_defined: "'{a}' is already defined.", + and: "The '&&' subexpression should be wrapped in parens.", + assign_exception: "Do not assign to the exception parameter.", + assignment_function_expression: "Expected an assignment or " + + "function call and instead saw an expression.", + avoid_a: "Avoid '{a}'.", + bad_assignment: "Bad assignment.", + bad_constructor: "Bad constructor.", + bad_in_a: "Bad for in variable '{a}'.", + bad_invocation: "Bad invocation.", + bad_new: "Do not use 'new' for side effects.", + bad_number: "Bad number '{a}'.", + bad_operand: "Bad operand.", + bad_wrap: "Do not wrap function literals in parens unless they " + + "are to be immediately invoked.", + combine_var: "Combine this with the previous 'var' statement.", + conditional_assignment: "Expected a conditional expression and " + + "instead saw an assignment.", + confusing_a: "Confusing use of '{a}'.", + confusing_regexp: "Confusing regular expression.", + constructor_name_a: "A constructor name '{a}' should start with " + + "an uppercase letter.", + control_a: "Unexpected control character '{a}'.", + dangling_a: "Unexpected dangling '_' in '{a}'.", + deleted: "Only properties should be deleted.", + duplicate_a: "Duplicate '{a}'.", + empty_block: "Empty block.", + empty_case: "Empty case.", + empty_class: "Empty class.", + es5: "This is an ES5 feature.", + evil: "eval is evil.", + expected_a: "Expected '{a}'.", + expected_a_b: "Expected '{a}' and instead saw '{b}'.", + expected_a_b_from_c_d: "Expected '{a}' to match '{b}' from line " + + "{c} and instead saw '{d}'.", + expected_a_at_b_c: "Expected '{a}' at column {b}, not column {c}.", + expected_id_a: "Expected an id, and instead saw #{a}.", + expected_identifier_a: "Expected an identifier and instead saw '{a}'.", + expected_identifier_a_reserved: "Expected an identifier and " + + "instead saw '{a}' (a reserved word).", + expected_number_a: "Expected a number and instead saw '{a}'.", + expected_operator_a: "Expected an operator and instead saw '{a}'.", + expected_positive_a: "Expected a positive number and instead saw '{a}'", + expected_small_a: "Expected a small positive integer and instead saw '{a}'", + expected_space_a_b: "Expected exactly one space between '{a}' and '{b}'.", + expected_string_a: "Expected a string and instead saw '{a}'.", + for_if: "The body of a for in should be wrapped in an if " + + "statement to filter unwanted properties from the prototype.", + function_block: "Function statements should not be placed in blocks." + + "Use a function expression or move the statement to the top of " + + "the outer function.", + function_eval: "The Function constructor is eval.", + function_loop: "Don't make functions within a loop.", + function_statement: "Function statements are not invocable." + + "Wrap the whole function invocation in parens.", + function_strict: "Use the function form of 'use strict'.", + identifier_function: "Expected an identifier in an assignment " + + "and instead saw a function invocation.", + implied_evil: "Implied eval is evil. Pass a function instead of a string.", + infix_in: "Unexpected 'in'. Compare with undefined, or use the " + + "hasOwnProperty method instead.", + insecure_a: "Insecure '{a}'.", + isNaN: "Use the isNaN function to compare with NaN.", + leading_decimal_a: "A leading decimal point can be confused with a dot: '.{a}'.", + missing_a: "Missing '{a}'.", + missing_a_after_b: "Missing '{a}' after '{b}'.", + missing_property: "Missing property name.", + missing_space_a_b: "Missing space between '{a}' and '{b}'.", + missing_use_strict: "Missing 'use strict' statement.", + move_invocation: "Move the invocation into the parens that " + + "contain the function.", + move_var: "Move 'var' declarations to the top of the function.", + name_function: "Missing name in function statement.", + nested_comment: "Nested comment.", + not: "Nested not.", + not_a_constructor: "Do not use {a} as a constructor.", + not_a_defined: "'{a}' has not been fully defined yet.", + not_a_function: "'{a}' is not a function.", + not_a_label: "'{a}' is not a label.", + not_a_scope: "'{a}' is out of scope.", + not_greater: "'{a}' should not be greater than '{b}'.", + octal_a: "Don't use octal: '{a}'. Use '\\u....' instead.", + parameter_arguments_a: "Do not mutate parameter '{a}' when using 'arguments'.", + parameter_a_get_b: "Unexpected parameter '{a}' in get {b} function.", + parameter_set_a: "Expected parameter (value) in set {a} function.", + radix: "Missing radix parameter.", + read_only: "Read only.", + reserved_a: "Reserved name '{a}'.", + scanned_a_b: "{a} ({b}% scanned).", + slash_equal: "A regular expression literal can be confused with '/='.", + statement_block: "Expected to see a statement and instead saw a block.", + stopping: "Stopping.", + strange_loop: "Strange loop.", + strict: "Strict violation.", + subscript: "['{a}'] is better written in dot notation.", + sync_a: "Unexpected sync method: '{a}'.", + tag_a_in_b: "A '<{a}>' must be within '<{b}>'.", + todo_comment: "Unexpected TODO comment.", + too_long: "Line too long.", + too_many: "Too many errors.", + trailing_decimal_a: "A trailing decimal point can be confused " + + "with a dot: '.{a}'.", + unclosed: "Unclosed string.", + unclosed_comment: "Unclosed comment.", + unclosed_regexp: "Unclosed regular expression.", + unescaped_a: "Unescaped '{a}'.", + unexpected_a: "Unexpected '{a}'.", + unexpected_char_a: "Unexpected character '{a}'.", + unexpected_comment: "Unexpected comment.", + unexpected_else: "Unexpected 'else' after 'return'.", + unexpected_label_a: "Unexpected label '{a}'.", + unexpected_property_a: "Unexpected /*property*/ '{a}'.", + unexpected_space_a_b: "Unexpected space between '{a}' and '{b}'.", + unexpected_typeof_a: "Unexpected 'typeof'. " + + "Use '===' to compare directly with {a}.", + unnecessary_initialize: "It is not necessary to initialize '{a}' " + + "to 'undefined'.", + unnecessary_use: "Unnecessary 'use strict'.", + unreachable_a_b: "Unreachable '{a}' after '{b}'.", + unsafe: "Unsafe character.", + url: "JavaScript URL.", + use_array: "Use the array literal notation [].", + use_braces: "Spaces are hard to count. Use {{a}}.", + use_object: "Use the object literal notation {}.", + use_or: "Use the || operator.", + use_param: "Use a named parameter.", + use_spaces: "Use spaces, not tabs.", + used_before_a: "'{a}' was used before it was defined.", + var_a_not: "Variable {a} was not declared correctly.", + weird_assignment: "Weird assignment.", + weird_condition: "Weird condition.", + weird_new: "Weird construction. Delete 'new'.", + weird_program: "Weird program.", + weird_relation: "Weird relation.", + weird_ternary: "Weird ternary.", + wrap_immediate: "Wrap an immediate function invocation in parentheses " + + "to assist the reader in understanding that the expression " + + "is the result of a function, and not the function itself.", + wrap_regexp: "Wrap the /regexp/ literal in parens to " + + "disambiguate the slash operator.", + write_is_wrong: "document.write can be a form of eval." + }, + comments_off, + couch = array_to_object([ + 'emit' + ], false), + + descapes = { + 'b': '\b', + 't': '\t', + 'n': '\n', + 'f': '\f', + 'r': '\r', + '"': '"', + '/': '/', + '\\': '\\', + '!': '!' + }, + + devel = array_to_object([ + 'alert', 'confirm', 'console', 'Debug', 'opera', 'prompt', 'WSH' + ], false), + directive, + escapes = { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\'': '\\\'', + '"' : '\\"', + '/' : '\\/', + '\\': '\\\\' + }, + + funct, // The current function, including the labels used in + // the function, as well as (breakage), + // (context), (loopage), (name), (params), (token), + // (vars), (verb) + + functionicity = [ + 'closure', 'exception', 'global', 'label', 'outer', 'undef', + 'unused', 'var' + ], + + functions, // All of the functions + global_funct, // The global body + global_scope, // The global scope + in_block, + indent, + itself, // JSLint itself + json_mode, + lex, // the tokenizer + lines, + lookahead, + node = array_to_object([ + 'Buffer', 'clearInterval', 'clearTimeout', 'console', 'exports', + 'global', 'module', 'process', 'querystring', 'require', + 'setInterval', 'setTimeout', '__dirname', '__filename' + ], false), + node_js, + numbery = array_to_object(['indexOf', 'lastIndexOf', 'search'], true), + next_token, + option, + predefined, // Global variables defined by option + prereg, + prev_token, + property, + regexp_flag = array_to_object(['g', 'i', 'm'], true), + return_this = function return_this() { + return this; + }, + rhino = array_to_object([ + 'defineClass', 'deserialize', 'gc', 'help', 'load', 'loadClass', + 'print', 'quit', 'readFile', 'readUrl', 'runCommand', 'seal', + 'serialize', 'spawn', 'sync', 'toint32', 'version' + ], false), + + scope, // An object containing an object for each variable in scope + semicolon_coda = array_to_object([';', '"', '\'', ')'], true), + src, + stack, + +// standard contains the global names that are provided by the +// ECMAScript standard. + + standard = array_to_object([ + 'Array', 'Boolean', 'Date', 'decodeURI', 'decodeURIComponent', + 'encodeURI', 'encodeURIComponent', 'Error', 'eval', 'EvalError', + 'Function', 'isFinite', 'isNaN', 'JSON', 'Math', 'Number', + 'Object', 'parseInt', 'parseFloat', 'RangeError', 'ReferenceError', + 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError' + ], false), + + strict_mode, + syntax = {}, + tab, + token, + tokens, + urls, + var_mode, + warnings, + + windows = array_to_object([ + 'ActiveXObject', 'CScript', 'Debug', 'Enumerator', 'System', + 'VBArray', 'WScript', 'WSH' + ], false), + +// Regular expressions. Some of these are stupidly long. + +// carriage return, carriage return linefeed, or linefeed + crlfx = /\r\n?|\n/, +// unsafe characters that are silently deleted by one or more browsers + cx = /[\u0000-\u0008\u000a-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/, +// identifier + ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/, +// javascript url + jx = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i, +// star slash + lx = /\*\/|\/\*/, +// characters in strings that need escapement + nx = /[\u0000-\u001f'\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, +// sync + syx = /Sync$/, +// comment todo + tox = /^\W*to\s*do(?:\W|$)/i, +// token + tx = /^\s*([(){}\[\]\?.,:;'"~#@`]|={1,3}|\/(\*(jslint|properties|property|members?|globals?)?|=|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|[\^%]=?|&[&=]?|\|[|=]?|>{1,3}=?|<(?:[\/=!]|\!(\[|--)?|<=?)?|\!(\!|==?)?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+(?:[xX][0-9a-fA-F]+|\.[0-9]*)?(?:[eE][+\-]?[0-9]+)?)/; + + function F() {} // Used by Object.create + +// Provide critical ES5 functions to ES3. + + if (typeof Array.prototype.filter !== 'function') { + Array.prototype.filter = function (f) { + var i, length = this.length, result = [], value; + for (i = 0; i < length; i += 1) { + try { + value = this[i]; + if (f(value)) { + result.push(value); + } + } catch (ignore) { + } + } + return result; + }; + } + + if (typeof Array.prototype.forEach !== 'function') { + Array.prototype.forEach = function (f) { + var i, length = this.length; + for (i = 0; i < length; i += 1) { + try { + f(this[i]); + } catch (ignore) { + } + } + }; + } + + if (typeof Array.isArray !== 'function') { + Array.isArray = function (o) { + return Object.prototype.toString.apply(o) === '[object Array]'; + }; + } + + if (!Object.prototype.hasOwnProperty.call(Object, 'create')) { + Object.create = function (o) { + F.prototype = o; + return new F(); + }; + } + + if (typeof Object.keys !== 'function') { + Object.keys = function (o) { + var array = [], key; + for (key in o) { + if (Object.prototype.hasOwnProperty.call(o, key)) { + array.push(key); + } + } + return array; + }; + } + + if (typeof String.prototype.entityify !== 'function') { + String.prototype.entityify = function () { + return this + .replace(/&/g, '&') + .replace(//g, '>'); + }; + } + + if (typeof String.prototype.isAlpha !== 'function') { + String.prototype.isAlpha = function () { + return (this >= 'a' && this <= 'z\uffff') || + (this >= 'A' && this <= 'Z\uffff'); + }; + } + + if (typeof String.prototype.isDigit !== 'function') { + String.prototype.isDigit = function () { + return (this >= '0' && this <= '9'); + }; + } + + if (typeof String.prototype.supplant !== 'function') { + String.prototype.supplant = function (o) { + return this.replace(/\{([^{}]*)\}/g, function (a, b) { + var replacement = o[b]; + return typeof replacement === 'string' || + typeof replacement === 'number' ? replacement : a; + }); + }; + } + + function sanitize(a) { + +// Escapify a troublesome character. + + return escapes[a] || + '\\u' + ('0000' + a.charCodeAt().toString(16)).slice(-4); + } + + function add_to_predefined(group) { + Object.keys(group).forEach(function (name) { + predefined[name] = group[name]; + }); + } + + function assume() { + if (option.rhino) { + add_to_predefined(rhino); + option.rhino = false; + } + if (option.devel) { + add_to_predefined(devel); + option.devel = false; + } + if (option.browser) { + add_to_predefined(browser); + option.browser = false; + } + if (option.windows) { + add_to_predefined(windows); + option.windows = false; + } + if (option.node) { + add_to_predefined(node); + option.node = false; + node_js = true; + } + if (option.couch) { + add_to_predefined(couch); + option.couch = false; + } + } + +// Produce an error warning. + + function artifact(tok) { + if (!tok) { + tok = next_token; + } + return tok.number || tok.string; + } + + function quit(message, line, character) { + throw { + name: 'JSLintError', + line: line, + character: character, + message: bundle.scanned_a_b.supplant({ + a: message, + b: Math.floor((line / lines.length) * 100) + }) + }; + } + + function warn(message, offender, a, b, c, d) { + var character, line, warning; + offender = offender || next_token; // ~~ + line = offender.line || 0; + character = offender.from || 0; + warning = { + id: '(error)', + raw: bundle[message] || message, + evidence: lines[line - 1] || '', + line: line, + character: character, + a: a || (offender.id === '(number)' + ? String(offender.number) + : offender.string), + b: b, + c: c, + d: d + }; + warning.reason = warning.raw.supplant(warning); + JSLINT.errors.push(warning); + if (option.passfail) { + quit(bundle.stopping, line, character); + } + warnings += 1; + if (warnings >= option.maxerr) { + quit(bundle.too_many, line, character); + } + return warning; + } + + function warn_at(message, line, character, a, b, c, d) { + return warn(message, { + line: line, + from: character + }, a, b, c, d); + } + + function stop(message, offender, a, b, c, d) { + var warning = warn(message, offender, a, b, c, d); + quit(bundle.stopping, warning.line, warning.character); + } + + function stop_at(message, line, character, a, b, c, d) { + return stop(message, { + line: line, + from: character + }, a, b, c, d); + } + + function expected_at(at) { + if (!option.white && next_token.from !== at) { + warn('expected_a_at_b_c', next_token, '', at, + next_token.from); + } + } + +// lexical analysis and token construction + + lex = (function lex() { + var character, c, from, length, line, pos, source_row; + +// Private lex methods + + function next_line() { + var at; + character = 1; + source_row = lines[line]; + line += 1; + if (source_row === undefined) { + return false; + } + at = source_row.search(/\t/); + if (at >= 0) { + if (option.white) { + source_row = source_row.replace(/\t/g, ' '); + } else { + warn_at('use_spaces', line, at + 1); + } + } + at = source_row.search(cx); + if (at >= 0) { + warn_at('unsafe', line, at); + } + if (option.maxlen && option.maxlen < source_row.length) { + warn_at('too_long', line, source_row.length); + } + return true; + } + +// Produce a token object. The token inherits from a syntax symbol. + + function it(type, value) { + var id, the_token; + if (type === '(string)' || type === '(range)') { + if (jx.test(value)) { + warn_at('url', line, from); + } + } + the_token = Object.create(syntax[( + type === '(punctuator)' || (type === '(identifier)' && + Object.prototype.hasOwnProperty.call(syntax, value)) + ? value + : type + )] || syntax['(error)']); + if (type === '(identifier)') { + the_token.identifier = true; + if (value === '__iterator__' || value === '__proto__') { + stop_at('reserved_a', line, from, value); + } else if (!option.nomen && + (value.charAt(0) === '_' || + value.charAt(value.length - 1) === '_')) { + warn_at('dangling_a', line, from, value); + } + } + if (type === '(number)') { + the_token.number = +value; + } else if (value !== undefined) { + the_token.string = String(value); + } + the_token.line = line; + the_token.from = from; + the_token.thru = character; + id = the_token.id; + prereg = id && ( + ('(,=:[!&|?{};~+-*%^<>'.indexOf(id.charAt(id.length - 1)) >= 0) || + id === 'return' || id === 'case' + ); + return the_token; + } + + function match(x) { + var exec = x.exec(source_row), first; + if (exec) { + length = exec[0].length; + first = exec[1]; + c = first.charAt(0); + source_row = source_row.slice(length); + from = character + length - first.length; + character += length; + return first; + } + for (;;) { + if (!source_row) { + if (!option.white) { + warn_at('unexpected_char_a', line, character - 1, '(space)'); + } + return; + } + c = source_row.charAt(0); + if (c !== ' ') { + break; + } + source_row = source_row.slice(1); + character += 1; + } + stop_at('unexpected_char_a', line, character, c); + + } + + function string(x) { + var c, pos = 0, r = '', result; + + function hex(n) { + var i = parseInt(source_row.slice(pos + 1, pos + 1 + n), 16); + pos += n; + if (i >= 32 && i <= 126 && + i !== 34 && i !== 92 && i !== 39) { + warn_at('unexpected_a', line, character, '\\'); + } + character += n; + c = String.fromCharCode(i); + } + + if (json_mode && x !== '"') { + warn_at('expected_a', line, character, '"'); + } + + for (;;) { + while (pos >= source_row.length) { + pos = 0; + if (!next_line()) { + stop_at('unclosed', line, from); + } + } + c = source_row.charAt(pos); + if (c === x) { + character += 1; + source_row = source_row.slice(pos + 1); + result = it('(string)', r); + result.quote = x; + return result; + } + if (c < ' ') { + if (c === '\n' || c === '\r') { + break; + } + warn_at('control_a', line, character + pos, + source_row.slice(0, pos)); + } else if (c === '\\') { + pos += 1; + character += 1; + c = source_row.charAt(pos); + switch (c) { + case '': + if (!option.es5) { + warn_at('es5', line, character); + } + next_line(); + pos = -1; + break; + case '\'': + if (json_mode) { + warn_at('unexpected_a', line, character, '\\\''); + } + break; + case 'u': + hex(4); + break; + case 'v': + if (json_mode) { + warn_at('unexpected_a', line, character, '\\v'); + } + c = '\v'; + break; + case 'x': + if (json_mode) { + warn_at('unexpected_a', line, character, '\\x'); + } + hex(2); + break; + default: + if (typeof descapes[c] !== 'string') { + warn_at(c >= '0' && c <= '7' ? 'octal_a' : 'unexpected_a', + line, character, '\\' + c); + } else { + c = descapes[c]; + } + } + } + r += c; + character += 1; + pos += 1; + } + } + + function number(snippet) { + var digit; + if (source_row.charAt(0).isAlpha()) { + warn_at('expected_space_a_b', + line, character, c, source_row.charAt(0)); + } + if (c === '0') { + digit = snippet.charAt(1); + if (digit.isDigit()) { + if (token.id !== '.') { + warn_at('unexpected_a', line, character, snippet); + } + } else if (json_mode && (digit === 'x' || digit === 'X')) { + warn_at('unexpected_a', line, character, '0x'); + } + } + if (snippet.slice(snippet.length - 1) === '.') { + warn_at('trailing_decimal_a', line, character, snippet); + } + digit = +snippet; + if (!isFinite(digit)) { + warn_at('bad_number', line, character, snippet); + } + snippet = digit; + return it('(number)', snippet); + } + + function comment(snippet) { + if (comments_off || src) { + warn_at('unexpected_comment', line, character); + } else if (!option.todo && tox.test(snippet)) { + warn_at('todo_comment', line, character); + } + } + + function regexp() { + var b, + bit, + captures = 0, + depth = 0, + flag = '', + high, + letter, + length = 0, + low, + potential, + quote, + result; + for (;;) { + b = true; + c = source_row.charAt(length); + length += 1; + switch (c) { + case '': + stop_at('unclosed_regexp', line, from); + return; + case '/': + if (depth > 0) { + warn_at('unescaped_a', line, from + length, '/'); + } + c = source_row.slice(0, length - 1); + potential = Object.create(regexp_flag); + for (;;) { + letter = source_row.charAt(length); + if (potential[letter] !== true) { + break; + } + potential[letter] = false; + length += 1; + flag += letter; + } + if (source_row.charAt(length).isAlpha()) { + stop_at('unexpected_a', line, from, source_row.charAt(length)); + } + character += length; + source_row = source_row.slice(length); + quote = source_row.charAt(0); + if (quote === '/' || quote === '*') { + stop_at('confusing_regexp', line, from); + } + result = it('(regexp)', c); + result.flag = flag; + return result; + case '\\': + c = source_row.charAt(length); + if (c < ' ') { + warn_at('control_a', line, from + length, String(c)); + } else if (c === '<') { + warn_at(bundle.unexpected_a, line, from + length, '\\'); + } + length += 1; + break; + case '(': + depth += 1; + b = false; + if (source_row.charAt(length) === '?') { + length += 1; + switch (source_row.charAt(length)) { + case ':': + case '=': + case '!': + length += 1; + break; + default: + warn_at(bundle.expected_a_b, line, from + length, + ':', source_row.charAt(length)); + } + } else { + captures += 1; + } + break; + case '|': + b = false; + break; + case ')': + if (depth === 0) { + warn_at('unescaped_a', line, from + length, ')'); + } else { + depth -= 1; + } + break; + case ' ': + pos = 1; + while (source_row.charAt(length) === ' ') { + length += 1; + pos += 1; + } + if (pos > 1) { + warn_at('use_braces', line, from + length, pos); + } + break; + case '[': + c = source_row.charAt(length); + if (c === '^') { + length += 1; + if (!option.regexp) { + warn_at('insecure_a', line, from + length, c); + } else if (source_row.charAt(length) === ']') { + stop_at('unescaped_a', line, from + length, '^'); + } + } + bit = false; + if (c === ']') { + warn_at('empty_class', line, from + length - 1); + bit = true; + } +klass: do { + c = source_row.charAt(length); + length += 1; + switch (c) { + case '[': + case '^': + warn_at('unescaped_a', line, from + length, c); + bit = true; + break; + case '-': + if (bit) { + bit = false; + } else { + warn_at('unescaped_a', line, from + length, '-'); + bit = true; + } + break; + case ']': + if (!bit) { + warn_at('unescaped_a', line, from + length - 1, '-'); + } + break klass; + case '\\': + c = source_row.charAt(length); + if (c < ' ') { + warn_at(bundle.control_a, line, from + length, String(c)); + } else if (c === '<') { + warn_at(bundle.unexpected_a, line, from + length, '\\'); + } + length += 1; + bit = true; + break; + case '/': + warn_at('unescaped_a', line, from + length - 1, '/'); + bit = true; + break; + default: + bit = true; + } + } while (c); + break; + case '.': + if (!option.regexp) { + warn_at('insecure_a', line, from + length, c); + } + break; + case ']': + case '?': + case '{': + case '}': + case '+': + case '*': + warn_at('unescaped_a', line, from + length, c); + break; + } + if (b) { + switch (source_row.charAt(length)) { + case '?': + case '+': + case '*': + length += 1; + if (source_row.charAt(length) === '?') { + length += 1; + } + break; + case '{': + length += 1; + c = source_row.charAt(length); + if (c < '0' || c > '9') { + warn_at(bundle.expected_number_a, line, + from + length, c); + } + length += 1; + low = +c; + for (;;) { + c = source_row.charAt(length); + if (c < '0' || c > '9') { + break; + } + length += 1; + low = +c + (low * 10); + } + high = low; + if (c === ',') { + length += 1; + high = Infinity; + c = source_row.charAt(length); + if (c >= '0' && c <= '9') { + length += 1; + high = +c; + for (;;) { + c = source_row.charAt(length); + if (c < '0' || c > '9') { + break; + } + length += 1; + high = +c + (high * 10); + } + } + } + if (source_row.charAt(length) !== '}') { + warn_at(bundle.expected_a_b, line, from + length, + '}', c); + } else { + length += 1; + } + if (source_row.charAt(length) === '?') { + length += 1; + } + if (low > high) { + warn_at(bundle.not_greater, line, from + length, + low, high); + } + break; + } + } + } + c = source_row.slice(0, length - 1); + character += length; + source_row = source_row.slice(length); + return it('(regexp)', c); + } + +// Public lex methods + + return { + init: function (source) { + if (typeof source === 'string') { + lines = source.split(crlfx); + } else { + lines = source; + } + line = 0; + next_line(); + from = 1; + }, + + range: function (begin, end) { + var c, value = ''; + from = character; + if (source_row.charAt(0) !== begin) { + stop_at('expected_a_b', line, character, begin, + source_row.charAt(0)); + } + for (;;) { + source_row = source_row.slice(1); + character += 1; + c = source_row.charAt(0); + switch (c) { + case '': + stop_at('missing_a', line, character, c); + break; + case end: + source_row = source_row.slice(1); + character += 1; + return it('(range)', value); + case '\\': + warn_at('unexpected_a', line, character, c); + break; + } + value += c; + } + }, + +// token -- this is called by advance to get the next token. + + token: function () { + var c, i, snippet; + + for (;;) { + while (!source_row) { + if (!next_line()) { + return it('(end)'); + } + } + snippet = match(tx); + if (snippet) { + +// identifier + + c = snippet.charAt(0); + if (c.isAlpha() || c === '_' || c === '$') { + return it('(identifier)', snippet); + } + +// number + + if (c.isDigit()) { + return number(snippet); + } + switch (snippet) { + +// string + + case '"': + case "'": + return string(snippet); + +// // comment + + case '//': + comment(source_row); + source_row = ''; + break; + +// /* comment + + case '/*': + for (;;) { + i = source_row.search(lx); + if (i >= 0) { + break; + } + comment(source_row); + if (!next_line()) { + stop_at('unclosed_comment', line, character); + } + } + comment(source_row.slice(0, i)); + character += i + 2; + if (source_row.charAt(i) === '/') { + stop_at('nested_comment', line, character); + } + source_row = source_row.slice(i + 2); + break; + + case '': + break; +// / + case '/': + if (token.id === '/=') { + stop_at( + bundle.slash_equal, + line, + from + ); + } + return prereg + ? regexp() + : it('(punctuator)', snippet); + +// punctuator + + case ''); + } + character += 3; + source_row = source_row.slice(i + 3); + break; + default: + return it('(punctuator)', snippet); + } + } + } + } + }; + }()); + + function add_label(token, kind, name) { + +// Define the symbol in the current function in the current scope. + + name = name || token.string; + if (funct === global_funct) { + if (typeof global_funct[name] !== 'string') { + token.writeable = typeof predefined[name] === 'boolean' + ? predefined[name] + : true; + global_scope[name] = token; + } + if (kind === 'becoming') { + kind = 'var'; + } + +// Ordinary variables. + + } else { + +// Warn if the variable already exists. + + if (typeof funct[name] === 'string') { + if (funct[name] === 'undef') { + if (!option.undef) { + warn('used_before_a', token, name); + } + kind = 'var'; + } else { + warn('already_defined', token, name); + } + } else { + +// Add the symbol to the current function. + + token.writeable = true; + scope[name] = token; + } + } + token.function = funct; + funct[name] = kind; + } + + function peek(distance) { + +// Peek ahead to a future token. The distance is how far ahead to look. The +// default is the next token. + + var found, slot = 0; + + distance = distance || 0; + while (slot <= distance) { + found = lookahead[slot]; + if (!found) { + found = lookahead[slot] = lex.token(); + } + slot += 1; + } + return found; + } + + function advance(id, match) { + +// Produce the next token, also looking for programming errors. + + if (indent) { + +// If indentation checking was requested, then inspect all of the line breakings. +// The var statement is tricky because the names might be aligned or not. We +// look at the first line break after the var to determine the programmer's +// intention. + + if (var_mode && next_token.line !== token.line) { + if ((var_mode !== indent || !next_token.edge) && + next_token.from === indent.at - + (next_token.edge ? option.indent : 0)) { + var dent = indent; + for (;;) { + dent.at -= option.indent; + if (dent === var_mode) { + break; + } + dent = dent.was; + } + dent.open = false; + } + var_mode = null; + } + if (next_token.id === '?' && indent.mode === ':' && + token.line !== next_token.line) { + indent.at -= option.indent; + } + if (indent.open) { + +// If the token is an edge. + + if (next_token.edge) { + if (next_token.edge === 'label') { + expected_at(1); + } else if (next_token.edge === 'case' || indent.mode === 'statement') { + expected_at(indent.at - option.indent); + } else if (indent.mode !== 'array' || next_token.line !== token.line) { + expected_at(indent.at); + } + +// If the token is not an edge, but is the first token on the line. + + } else if (next_token.line !== token.line) { + if (next_token.from < indent.at + (indent.mode === + 'expression' ? 0 : option.indent)) { + expected_at(indent.at + option.indent); + } + indent.wrap = true; + } + } else if (next_token.line !== token.line) { + if (next_token.edge) { + expected_at(indent.at); + } else { + indent.wrap = true; + if (indent.mode === 'statement' || indent.mode === 'var') { + expected_at(indent.at + option.indent); + } else if (next_token.from < indent.at + (indent.mode === + 'expression' ? 0 : option.indent)) { + expected_at(indent.at + option.indent); + } + } + } + } + + switch (token.id) { + case '(number)': + if (next_token.id === '.') { + warn('trailing_decimal_a'); + } + break; + case '-': + if (next_token.id === '-' || next_token.id === '--') { + warn('confusing_a'); + } + break; + case '+': + if (next_token.id === '+' || next_token.id === '++') { + warn('confusing_a'); + } + break; + } + if (token.id === '(string)' || token.identifier) { + anonname = token.string; + } + + if (id && next_token.id !== id) { + if (match) { + warn('expected_a_b_from_c_d', next_token, id, + match.id, match.line, artifact()); + } else if (!next_token.identifier || next_token.string !== id) { + warn('expected_a_b', next_token, id, artifact()); + } + } + prev_token = token; + token = next_token; + next_token = lookahead.shift() || lex.token(); + next_token.function = funct; + tokens.push(next_token); + } + + function do_globals() { + var name, writeable; + for (;;) { + if (next_token.id !== '(string)' && !next_token.identifier) { + return; + } + name = next_token.string; + advance(); + writeable = false; + if (next_token.id === ':') { + advance(':'); + switch (next_token.id) { + case 'true': + writeable = predefined[name] !== false; + advance('true'); + break; + case 'false': + advance('false'); + break; + default: + stop('unexpected_a'); + } + } + predefined[name] = writeable; + if (next_token.id !== ',') { + return; + } + advance(','); + } + } + + function do_jslint() { + var name, value; + while (next_token.id === '(string)' || next_token.identifier) { + name = next_token.string; + if (!allowed_option[name]) { + stop('unexpected_a'); + } + advance(); + if (next_token.id !== ':') { + stop('expected_a_b', next_token, ':', artifact()); + } + advance(':'); + if (typeof allowed_option[name] === 'number') { + value = next_token.number; + if (value > allowed_option[name] || value <= 0 || + Math.floor(value) !== value) { + stop('expected_small_a'); + } + option[name] = value; + } else { + if (next_token.id === 'true') { + option[name] = true; + } else if (next_token.id === 'false') { + option[name] = false; + } else { + stop('unexpected_a'); + } + } + advance(); + if (next_token.id === ',') { + advance(','); + } + } + assume(); + } + + function do_properties() { + var name; + option.properties = true; + for (;;) { + if (next_token.id !== '(string)' && !next_token.identifier) { + return; + } + name = next_token.string; + advance(); + if (next_token.id === ':') { + for (;;) { + advance(); + if (next_token.id !== '(string)' && !next_token.identifier) { + break; + } + } + } + property[name] = 0; + if (next_token.id !== ',') { + return; + } + advance(','); + } + } + + directive = function directive() { + var command = this.id, + old_comments_off = comments_off, + old_indent = indent; + comments_off = true; + indent = null; + if (next_token.line === token.line && next_token.from === token.thru) { + warn('missing_space_a_b', next_token, artifact(token), artifact()); + } + if (lookahead.length > 0) { + warn('unexpected_a', this); + } + switch (command) { + case '/*properties': + case '/*property': + case '/*members': + case '/*member': + do_properties(); + break; + case '/*jslint': + do_jslint(); + break; + case '/*globals': + case '/*global': + do_globals(); + break; + default: + stop('unexpected_a', this); + } + comments_off = old_comments_off; + advance('*/'); + indent = old_indent; + }; + +// Indentation intention + + function edge(mode) { + next_token.edge = indent ? indent.open && (mode || 'edge') : ''; + } + + function step_in(mode) { + var open; + if (typeof mode === 'number') { + indent = { + at: +mode, + open: true, + was: indent + }; + } else if (!indent) { + indent = { + at: 1, + mode: 'statement', + open: true + }; + } else if (mode === 'statement') { + indent = { + at: indent.at, + open: true, + was: indent + }; + } else { + open = mode === 'var' || next_token.line !== token.line; + indent = { + at: (open || mode === 'control' + ? indent.at + option.indent + : indent.at) + (indent.wrap ? option.indent : 0), + mode: mode, + open: open, + was: indent + }; + if (mode === 'var' && open) { + var_mode = indent; + } + } + } + + function step_out(id, symbol) { + if (id) { + if (indent && indent.open) { + indent.at -= option.indent; + edge(); + } + advance(id, symbol); + } + if (indent) { + indent = indent.was; + } + } + +// Functions for conformance of whitespace. + + function one_space(left, right) { + left = left || token; + right = right || next_token; + if (right.id !== '(end)' && !option.white && + (token.line !== right.line || + token.thru + 1 !== right.from)) { + warn('expected_space_a_b', right, artifact(token), artifact(right)); + } + } + + function one_space_only(left, right) { + left = left || token; + right = right || next_token; + if (right.id !== '(end)' && (left.line !== right.line || + (!option.white && left.thru + 1 !== right.from))) { + warn('expected_space_a_b', right, artifact(left), artifact(right)); + } + } + + function no_space(left, right) { + left = left || token; + right = right || next_token; + if ((!option.white) && + left.thru !== right.from && left.line === right.line) { + warn('unexpected_space_a_b', right, artifact(left), artifact(right)); + } + } + + function no_space_only(left, right) { + left = left || token; + right = right || next_token; + if (right.id !== '(end)' && (left.line !== right.line || + (!option.white && left.thru !== right.from))) { + warn('unexpected_space_a_b', right, artifact(left), artifact(right)); + } + } + + function spaces(left, right) { + if (!option.white) { + left = left || token; + right = right || next_token; + if (left.thru === right.from && left.line === right.line) { + warn('missing_space_a_b', right, artifact(left), artifact(right)); + } + } + } + + function comma() { + if (next_token.id !== ',') { + warn_at('expected_a_b', token.line, token.thru, ',', artifact()); + } else { + if (!option.white) { + no_space_only(); + } + advance(','); + spaces(); + } + } + + function semicolon() { + if (next_token.id !== ';') { + warn_at('expected_a_b', token.line, token.thru, ';', artifact()); + } else { + if (!option.white) { + no_space_only(); + } + advance(';'); + if (semicolon_coda[next_token.id] !== true) { + spaces(); + } + } + } + + function use_strict() { + if (next_token.string === 'use strict') { + if (strict_mode) { + warn('unnecessary_use'); + } + edge(); + advance(); + semicolon(); + strict_mode = true; + option.undef = false; + return true; + } + return false; + } + + function are_similar(a, b) { + if (a === b) { + return true; + } + if (Array.isArray(a)) { + if (Array.isArray(b) && a.length === b.length) { + var i; + for (i = 0; i < a.length; i += 1) { + if (!are_similar(a[i], b[i])) { + return false; + } + } + return true; + } + return false; + } + if (Array.isArray(b)) { + return false; + } + if (a.id === '(number)' && b.id === '(number)') { + return a.number === b.number; + } + if (a.arity === b.arity && a.string === b.string) { + switch (a.arity) { + case 'prefix': + case 'suffix': + case undefined: + return a.id === b.id && are_similar(a.first, b.first) && + a.id !== '{' && a.id !== '['; + case 'infix': + return are_similar(a.first, b.first) && + are_similar(a.second, b.second); + case 'ternary': + return are_similar(a.first, b.first) && + are_similar(a.second, b.second) && + are_similar(a.third, b.third); + case 'function': + case 'regexp': + return false; + default: + return true; + } + } else { + if (a.id === '.' && b.id === '[' && b.arity === 'infix') { + return a.second.string === b.second.string && b.second.id === '(string)'; + } + if (a.id === '[' && a.arity === 'infix' && b.id === '.') { + return a.second.string === b.second.string && a.second.id === '(string)'; + } + } + return false; + } + +// This is the heart of JSLINT, the Pratt parser. In addition to parsing, it +// is looking for ad hoc lint patterns. We add .fud to Pratt's model, which is +// like .nud except that it is only used on the first token of a statement. +// Having .fud makes it much easier to define statement-oriented languages like +// JavaScript. I retained Pratt's nomenclature. + +// .nud Null denotation +// .fud First null denotation +// .led Left denotation +// lbp Left binding power +// rbp Right binding power + +// They are elements of the parsing method called Top Down Operator Precedence. + + function expression(rbp, initial) { + +// rbp is the right binding power. +// initial indicates that this is the first expression of a statement. + + var left; + if (next_token.id === '(end)') { + stop('unexpected_a', token, next_token.id); + } + advance(); + if (initial) { + anonname = 'anonymous'; + funct['(verb)'] = token.string; + } + if (initial === true && token.fud) { + left = token.fud(); + } else { + if (token.nud) { + left = token.nud(); + } else { + if (next_token.id === '(number)' && token.id === '.') { + warn('leading_decimal_a', token, artifact()); + advance(); + return token; + } + stop('expected_identifier_a', token, token.id); + } + while (rbp < next_token.lbp) { + advance(); + if (token.led) { + left = token.led(left); + } else { + stop('expected_operator_a', token, token.id); + } + } + } + return left; + } + +// Functional constructors for making the symbols that will be inherited by +// tokens. + + function symbol(s, p) { + var x = syntax[s]; + if (!x || typeof x !== 'object') { + syntax[s] = x = { + id: s, + lbp: p || 0, + string: s + }; + } + return x; + } + + function postscript(x) { + x.postscript = true; + return x; + } + + function ultimate(s) { + var x = symbol(s, 0); + x.from = 1; + x.thru = 1; + x.line = 0; + x.edge = 'edge'; + x.string = s; + return postscript(x); + } + + function stmt(s, f) { + var x = symbol(s); + x.identifier = x.reserved = true; + x.fud = f; + return x; + } + + function labeled_stmt(s, f) { + var x = stmt(s, f); + x.labeled = true; + } + + function disrupt_stmt(s, f) { + var x = stmt(s, f); + x.disrupt = true; + } + + function reserve_name(x) { + var c = x.id.charAt(0); + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { + x.identifier = x.reserved = true; + } + return x; + } + + function prefix(s, f) { + var x = symbol(s, 150); + reserve_name(x); + x.nud = function () { + var that = this; + that.arity = 'prefix'; + if (typeof f === 'function') { + that = f(that); + if (that.arity !== 'prefix') { + return that; + } + } else { + if (s === 'typeof') { + one_space(); + } else { + no_space_only(); + } + that.first = expression(150); + } + switch (that.id) { + case '++': + case '--': + if (!option.plusplus) { + warn('unexpected_a', that); + } else if ((!that.first.identifier || that.first.reserved) && + that.first.id !== '.' && that.first.id !== '[') { + warn('bad_operand', that); + } + break; + default: + if (that.first.arity === 'prefix' || + that.first.arity === 'function') { + warn('unexpected_a', that); + } + } + return that; + }; + return x; + } + + function type(s, t, nud) { + var x = symbol(s); + x.arity = t; + if (nud) { + x.nud = nud; + } + return x; + } + + function reserve(s, f) { + var x = symbol(s); + x.identifier = x.reserved = true; + if (typeof f === 'function') { + x.nud = f; + } + return x; + } + + function constant(name) { + var x = reserve(name); + x.string = name; + x.nud = return_this; + return x; + } + + function reservevar(s, v) { + return reserve(s, function () { + if (typeof v === 'function') { + v(this); + } + return this; + }); + } + + function infix(s, p, f, w) { + var x = symbol(s, p); + reserve_name(x); + x.led = function (left) { + this.arity = 'infix'; + if (!w) { + spaces(prev_token, token); + spaces(); + } + if (!option.bitwise && this.bitwise) { + warn('unexpected_a', this); + } + if (typeof f === 'function') { + return f(left, this); + } + this.first = left; + this.second = expression(p); + return this; + }; + return x; + } + + function expected_relation(node, message) { + if (node.assign) { + warn(message || bundle.conditional_assignment, node); + } + return node; + } + + function expected_condition(node, message) { + switch (node.id) { + case '[': + case '-': + if (node.arity !== 'infix') { + warn(message || bundle.weird_condition, node); + } + break; + case 'false': + case 'function': + case 'Infinity': + case 'NaN': + case 'null': + case 'true': + case 'undefined': + case 'void': + case '(number)': + case '(regexp)': + case '(string)': + case '{': + case '?': + case '~': + warn(message || bundle.weird_condition, node); + break; + case '(': + if (node.first.id === 'new' || + (node.first.string === 'Boolean') || + (node.first.id === '.' && + numbery[node.first.second.string] === true)) { + warn(message || bundle.weird_condition, node); + } + break; + } + return node; + } + + function check_relation(node) { + switch (node.arity) { + case 'prefix': + switch (node.id) { + case '{': + case '[': + warn('unexpected_a', node); + break; + case '!': + warn('confusing_a', node); + break; + } + break; + case 'function': + case 'regexp': + warn('unexpected_a', node); + break; + default: + if (node.id === 'NaN') { + warn('isNaN', node); + } + } + return node; + } + + function relation(s, eqeq) { + return infix(s, 100, function (left, that) { + check_relation(left); + if (eqeq && !option.eqeq) { + warn('expected_a_b', that, eqeq, that.id); + } + var right = expression(100); + if (are_similar(left, right) || + ((left.id === '(string)' || left.id === '(number)') && + (right.id === '(string)' || right.id === '(number)'))) { + warn('weird_relation', that); + } else if (left.id === 'typeof') { + if (right.id !== '(string)') { + warn("expected_string_a", right, right.id === '(number)' + ? right.number + : right.string); + } else if (right.string === 'undefined' || + right.string === 'null') { + warn("unexpected_typeof_a", left, right.string); + } + } else if (right.id === 'typeof') { + if (left.id !== '(string)') { + warn("expected_string_a", left, left.id === '(number)' + ? left.number + : left.string); + } else if (left.string === 'undefined' || + left.string === 'null') { + warn("unexpected_typeof_a", right, left.string); + } + } + that.first = left; + that.second = check_relation(right); + return that; + }); + } + + function assignop(s, op) { + var x = infix(s, 20, function (left, that) { + that.first = left; + if (left.identifier) { + if (scope[left.string]) { + if (scope[left.string].writeable === false) { + warn('read_only', left); + } + } else { + stop('read_only'); + } + if (funct['(params)']) { + funct['(params)'].forEach(function (value) { + if (value.string === left.string) { + value.assign = true; + } + }); + } + } + if (left === syntax.function) { + warn('identifier_function', token); + } + if (left.id === '.' || left.id === '[') { + if (!left.first || left.first.string === 'arguments') { + warn('bad_assignment', that); + } + } else if (left.identifier) { + if (!left.reserved && funct[left.string] === 'exception') { + warn('assign_exception', left); + } + } else { + warn('bad_assignment', that); + } + that.second = expression(19); + if (that.id === '=' && are_similar(that.first, that.second)) { + warn('weird_assignment', that); + } + return that; + }); + x.assign = true; + if (op) { + if (syntax[op].bitwise) { + x.bitwise = true; + } + } + return x; + } + + function bitwise(s, p) { + var x = infix(s, p, 'number'); + x.bitwise = true; + return x; + } + + function suffix(s) { + var x = symbol(s, 150); + x.led = function (left) { + no_space_only(prev_token, token); + if (!option.plusplus) { + warn('unexpected_a', this); + } else if ((!left.identifier || left.reserved) && + left.id !== '.' && left.id !== '[') { + warn('bad_operand', this); + } + this.first = left; + this.arity = 'suffix'; + return this; + }; + return x; + } + + function optional_identifier(variable) { + if (next_token.identifier) { + advance(); + if (token.reserved && (!option.es5 || variable)) { + warn('expected_identifier_a_reserved', token); + } + return token.string; + } + } + + function identifier(variable) { + var i = optional_identifier(variable); + if (!i) { + stop(token.id === 'function' && next_token.id === '(' + ? 'name_function' + : 'expected_identifier_a'); + } + return i; + } + + function statement() { + + var label, old_scope = scope, the_statement; + +// We don't like the empty statement. + + if (next_token.id === ';') { + warn('unexpected_a'); + semicolon(); + return; + } + +// Is this a labeled statement? + + if (next_token.identifier && !next_token.reserved && peek().id === ':') { + edge('label'); + label = next_token; + advance(); + advance(':'); + scope = Object.create(old_scope); + add_label(label, 'label'); + if (next_token.labeled !== true || funct === global_funct) { + stop('unexpected_label_a', label); + } else if (jx.test(label.string + ':')) { + warn('url', label); + } + next_token.label = label; + } + +// Parse the statement. + + if (token.id !== 'else') { + edge(); + } + step_in('statement'); + the_statement = expression(0, true); + if (the_statement) { + +// Look for the final semicolon. + + if (the_statement.arity === 'statement') { + if (the_statement.id === 'switch' || + (the_statement.block && the_statement.id !== 'do')) { + spaces(); + } else { + semicolon(); + } + } else { + +// If this is an expression statement, determine if it is acceptable. +// We do not like +// new Blah; +// statements. If it is to be used at all, new should only be used to make +// objects, not side effects. The expression statements we do like do +// assignment or invocation or delete. + + if (the_statement.id === '(') { + if (the_statement.first.id === 'new') { + warn('bad_new'); + } + } else if (!the_statement.assign && + the_statement.id !== 'delete' && + the_statement.id !== '++' && + the_statement.id !== '--') { + warn('assignment_function_expression', the_statement); + } + semicolon(); + } + } + step_out(); + scope = old_scope; + return the_statement; + } + + function statements() { + var array = [], disruptor, the_statement; + +// A disrupt statement may not be followed by any other statement. +// If the last statement is disrupt, then the sequence is disrupt. + + while (next_token.postscript !== true) { + if (next_token.id === ';') { + warn('unexpected_a', next_token); + semicolon(); + } else { + if (next_token.string === 'use strict') { + if ((!node_js) || funct !== global_funct || array.length > 0) { + warn('function_strict'); + } + use_strict(); + } + if (disruptor) { + warn('unreachable_a_b', next_token, next_token.string, + disruptor.string); + disruptor = null; + } + the_statement = statement(); + if (the_statement) { + array.push(the_statement); + if (the_statement.disrupt) { + disruptor = the_statement; + array.disrupt = true; + } + } + } + } + return array; + } + + function block(ordinary) { + +// array block is array sequence of statements wrapped in braces. +// ordinary is false for function bodies and try blocks. +// ordinary is true for if statements, while, etc. + + var array, + curly = next_token, + old_in_block = in_block, + old_scope = scope, + old_strict_mode = strict_mode; + + in_block = ordinary; + scope = Object.create(scope); + if (next_token.id === '{') { + spaces(); + advance('{'); + step_in(); + if (!ordinary && !use_strict() && !old_strict_mode && + !option.sloppy && funct['(context)'] === global_funct) { + warn('missing_use_strict'); + } + array = statements(); + strict_mode = old_strict_mode; + step_out('}', curly); + } else if (!ordinary) { + stop('expected_a_b', next_token, '{', artifact()); + } else { + warn('expected_a_b', next_token, '{', artifact()); + array = [statement()]; + array.disrupt = array[0].disrupt; + } + funct['(verb)'] = null; + scope = old_scope; + in_block = old_in_block; + if (ordinary && array.length === 0) { + warn('empty_block'); + } + return array; + } + + function tally_property(name) { + if (option.properties && typeof property[name] !== 'number') { + warn('unexpected_property_a', token, name); + } + if (typeof property[name] === 'number') { + property[name] += 1; + } else { + property[name] = 1; + } + } + +// ECMAScript parser + + syntax['(identifier)'] = { + id: '(identifier)', + lbp: 0, + identifier: true, + nud: function () { + var name = this.string, + variable = scope[name], + site, + writeable; + +// If the variable is not in scope, then we may have an undeclared variable. +// Check the predefined list. If it was predefined, create the global +// variable. + + if (typeof variable !== 'object') { + writeable = predefined[name]; + if (typeof writeable === 'boolean') { + global_scope[name] = variable = { + string: name, + writeable: writeable, + function: global_funct + }; + global_funct[name] = 'var'; + +// But if the variable is not in scope, and is not predefined, and if we are not +// in the global scope, then we have an undefined variable error. + + } else { + if (!option.undef) { + warn('used_before_a', token); + } + scope[name] = variable = { + string: name, + writeable: true, + function: funct + }; + funct[name] = 'undef'; + } + + } + site = variable.function; + +// The name is in scope and defined in the current function. + + if (funct === site) { + +// Change 'unused' to 'var', and reject labels. + + switch (funct[name]) { + case 'becoming': + warn('unexpected_a', token); + funct[name] = 'var'; + break; + case 'unused': + funct[name] = 'var'; + break; + case 'unparam': + funct[name] = 'parameter'; + break; + case 'unction': + funct[name] = 'function'; + break; + case 'label': + warn('a_label', token, name); + break; + } + this.function = funct; + +// If the name is already defined in the current +// function, but not as outer, then there is a scope error. + + } else { + switch (funct[name]) { + case 'closure': + case 'function': + case 'var': + case 'unused': + warn('a_scope', token, name); + break; + case 'label': + warn('a_label', token, name); + break; + case 'outer': + case 'global': + break; + default: + +// If the name is defined in an outer function, make an outer entry, and if +// it was unused, make it var. + + switch (site[name]) { + case 'becoming': + case 'closure': + case 'function': + case 'parameter': + case 'unction': + case 'unparam': + case 'unused': + case 'var': + site[name] = 'closure'; + funct[name] = site === global_funct + ? 'global' + : 'outer'; + this.function = site; + break; + case 'undef': + funct[name] = 'undef'; + break; + case 'label': + warn('a_label', token, name); + break; + } + } + } + return this; + }, + led: function () { + stop('expected_operator_a'); + } + }; + +// Build the syntax table by declaring the syntactic elements. + + type('(array)', 'array'); + type('(color)', 'color'); + type('(function)', 'function'); + type('(number)', 'number', return_this); + type('(object)', 'object'); + type('(string)', 'string', return_this); + type('(boolean)', 'boolean', return_this); + type('(range)', 'range'); + type('(regexp)', 'regexp', return_this); + + ultimate('(begin)'); + ultimate('(end)'); + ultimate('(error)'); + postscript(symbol(''); + postscript(symbol('}')); + symbol(')'); + symbol(']'); + postscript(symbol('"')); + postscript(symbol('\'')); + symbol(';'); + symbol(':'); + symbol(','); + symbol('#'); + symbol('@'); + symbol('*/'); + postscript(reserve('case')); + reserve('catch'); + postscript(reserve('default')); + reserve('else'); + reserve('finally'); + + reservevar('arguments', function (x) { + if (strict_mode && funct === global_funct) { + warn('strict', x); + } + funct['(arguments)'] = true; + }); + reservevar('eval'); + constant('false', 'boolean'); + constant('Infinity', 'number'); + constant('NaN', 'number'); + constant('null', ''); + reservevar('this', function (x) { + if (strict_mode && funct['(token)'] && + (funct['(token)'].arity === 'statement' && + funct['(name)'].charAt(0) > 'Z')) { + warn('strict', x); + } + }); + constant('true', 'boolean'); + constant('undefined', ''); + + infix('?', 30, function (left, that) { + step_in('?'); + that.first = expected_condition(expected_relation(left)); + that.second = expression(0); + spaces(); + step_out(); + var colon = next_token; + advance(':'); + step_in(':'); + spaces(); + that.third = expression(10); + that.arity = 'ternary'; + if (are_similar(that.second, that.third)) { + warn('weird_ternary', colon); + } else if (are_similar(that.first, that.second)) { + warn('use_or', that); + } + step_out(); + return that; + }); + + infix('||', 40, function (left, that) { + function paren_check(that) { + if (that.id === '&&' && !that.paren) { + warn('and', that); + } + return that; + } + + that.first = paren_check(expected_condition(expected_relation(left))); + that.second = paren_check(expected_relation(expression(40))); + if (are_similar(that.first, that.second)) { + warn('weird_condition', that); + } + return that; + }); + + infix('&&', 50, function (left, that) { + that.first = expected_condition(expected_relation(left)); + that.second = expected_relation(expression(50)); + if (are_similar(that.first, that.second)) { + warn('weird_condition', that); + } + return that; + }); + + prefix('void', function (that) { + that.first = expression(0); + if (option.es5 || strict_mode) { + warn('expected_a_b', that, 'undefined', 'void'); + } else if (that.first.number !== 0) { + warn('expected_a_b', that.first, '0', artifact(that.first)); + } + return that; + }); + + bitwise('|', 70); + bitwise('^', 80); + bitwise('&', 90); + + relation('==', '==='); + relation('==='); + relation('!=', '!=='); + relation('!=='); + relation('<'); + relation('>'); + relation('<='); + relation('>='); + + bitwise('<<', 120); + bitwise('>>', 120); + bitwise('>>>', 120); + + infix('in', 120, function (left, that) { + warn('infix_in', that); + that.left = left; + that.right = expression(130); + return that; + }); + infix('instanceof', 120); + infix('+', 130, function (left, that) { + if (left.id === '(number)') { + if (left.number === 0) { + warn('unexpected_a', left, '0'); + } + } else if (left.id === '(string)') { + if (left.string === '') { + warn('expected_a_b', left, 'String', '\'\''); + } + } + var right = expression(130); + if (right.id === '(number)') { + if (right.number === 0) { + warn('unexpected_a', right, '0'); + } + } else if (right.id === '(string)') { + if (right.string === '') { + warn('expected_a_b', right, 'String', '\'\''); + } + } + if (left.id === right.id) { + if (left.id === '(string)' || left.id === '(number)') { + if (left.id === '(string)') { + left.string += right.string; + if (jx.test(left.string)) { + warn('url', left); + } + } else { + left.number += right.number; + } + left.thru = right.thru; + return left; + } + } + that.first = left; + that.second = right; + return that; + }); + prefix('+'); + prefix('+++', function () { + warn('confusing_a', token); + this.first = expression(150); + this.arity = 'prefix'; + return this; + }); + infix('+++', 130, function (left) { + warn('confusing_a', token); + this.first = left; + this.second = expression(130); + return this; + }); + infix('-', 130, function (left, that) { + if ((left.id === '(number)' && left.number === 0) || left.id === '(string)') { + warn('unexpected_a', left); + } + var right = expression(130); + if ((right.id === '(number)' && right.number === 0) || right.id === '(string)') { + warn('unexpected_a', right); + } + if (left.id === right.id && left.id === '(number)') { + left.number -= right.number; + left.thru = right.thru; + return left; + } + that.first = left; + that.second = right; + return that; + }); + prefix('-'); + prefix('---', function () { + warn('confusing_a', token); + this.first = expression(150); + this.arity = 'prefix'; + return this; + }); + infix('---', 130, function (left) { + warn('confusing_a', token); + this.first = left; + this.second = expression(130); + return this; + }); + infix('*', 140, function (left, that) { + if ((left.id === '(number)' && (left.number === 0 || left.number === 1)) || left.id === '(string)') { + warn('unexpected_a', left); + } + var right = expression(140); + if ((right.id === '(number)' && (right.number === 0 || right.number === 1)) || right.id === '(string)') { + warn('unexpected_a', right); + } + if (left.id === right.id && left.id === '(number)') { + left.number *= right.number; + left.thru = right.thru; + return left; + } + that.first = left; + that.second = right; + return that; + }); + infix('/', 140, function (left, that) { + if ((left.id === '(number)' && left.number === 0) || left.id === '(string)') { + warn('unexpected_a', left); + } + var right = expression(140); + if ((right.id === '(number)' && (right.number === 0 || right.number === 1)) || right.id === '(string)') { + warn('unexpected_a', right); + } + if (left.id === right.id && left.id === '(number)') { + left.number /= right.number; + left.thru = right.thru; + return left; + } + that.first = left; + that.second = right; + return that; + }); + infix('%', 140, function (left, that) { + if ((left.id === '(number)' && (left.number === 0 || left.number === 1)) || left.id === '(string)') { + warn('unexpected_a', left); + } + var right = expression(140); + if ((right.id === '(number)' && right.number === 0) || right.id === '(string)') { + warn('unexpected_a', right); + } + if (left.id === right.id && left.id === '(number)') { + left.number %= right.number; + left.thru = right.thru; + return left; + } + that.first = left; + that.second = right; + return that; + }); + + suffix('++'); + prefix('++'); + + suffix('--'); + prefix('--'); + prefix('delete', function (that) { + one_space(); + var p = expression(0); + if (!p || (p.id !== '.' && p.id !== '[')) { + warn('deleted'); + } + that.first = p; + return that; + }); + + prefix('~', function (that) { + no_space_only(); + if (!option.bitwise) { + warn('unexpected_a', that); + } + that.first = expression(150); + return that; + }); + function banger(that) { + no_space_only(); + that.first = expected_condition(expression(150)); + if (bang[that.first.id] === that || that.first.assign) { + warn('confusing_a', that); + } + return that; + } + prefix('!', banger); + prefix('!!', banger); + prefix('typeof'); + prefix('new', function (that) { + one_space(); + var c = expression(160), n, p, v; + that.first = c; + if (c.id !== 'function') { + if (c.identifier) { + switch (c.string) { + case 'Object': + warn('use_object', token); + break; + case 'Array': + if (next_token.id === '(') { + p = next_token; + p.first = this; + advance('('); + if (next_token.id !== ')') { + n = expression(0); + p.second = [n]; + if (n.id !== '(number)' || next_token.id === ',') { + warn('use_array', p); + } + while (next_token.id === ',') { + advance(','); + p.second.push(expression(0)); + } + } else { + warn('use_array', token); + } + advance(')', p); + return p; + } + warn('use_array', token); + break; + case 'Number': + case 'String': + case 'Boolean': + case 'Math': + case 'JSON': + warn('not_a_constructor', c); + break; + case 'Function': + if (!option.evil) { + warn('function_eval'); + } + break; + case 'Date': + case 'RegExp': + case 'this': + break; + default: + if (c.id !== 'function') { + v = c.string.charAt(0); + if (!option.newcap && (v < 'A' || v > 'Z')) { + warn('constructor_name_a', token); + } + } + } + } else { + if (c.id !== '.' && c.id !== '[' && c.id !== '(') { + warn('bad_constructor', token); + } + } + } else { + warn('weird_new', that); + } + if (next_token.id !== '(') { + warn('missing_a', next_token, '()'); + } + return that; + }); + + infix('(', 160, function (left, that) { + var e, p; + if (indent && indent.mode === 'expression') { + no_space(prev_token, token); + } else { + no_space_only(prev_token, token); + } + if (!left.immed && left.id === 'function') { + warn('wrap_immediate'); + } + p = []; + if (left.identifier) { + if (left.string.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) { + if (left.string !== 'Number' && left.string !== 'String' && + left.string !== 'Boolean' && left.string !== 'Date') { + if (left.string === 'Math' || left.string === 'JSON') { + warn('not_a_function', left); + } else if (left.string === 'Object') { + warn('use_object', token); + } else if (left.string === 'Array' || !option.newcap) { + warn('missing_a', left, 'new'); + } + } + } + } else if (left.id === '.') { + if (left.second.string === 'split' && + left.first.id === '(string)') { + warn('use_array', left.second); + } + } + step_in(); + if (next_token.id !== ')') { + no_space(); + for (;;) { + edge(); + e = expression(10); + if (left.string === 'Boolean' && (e.id === '!' || e.id === '~')) { + warn('weird_condition', e); + } + p.push(e); + if (next_token.id !== ',') { + break; + } + comma(); + } + } + no_space(); + step_out(')', that); + if (typeof left === 'object') { + if (left.string === 'parseInt' && p.length === 1) { + warn('radix', left); + } else if (left.string === 'String' && p.length >= 1 && p[0].id === '(string)') { + warn('unexpected_a', left); + } + if (!option.evil) { + if (left.string === 'eval' || left.string === 'Function' || + left.string === 'execScript') { + warn('evil', left); + } else if (p[0] && p[0].id === '(string)' && + (left.string === 'setTimeout' || + left.string === 'setInterval')) { + warn('implied_evil', left); + } + } + if (!left.identifier && left.id !== '.' && left.id !== '[' && + left.id !== '(' && left.id !== '&&' && left.id !== '||' && + left.id !== '?') { + warn('bad_invocation', left); + } + if (left.id === '.') { + if (p.length > 0 && + left.first && left.first.first && + are_similar(p[0], left.first.first)) { + if (left.second.string === 'call' || + (left.second.string === 'apply' && (p.length === 1 || + (p[1].arity === 'prefix' && p[1].id === '[')))) { + warn('unexpected_a', left.second); + } + } + if (left.second.string === 'toString') { + if (left.first.id === '(string)' || left.first.id === '(number)') { + warn('unexpected_a', left.second); + } + } + } + } + that.first = left; + that.second = p; + return that; + }, true); + + prefix('(', function (that) { + step_in('expression'); + no_space(); + edge(); + if (next_token.id === 'function') { + next_token.immed = true; + } + var value = expression(0); + value.paren = true; + no_space(); + step_out(')', that); + if (value.id === 'function') { + switch (next_token.id) { + case '(': + warn('move_invocation'); + break; + case '.': + case '[': + warn('unexpected_a'); + break; + default: + warn('bad_wrap', that); + } + } else if (!value.arity) { + warn('unexpected_a', that); + } + return value; + }); + + infix('.', 170, function (left, that) { + no_space(prev_token, token); + no_space(); + var name = identifier(); + if (typeof name === 'string') { + tally_property(name); + } + that.first = left; + that.second = token; + if (left && left.string === 'arguments' && + (name === 'callee' || name === 'caller')) { + warn('avoid_a', left, 'arguments.' + name); + } else if (!option.evil && left && left.string === 'document' && + (name === 'write' || name === 'writeln')) { + warn('write_is_wrong', left); + } else if (!option.stupid && syx.test(name)) { + warn('sync_a', token); + } + if (!option.evil && (name === 'eval' || name === 'execScript')) { + warn('evil'); + } + return that; + }, true); + + infix('[', 170, function (left, that) { + var e, s; + no_space_only(prev_token, token); + no_space(); + step_in(); + edge(); + e = expression(0); + switch (e.id) { + case '(number)': + if (e.id === '(number)' && left.id === 'arguments') { + warn('use_param', left); + } + break; + case '(string)': + if (!option.evil && + (e.string === 'eval' || e.string === 'execScript')) { + warn('evil', e); + } else if (!option.sub && ix.test(e.string)) { + s = syntax[e.string]; + if (!s || !s.reserved) { + warn('subscript', e); + } + } + tally_property(e.string); + break; + } + step_out(']', that); + no_space(prev_token, token); + that.first = left; + that.second = e; + return that; + }, true); + + prefix('[', function (that) { + that.first = []; + step_in('array'); + while (next_token.id !== '(end)') { + while (next_token.id === ',') { + warn('unexpected_a', next_token); + advance(','); + } + if (next_token.id === ']') { + break; + } + indent.wrap = false; + edge(); + that.first.push(expression(10)); + if (next_token.id === ',') { + comma(); + if (next_token.id === ']' && !option.es5) { + warn('unexpected_a', token); + break; + } + } else { + break; + } + } + step_out(']', that); + return that; + }, 170); + + function property_name() { + var id = optional_identifier(); + if (!id) { + if (next_token.id === '(string)') { + id = next_token.string; + advance(); + } else if (next_token.id === '(number)') { + id = next_token.number.toString(); + advance(); + } + } + return id; + } + + assignop('='); + assignop('+=', '+'); + assignop('-=', '-'); + assignop('*=', '*'); + assignop('/=', '/').nud = function () { + stop('slash_equal'); + }; + assignop('%=', '%'); + assignop('&=', '&'); + assignop('|=', '|'); + assignop('^=', '^'); + assignop('<<=', '<<'); + assignop('>>=', '>>'); + assignop('>>>=', '>>>'); + + function function_params() { + var id, paren = next_token, params = []; + advance('('); + token.function = funct; + step_in(); + no_space(); + if (next_token.id === ')') { + no_space(); + step_out(')', paren); + return params; + } + for (;;) { + edge(); + id = identifier(); + params.push(token); + add_label(token, option.unparam ? 'parameter' : 'unparam'); + if (next_token.id === ',') { + comma(); + } else { + no_space(); + step_out(')', paren); + return params; + } + } + } + + function do_function(func, name) { + var old_funct = funct, + old_option = option, + old_scope = scope; + funct = { + '(name)' : name || '\'' + (anonname || '').replace(nx, sanitize) + '\'', + '(line)' : next_token.line, + '(context)' : old_funct, + '(breakage)' : 0, + '(loopage)' : 0, + '(scope)' : scope, + '(token)' : func, + '(level)' : old_funct['(level)'] + 1 + }; + func.function = funct; + option = Object.create(old_option); + scope = Object.create(old_scope); + functions.push(funct); + func.name = name; + func.function = funct; + if (name) { + add_label(func, 'function', name); + } + func.writeable = false; + func.first = funct['(params)'] = function_params(); + one_space(); + func.block = block(false); + if (funct['(arguments)']) { + func.first.forEach(function (value) { + if (value.assign) { + warn('parameter_arguments_a', value, value.string); + } + }); + } + funct = old_funct; + option = old_option; + scope = old_scope; + } + + prefix('{', function (that) { + var get, i, j, name, p, set, seen = {}; + that.first = []; + step_in(); + while (next_token.id !== '}') { + indent.wrap = false; + +// JSLint recognizes the ES5 extension for get/set in object literals, +// but requires that they be used in pairs. + + edge(); + if (next_token.string === 'get' && peek().id !== ':') { + if (!option.es5) { + warn('es5'); + } + get = next_token; + advance('get'); + one_space_only(); + name = next_token; + i = property_name(); + if (!i) { + stop('missing_property'); + } + get.string = ''; + do_function(get); + if (funct['(loopage)']) { + warn('function_loop', get); + } + p = get.first; + if (p && p.length) { + warn('parameter_a_get_b', p[0], p[0].string, i); + } + comma(); + set = next_token; + spaces(); + edge(); + advance('set'); + set.string = ''; + one_space_only(); + j = property_name(); + if (i !== j) { + stop('expected_a_b', token, i, j || next_token.string); + } + do_function(set); + if (set.block.length === 0) { + warn('missing_a', token, 'throw'); + } + p = set.first; + if (!p || p.length !== 1) { + stop('parameter_set_a', set, 'value'); + } else if (p[0].string !== 'value') { + stop('expected_a_b', p[0], 'value', p[0].string); + } + name.first = [get, set]; + } else { + name = next_token; + i = property_name(); + if (typeof i !== 'string') { + stop('missing_property'); + } + advance(':'); + spaces(); + name.first = expression(10); + } + that.first.push(name); + if (seen[i] === true) { + warn('duplicate_a', next_token, i); + } + seen[i] = true; + tally_property(i); + if (next_token.id !== ',') { + break; + } + for (;;) { + comma(); + if (next_token.id !== ',') { + break; + } + warn('unexpected_a', next_token); + } + if (next_token.id === '}' && !option.es5) { + warn('unexpected_a', token); + } + } + step_out('}', that); + return that; + }); + + stmt('{', function () { + warn('statement_block'); + this.arity = 'statement'; + this.block = statements(); + this.disrupt = this.block.disrupt; + advance('}', this); + return this; + }); + + stmt('/*global', directive); + stmt('/*globals', directive); + stmt('/*jslint', directive); + stmt('/*member', directive); + stmt('/*members', directive); + stmt('/*property', directive); + stmt('/*properties', directive); + + stmt('var', function () { + +// JavaScript does not have block scope. It only has function scope. So, +// declaring a variable in a block can have unexpected consequences. + +// var.first will contain an array, the array containing name tokens +// and assignment tokens. + + var assign, id, name; + + if (funct['(vars)'] && !option.vars) { + warn('combine_var'); + } else if (funct !== global_funct) { + funct['(vars)'] = true; + } + this.arity = 'statement'; + this.first = []; + step_in('var'); + for (;;) { + name = next_token; + id = identifier(true); + add_label(name, 'becoming'); + + if (next_token.id === '=') { + assign = next_token; + assign.first = name; + spaces(); + advance('='); + spaces(); + if (next_token.id === 'undefined') { + warn('unnecessary_initialize', token, id); + } + if (peek(0).id === '=' && next_token.identifier) { + stop('var_a_not'); + } + assign.second = expression(0); + assign.arity = 'infix'; + this.first.push(assign); + } else { + this.first.push(name); + } + if (funct[id] === 'becoming') { + funct[id] = 'unused'; + } + if (next_token.id !== ',') { + break; + } + comma(); + indent.wrap = false; + if (var_mode && next_token.line === token.line && + this.first.length === 1) { + var_mode = null; + indent.open = false; + indent.at -= option.indent; + } + spaces(); + edge(); + } + var_mode = null; + step_out(); + return this; + }); + + stmt('function', function () { + one_space(); + if (in_block) { + warn('function_block', token); + } + var name = next_token, + id = identifier(true); + add_label(name, 'unction'); + no_space(); + this.arity = 'statement'; + do_function(this, id); + if (next_token.id === '(' && next_token.line === token.line) { + stop('function_statement'); + } + return this; + }); + + prefix('function', function (that) { + var id = optional_identifier(true); + if (id) { + no_space(); + } else { + id = ''; + } + do_function(that, id); + if (funct['(loopage)']) { + warn('function_loop'); + } + switch (next_token.id) { + case ';': + case '(': + case ')': + case ',': + case ']': + case '}': + case ':': + break; + case '.': + if (peek().string !== 'bind' || peek(1).id !== '(') { + warn('unexpected_a'); + } + break; + default: + stop('unexpected_a'); + } + that.arity = 'function'; + return that; + }); + + stmt('if', function () { + var paren = next_token; + one_space(); + advance('('); + step_in('control'); + no_space(); + edge(); + this.arity = 'statement'; + this.first = expected_condition(expected_relation(expression(0))); + no_space(); + step_out(')', paren); + one_space(); + this.block = block(true); + if (next_token.id === 'else') { + one_space(); + advance('else'); + one_space(); + this.else = next_token.id === 'if' || next_token.id === 'switch' + ? statement(true) + : block(true); + if (this.else.disrupt && this.block.disrupt) { + this.disrupt = true; + } + } + return this; + }); + + stmt('try', function () { + +// try.first The catch variable +// try.second The catch clause +// try.third The finally clause +// try.block The try block + + var exception_variable, old_scope, paren; + one_space(); + this.arity = 'statement'; + this.block = block(false); + if (next_token.id === 'catch') { + one_space(); + advance('catch'); + one_space(); + paren = next_token; + advance('('); + step_in('control'); + no_space(); + edge(); + old_scope = scope; + scope = Object.create(old_scope); + exception_variable = next_token.string; + this.first = exception_variable; + if (!next_token.identifier) { + warn('expected_identifier_a', next_token); + } else { + add_label(next_token, 'exception'); + } + advance(); + no_space(); + step_out(')', paren); + one_space(); + this.second = block(false); + scope = old_scope; + } + if (next_token.id === 'finally') { + one_space(); + advance('finally'); + one_space(); + this.third = block(false); + } else if (!this.second) { + stop('expected_a_b', next_token, 'catch', artifact()); + } + return this; + }); + + labeled_stmt('while', function () { + one_space(); + var paren = next_token; + funct['(breakage)'] += 1; + funct['(loopage)'] += 1; + advance('('); + step_in('control'); + no_space(); + edge(); + this.arity = 'statement'; + this.first = expected_relation(expression(0)); + if (this.first.id !== 'true') { + expected_condition(this.first, bundle.unexpected_a); + } + no_space(); + step_out(')', paren); + one_space(); + this.block = block(true); + if (this.block.disrupt) { + warn('strange_loop', prev_token); + } + funct['(breakage)'] -= 1; + funct['(loopage)'] -= 1; + return this; + }); + + reserve('with'); + + labeled_stmt('switch', function () { + +// switch.first the switch expression +// switch.second the array of cases. A case is 'case' or 'default' token: +// case.first the array of case expressions +// case.second the array of statements +// If all of the arrays of statements are disrupt, then the switch is disrupt. + + var cases = [], + old_in_block = in_block, + particular, + that = token, + the_case = next_token, + unbroken = true; + + function find_duplicate_case(value) { + if (are_similar(particular, value)) { + warn('duplicate_a', value); + } + } + + funct['(breakage)'] += 1; + one_space(); + advance('('); + no_space(); + step_in(); + this.arity = 'statement'; + this.first = expected_condition(expected_relation(expression(0))); + no_space(); + step_out(')', the_case); + one_space(); + advance('{'); + step_in(); + in_block = true; + this.second = []; + if (that.from !== next_token.from && !option.white) { + warn('expected_a_at_b_c', next_token, next_token.string, that.from, next_token.from); + } + while (next_token.id === 'case') { + the_case = next_token; + cases.forEach(find_duplicate_case); + the_case.first = []; + the_case.arity = 'case'; + spaces(); + edge('case'); + advance('case'); + for (;;) { + one_space(); + particular = expression(0); + cases.forEach(find_duplicate_case); + cases.push(particular); + the_case.first.push(particular); + if (particular.id === 'NaN') { + warn('unexpected_a', particular); + } + no_space_only(); + advance(':'); + if (next_token.id !== 'case') { + break; + } + spaces(); + edge('case'); + advance('case'); + } + spaces(); + the_case.second = statements(); + if (the_case.second && the_case.second.length > 0) { + particular = the_case.second[the_case.second.length - 1]; + if (particular.disrupt) { + if (particular.id === 'break') { + unbroken = false; + } + } else { + warn('missing_a_after_b', next_token, 'break', 'case'); + } + } else { + warn('empty_case'); + } + this.second.push(the_case); + } + if (this.second.length === 0) { + warn('missing_a', next_token, 'case'); + } + if (next_token.id === 'default') { + spaces(); + the_case = next_token; + the_case.arity = 'case'; + edge('case'); + advance('default'); + no_space_only(); + advance(':'); + spaces(); + the_case.second = statements(); + if (the_case.second && the_case.second.length > 0) { + particular = the_case.second[the_case.second.length - 1]; + if (unbroken && particular.disrupt && particular.id !== 'break') { + this.disrupt = true; + } + } + this.second.push(the_case); + } + funct['(breakage)'] -= 1; + spaces(); + step_out('}', this); + in_block = old_in_block; + return this; + }); + + stmt('debugger', function () { + if (!option.debug) { + warn('unexpected_a', this); + } + this.arity = 'statement'; + return this; + }); + + labeled_stmt('do', function () { + funct['(breakage)'] += 1; + funct['(loopage)'] += 1; + one_space(); + this.arity = 'statement'; + this.block = block(true); + if (this.block.disrupt) { + warn('strange_loop', prev_token); + } + one_space(); + advance('while'); + var paren = next_token; + one_space(); + advance('('); + step_in(); + no_space(); + edge(); + this.first = expected_condition(expected_relation(expression(0)), bundle.unexpected_a); + no_space(); + step_out(')', paren); + funct['(breakage)'] -= 1; + funct['(loopage)'] -= 1; + return this; + }); + + labeled_stmt('for', function () { + + var blok, filter, ok = false, paren = next_token, value; + this.arity = 'statement'; + funct['(breakage)'] += 1; + funct['(loopage)'] += 1; + advance('('); + if (next_token.id === ';') { + no_space(); + advance(';'); + no_space(); + advance(';'); + no_space(); + advance(')'); + blok = block(true); + } else { + step_in('control'); + spaces(this, paren); + no_space(); + if (next_token.id === 'var') { + stop('move_var'); + } + edge(); + if (peek(0).id === 'in') { + this.forin = true; + value = next_token; + switch (funct[value.string]) { + case 'unused': + funct[value.string] = 'var'; + break; + case 'closure': + case 'var': + break; + default: + warn('bad_in_a', value); + } + advance(); + advance('in'); + this.first = value; + this.second = expression(20); + step_out(')', paren); + blok = block(true); + if (!option.forin) { + if (blok.length === 1 && typeof blok[0] === 'object' && + blok[0].string === 'if' && !blok[0].else) { + filter = blok[0].first; + while (filter.id === '&&') { + filter = filter.first; + } + switch (filter.id) { + case '===': + case '!==': + ok = filter.first.id === '[' + ? filter.first.first.string === this.second.string && + filter.first.second.string === this.first.string + : filter.first.id === 'typeof' && + filter.first.first.id === '[' && + filter.first.first.first.string === this.second.string && + filter.first.first.second.string === this.first.string; + break; + case '(': + ok = filter.first.id === '.' && (( + filter.first.first.string === this.second.string && + filter.first.second.string === 'hasOwnProperty' && + filter.second[0].string === this.first.string + ) || ( + filter.first.first.id === '.' && + filter.first.first.first.id === '.' && + filter.first.first.first.first.string === 'Object' && + filter.first.first.first.second.string === 'prototype' && + filter.first.first.second.string === 'hasOwnProperty' && + filter.first.second.string === 'call' && + filter.second[0].string === this.second.string && + filter.second[1].string === this.first.string + )); + break; + } + } + if (!ok) { + warn('for_if', this); + } + } + } else { + edge(); + this.first = []; + for (;;) { + this.first.push(expression(0, 'for')); + if (next_token.id !== ',') { + break; + } + comma(); + } + semicolon(); + edge(); + this.second = expected_relation(expression(0)); + if (this.second.id !== 'true') { + expected_condition(this.second, bundle.unexpected_a); + } + semicolon(token); + if (next_token.id === ';') { + stop('expected_a_b', next_token, ')', ';'); + } + this.third = []; + edge(); + for (;;) { + this.third.push(expression(0, 'for')); + if (next_token.id !== ',') { + break; + } + comma(); + } + no_space(); + step_out(')', paren); + one_space(); + blok = block(true); + } + } + if (blok.disrupt) { + warn('strange_loop', prev_token); + } + this.block = blok; + funct['(breakage)'] -= 1; + funct['(loopage)'] -= 1; + return this; + }); + + disrupt_stmt('break', function () { + var label = next_token.string; + this.arity = 'statement'; + if (funct['(breakage)'] === 0) { + warn('unexpected_a', this); + } + if (next_token.identifier && token.line === next_token.line) { + one_space_only(); + if (funct[label] !== 'label') { + warn('not_a_label', next_token); + } else if (scope[label].function !== funct) { + warn('not_a_scope', next_token); + } + this.first = next_token; + advance(); + } + return this; + }); + + disrupt_stmt('continue', function () { + if (!option.continue) { + warn('unexpected_a', this); + } + var label = next_token.string; + this.arity = 'statement'; + if (funct['(breakage)'] === 0) { + warn('unexpected_a', this); + } + if (next_token.identifier && token.line === next_token.line) { + one_space_only(); + if (funct[label] !== 'label') { + warn('not_a_label', next_token); + } else if (scope[label].function !== funct) { + warn('not_a_scope', next_token); + } + this.first = next_token; + advance(); + } + return this; + }); + + disrupt_stmt('return', function () { + if (funct === global_funct) { + warn('unexpected_a', this); + } + this.arity = 'statement'; + if (next_token.id !== ';' && next_token.line === token.line) { + one_space_only(); + if (next_token.id === '/' || next_token.id === '(regexp)') { + warn('wrap_regexp'); + } + this.first = expression(0); + if (this.first.assign) { + warn('unexpected_a', this.first); + } + } + if (peek(0).id === '}' && peek(1).id === 'else') { + warn('unexpected_else', this); + } + return this; + }); + + disrupt_stmt('throw', function () { + this.arity = 'statement'; + one_space_only(); + this.first = expression(20); + return this; + }); + +// Superfluous reserved words + + reserve('class'); + reserve('const'); + reserve('enum'); + reserve('export'); + reserve('extends'); + reserve('import'); + reserve('super'); + +// Harmony reserved words + + reserve('implements'); + reserve('interface'); + reserve('let'); + reserve('package'); + reserve('private'); + reserve('protected'); + reserve('public'); + reserve('static'); + reserve('yield'); + +// Parse JSON + + function json_value() { + + function json_object() { + var brace = next_token, object = {}; + advance('{'); + if (next_token.id !== '}') { + while (next_token.id !== '(end)') { + while (next_token.id === ',') { + warn('unexpected_a', next_token); + advance(','); + } + if (next_token.id !== '(string)') { + warn('expected_string_a'); + } + if (object[next_token.string] === true) { + warn('duplicate_a'); + } else if (next_token.string === '__proto__') { + warn('dangling_a'); + } else { + object[next_token.string] = true; + } + advance(); + advance(':'); + json_value(); + if (next_token.id !== ',') { + break; + } + advance(','); + if (next_token.id === '}') { + warn('unexpected_a', token); + break; + } + } + } + advance('}', brace); + } + + function json_array() { + var bracket = next_token; + advance('['); + if (next_token.id !== ']') { + while (next_token.id !== '(end)') { + while (next_token.id === ',') { + warn('unexpected_a', next_token); + advance(','); + } + json_value(); + if (next_token.id !== ',') { + break; + } + advance(','); + if (next_token.id === ']') { + warn('unexpected_a', token); + break; + } + } + } + advance(']', bracket); + } + + switch (next_token.id) { + case '{': + json_object(); + break; + case '[': + json_array(); + break; + case 'true': + case 'false': + case 'null': + case '(number)': + case '(string)': + advance(); + break; + case '-': + advance('-'); + no_space_only(); + advance('(number)'); + break; + default: + stop('unexpected_a'); + } + } + +// The actual JSLINT function itself. + + itself = function JSLint(the_source, the_option) { + + var i, predef, tree; + JSLINT.errors = []; + JSLINT.tree = ''; + JSLINT.properties = ''; + begin = prev_token = token = next_token = + Object.create(syntax['(begin)']); + tokens = []; + predefined = {}; + add_to_predefined(standard); + property = {}; + if (the_option) { + option = Object.create(the_option); + predef = option.predef; + if (predef) { + if (Array.isArray(predef)) { + for (i = 0; i < predef.length; i += 1) { + predefined[predef[i]] = true; + } + } else if (typeof predef === 'object') { + add_to_predefined(predef); + } + } + } else { + option = {}; + } + option.indent = +option.indent || 4; + option.maxerr = +option.maxerr || 50; + tab = ''; + for (i = 0; i < option.indent; i += 1) { + tab += ' '; + } + global_scope = scope = {}; + global_funct = funct = { + '(scope)': scope, + '(breakage)': 0, + '(loopage)': 0, + '(level)': 0 + }; + functions = [funct]; + + comments_off = false; + in_block = false; + indent = null; + json_mode = false; + lookahead = []; + node_js = false; + prereg = true; + src = false; + stack = null; + strict_mode = false; + urls = []; + var_mode = null; + warnings = 0; + lex.init(the_source); + + assume(); + + try { + advance(); + if (next_token.id === '(number)') { + stop('unexpected_a'); + } else { + switch (next_token.id) { + case '{': + case '[': + json_mode = true; + json_value(); + break; + default: + +// If the first token is a semicolon, ignore it. This is sometimes used when +// files are intended to be appended to files that may be sloppy. A sloppy +// file may be depending on semicolon insertion on its last line. + + step_in(1); + if (next_token.id === ';' && !node_js) { + semicolon(); + } + tree = statements(); + begin.first = tree; + itself.tree = begin; + if (tree.disrupt) { + warn('weird_program', prev_token); + } + } + } + indent = null; + advance('(end)'); + itself.property = property; + } catch (e) { + if (e) { // ~~ + JSLINT.errors.push({ + reason : e.message, + line : e.line || next_token.line, + character : e.character || next_token.from + }, null); + } + } + return JSLINT.errors.length === 0; + }; + +// Data summary. + + itself.data = function () { + var data = {functions: []}, + function_data, + globals, + i, + j, + kind, + name, + the_function, + undef = [], + unused = []; + if (itself.errors.length) { + data.errors = itself.errors; + } + + if (json_mode) { + data.json = true; + } + + if (urls.length > 0) { + data.urls = urls; + } + + globals = Object.keys(global_scope).filter(function (value) { + return value.charAt(0) !== '(' && typeof standard[value] !== 'boolean'; + }); + if (globals.length > 0) { + data.globals = globals; + } + + for (i = 1; i < functions.length; i += 1) { + the_function = functions[i]; + function_data = {}; + for (j = 0; j < functionicity.length; j += 1) { + function_data[functionicity[j]] = []; + } + for (name in the_function) { + if (Object.prototype.hasOwnProperty.call(the_function, name)) { + if (name.charAt(0) !== '(') { + kind = the_function[name]; + if (kind === 'unction' || kind === 'unparam') { + kind = 'unused'; + } + if (Array.isArray(function_data[kind])) { + function_data[kind].push(name); + if (kind === 'unused') { + unused.push({ + name: name, + line: the_function['(line)'], + 'function': the_function['(name)'] + }); + } else if (kind === 'undef') { + undef.push({ + name: name, + line: the_function['(line)'], + 'function': the_function['(name)'] + }); + } + } + } + } + } + for (j = 0; j < functionicity.length; j += 1) { + if (function_data[functionicity[j]].length === 0) { + delete function_data[functionicity[j]]; + } + } + function_data.name = the_function['(name)']; + function_data.params = the_function['(params)']; + function_data.line = the_function['(line)']; + function_data.level = the_function['(level)']; + data.functions.push(function_data); + } + + if (unused.length > 0) { + data.unused = unused; + } + if (undef.length > 0) { + data.undefined = undef; + } + data.tokens = tokens; + return data; + }; + + itself.error_report = function (data) { + var evidence, i, output = [], snippets, warning; + if (data.errors) { + if (data.json) { + output.push('JSON: bad.
      '); + } + for (i = 0; i < data.errors.length; i += 1) { + warning = data.errors[i]; + if (warning) { + evidence = warning.evidence || ''; + output.push(''); + if (isFinite(warning.line)) { + output.push('
      line ' + + String(warning.line) + + ' character ' + String(warning.character) + + '
      '); + } + output.push(warning.reason.entityify() + '
      '); + if (evidence) { + output.push('
      ' + evidence.entityify() + '
      '); + } + } + } + } + if (data.unused || data.undefined) { + output.push('
      '); + if (data.undefined) { + output.push('
      undefined
      '); + snippets = []; + for (i = 0; i < data.undefined.length; i += 1) { + snippets[i] = '' + data.undefined[i].name + + ' 
      ' + + data.undefined[i]['function'] + ' ' + + String(data.undefined[i].line) + '
      '; + } + output.push(snippets.join(', ')); + output.push('
      '); + } + if (data.unused) { + output.push('
      unused
      '); + snippets = []; + for (i = 0; i < data.unused.length; i += 1) { + snippets[i] = '' + data.unused[i].name + ' 
      ' + + data.unused[i].function + ' ' + + String(data.unused[i].line) + '
      '; + } + output.push(snippets.join(', ')); + output.push('
      '); + } + output.push('
      '); + } + return output.join(''); + }; + + itself.report = function (data) { + var dl, i, j, names, output = [], the_function; + + function detail(h, value) { + var comma_needed, singularity; + if (Array.isArray(value)) { + output.push("
      " + h + "
      "); + value.sort().forEach(function (item) { + if (item !== singularity) { + singularity = item; + output.push((comma_needed ? ', ' : '') + singularity); + comma_needed = true; + } + }); + output.push("
      "); + } else if (value) { + output.push("
      " + h + "
      ", value, "
      "); + } + } + + output.push('
      '); + if (data.urls) { + detail('url', data.urls); + dl = true; + } + if (data.globals) { + detail('global', data.globals); + dl = true; + } else if (data.json) { + if (!data.errors) { + output.push("
      JSON: good.
      "); + } + } else { + output.push("
      No new global variables introduced.
      "); + } + if (dl) { + output.push("
      "); + } else { + output[0] = ''; + } + + if (data.functions) { + for (i = 0; i < data.functions.length; i += 1) { + the_function = data.functions[i]; + names = []; + if (the_function.params) { + for (j = 0; j < the_function.params.length; j += 1) { + names[j] = the_function.params[j].string; + } + } + output.push('
      line ' + String(the_function.line) + + '
      ' + the_function.name.entityify() + '(' + + names.join(', ') + ')'); + detail('undefined', the_function.undefined); + detail('unused', the_function.unused); + detail('closure', the_function.closure); + detail('variable', the_function.var); + detail('exception', the_function.exception); + detail('outer', the_function.outer); + detail('global', the_function.global); + detail('label', the_function.label); + output.push('
      '); + } + } + return output.join(''); + }; + + itself.properties_report = function (property) { + if (!property) { + return ''; + } + var i, + key, + keys = Object.keys(property).sort(), + length, + mem = ' ', + name, + not_first = false, + output = ['/*properties']; + for (i = 0; i < keys.length; i += 1) { + key = keys[i]; + if (property[key] > 0) { + if (not_first) { + mem += ', '; + } + name = ix.test(key) + ? key + : '\'' + key.replace(nx, sanitize) + '\''; + length += name.length + 2; + if (mem.length + name.length >= 80) { + output.push(mem); + mem = ' '; + } + mem += name; + not_first = true; + } + } + output.push(mem, '*/\n'); + return output.join('\n'); + }; + + itself.color = function (data) { + var from, + i = 1, + level, + line, + result = [], + thru, + token = data.tokens[0]; + while (token && token.id !== '(end)') { + from = token.from; + line = token.line; + thru = token.thru; + level = token.function['(level)']; + do { + thru = token.thru; + token = data.tokens[i]; + i += 1; + } while (token && token.line === line && token.from - thru < 5 && + level === token.function['(level)']); + result.push({ + line: line, + level: level, + from: from, + thru: thru + }); + } + return result; + }; + + itself.jslint = itself; + + itself.edition = '2013-03-19'; + + return itself; +}()); diff --git a/tests/javascript/matomo.php b/tests/javascript/matomo.php new file mode 100644 index 0000000000000000000000000000000000000000..414666c1ec27a401a10dd5cfb7165c9bb5f3dd34 --- /dev/null +++ b/tests/javascript/matomo.php @@ -0,0 +1,139 @@ +init(); +$dbConfig = Piwik\Config::getInstance()->database_tests; +$dbConfig['dbname'] = 'tracker_tests'; + +try { + Piwik\Db::createDatabaseObject($dbConfig); +} catch (Exception $e) { + $dbInfosConnectOnly = $dbConfig; + $dbInfosConnectOnly['dbname'] = null; + Piwik\Db::createDatabaseObject($dbInfosConnectOnly); + Piwik\DbHelper::createDatabase($dbConfig['dbname']); + Piwik\Db::createDatabaseObject($dbConfig); +} + +$db = Piwik\Db::get(); + +function sendWebBug() { + $trans_gif_64 = "R0lGODlhAQABAIAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="; + header("Content-type: image/gif"); + print(base64_decode($trans_gif_64)); +} + +function isPost() +{ + return $_SERVER['REQUEST_METHOD'] == 'POST'; +} + +if (!Piwik\Db::hasDatabaseObject()) { + sendWebBug(); + exit; +} + +function getNextRequestId($db, $token) +{ + $requests = $db->fetchAll("SELECT uri FROM requests WHERE token = \"$token\""); + + if (empty($requests)) { + return 1; + } + + return count($requests) + 1; +} + +try { + $db->query( 'CREATE TABLE IF NOT EXISTS `requests` (requestid TEXT, token TEXT, ip TEXT, ts TEXT, uri TEXT, referer TEXT, ua TEXT) DEFAULT CHARSET=utf8' ); +} catch (Exception $e) { + header("HTTP/1.0 500 Internal Server Error"); + exit; +} + +function logRequest($db, $uri, $data) { + $ip = $_SERVER['REMOTE_ADDR']; + $ts = $_SERVER['REQUEST_TIME']; + +// $uri = htmlspecialchars($uri); + + $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; + $ua = $_SERVER['HTTP_USER_AGENT']; + + $token = isset($data['token']) ? $data['token'] : ''; + + $id = getNextRequestId($db, $token); + + $query = $db->query( + "INSERT INTO requests (requestid, token, ip, ts, uri, referer, ua) VALUES (?, ?, ?, ?, ?, ?, ?)", + [$id, $token, $ip, $ts, $uri, $referrer, $ua] + ); + + return $query; +} + +if (isset($_GET['requests'])) { + $token = htmlentities($_GET['requests'], ENT_COMPAT | ENT_HTML401, 'UTF-8'); + $ua = $_SERVER['HTTP_USER_AGENT']; + + echo "$token\n"; + + $result = @$db->fetchAll("SELECT uri FROM requests WHERE token = ? AND ua = ? ORDER BY ts ASC, requestid ASC", [$token, $ua]); + if ($result !== false) { + $nofRows = count($result); + echo "$nofRows\n"; + + foreach ($result as $entry) { + echo "". $entry['uri'] ."\n"; + } + } + + echo "\n"; +} else { + + if (!isset($_REQUEST['data'])) { + header("HTTP/1.0 400 Bad Request"); + } else { + + $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; + + $input = file_get_contents("php://input"); + $requests = @json_decode($input, true); + $data = json_decode($_REQUEST['data'], true); + + if (!empty($requests) && isPost()) { + $query = true; + foreach ($requests['requests'] as $request) { + if (empty($data) && preg_match('/data=%7B%22token%22%3A%22([a-z0-9A-Z]*?)%22%7D/', $request, $matches)) { + // safari and opera + $data = array('token' => $matches[1]); + } + + $query = $query && logRequest($db, $uri . $request, $data); + } + } else { + + if (isPost()) { + $uri .= '?' . file_get_contents('php://input'); + } + + $query = logRequest($db, $uri, $data); + } + + if (!$query) { + header("HTTP/1.0 500 Internal Server Error"); + } else { + sendWebBug(); + } + } +} diff --git a/tests/javascript/matomotest.js b/tests/javascript/matomotest.js new file mode 100644 index 0000000000000000000000000000000000000000..f630961e502d38614011b064c849f5688a87cd59 --- /dev/null +++ b/tests/javascript/matomotest.js @@ -0,0 +1,100 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +/*global Piwik getToken */ + +Matomo.addPlugin('testPlugin', { + /* + * called when tracker instantiated + * - function or string to be eval()'d + */ + run: function (params, registerHookCallback) { + registerHookCallback('test', + '{' + + '_isDefined : isDefined,' + + '_isFunction : isFunction,' + + '_isObject : isObject,' + + '_isString : isString,' + + '_isSiteHostName : isSiteHostName,' + + '_isSiteHostPath : isSiteHostPath,' + + '_isReferrerExcluded : isReferrerExcluded,' + + '_shouldIgnoreCampaignForReferrer : shouldIgnoreCampaignForReferrer,' + + '_shouldIgnoreCampaignAttributionForSource : shouldIgnoreCampaignAttributionForSource,' + + '_getClassesRegExp : getClassesRegExp,' + + '_hasCookies : hasCookies,' + + '_getCookie : getCookie,' + + '_getCookieName : getCookieName,' + + '_setCookie : setCookie,' + + '_getLinkIfShouldBeProcessed : getLinkIfShouldBeProcessed,' + + '_encode : encodeWrapper,' + + '_decode : decodeWrapper,' + + '_urldecode : urldecode,' + + '_getLinkType : getLinkType,' + + '_beforeUnloadHandler : beforeUnloadHandler,' + + '_getProtocolScheme : getProtocolScheme,' + + '_getHostName : getHostName,' + + '_getUrlParameter : getUrlParameter,' + + '_addUrlParameter : addUrlParameter,' + + '_removeUrlParameter : removeUrlParameter,' + + '_getVisitorIdFromUrl : getVisitorIdFromUrl,' + + '_generateBrowserSpecificId : generateBrowserSpecificId,' + + '_makeCrossDomainDeviceId: makeCrossDomainDeviceId,' + + '_isSameCrossDomainDevice: isSameCrossDomainDevice,' + + '_replaceHrefForCrossDomainLink: replaceHrefForCrossDomainLink,' + + '_isLinkToDifferentDomainButSameMatomoWebsite: isLinkToDifferentDomainButSameMatomoWebsite,' + + '_arrayChunk : arrayChunk,' + + '_urlFixup : urlFixup,' + + '_domainFixup : domainFixup,' + + '_titleFixup : titleFixup,' + + '_sha1 : sha1,' + + '_utf8_encode : utf8_encode,' + + '_purify : purify,' + + '_resolveRelativeReference : resolveRelativeReference,' + + '_addEventListener : addEventListener,' + + '_prefixPropertyName : prefixPropertyName,' + + '_getMatomoUrlForOverlay : getMatomoUrlForOverlay, ' + + '_windowAlias : windowAlias, ' + + '_refreshConsentStatus : refreshConsentStatus, ' + + '_isInsideAnIframe : isInsideAnIframe' + + '}' + ); + }, + + /* + * called when DOM ready + */ + load: function () { }, + + /* + * function called on trackPageView + * - returns URL components to be appended to tracker URL + */ + log: function () { + return '&testlog=' + encodeURIComponent('{"token":"' + getToken() + '"}'); + }, + + /* + * function called on trackLink() or click event + * - returns URL components to be appended to tracker URL + */ + link: function () { + return '&testlink=' + encodeURIComponent('{"token":"' + getToken() + '"}'); + }, + + /* + * function called on trackGoal() + * - returns URL components to be appended to tracker URL + */ + goal: function () { + return '&testgoal=' + encodeURIComponent('{"token":"' + getToken() + '"}'); + }, + + /* + * called before page is unloaded + */ + unload: function () { } +}); diff --git a/tests/javascript/testrunnerNode.js b/tests/javascript/testrunnerNode.js new file mode 100644 index 0000000000000000000000000000000000000000..53b080b8e5e7df05d5907b6d9882dc717ba4b5a7 --- /dev/null +++ b/tests/javascript/testrunnerNode.js @@ -0,0 +1,75 @@ +/*! + * Matomo - free/libre analytics platform + * + * UI test runner script + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0; // ignore ssl errors + +const puppeteer = require('puppeteer'); +const baseUrl = process.argv[2] || 'http://localhost/tests/javascript/'; + +const pluginArg = process.argv.find((arg) => /--plugin=(.*?)/.test(arg)); +const plugin = pluginArg ?pluginArg.split('=', 2)[1] : null; + +main(); + +async function main() { + + const browser = await puppeteer.launch({args: ['--no-sandbox', '--ignore-certificate-errors']}); + const page = await browser.newPage(); + + page.on('console', async (consoleMessage) => { + console.log("[" + consoleMessage.type() + "] " + consoleMessage.text()); + }); + + let url = baseUrl; + if (plugin) { + url += `?module=${encodeURIComponent(plugin)}`; + } + + page.on('domcontentloaded', async () => { + await page.evaluate(() => { + window.testsDone = false; + window.testsSuccessfull = false; + + QUnit.done(function (obj) { + console.info("Tests passed: " + obj.passed); + console.info("Tests failed: " + obj.failed); + console.info("Total tests: " + obj.total); + console.info("Runtime (ms): " + obj.runtime); + window.testsDone = true; + window.testsSuccessfull = (obj.failed == 0); + }); + + QUnit.log(function (obj) { + if (!obj.result) { + var errorMessage = "Test failed in module " + obj.module + ": '" + obj.name + "' \nError: " + obj.message; + + if (obj.actual) { + errorMessage += " \nActual: " + obj.actual; + } + + if (obj.expected) { + errorMessage += " \nExpected: " + obj.expected; + } + + errorMessage += " \nSource: " + obj.source + "\n\n"; + + console.info(errorMessage); + } + }); + }); + }); + + await page.goto(url); + await page.waitForFunction(() => !!window.testsDone, {timeout: 600000}); + + var success = await page.evaluate(function() { + return window.testsSuccessfull; + }); + + process.exit(success ? 0 : 1); +} diff --git a/tests/lib/geoip-files/GeoIP2-City.json b/tests/lib/geoip-files/GeoIP2-City.json new file mode 100644 index 0000000000000000000000000000000000000000..ccc7f43d2c0d15b5f764733b6733ce39ffc5f05b --- /dev/null +++ b/tests/lib/geoip-files/GeoIP2-City.json @@ -0,0 +1,2629 @@ +[ + { + "::194.57.91.215/128": { + "city": { + "geoname_id": 3033123, + "names": { + "de": "Besançon", + "en": "Besançon", + "es": "Besanzón", + "fr": "Besançon", + "ja": "ブザンソン", + "pt-BR": "Besançon", + "ru": "БезанÑ�он", + "zh-CN": "è´�æ¡‘æ�¾" + } + }, + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 3017382, + "iso_code": "FR", + "names": { + "de": "Frankreich", + "en": "France", + "es": "Francia", + "fr": "France", + "ja": "フランス共和国", + "pt-BR": "França", + "ru": "ФранциÑ�", + "zh-CN": "法国" + } + }, + "location": { + "accuracy_radius": 50, + "latitude": 47.2488, + "longitude": 6.0182, + "time_zone": "Europe\/Paris" + }, + "postal": { + "code": "25000" + }, + "registered_country": { + "geoname_id": 3017382, + "iso_code": "FR", + "names": { + "de": "Frankreich", + "en": "France", + "es": "Francia", + "fr": "France", + "ja": "フランス共和国", + "pt-BR": "França", + "ru": "ФранциÑ�", + "zh-CN": "法国" + } + }, + "subdivisions": [ + { + "geoname_id": 11071619, + "iso_code": "BFC", + "names": { + "en": "Bourgogne-Franche-Comte", + "fr": "Bourgogne-Franche-Comté" + } + }, + { + "geoname_id": 3020989, + "iso_code": "25", + "names": { + "de": "Doubs", + "en": "Doubs", + "es": "Doubs", + "fr": "Doubs" + } + } + ] + } + }, + { + "::137.82.130.0/112": { + "city": { + "geoname_id": 6173331, + "names": { + "de": "Vancouver", + "en": "Vancouver", + "es": "Vancouver", + "fr": "Vancouver", + "ja": "ãƒ�ンクーãƒ�ー市", + "pt-BR": "Vancôver", + "ru": "Ванкувер" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6251999, + "iso_code": "CA", + "names": { + "de": "Kanada", + "en": "Canada", + "es": "Canadá", + "fr": "Canada", + "ja": "カナダ", + "pt-BR": "Canadá", + "ru": "Канада", + "zh-CN": "加拿大" + } + }, + "location": { + "accuracy_radius": 5, + "latitude": 49.25, + "longitude": -123.133, + "time_zone": "America\/Vancouver" + }, + "postal": { + "code": "V6T" + }, + "registered_country": { + "geoname_id": 6251999, + "iso_code": "CA", + "names": { + "de": "Kanada", + "en": "Canada", + "es": "Canadá", + "fr": "Canada", + "ja": "カナダ", + "pt-BR": "Canadá", + "ru": "Канада", + "zh-CN": "加拿大" + } + }, + "subdivisions": [ + { + "geoname_id": 5909050, + "iso_code": "BC", + "names": { + "en": "British Columbia", + "es": "Columbia Británica", + "fr": "Colombie-Britannique", + "ja": "ブリティッシュコロンビア州", + "pt-BR": "Colúmbia Britânica", + "ru": "БританÑ�каÑ� КолумбиÑ�", + "zh-CN": "ä¸�列颠哥伦比亚" + } + } + ] + } + }, + { + "::113.62.1.1/128": { + "city": { + "geoname_id": 1280737, + "names": { + "de": "Lhasa", + "en": "Lhasa", + "es": "Lhasa", + "fr": "Lhassa", + "ja": "ラサ市", + "pt-BR": "Lassa", + "ru": "ЛхаÑ�а", + "zh-CN": "拉è�¨" + } + }, + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1814991, + "iso_code": "CN", + "names": { + "de": "China", + "en": "China", + "es": "China", + "fr": "Chine", + "ja": "中国", + "pt-BR": "China", + "ru": "Китай", + "zh-CN": "中国" + } + }, + "location": { + "accuracy_radius": 50, + "latitude": 29.65, + "longitude": 91.1, + "time_zone": "Asia\/Urumqi" + }, + "registered_country": { + "geoname_id": 1814991, + "iso_code": "CN", + "names": { + "de": "China", + "en": "China", + "es": "China", + "fr": "Chine", + "ja": "中国", + "pt-BR": "China", + "ru": "Китай", + "zh-CN": "中国" + } + }, + "subdivisions": [ + { + "geoname_id": 1279685, + "iso_code": "XZ", + "names": { + "en": "Tibet", + "fr": "Région autonome du Tibet", + "zh-CN": "西è—�自治区" + } + } + ] + } + }, + { + "::151.100.101.92/128": { + "city": { + "geoname_id": 3169070, + "names": { + "de": "Rom", + "en": "Rome" + } + }, + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 3175395, + "iso_code": "IT", + "names": { + "de": "Italien", + "en": "Italy", + "es": "Italia", + "fr": "Italie", + "ja": "イタリア共和国", + "pt-BR": "Itália", + "ru": "ИталиÑ�", + "zh-CN": "æ„�大利" + } + }, + "location": { + "accuracy_radius": 500, + "latitude": 41.9, + "longitude": 12.483, + "time_zone": "Europe\/Rome" + }, + "registered_country": { + "geoname_id": 3175395, + "iso_code": "IT", + "names": { + "de": "Italien", + "en": "Italy", + "es": "Italia", + "fr": "Italie", + "ja": "イタリア共和国", + "pt-BR": "Itália", + "ru": "ИталиÑ�", + "zh-CN": "æ„�大利" + } + }, + "subdivisions": [ + { + "geoname_id": 3174976, + "iso_code": "62", + "names": { + "de": "Latium", + "en": "Latium", + "es": "Lacio", + "fr": "Latium", + "ja": "ラツィオ州", + "pt-BR": "Lácio", + "ru": "Лацио", + "zh-CN": "拉é½�奥" + } + } + ] + } + }, + { + "::103.29.196.229/128": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1643084, + "iso_code": "ID", + "names": { + "de": "Indonesien", + "en": "Indonesia", + "es": "Indonesia", + "fr": "Indonésie", + "ja": "インドãƒ�シア共和国", + "pt-BR": "Indonésia", + "ru": "ИндонезиÑ�", + "zh-CN": "å�°åº¦å°¼è¥¿äºš" + } + }, + "location": { + "accuracy_radius": 5000, + "latitude": -5.001, + "longitude": 119.998, + "time_zone": "Asia\/Jakarta" + }, + "registered_country": { + "geoname_id": 1643084, + "iso_code": "ID", + "names": { + "de": "Indonesien", + "en": "Indonesia", + "es": "Indonesia", + "fr": "Indonésie", + "ja": "インドãƒ�シア共和国", + "pt-BR": "Indonésia", + "ru": "ИндонезиÑ�", + "zh-CN": "å�°åº¦å°¼è¥¿äºš" + } + } + } + }, + { + "::1.2.3.0/120": { + "continent": { + "code": "OC", + "geoname_id": 2077456, + "names": { + "de": "Ozeanien", + "en": "Oceania" + } + }, + "country": { + "geoname_id": 2077456, + "iso_code": "AU", + "names": { + "de": "Australien", + "en": "Australia" + } + }, + "location": { + "accuracy_radius": 50, + "latitude": -27.0, + "longitude": 133.0 + }, + "registered_country": { + "geoname_id": 2077456, + "iso_code": "AU", + "names": { + "de": "Australien", + "en": "Australia" + } + } + } + }, + { + "::1.2.4.0/120": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1814991, + "iso_code": "CN", + "names": { + "de": "China", + "en": "China", + "es": "China", + "fr": "Chine", + "ja": "中国", + "pt-BR": "China", + "ru": "Китай", + "zh-CN": "中国" + } + }, + "location": { + "accuracy_radius": 50, + "latitude": 35.0, + "longitude": 105.0 + }, + "registered_country": { + "geoname_id": 1814991, + "iso_code": "CN", + "names": { + "de": "China", + "en": "China", + "es": "China", + "fr": "Chine", + "ja": "中国", + "pt-BR": "China", + "ru": "Китай", + "zh-CN": "中国" + } + } + } + }, + { + "2003:f6:93bf:26f:9ec7:a6ff:fe29:27df/128": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 5000, + "latitude": 38.00, + "longitude": -97.00, + "time_zone": "America\/New_York" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::175.41.192.0/120": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1861060, + "iso_code": "JP", + "names": { + "de": "Japan", + "en": "Japan", + "es": "Japón", + "fr": "Japon", + "ja": "日本", + "pt-BR": "Japão", + "ru": "ЯпониÑ�", + "zh-CN": "日本" + } + }, + "location": { + "accuracy_radius": 500, + "latitude": 36.00, + "longitude": 137.9998, + "time_zone": "Asia\/Tokyo" + }, + "registered_country": { + "geoname_id": 1861060, + "iso_code": "JP", + "names": { + "de": "Japan", + "en": "Japan", + "es": "Japón", + "fr": "Japon", + "ja": "日本", + "pt-BR": "Japão", + "ru": "ЯпониÑ�", + "zh-CN": "日本" + } + } + } + }, + { + "::72.44.32.10/127": { + "city": { + "geoname_id": 4744870, + "names": { + "en": "Ashburn", + "ru": "Ð�шберн" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 1000, + "latitude": 39.044, + "longitude": -77.488, + "metro_code": 511, + "time_zone": "America\/New_York" + }, + "postal": { + "code": "20149" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "subdivisions": [ + { + "geoname_id": 6254928, + "iso_code": "VA", + "names": { + "en": "Virginia", + "fr": "Virginie", + "ja": "ãƒ�ージニア州", + "pt-BR": "Virgínia", + "ru": "ВирджиниÑ�", + "zh-CN": "å¼—å�‰å°¼äºšå·ž" + } + } + ] + } + }, + { + "::177.71.128.21/128": { + "continent": { + "code": "SA", + "geoname_id": 6255150, + "names": { + "de": "Südamerika", + "en": "South America", + "es": "Sudamérica", + "fr": "Amérique du Sud", + "ja": "å�—アメリカ", + "pt-BR": "América do Sul", + "ru": "ЮжнаÑ� Ð�мерика", + "zh-CN": "å�—美洲" + } + }, + "country": { + "geoname_id": 3469034, + "iso_code": "BR", + "names": { + "de": "Brasilien", + "en": "Brazil", + "es": "Brasil", + "fr": "Brésil", + "ja": "ブラジル連邦共和国", + "pt-BR": "Brasil", + "ru": "БразилиÑ�", + "zh-CN": "巴西" + } + }, + "location": { + "accuracy_radius": 1000, + "latitude": -10.00, + "longitude": -55.00, + "time_zone": "America\/Sao_Paulo" + }, + "registered_country": { + "geoname_id": 3469034, + "iso_code": "BR", + "names": { + "de": "Brasilien", + "en": "Brazil", + "es": "Brasil", + "fr": "Brésil", + "ja": "ブラジル連邦共和国", + "pt-BR": "Brasil", + "ru": "БразилиÑ�", + "zh-CN": "巴西" + } + } + } + }, + { + "::50.112.0.0/112": { + "city": { + "geoname_id": 5714964, + "names": { + "en": "San Jose" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 1000, + "latitude": 45.8696, + "longitude": -119.688, + "metro_code": 810, + "time_zone": "America\/Los_Angeles" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "subdivisions": [ + { + "geoname_id": 5332921, + "iso_code": "CA", + "names": { + "de": "Kalifornien", + "en": "California", + "es": "California", + "fr": "Californie", + "ja": "カリフォルニア州", + "pt-BR": "Califórnia", + "ru": "КалифорниÑ�", + "zh-CN": "加利ç¦�尼亚州" + } + } + ] + } + }, + { + "::95.81.66.139/128": { + "city": { + "geoname_id": 113646, + "names": { + "en": "Tabriz" + } + }, + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 130758, + "iso_code": "IR", + "names": { + "de": "Iran (Islamische Republik)", + "en": "Iran", + "es": "Irán", + "fr": "Iran", + "ja": "イラン・イスラム共和国", + "pt-BR": "Irã", + "ru": "Иран", + "zh-CN": "伊朗伊斯兰共和国" + } + }, + "location": { + "accuracy_radius": 50, + "latitude": 38.08, + "longitude": 46.292, + "time_zone": "Asia\/Tehran" + }, + "registered_country": { + "geoname_id": 130758, + "iso_code": "IR", + "names": { + "de": "Iran (Islamische Republik)", + "en": "Iran", + "es": "Irán", + "fr": "Iran", + "ja": "イラン・イスラム共和国", + "pt-BR": "Irã", + "ru": "Иран", + "zh-CN": "伊朗伊斯兰共和国" + } + }, + "subdivisions": [ + { + "geoname_id": 142549, + "iso_code": "01", + "names": { + "en": "East Azerbaijan", + "es": "Azerbaiyán Oriental" + } + } + ] + } + }, + { + "::70.117.169.113/128": { + "city": { + "geoname_id": 5520993, + "names": { + "de": "El Paso", + "en": "El Paso", + "es": "El Paso", + "fr": "El Paso", + "ja": "エル・パソ", + "pt-BR": "El Paso", + "ru": "Эль-ПаÑ�о" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 10, + "latitude": 31.796, + "longitude": -106.376, + "metro_code": 765, + "time_zone": "America\/Denver" + }, + "postal": { + "code": "79925" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "subdivisions": [ + { + "geoname_id": 4736286, + "iso_code": "TX", + "names": { + "en": "Texas", + "es": "Texas", + "fr": "Texas", + "ja": "テキサス州", + "ru": "ТехаÑ�", + "zh-CN": "å¾·å…‹è�¨æ–¯å·ž" + } + } + ] + } + }, + { + "::79.125.0.21/128": { + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 2963597, + "iso_code": "IE", + "names": { + "de": "Irland", + "en": "Ireland", + "es": "Irlanda", + "fr": "Irlande", + "ja": "アイルランド", + "pt-BR": "Irlanda", + "ru": "ИрландиÑ�", + "zh-CN": "爱尔兰" + } + }, + "location": { + "accuracy_radius": 200, + "latitude": 53.0, + "longitude": -8.0, + "time_zone": "Europe\/Dublin" + }, + "registered_country": { + "geoname_id": 2963597, + "iso_code": "IE", + "names": { + "de": "Irland", + "en": "Ireland", + "es": "Irlanda", + "fr": "Irlande", + "ja": "アイルランド", + "pt-BR": "Irlanda", + "ru": "ИрландиÑ�", + "zh-CN": "爱尔兰" + } + } + } + }, + { + "::123.45.67.89/128": { + "city": { + "geoname_id": 5913601, + "names": { + "en": "Seoul" + } + }, + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1835841, + "iso_code": "KR", + "names": { + "de": "Südkorea", + "en": "Republic of Korea", + "es": "Corea del Sur", + "fr": "Corée du Sud", + "ja": "大韓民国", + "pt-BR": "Coreia do Sul", + "ru": "ЮжнаÑ� КореÑ�", + "zh-CN": "大韩民国" + } + }, + "location": { + "accuracy_radius": 200, + "latitude": 37.599, + "longitude": 126.978, + "time_zone": "Asia\/Seoul" + }, + "registered_country": { + "geoname_id": 1835841, + "iso_code": "KR", + "names": { + "de": "Südkorea", + "en": "Republic of Korea", + "es": "Corea del Sur", + "fr": "Corée du Sud", + "ja": "大韓民国", + "pt-BR": "Coreia do Sul", + "ru": "ЮжнаÑ� КореÑ�", + "zh-CN": "大韩民国" + } + }, + "subdivisions": [ + { + "geoname_id": 1835848, + "iso_code": "11", + "names": { + "en": "Seoul", + "ja": "ソウル特別市", + "zh-CN": "首尔特别市" + } + } + ] + } + }, + { + "::72.45.67.32/128": { + "city": { + "geoname_id": 5979345, + "names": { + "en": "Igloolik" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6251999, + "iso_code": "CA", + "names": { + "de": "Kanada", + "en": "Canada", + "es": "Canadá", + "fr": "Canada", + "ja": "カナダ", + "pt-BR": "Canadá", + "ru": "Канада", + "zh-CN": "加拿大" + } + }, + "location": { + "accuracy_radius": 100, + "latitude": 69.4, + "longitude": -81.8, + "time_zone": "America\/Edmonton" + }, + "registered_country": { + "geoname_id": 6251999, + "iso_code": "CA", + "names": { + "de": "Kanada", + "en": "Canada", + "es": "Canadá", + "fr": "Canada", + "ja": "カナダ", + "pt-BR": "Canadá", + "ru": "Канада", + "zh-CN": "加拿大" + } + }, + "subdivisions": [ + { + "geoname_id": 589632, + "iso_code": "NU", + "names": { + "en": "Nunavut", + "fr": "Nunavut", + "ja": "ヌナブト準州", + "pt-BR": "Nunavute", + "ru": "Ð�унавут" + } + } + ] + } + }, + { + "::73.77.55.45/128": { + "city": { + "geoname_id": 4503136, + "names": { + "en": "Mount Laurel" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 1, + "latitude": 39.957, + "longitude": -74.916, + "time_zone": "America\/Chicago" + }, + "postal": { + "code": "08054" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "subdivisions": [ + { + "geoname_id": 5101760, + "iso_code": "NJ", + "names": { + "en": "New Jersey", + "es": "Nueva Jersey", + "fr": "New Jersey", + "ja": "ニュージャージー州", + "pt-BR": "Nova Jérsia", + "ru": "Ð�ью-ДжерÑ�и", + "zh-CN": "新泽西州" + } + } + ] + } + }, + { + "::180.153.201.215/128": { + "city": { + "geoname_id": 1796236, + "names": { + "de": "Shanghai", + "en": "Shanghai", + "es": "Shanghai", + "fr": "Shanghai", + "ja": "上海", + "pt-BR": "Xangai", + "ru": "Шанхай", + "zh-CN": "上海" + } + }, + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1814991, + "iso_code": "CN", + "names": { + "de": "China", + "en": "China", + "es": "China", + "fr": "Chine", + "ja": "中国", + "pt-BR": "China", + "ru": "Китай", + "zh-CN": "中国" + } + }, + "location": { + "accuracy_radius": 1, + "latitude": 31.0456, + "longitude": 121.3997, + "time_zone": "Asia\/Shanghai" + }, + "registered_country": { + "geoname_id": 1814991, + "iso_code": "CN", + "names": { + "de": "China", + "en": "China", + "es": "China", + "fr": "Chine", + "ja": "中国", + "pt-BR": "China", + "ru": "Китай", + "zh-CN": "中国" + } + }, + "subdivisions": [ + { + "geoname_id": 1796231, + "iso_code": "SH", + "names": { + "en": "Shanghai", + "fr": "Municipalité de Shanghai", + "pt-BR": "Xangai", + "zh-CN": "上海" + } + } + ] + } + }, + { + "::84.194.72.21/128": { + "city": { + "geoname_id": 2791964, + "names": { + "en": "Maaseik" + } + }, + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 2802361, + "iso_code": "BE", + "names": { + "de": "Belgien", + "en": "Belgium", + "es": "Bélgica", + "fr": "Belgique", + "ja": "ベルギー王国", + "pt-BR": "Bélgica", + "ru": "БельгиÑ�", + "zh-CN": "比利时" + } + }, + "location": { + "accuracy_radius": 10, + "latitude": 51.100, + "longitude": 5.80, + "time_zone": "Europe\/Brussels" + }, + "postal": { + "code": "3500" + }, + "registered_country": { + "geoname_id": 2802361, + "iso_code": "BE", + "names": { + "de": "Belgien", + "en": "Belgium", + "es": "Bélgica", + "fr": "Belgique", + "ja": "ベルギー王国", + "pt-BR": "Bélgica", + "ru": "БельгиÑ�", + "zh-CN": "比利时" + } + }, + "subdivisions": [ + { + "geoname_id": 3337388, + "iso_code": "VLG", + "names": { + "de": "Flandern", + "en": "Flanders", + "es": "Flandes", + "fr": "Région Flamande", + "pt-BR": "Flandres" + } + }, + { + "geoname_id": 2792347, + "iso_code": "VLI", + "names": { + "en": "Limburg Province", + "fr": "Limbourg", + "pt-BR": "Limburgo" + } + } + ] + } + }, + { + "::93.80.130.163/128": { + "city": { + "geoname_id": 524901, + "names": { + "de": "Moskau", + "en": "Moscow", + "es": "Moscú", + "fr": "Moscou", + "ja": "モスクワ", + "pt-BR": "Moscovo", + "ru": "МоÑ�ква", + "zh-CN": "莫斯科" + } + }, + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 2017370, + "iso_code": "RU", + "names": { + "de": "Russland", + "en": "Russia", + "es": "Rusia", + "fr": "Russie", + "ja": "ロシア", + "pt-BR": "Rússia", + "ru": "РоÑ�Ñ�иÑ�", + "zh-CN": "ä¿„ç½—æ–¯" + } + }, + "location": { + "accuracy_radius": 1, + "latitude": 55.7522, + "longitude": 37.6156, + "time_zone": "Europe\/Moscow" + }, + "postal": { + "code": "101770" + }, + "registered_country": { + "geoname_id": 2017370, + "iso_code": "RU", + "names": { + "de": "Russland", + "en": "Russia", + "es": "Rusia", + "fr": "Russie", + "ja": "ロシア", + "pt-BR": "Rússia", + "ru": "РоÑ�Ñ�иÑ�", + "zh-CN": "ä¿„ç½—æ–¯" + } + }, + "subdivisions": [ + { + "geoname_id": 524894, + "iso_code": "MOW", + "names": { + "de": "Moskau", + "en": "Moscow", + "es": "Moscú", + "fr": "Moscou", + "ru": "МоÑ�ква" + } + } + ] + } + }, + { + "::176.41.226.0/120": { + "city": { + "geoname_id": 745003, + "names": { + "en": "Esentepe" + } + }, + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 298795, + "iso_code": "TR", + "names": { + "de": "Türkei", + "en": "Turkey", + "es": "Turquía", + "fr": "Turquie", + "ja": "トルコ共和国", + "pt-BR": "Turquia", + "ru": "ТурциÑ�", + "zh-CN": "土耳其" + } + }, + "location": { + "accuracy_radius": 500, + "latitude": 40.979, + "longitude": 40.415, + "time_zone": "Europe\/Istanbul" + }, + "registered_country": { + "geoname_id": 298795, + "iso_code": "TR", + "names": { + "de": "Türkei", + "en": "Turkey", + "es": "Turquía", + "fr": "Turquie", + "ja": "トルコ共和国", + "pt-BR": "Turquia", + "ru": "ТурциÑ�", + "zh-CN": "土耳其" + } + }, + "subdivisions": [ + { + "geoname_id": 740481, + "iso_code": "53", + "names": { + "en": "Rize" + } + } + ] + } + }, + { + "::188.107.238.9/128": { + "city": { + "geoname_id": 3207706, + "names": { + "de": "Mainz", + "en": "Mainz" + } + }, + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 2921044, + "iso_code": "DE", + "names": { + "de": "Deutschland", + "en": "Germany", + "es": "Alemania", + "fr": "Allemagne", + "ja": "ドイツ連邦共和国", + "pt-BR": "Alemanha", + "ru": "ГерманиÑ�", + "zh-CN": "德国" + } + }, + "location": { + "accuracy_radius": 200, + "latitude": 50, + "longitude": 8.2711, + "time_zone": "Europe\/Berlin" + }, + "registered_country": { + "geoname_id": 2921044, + "iso_code": "DE", + "names": { + "de": "Deutschland", + "en": "Germany", + "es": "Alemania", + "fr": "Allemagne", + "ja": "ドイツ連邦共和国", + "pt-BR": "Alemanha", + "ru": "ГерманиÑ�", + "zh-CN": "德国" + } + }, + "subdivisions": [ + { + "geoname_id": 2847618, + "iso_code": "RP", + "names": { + "de": "Rheinland-Pfalz", + "en": "Rheinland-Pfalz", + "es": "Rheinland-Pfalz", + "fr": "Rhénanie-Palatinat", + "ja": "ラインラントï¼�プファルツ州", + "pt-BR": "Renânia-Palatinado", + "ru": "Рейнланд-Пфальц", + "zh-CN": "莱茵兰-普法尔茨" + } + } + ] + } + }, + { + "::206.190.75.8/128": { + "city": { + "geoname_id": 4899012, + "names": { + "de": "Lake Forest", + "en": "Lake Forest" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 20, + "latitude": 33.645, + "longitude": -117.679, + "metro_code": 803, + "time_zone": "America\/Los_Angeles" + }, + "postal": { + "code": "92630" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "subdivisions": [ + { + "geoname_id": 5332921, + "iso_code": "CA", + "names": { + "de": "Kalifornien", + "en": "California", + "es": "California", + "fr": "Californie", + "ja": "カリフォルニア州", + "pt-BR": "Califórnia", + "ru": "КалифорниÑ�", + "zh-CN": "加利ç¦�尼亚州" + } + } + ] + } + }, + { + "::80.136.160.65/128": { + "city": { + "geoname_id": 2812522, + "names": { + "de": "Weilerswist", + "en": "Weilerswist" + } + }, + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 2921044, + "iso_code": "DE", + "names": { + "de": "Deutschland", + "en": "Germany", + "es": "Alemania", + "fr": "Allemagne", + "ja": "ドイツ連邦共和国", + "pt-BR": "Alemanha", + "ru": "ГерманиÑ�", + "zh-CN": "德国" + } + }, + "location": { + "accuracy_radius": 200, + "latitude": 50.7671, + "longitude": 6.8329 + }, + "registered_country": { + "geoname_id": 2921044, + "iso_code": "DE", + "names": { + "de": "Deutschland", + "en": "Germany", + "es": "Alemania", + "fr": "Allemagne", + "ja": "ドイツ連邦共和国", + "pt-BR": "Alemanha", + "ru": "ГерманиÑ�", + "zh-CN": "德国" + } + }, + "subdivisions": [ + { + "geoname_id": 2861876, + "iso_code": "NW", + "names": { + "en": "North Rhine-Westphalia" + } + } + ] + } + }, + { + "::219.101.46.222/128": { + "city": { + "geoname_id": 1855444, + "names": { + "en": "Nihon'odori" + } + }, + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1861060, + "iso_code": "JP", + "names": { + "de": "Japan", + "en": "Japan", + "es": "Japón", + "fr": "Japon", + "ja": "日本", + "pt-BR": "Japão", + "ru": "ЯпониÑ�", + "zh-CN": "日本" + } + }, + "location": { + "accuracy_radius": 20, + "latitude": 35.45, + "longitude": 139.65, + "time_zone": "Asia\/Tokyo" + }, + "postal": { + "code": "102-0082" + }, + "registered_country": { + "geoname_id": 1861060, + "iso_code": "JP", + "names": { + "de": "Japan", + "en": "Japan", + "es": "Japón", + "fr": "Japon", + "ja": "日本", + "pt-BR": "Japão", + "ru": "ЯпониÑ�", + "zh-CN": "日本" + } + }, + "subdivisions": [ + { + "geoname_id": 1860291, + "iso_code": "14", + "names": { + "en": "Kanagawa" + } + } + ] + } + }, + { + "::108.211.181.12/128": { + "city": { + "geoname_id": 5391959, + "names": { + "de": "San Francisco", + "en": "San Francisco", + "es": "San Francisco", + "fr": "San Francisco", + "ja": "サンフランシスコ", + "pt-BR": "São Francisco", + "ru": "Сан-ФранциÑ�ко", + "zh-CN": "旧金山" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 1, + "latitude": 37.7915, + "longitude": -122.4089, + "metro_code": 807, + "time_zone": "America\/Los_Angeles" + }, + "postal": { + "code": "94108" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "subdivisions": [ + { + "geoname_id": 5332921, + "iso_code": "CA", + "names": { + "de": "Kalifornien", + "en": "California", + "es": "California", + "fr": "Californie", + "ja": "カリフォルニア州", + "pt-BR": "Califórnia", + "ru": "КалифорниÑ�", + "zh-CN": "加利ç¦�尼亚州" + } + } + ] + } + }, + { + "::50.244.17.130/128": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 500, + "latitude": 38.0, + "longitude": -97.0, + "time_zone": "America\/Chicago" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::173.5.0.0/112": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 500, + "latitude": 38.0, + "longitude": -97.0, + "time_zone": "America\/Chicago" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::70.95.0.0/112": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 500, + "latitude": 38.0, + "longitude": -97.0, + "time_zone": "America\/Chicago" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::193.159.20.129/128": { + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 2921044, + "iso_code": "DE", + "names": { + "de": "Deutschland", + "en": "Germany", + "es": "Alemania", + "fr": "Allemagne", + "ja": "ドイツ連邦共和国", + "pt-BR": "Alemanha", + "ru": "ГерманиÑ�", + "zh-CN": "德国" + } + }, + "location": { + "accuracy_radius": 2000, + "latitude": 51.0, + "longitude": 9.0 + }, + "registered_country": { + "geoname_id": 2921044, + "iso_code": "DE", + "names": { + "de": "Deutschland", + "en": "Germany", + "es": "Alemania", + "fr": "Allemagne", + "ja": "ドイツ連邦共和国", + "pt-BR": "Alemanha", + "ru": "ГерманиÑ�", + "zh-CN": "德国" + } + } + } + }, + { + "::174.97.139.63/128": { + "city": { + "geoname_id": 4487042, + "names": { + "de": "Raleigh", + "en": "Raleigh", + "es": "Raleigh", + "fr": "Raleigh" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 1, + "latitude": 35.772, + "longitude": -78.639, + "metro_code": 617, + "time_zone": "America\/Chicago" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "subdivisions": [ + { + "geoname_id": 5332921, + "iso_code": "NC", + "names": { + "en": "North Carolina", + "es": "Carolina del Norte", + "fr": "Caroline du Nord", + "ja": "ノースカロライナ州", + "pt-BR": "Carolina do Norte", + "ru": "СевернаÑ� Каролина", + "zh-CN": "北å�¡ç½—æ�¥çº³å·ž" + } + } + ] + } + }, + { + "::24.125.31.147/128": { + "city": { + "geoname_id": 4772566, + "names": { + "de": "Mechanicsville", + "en": "Mechanicsville", + "es": "Mechanicsville", + "fr": "Mechanicsville", + "pt-BR": "Mechanicsville" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 200, + "latitude": 37.613, + "longitude": -77.256, + "metro_code": 524, + "time_zone": "America\/New_York" + }, + "postal": { + "code": "23111" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "subdivisions": [ + { + "geoname_id": 6254928, + "iso_code": "VA", + "names": { + "en": "Virginia", + "es": "Virginia", + "fr": "Virginia" + } + } + ] + } + }, + { + "::175.41.191.0/120": { + "city": { + "geoname_id": 1880252, + "names": { + "de": "Singapur", + "en": "Singapore", + "es": "Singapur", + "fr": "Singapour", + "ja": "シンガãƒ�ール", + "pt-BR": "Cingapura", + "ru": "Сингапур", + "zh-CN": "新加å�¡" + } + }, + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1880251, + "iso_code": "SG", + "names": { + "de": "Singapur", + "en": "Singapore", + "es": "Singapur", + "fr": "Singapour", + "ja": "シンガãƒ�ール", + "pt-BR": "Cingapura", + "ru": "Сингапур", + "zh-CN": "新加å�¡" + } + }, + "location": { + "accuracy_radius": 500, + "latitude": 1.367, + "longitude": 103.8002, + "time_zone": "Asia\/Singapore" + }, + "registered_country": { + "geoname_id": 1880251, + "iso_code": "SG", + "names": { + "de": "Singapur", + "en": "Singapore", + "es": "Singapur", + "fr": "Singapour", + "ja": "シンガãƒ�ール", + "pt-BR": "Cingapura", + "ru": "Сингапур", + "zh-CN": "新加å�¡" + } + } + } + }, + { + "::175.41.193.0/120": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1861060, + "iso_code": "JP", + "names": { + "de": "Japan", + "en": "Japan", + "es": "Japón", + "fr": "Japon", + "ja": "日本", + "pt-BR": "Japão", + "ru": "ЯпониÑ�", + "zh-CN": "日本" + } + }, + "location": { + "accuracy_radius": 5000, + "latitude": 36.0, + "longitude": 138.0, + "time_zone": "Asia\/Tokyo" + }, + "registered_country": { + "geoname_id": 1861060, + "iso_code": "JP", + "names": { + "de": "Japan", + "en": "Japan", + "es": "Japón", + "fr": "Japon", + "ja": "日本", + "pt-BR": "Japão", + "ru": "ЯпониÑ�", + "zh-CN": "日本" + } + } + } + }, + { + "::67.51.31.21/128": { + "city": { + "geoname_id": 12345678, + "names": { + "de": "Ogden", + "en": "Ogden", + "es": "Ogden", + "fr": "Ogden" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 5000, + "latitude": 41.22, + "longitude": -111.974, + "time_zone": "America\/New_York" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "subdivisions": [ + { + "geoname_id": 31534534, + "iso_code": "UT", + "names": { + "en": "Utah", + "es": "Utah", + "fr": "Utah" + } + } + ] + } + }, + { + "::156.5.3.0/120": { + "city": { + "geoname_id": 45645645, + "names": { + "de": "Englewood Cliffs", + "en": "Englewood Cliffs" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 3500, + "latitude": 40.892, + "longitude": -73.947, + "time_zone": "America\/New_York" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "subdivisions": [ + { + "geoname_id": 4567555, + "iso_code": "NJ", + "names": { + "en": "New Jersey", + "es": "New Jersey", + "fr": "New Jersey" + } + } + ] + } + }, + { + "::88.88.88.88/128": { + "city": { + "geoname_id": 45645645, + "names": { + "de": "Englewood Cliffs", + "en": "Englewood Cliffs" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 3500, + "latitude": 40.892, + "longitude": -73.947, + "time_zone": "America\/New_York" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "subdivisions": [ + { + "geoname_id": 4567555, + "iso_code": "US-NJ", + "names": { + "en": "New Jersey", + "es": "New Jersey", + "fr": "New Jersey" + } + } + ] + } + }, + { + "::99.99.99.99/128": { + "city": { + "geoname_id": 45645645, + "names": { + "de": "Englewood Cliffs", + "en": "Englewood Cliffs" + } + }, + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "location": { + "accuracy_radius": 3500, + "latitude": 40.892, + "longitude": -73.947, + "time_zone": "America\/New_York" + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "subdivisions": [ + { + "geoname_id": 4567555, + "iso_code": "", + "names": { + "en": "New Jersey", + "es": "New Jersey", + "fr": "New Jersey" + } + } + ] + } + } +] \ No newline at end of file diff --git a/tests/lib/geoip-files/GeoIP2-City.mmdb b/tests/lib/geoip-files/GeoIP2-City.mmdb new file mode 100644 index 0000000000000000000000000000000000000000..55608054be9ae61d5d42922b499e60bb6eef7638 Binary files /dev/null and b/tests/lib/geoip-files/GeoIP2-City.mmdb differ diff --git a/tests/lib/geoip-files/GeoIP2-Country.json b/tests/lib/geoip-files/GeoIP2-Country.json new file mode 100644 index 0000000000000000000000000000000000000000..97dfaca12c97f040a43c5727b961e8b40f341271 --- /dev/null +++ b/tests/lib/geoip-files/GeoIP2-Country.json @@ -0,0 +1,1686 @@ +[ + { + "::194.57.91.215/128": { + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 3017382, + "iso_code": "FR", + "names": { + "de": "Frankreich", + "en": "France", + "es": "Francia", + "fr": "France", + "ja": "フランス共和国", + "pt-BR": "França", + "ru": "ФранциÑ�", + "zh-CN": "法国" + } + }, + "registered_country": { + "geoname_id": 3017382, + "iso_code": "FR", + "names": { + "de": "Frankreich", + "en": "France", + "es": "Francia", + "fr": "France", + "ja": "フランス共和国", + "pt-BR": "França", + "ru": "ФранциÑ�", + "zh-CN": "法国" + } + } + } + }, + { + "::137.82.130.0/112": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6251999, + "iso_code": "CA", + "names": { + "de": "Kanada", + "en": "Canada", + "es": "Canadá", + "fr": "Canada", + "ja": "カナダ", + "pt-BR": "Canadá", + "ru": "Канада", + "zh-CN": "加拿大" + } + }, + "registered_country": { + "geoname_id": 6251999, + "iso_code": "CA", + "names": { + "de": "Kanada", + "en": "Canada", + "es": "Canadá", + "fr": "Canada", + "ja": "カナダ", + "pt-BR": "Canadá", + "ru": "Канада", + "zh-CN": "加拿大" + } + } + } + }, + { + "::113.62.1.1/128": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1814991, + "iso_code": "CN", + "names": { + "de": "China", + "en": "China", + "es": "China", + "fr": "Chine", + "ja": "中国", + "pt-BR": "China", + "ru": "Китай", + "zh-CN": "中国" + } + }, + "registered_country": { + "geoname_id": 1814991, + "iso_code": "CN", + "names": { + "de": "China", + "en": "China", + "es": "China", + "fr": "Chine", + "ja": "中国", + "pt-BR": "China", + "ru": "Китай", + "zh-CN": "中国" + } + } + } + }, + { + "::151.100.101.92/128": { + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 3175395, + "iso_code": "IT", + "names": { + "de": "Italien", + "en": "Italy", + "es": "Italia", + "fr": "Italie", + "ja": "イタリア共和国", + "pt-BR": "Itália", + "ru": "ИталиÑ�", + "zh-CN": "æ„�大利" + } + }, + "registered_country": { + "geoname_id": 3175395, + "iso_code": "IT", + "names": { + "de": "Italien", + "en": "Italy", + "es": "Italia", + "fr": "Italie", + "ja": "イタリア共和国", + "pt-BR": "Itália", + "ru": "ИталиÑ�", + "zh-CN": "æ„�大利" + } + } + } + }, + { + "::103.29.196.229/128": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1643084, + "iso_code": "ID", + "names": { + "de": "Indonesien", + "en": "Indonesia", + "es": "Indonesia", + "fr": "Indonésie", + "ja": "インドãƒ�シア共和国", + "pt-BR": "Indonésia", + "ru": "ИндонезиÑ�", + "zh-CN": "å�°åº¦å°¼è¥¿äºš" + } + }, + "registered_country": { + "geoname_id": 1643084, + "iso_code": "ID", + "names": { + "de": "Indonesien", + "en": "Indonesia", + "es": "Indonesia", + "fr": "Indonésie", + "ja": "インドãƒ�シア共和国", + "pt-BR": "Indonésia", + "ru": "ИндонезиÑ�", + "zh-CN": "å�°åº¦å°¼è¥¿äºš" + } + } + } + }, + { + "::1.2.3.0/120": { + "continent": { + "code": "OC", + "geoname_id": 2077456, + "names": { + "de": "Ozeanien", + "en": "Oceania" + } + }, + "country": { + "geoname_id": 2077456, + "iso_code": "AU", + "names": { + "de": "Australien", + "en": "Australia" + } + }, + "registered_country": { + "geoname_id": 2077456, + "iso_code": "AU", + "names": { + "de": "Australien", + "en": "Australia" + } + } + } + }, + { + "::1.2.4.0/120": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1814991, + "iso_code": "CN", + "names": { + "de": "China", + "en": "China", + "es": "China", + "fr": "Chine", + "ja": "中国", + "pt-BR": "China", + "ru": "Китай", + "zh-CN": "中国" + } + }, + "registered_country": { + "geoname_id": 1814991, + "iso_code": "CN", + "names": { + "de": "China", + "en": "China", + "es": "China", + "fr": "Chine", + "ja": "中国", + "pt-BR": "China", + "ru": "Китай", + "zh-CN": "中国" + } + } + } + }, + { + "2003:f6:93bf:26f:9ec7:a6ff:fe29:27df/128": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::175.41.192.0/120": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1861060, + "iso_code": "JP", + "names": { + "de": "Japan", + "en": "Japan", + "es": "Japón", + "fr": "Japon", + "ja": "日本", + "pt-BR": "Japão", + "ru": "ЯпониÑ�", + "zh-CN": "日本" + } + }, + "registered_country": { + "geoname_id": 1861060, + "iso_code": "JP", + "names": { + "de": "Japan", + "en": "Japan", + "es": "Japón", + "fr": "Japon", + "ja": "日本", + "pt-BR": "Japão", + "ru": "ЯпониÑ�", + "zh-CN": "日本" + } + } + } + }, + { + "::72.44.32.10/127": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::177.71.128.21/128": { + "continent": { + "code": "SA", + "geoname_id": 6255150, + "names": { + "de": "Südamerika", + "en": "South America", + "es": "Sudamérica", + "fr": "Amérique du Sud", + "ja": "å�—アメリカ", + "pt-BR": "América do Sul", + "ru": "ЮжнаÑ� Ð�мерика", + "zh-CN": "å�—美洲" + } + }, + "country": { + "geoname_id": 3469034, + "iso_code": "BR", + "names": { + "de": "Brasilien", + "en": "Brazil", + "es": "Brasil", + "fr": "Brésil", + "ja": "ブラジル連邦共和国", + "pt-BR": "Brasil", + "ru": "БразилиÑ�", + "zh-CN": "巴西" + } + }, + "registered_country": { + "geoname_id": 3469034, + "iso_code": "BR", + "names": { + "de": "Brasilien", + "en": "Brazil", + "es": "Brasil", + "fr": "Brésil", + "ja": "ブラジル連邦共和国", + "pt-BR": "Brasil", + "ru": "БразилиÑ�", + "zh-CN": "巴西" + } + } + } + }, + { + "::50.112.0.0/112": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::95.81.66.139/128": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 130758, + "iso_code": "IR", + "names": { + "de": "Iran (Islamische Republik)", + "en": "Iran", + "es": "Irán", + "fr": "Iran", + "ja": "イラン・イスラム共和国", + "pt-BR": "Irã", + "ru": "Иран", + "zh-CN": "伊朗伊斯兰共和国" + } + }, + "registered_country": { + "geoname_id": 130758, + "iso_code": "IR", + "names": { + "de": "Iran (Islamische Republik)", + "en": "Iran", + "es": "Irán", + "fr": "Iran", + "ja": "イラン・イスラム共和国", + "pt-BR": "Irã", + "ru": "Иран", + "zh-CN": "伊朗伊斯兰共和国" + } + } + } + }, + { + "::70.117.169.113/128": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::79.125.0.21/128": { + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 2963597, + "iso_code": "IE", + "names": { + "de": "Irland", + "en": "Ireland", + "es": "Irlanda", + "fr": "Irlande", + "ja": "アイルランド", + "pt-BR": "Irlanda", + "ru": "ИрландиÑ�", + "zh-CN": "爱尔兰" + } + }, + "registered_country": { + "geoname_id": 2963597, + "iso_code": "IE", + "names": { + "de": "Irland", + "en": "Ireland", + "es": "Irlanda", + "fr": "Irlande", + "ja": "アイルランド", + "pt-BR": "Irlanda", + "ru": "ИрландиÑ�", + "zh-CN": "爱尔兰" + } + } + } + }, + { + "::123.45.67.89/128": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1835841, + "iso_code": "KR", + "names": { + "de": "Südkorea", + "en": "Republic of Korea", + "es": "Corea del Sur", + "fr": "Corée du Sud", + "ja": "大韓民国", + "pt-BR": "Coreia do Sul", + "ru": "ЮжнаÑ� КореÑ�", + "zh-CN": "大韩民国" + } + }, + "registered_country": { + "geoname_id": 1835841, + "iso_code": "KR", + "names": { + "de": "Südkorea", + "en": "Republic of Korea", + "es": "Corea del Sur", + "fr": "Corée du Sud", + "ja": "大韓民国", + "pt-BR": "Coreia do Sul", + "ru": "ЮжнаÑ� КореÑ�", + "zh-CN": "大韩民国" + } + } + } + }, + { + "::72.45.67.32/128": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6251999, + "iso_code": "CA", + "names": { + "de": "Kanada", + "en": "Canada", + "es": "Canadá", + "fr": "Canada", + "ja": "カナダ", + "pt-BR": "Canadá", + "ru": "Канада", + "zh-CN": "加拿大" + } + }, + "registered_country": { + "geoname_id": 6251999, + "iso_code": "CA", + "names": { + "de": "Kanada", + "en": "Canada", + "es": "Canadá", + "fr": "Canada", + "ja": "カナダ", + "pt-BR": "Canadá", + "ru": "Канада", + "zh-CN": "加拿大" + } + } + } + }, + { + "::73.77.55.45/128": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::180.153.201.215/128": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1814991, + "iso_code": "CN", + "names": { + "de": "China", + "en": "China", + "es": "China", + "fr": "Chine", + "ja": "中国", + "pt-BR": "China", + "ru": "Китай", + "zh-CN": "中国" + } + }, + "registered_country": { + "geoname_id": 1814991, + "iso_code": "CN", + "names": { + "de": "China", + "en": "China", + "es": "China", + "fr": "Chine", + "ja": "中国", + "pt-BR": "China", + "ru": "Китай", + "zh-CN": "中国" + } + } + } + }, + { + "::84.194.72.21/128": { + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 2802361, + "iso_code": "BE", + "names": { + "de": "Belgien", + "en": "Belgium", + "es": "Bélgica", + "fr": "Belgique", + "ja": "ベルギー王国", + "pt-BR": "Bélgica", + "ru": "БельгиÑ�", + "zh-CN": "比利时" + } + }, + "registered_country": { + "geoname_id": 2802361, + "iso_code": "BE", + "names": { + "de": "Belgien", + "en": "Belgium", + "es": "Bélgica", + "fr": "Belgique", + "ja": "ベルギー王国", + "pt-BR": "Bélgica", + "ru": "БельгиÑ�", + "zh-CN": "比利时" + } + } + } + }, + { + "::93.80.130.163/128": { + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 2017370, + "iso_code": "RU", + "names": { + "de": "Russland", + "en": "Russia", + "es": "Rusia", + "fr": "Russie", + "ja": "ロシア", + "pt-BR": "Rússia", + "ru": "РоÑ�Ñ�иÑ�", + "zh-CN": "ä¿„ç½—æ–¯" + } + }, + "registered_country": { + "geoname_id": 2017370, + "iso_code": "RU", + "names": { + "de": "Russland", + "en": "Russia", + "es": "Rusia", + "fr": "Russie", + "ja": "ロシア", + "pt-BR": "Rússia", + "ru": "РоÑ�Ñ�иÑ�", + "zh-CN": "ä¿„ç½—æ–¯" + } + } + } + }, + { + "::176.41.226.0/120": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 298795, + "iso_code": "TR", + "names": { + "de": "Türkei", + "en": "Turkey", + "es": "Turquía", + "fr": "Turquie", + "ja": "トルコ共和国", + "pt-BR": "Turquia", + "ru": "ТурциÑ�", + "zh-CN": "土耳其" + } + }, + "registered_country": { + "geoname_id": 298795, + "iso_code": "TR", + "names": { + "de": "Türkei", + "en": "Turkey", + "es": "Turquía", + "fr": "Turquie", + "ja": "トルコ共和国", + "pt-BR": "Turquia", + "ru": "ТурциÑ�", + "zh-CN": "土耳其" + } + } + } + }, + { + "::188.107.238.9/128": { + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 2921044, + "iso_code": "DE", + "names": { + "de": "Deutschland", + "en": "Germany", + "es": "Alemania", + "fr": "Allemagne", + "ja": "ドイツ連邦共和国", + "pt-BR": "Alemanha", + "ru": "ГерманиÑ�", + "zh-CN": "德国" + } + }, + "registered_country": { + "geoname_id": 2921044, + "iso_code": "DE", + "names": { + "de": "Deutschland", + "en": "Germany", + "es": "Alemania", + "fr": "Allemagne", + "ja": "ドイツ連邦共和国", + "pt-BR": "Alemanha", + "ru": "ГерманиÑ�", + "zh-CN": "德国" + } + } + } + }, + { + "::206.190.75.8/128": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::80.136.160.65/128": { + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 2921044, + "iso_code": "DE", + "names": { + "de": "Deutschland", + "en": "Germany", + "es": "Alemania", + "fr": "Allemagne", + "ja": "ドイツ連邦共和国", + "pt-BR": "Alemanha", + "ru": "ГерманиÑ�", + "zh-CN": "德国" + } + }, + "registered_country": { + "geoname_id": 2921044, + "iso_code": "DE", + "names": { + "de": "Deutschland", + "en": "Germany", + "es": "Alemania", + "fr": "Allemagne", + "ja": "ドイツ連邦共和国", + "pt-BR": "Alemanha", + "ru": "ГерманиÑ�", + "zh-CN": "德国" + } + } + } + }, + { + "::219.101.46.222/128": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1861060, + "iso_code": "JP", + "names": { + "de": "Japan", + "en": "Japan", + "es": "Japón", + "fr": "Japon", + "ja": "日本", + "pt-BR": "Japão", + "ru": "ЯпониÑ�", + "zh-CN": "日本" + } + }, + "registered_country": { + "geoname_id": 1861060, + "iso_code": "JP", + "names": { + "de": "Japan", + "en": "Japan", + "es": "Japón", + "fr": "Japon", + "ja": "日本", + "pt-BR": "Japão", + "ru": "ЯпониÑ�", + "zh-CN": "日本" + } + } + } + }, + { + "::108.211.181.12/128": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::50.244.17.130/128": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::173.5.0.0/112": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::70.95.0.0/112": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::193.159.20.129/128": { + "continent": { + "code": "EU", + "geoname_id": 6255148, + "names": { + "de": "Europa", + "en": "Europe", + "es": "Europa", + "fr": "Europe", + "ja": "ヨーロッパ", + "pt-BR": "Europa", + "ru": "Европа", + "zh-CN": "欧洲" + } + }, + "country": { + "geoname_id": 2921044, + "iso_code": "DE", + "names": { + "de": "Deutschland", + "en": "Germany", + "es": "Alemania", + "fr": "Allemagne", + "ja": "ドイツ連邦共和国", + "pt-BR": "Alemanha", + "ru": "ГерманиÑ�", + "zh-CN": "德国" + } + }, + "registered_country": { + "geoname_id": 2921044, + "iso_code": "DE", + "names": { + "de": "Deutschland", + "en": "Germany", + "es": "Alemania", + "fr": "Allemagne", + "ja": "ドイツ連邦共和国", + "pt-BR": "Alemanha", + "ru": "ГерманиÑ�", + "zh-CN": "德国" + } + } + } + }, + { + "::174.97.139.63/128": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::24.125.31.147/128": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::175.41.191.0/120": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1880251, + "iso_code": "SG", + "names": { + "de": "Singapur", + "en": "Singapore", + "es": "Singapur", + "fr": "Singapour", + "ja": "シンガãƒ�ール", + "pt-BR": "Cingapura", + "ru": "Сингапур", + "zh-CN": "新加å�¡" + } + }, + "registered_country": { + "geoname_id": 1880251, + "iso_code": "SG", + "names": { + "de": "Singapur", + "en": "Singapore", + "es": "Singapur", + "fr": "Singapour", + "ja": "シンガãƒ�ール", + "pt-BR": "Cingapura", + "ru": "Сингапур", + "zh-CN": "新加å�¡" + } + } + } + }, + { + "::175.41.193.0/120": { + "continent": { + "code": "AS", + "geoname_id": 6255147, + "names": { + "de": "Asien", + "en": "Asia", + "es": "Asia", + "fr": "Asie", + "ja": "アジア", + "pt-BR": "Ã�sia", + "ru": "Ð�зиÑ�", + "zh-CN": "亚洲" + } + }, + "country": { + "geoname_id": 1861060, + "iso_code": "JP", + "names": { + "de": "Japan", + "en": "Japan", + "es": "Japón", + "fr": "Japon", + "ja": "日本", + "pt-BR": "Japão", + "ru": "ЯпониÑ�", + "zh-CN": "日本" + } + }, + "registered_country": { + "geoname_id": 1861060, + "iso_code": "JP", + "names": { + "de": "Japan", + "en": "Japan", + "es": "Japón", + "fr": "Japon", + "ja": "日本", + "pt-BR": "Japão", + "ru": "ЯпониÑ�", + "zh-CN": "日本" + } + } + } + }, + { + "::67.51.31.21/128": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + }, + { + "::156.5.3.0/120": { + "continent": { + "code": "NA", + "geoname_id": 6255149, + "names": { + "de": "Nordamerika", + "en": "North America", + "es": "Norteamérica", + "fr": "Amérique du Nord", + "ja": "北アメリカ", + "pt-BR": "América do Norte", + "ru": "СевернаÑ� Ð�мерика", + "zh-CN": "北美洲" + } + }, + "country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + }, + "registered_country": { + "geoname_id": 6252001, + "iso_code": "US", + "names": { + "de": "USA", + "en": "United States", + "es": "Estados Unidos", + "fr": "États-Unis", + "ja": "アメリカå�ˆè¡†å›½", + "pt-BR": "Estados Unidos", + "ru": "СШÐ�", + "zh-CN": "美国" + } + } + } + } +] \ No newline at end of file diff --git a/tests/lib/geoip-files/GeoIP2-Country.mmdb b/tests/lib/geoip-files/GeoIP2-Country.mmdb new file mode 100644 index 0000000000000000000000000000000000000000..1d678e44ef8e4b5bf447735c20bb14ca10fcff02 Binary files /dev/null and b/tests/lib/geoip-files/GeoIP2-Country.mmdb differ diff --git a/tests/lib/geoip-files/GeoIP2-ISP.json b/tests/lib/geoip-files/GeoIP2-ISP.json new file mode 100644 index 0000000000000000000000000000000000000000..ccbb647312826f1ccfd23a74b56bcd7e045951f2 --- /dev/null +++ b/tests/lib/geoip-files/GeoIP2-ISP.json @@ -0,0 +1,16 @@ +[ + { + "::194.57.91.215/128" : { + "isp" : "Matomo Internet", + "organization" : "Innocraft" + } + }, + { + "::137.82.130.0/112" : { + "autonomous_system_number" : 1221, + "autonomous_system_organization" : "Phantasie Org", + "isp" : "Any Provider", + "organization" : "Phantasie Org" + } + } +] \ No newline at end of file diff --git a/tests/lib/geoip-files/GeoIP2-ISP.mmdb b/tests/lib/geoip-files/GeoIP2-ISP.mmdb new file mode 100644 index 0000000000000000000000000000000000000000..506063654c7d762d15cfc5987ecad7e18556209d Binary files /dev/null and b/tests/lib/geoip-files/GeoIP2-ISP.mmdb differ diff --git a/tests/lib/geoip-files/GeoLite2-ASN.json b/tests/lib/geoip-files/GeoLite2-ASN.json new file mode 100644 index 0000000000000000000000000000000000000000..063cdd1d97187b207aaee05aabe959134ce22032 --- /dev/null +++ b/tests/lib/geoip-files/GeoLite2-ASN.json @@ -0,0 +1,13 @@ +[ + { + "::194.57.91.215/128" : { + "autonomous_system_number" : 1221, + "autonomous_system_organization" : "Matomo Internet" + } + }, + { + "::137.82.130.0/112" : { + "autonomous_system_number" : 7018 + } + } +] \ No newline at end of file diff --git a/tests/lib/geoip-files/GeoLite2-ASN.mmdb b/tests/lib/geoip-files/GeoLite2-ASN.mmdb new file mode 100644 index 0000000000000000000000000000000000000000..f802dbe3ad9eadd5dbbe60b49485cf02de78f64c Binary files /dev/null and b/tests/lib/geoip-files/GeoLite2-ASN.mmdb differ diff --git a/tests/lib/geoip-files/README.md b/tests/lib/geoip-files/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ba636ed667223b7e2fbbffe72a440fc83d878fca --- /dev/null +++ b/tests/lib/geoip-files/README.md @@ -0,0 +1,9 @@ +## GeoIP 2 Databases for testing purpose + +This folder contains our GeoIP 2 test databases. They are small and contain only those IPs that are used for testing. This speeds up tests as it's faster to parse a small database than download and parse on of Maxminds Lite DBs. + + +## Updating a database + +In order to update a database e.g. add a new IP address with it's geo location you need to update `GeoIP2-City.json` and `GeoIP2-Country.json`. +Afterwards run the PERL script `writeTestFiles.pl`. This script is based on a [script of Maxmind](https://github.com/maxmind/MaxMind-DB/blob/master/test-data/write-test-data.pl). More information about the script and the Maxmind database format can be found in [their repo](https://github.com/maxmind/MaxMind-DB/). diff --git a/tests/lib/geoip-files/writeTestFiles.pl b/tests/lib/geoip-files/writeTestFiles.pl new file mode 100644 index 0000000000000000000000000000000000000000..3f6fac215cd34ef5f54038e86c914d1f7c2922bb --- /dev/null +++ b/tests/lib/geoip-files/writeTestFiles.pl @@ -0,0 +1,176 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use autodie; +use utf8; + +use Carp qw( croak ); +use Cwd qw( abs_path ); +use File::Basename qw( dirname ); +use File::Slurper qw( read_binary write_binary ); +use Cpanel::JSON::XS qw( decode_json ); +use Math::Int128 qw( uint128 ); +use MaxMind::DB::Writer::Serializer 0.100004; +use MaxMind::DB::Writer::Tree 0.100004; +use MaxMind::DB::Writer::Util qw( key_for_data ); +use Net::Works::Network; +use Test::MaxMind::DB::Common::Util qw( standard_test_metadata ); + +my $Dir = dirname( abs_path($0) ); + +sub main { + _write_geoip2_db( @{$_}[ 0, 1 ] ) + for ( + ['GeoIP2-City'], + ['GeoIP2-Country'], + ['GeoIP2-ISP'], + ['GeoLite2-ASN'], + );} + +sub _universal_map_key_type_callback { + my $map = { + + # languages + de => 'utf8_string', + en => 'utf8_string', + es => 'utf8_string', + fr => 'utf8_string', + ja => 'utf8_string', + 'pt-BR' => 'utf8_string', + ru => 'utf8_string', + 'zh-CN' => 'utf8_string', + + # production + accuracy_radius => 'uint16', + autonomous_system_number => 'uint32', + autonomous_system_organization => 'utf8_string', + average_income => 'uint32', + city => 'map', + code => 'utf8_string', + confidence => 'uint16', + connection_type => 'utf8_string', + continent => 'map', + country => 'map', + domain => 'utf8_string', + geoname_id => 'uint32', + ipv4_24 => 'uint32', + ipv4_32 => 'uint32', + ipv6_32 => 'uint32', + ipv6_48 => 'uint32', + ipv6_64 => 'uint32', + is_anonymous => 'boolean', + is_anonymous_proxy => 'boolean', + is_anonymous_vpn => 'boolean', + is_hosting_provider => 'boolean', + is_in_european_union => 'boolean', + is_legitimate_proxy => 'boolean', + is_public_proxy => 'boolean', + is_satellite_provider => 'boolean', + is_tor_exit_node => 'boolean', + iso_code => 'utf8_string', + isp => 'utf8_string', + latitude => 'double', + location => 'map', + longitude => 'double', + metro_code => 'uint16', + names => 'map', + organization => 'utf8_string', + population_density => 'uint32', + postal => 'map', + registered_country => 'map', + represented_country => 'map', + subdivisions => [ 'array', 'map' ], + time_zone => 'utf8_string', + traits => 'map', + traits => 'map', + type => 'utf8_string', + user_type => 'utf8_string', + + # for testing only + foo => 'utf8_string', + bar => 'utf8_string', + buzz => 'utf8_string', + our_value => 'utf8_string', + }; + + my $callback = sub { + my $key = shift; + + return $map->{$key} || die <<"ERROR"; +Unknown tree key '$key'. + +The universal_map_key_type_callback doesn't know what type to use for the passed +key. If you are adding a new key that will be used in a frozen tree / mmdb then +you should update the mapping in both our internal code and here. +ERROR + }; + + return $callback; +} + +sub _write_geoip2_db { + my $type = shift; + my $populate_all_networks_with_data = shift; + my $description = shift; + + my $writer = MaxMind::DB::Writer::Tree->new( + ip_version => 6, + record_size => 28, + ip_version => 6, + database_type => $type, + languages => [ 'en', $type eq 'GeoIP2-City' ? ('zh') : () ], + description => { + en => ( $type =~ s/-/ /gr ) + . " Test Database (fake GeoIP2 data, for example purposes only)", + $type eq 'GeoIP2-City' ? ( zh => 'å°�型数æ�®åº“' ) : (), + }, + alias_ipv6_to_ipv4 => 1, + map_key_type_callback => _universal_map_key_type_callback(), + ); + + _populate_all_networks( $writer, $populate_all_networks_with_data ) + if $populate_all_networks_with_data; + + my $value = shift; + my $nodes + = decode_json( read_binary("$Dir/$type.json") ); + + for my $node (@$nodes) { + for my $network ( keys %$node ) { + $writer->insert_network( + Net::Works::Network->new_from_string( string => $network ), + $node->{$network} + ); + } + } + + open my $output_fh, '>', "$Dir/$type.mmdb"; + $writer->write_tree($output_fh); + close $output_fh; + + return; +} + +sub _populate_all_networks { + my $writer = shift; + my $data = shift; + + my $max_uint128 = uint128(0) - 1; + my @networks = Net::Works::Network->range_as_subnets( + Net::Works::Address->new_from_integer( + integer => 0, + version => 6, + ), + Net::Works::Address->new_from_integer( + integer => $max_uint128, + version => 6, + ), + ); + + for my $network (@networks) { + $writer->insert_network( $network => $data ); + } +} + +main(); \ No newline at end of file diff --git a/tests/lib/q-1.4.1/.coverignore b/tests/lib/q-1.4.1/.coverignore new file mode 100644 index 0000000000000000000000000000000000000000..1564ca04270703128dff497735b39e6e138e0186 --- /dev/null +++ b/tests/lib/q-1.4.1/.coverignore @@ -0,0 +1 @@ +spec/ diff --git a/tests/lib/q-1.4.1/.gitignore b/tests/lib/q-1.4.1/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..4aca249106a0c9a6586ba8290288134362f3a16d --- /dev/null +++ b/tests/lib/q-1.4.1/.gitignore @@ -0,0 +1,12 @@ +node_modules +npm-debug.log +CHANGES.html +README.html +.tmp +q.min.js + +coverage/ + +# IntelliJ IDEA project files +.idea +*.iml diff --git a/tests/lib/q-1.4.1/.jshintrc b/tests/lib/q-1.4.1/.jshintrc new file mode 100644 index 0000000000000000000000000000000000000000..387bb8d21d0f1f7c656be083e8dbcf0d9929836a --- /dev/null +++ b/tests/lib/q-1.4.1/.jshintrc @@ -0,0 +1,27 @@ +{ + "browser": true, + "node": true, + + "curly": true, + "eqeqeq": true, + "es3": true, + "newcap": false, + "noarg": true, + "nonew": true, + "quotmark": "double", + "strict": true, + "trailing": true, + "undef": true, + "unused": true, + + "globals": { + "self": false, + "bootstrap": false, + "cajaVM": false, + "define": false, + "ReturnValue": false, + "ses": false, + "setImmediate": false, + "Q": true + } +} diff --git a/tests/lib/q-1.4.1/.mailmap b/tests/lib/q-1.4.1/.mailmap new file mode 100644 index 0000000000000000000000000000000000000000..281850a3462e607c980c1c6ac9af6e86e9708630 --- /dev/null +++ b/tests/lib/q-1.4.1/.mailmap @@ -0,0 +1,2 @@ +Domenic Denicola +Kris Kowal diff --git a/tests/lib/q-1.4.1/.travis.yml b/tests/lib/q-1.4.1/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..d68110e6676aa39f322e55bd7384a8123894aa88 --- /dev/null +++ b/tests/lib/q-1.4.1/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "0.10" +script: + npm run lint && npm test diff --git a/tests/lib/q-1.4.1/CHANGES.md b/tests/lib/q-1.4.1/CHANGES.md new file mode 100644 index 0000000000000000000000000000000000000000..eb60b0d7af505559fa90e40a3d1d3b2b39693264 --- /dev/null +++ b/tests/lib/q-1.4.1/CHANGES.md @@ -0,0 +1,786 @@ + +## 1.4.1 + + - Address an issue that prevented Q from being used as a ` + + + diff --git a/tests/lib/q-1.4.1/examples/async-generators/1-return.js b/tests/lib/q-1.4.1/examples/async-generators/1-return.js new file mode 100644 index 0000000000000000000000000000000000000000..7aab6db4489262474149d73290dd973bfb4527af --- /dev/null +++ b/tests/lib/q-1.4.1/examples/async-generators/1-return.js @@ -0,0 +1,19 @@ +"use strict"; + +var Q = require("../../q"); + +var generator = Q.async(function* () { + var ten = yield 10; + console.log(ten, 10); + var twenty = yield ten + 10; + console.log(twenty, 20); + var thirty = yield twenty + 10; + console.log(thirty, 30); + return thirty + 10; +}); + +generator().then(function (forty) { + console.log(forty, 40); +}, function (reason) { + console.log("reason", reason); +}); diff --git a/tests/lib/q-1.4.1/examples/async-generators/2-error-propagation.js b/tests/lib/q-1.4.1/examples/async-generators/2-error-propagation.js new file mode 100644 index 0000000000000000000000000000000000000000..ccd788bd59b26df2fb67f8da9711329455cd2abb --- /dev/null +++ b/tests/lib/q-1.4.1/examples/async-generators/2-error-propagation.js @@ -0,0 +1,21 @@ +"use strict"; + +var Q = require("../../q"); + +var generator = Q.async(function* () { + try { + var ten = yield Q.reject(new Error("Rejected!")); + console.log("Should not get here 1"); + } catch (exception) { + console.log("Should get here 1"); + console.log(exception.message, "should be", "Rejected!"); + throw new Error("Threw!"); + } +}); + +generator().then(function () { + console.log("Should not get here 2"); +}, function (reason) { + console.log("Should get here 2"); + console.log(reason.message, "should be", "Threw!"); +}); diff --git a/tests/lib/q-1.4.1/examples/async-generators/3-spawn.js b/tests/lib/q-1.4.1/examples/async-generators/3-spawn.js new file mode 100644 index 0000000000000000000000000000000000000000..85fe0672c83c42ae53210ff66aadca41193e7db9 --- /dev/null +++ b/tests/lib/q-1.4.1/examples/async-generators/3-spawn.js @@ -0,0 +1,21 @@ +"use strict"; + +var Q = require("../../q"); + +function foo() { + return Q.delay(5, 1000); +} + +function bar() { + return Q.delay(10, 1000); +} + +Q.spawn(function* () { + var x = yield foo(); + console.log(x); + + var y = yield bar(); + console.log(y); + + console.log("result", x + y); +}); diff --git a/tests/lib/q-1.4.1/examples/async-generators/4-flow-control.js b/tests/lib/q-1.4.1/examples/async-generators/4-flow-control.js new file mode 100644 index 0000000000000000000000000000000000000000..017bf8a0d9f96d8aff2bbcf9f578ec560e960b42 --- /dev/null +++ b/tests/lib/q-1.4.1/examples/async-generators/4-flow-control.js @@ -0,0 +1,42 @@ +"use strict"; + +var Q = require("../../q"); + +// We get back blocking semantics: can use promises with `if`, `while`, `for`, +// etc. +var filter = Q.async(function* (promises, test) { + var results = []; + for (var i = 0; i < promises.length; i++) { + var val = yield promises[i]; + if (test(val)) { + results.push(val); + } + } + return results; +}); + +var promises = [ + Q.delay("a", 500), + Q.delay("d", 1000), + Q("l") +]; + +filter(promises, function (letter) { + return "f" > letter; +}).done(function (all) { + console.log(all); // [ "a", "d" ] +}); + + +// we can use try and catch to handle rejected promises +var logRejections = Q.async(function* (work) { + try { + yield work; + console.log("Never end up here"); + } catch (e) { + console.log("Caught:", e.message); + } +}); + +var rejection = Q.reject(new Error("Oh dear")); +logRejections(rejection); // Caught: Oh dear diff --git a/tests/lib/q-1.4.1/examples/async-generators/README.md b/tests/lib/q-1.4.1/examples/async-generators/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c409f0b0ee6610e176947b6f45acdc96e72046ba --- /dev/null +++ b/tests/lib/q-1.4.1/examples/async-generators/README.md @@ -0,0 +1,66 @@ +:warning: Warning: The behavior described here is likely to be quickly +obseleted by developments in standardization and implementation. Tread with +care. + +Q has an `async` function. This can be used to decorate a generator function +such that `yield` is effectively equivalent to `await` or `defer` syntax as +supported by languages like Go and C# 5. + +Generator functions are presently on the standards track for ES6. As of July +2013, they are only fully supported by bleeding edge V8, which hasn't made it +out to a released Chromium yet but will probably be in Chromium 29. Even then, +they must be enabled from [chrome://flags](chrome://flags) as "Experimental +JavaScript features." SpiderMonkey (used in Firefox) includes an older style of +generators, but these are not supported by Q. + +Here's an example of using generators by themselves, without any Q features: + +```js +function* count() { + var i = 0; + while (true) { + yield i++; + } +} + +var counter = count(); +counter.next().value === 0; +counter.next().value === 1; +counter.next().value === 2; +``` + +`yield` can also return a value, if the `next` method of the generator is +called with a parameter: + +```js +var buffer = (function* () { + var x; + while (true) { + x = yield x; + } +}()); + +buffer.next(1).value === undefined; +buffer.next("a").value === 1; +buffer.value(2).value === "a"; +buffer.next().value === 2; +buffer.next().value === undefined; +buffer.next().value === undefined; +``` + +Inside functions wrapped with `Q.async`, we can use `yield` to wait for a +promise to settle: + +```js +var eventualAdd = Q.async(function* (oneP, twoP) { + var one = yield oneP; + var two = yield twoP; + return one + two; +}); + +eventualAdd(eventualOne, eventualTwo).then(function (three) { + three === 3; +}); +``` +You can see more examples of how this works, as well as the `Q.spawn` function, +in the other files in this folder. diff --git a/tests/lib/q-1.4.1/package.json b/tests/lib/q-1.4.1/package.json new file mode 100644 index 0000000000000000000000000000000000000000..acfd18271b6636292fa20e1c5507f99bbde964cb --- /dev/null +++ b/tests/lib/q-1.4.1/package.json @@ -0,0 +1,79 @@ +{ + "name": "q", + "version": "1.4.1", + "description": "A library for promises (CommonJS/Promises/A,B,D)", + "homepage": "https://github.com/kriskowal/q", + "author": "Kris Kowal (https://github.com/kriskowal)", + "keywords": [ + "q", + "promise", + "promises", + "promises-a", + "promises-aplus", + "deferred", + "future", + "async", + "flow control", + "fluent", + "browser", + "node" + ], + "contributors": [ + "Kris Kowal (https://github.com/kriskowal)", + "Irakli Gozalishvili (http://jeditoolkit.com)", + "Domenic Denicola (http://domenicdenicola.com)" + ], + "bugs": { + "mail": "kris@cixar.com", + "url": "http://github.com/kriskowal/q/issues" + }, + "license": { + "type": "MIT", + "url": "http://github.com/kriskowal/q/raw/master/LICENSE" + }, + "main": "q.js", + "files": [ + "LICENSE", + "q.js", + "queue.js" + ], + "repository": { + "type": "git", + "url": "git://github.com/kriskowal/q.git" + }, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + }, + "dependencies": {}, + "devDependencies": { + "cover": "*", + "grunt": "~0.4.1", + "grunt-cli": "~0.1.9", + "grunt-contrib-uglify": "~0.9.1", + "jasmine-node": "1.11.0", + "jshint": "~2.1.9", + "matcha": "~0.2.0", + "opener": "*", + "promises-aplus-tests": "1.x" + }, + "scripts": { + "test": "jasmine-node spec && promises-aplus-tests spec/aplus-adapter", + "test-browser": "opener spec/q-spec.html", + "benchmark": "matcha", + "lint": "jshint q.js", + "cover": "cover run jasmine-node spec && cover report html && opener cover_html/index.html", + "minify": "grunt", + "prepublish": "grunt" + }, + "overlay": { + "teleport": { + "dependencies": { + "system": ">=0.0.4" + } + } + }, + "directories": { + "test": "./spec" + } +} diff --git a/tests/lib/q-1.4.1/q.js b/tests/lib/q-1.4.1/q.js new file mode 100644 index 0000000000000000000000000000000000000000..cf5339e33227aaf7a22c6f030f1675f1372376e9 --- /dev/null +++ b/tests/lib/q-1.4.1/q.js @@ -0,0 +1,2048 @@ +// vim:ts=4:sts=4:sw=4: +/*! + * + * Copyright 2009-2012 Kris Kowal under the terms of the MIT + * license found at http://github.com/kriskowal/q/raw/master/LICENSE + * + * With parts by Tyler Close + * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found + * at http://www.opensource.org/licenses/mit-license.html + * Forked at ref_send.js version: 2009-05-11 + * + * With parts by Mark Miller + * Copyright (C) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +(function (definition) { + "use strict"; + + // This file will function properly as a + + + + + + + + + + + + + + + + diff --git a/tests/lib/q-1.4.1/spec/q-spec.js b/tests/lib/q-1.4.1/spec/q-spec.js new file mode 100644 index 0000000000000000000000000000000000000000..ce47ef183454a65410fc4c908ee93a52806b2414 --- /dev/null +++ b/tests/lib/q-1.4.1/spec/q-spec.js @@ -0,0 +1,2858 @@ +"use strict"; +/*jshint newcap: false*/ +/*global Q: true, describe: false, it: false, expect: false, beforeEach: false, + afterEach: false, require: false, jasmine: false, waitsFor: false, + runs: false */ + +if (typeof Q === "undefined" && typeof require !== "undefined") { + // For Node compatibility. + global.Q = require("../q"); + require("./lib/jasmine-promise"); +} + +var REASON = "this is not an error, but it might show up in the console"; + +// In browsers that support strict mode, it'll be `undefined`; otherwise, the global. +var calledAsFunctionThis = (function () { return this; }()); + +afterEach(function () { + Q.onerror = null; +}); + +describe("computing sum of integers using promises", function() { + it("should compute correct result without blowing stack", function () { + var array = []; + var iters = 1000; + for (var i = 1; i <= iters; i++) { + array.push(i); + } + + var pZero = Q.fulfill(0); + var result = array.reduce(function (promise, nextVal) { + return promise.then(function (currentVal) { + return Q.fulfill(currentVal + nextVal); + }); + }, pZero); + + return result.then(function (value) { + expect(value).toEqual(iters * (iters + 1) / 2); + }); + }); +}); + +describe("Q function", function () { + it("should result in a fulfilled promise when given a value", function () { + expect(Q(5).isFulfilled()).toBe(true); + }); + + it("should be the identity when given promise", function () { + var f = Q.fulfill(5); + var r = Q.reject(new Error("aaargh")); + var p = Q.promise(function () { }); + + expect(Q(f)).toBe(f); + expect(Q(r)).toBe(r); + expect(Q(p)).toBe(p); + }); +}); + +describe("defer and when", function () { + + it("resolve before when", function () { + var turn = 0; + var deferred = Q.defer(); + deferred.resolve(10); + var promise = Q.when(deferred.promise, function (value) { + expect(turn).toEqual(1); + expect(value).toEqual(10); + }); + turn++; + return promise; + }); + + it("reject before when", function () { + var turn = 0; + var deferred = Q.defer(); + deferred.reject(-1); + var promise = Q.when(deferred.promise, function () { + expect(true).toBe(false); + }, function (value) { + expect(turn).toEqual(1); + expect(value).toEqual(-1); + }); + turn++; + return promise; + }); + + it("when before resolve", function () { + var turn = 0; + var deferred = Q.defer(); + var promise = deferred.promise.then(function (value) { + expect(turn).toEqual(2); + expect(value).toEqual(10); + turn++; + }); + Q.nextTick(function () { + expect(turn).toEqual(1); + deferred.resolve(10); + turn++; + }); + turn++; + return promise; + }); + + it("when before reject", function () { + var turn = 0; + var deferred = Q.defer(); + var promise = deferred.promise.then(function () { + expect(true).toBe(false); + }, function (value) { + expect(turn).toEqual(2); + expect(value).toEqual(-1); + turn++; + }); + Q.nextTick(function () { + expect(turn).toEqual(1); + deferred.reject(-1); + turn++; + }); + turn++; + return promise; + }); + + it("resolves multiple observers", function (done) { + var nextTurn = false; + + var resolution = "Taram pam param!"; + var deferred = Q.defer(); + var count = 10; + var i = 0; + + function resolve(value) { + i++; + expect(value).toBe(resolution); + expect(nextTurn).toBe(true); + if (i === count) { + done(); + } + } + + while (++i <= count) { + Q.when(deferred.promise, resolve); + } + + deferred.resolve(resolution); + i = 0; + nextTurn = true; + }); + + it("observers called even after throw", function () { + var threw = false; + var deferred = Q.defer(); + Q.when(deferred.promise, function () { + threw = true; + throw new Error(REASON); + }); + var promise = Q.when(deferred.promise, function (value) { + expect(value).toEqual(10); + }, function () { + expect("not").toEqual("here"); + }); + deferred.resolve(10); + return promise; + }); + + it("returns `undefined` from the deferred's methods", function () { + expect(Q.defer().resolve()).toBe(undefined); + expect(Q.defer().reject()).toBe(undefined); + }); + +}); + +describe("always next tick", function () { + + it("generated by `resolve`", function () { + var turn = 0; + var promise = Q.when(Q(), function () { + expect(turn).toEqual(1); + }); + turn++; + return promise; + }); + + it("generated by `reject`", function () { + var turn = 0; + var promise = Q.when(Q.reject(), function () { + expect(true).toBe(false); + }, function () { + expect(turn).toEqual(1); + }); + turn++; + return promise; + }); + + it("allows overriding global nextTick", function () { + var spy = jasmine.createSpy(); + spyOn(Q, 'nextTick').andCallFake(function immediateTick(task){ + task(); + }); + + Q.when(Q(), spy); + + expect(spy).toHaveBeenCalled(); + expect(Q.nextTick).toHaveBeenCalled(); + }); +}); + +describe("progress", function () { + + it("calls a single progress listener", function () { + var progressed = false; + var deferred = Q.defer(); + + var promise = Q.when( + deferred.promise, + function () { + expect(progressed).toBe(true); + }, + function () { + expect(true).toBe(false); + }, + function () { + progressed = true; + } + ); + + deferred.notify(); + deferred.resolve(); + + return promise; + }); + + it("calls multiple progress listeners", function () { + var progressed1 = false; + var progressed2 = false; + var deferred = Q.defer(); + var promise = Q.when( + deferred.promise, + function () { + expect(progressed1).toBe(true); + expect(progressed2).toBe(true); + }, + function () { + expect(true).toBe(false); + }, + function () { + progressed1 = true; + } + ); + Q.when(deferred.promise, null, null, function () { + progressed2 = true; + }); + + deferred.notify(); + deferred.resolve(); + + return promise; + }); + + it("calls all progress listeners even if one throws", function () { + var progressed1 = false; + var progressed2 = false; + var progressed3 = false; + var deferred = Q.defer(); + var promise = Q.when( + deferred.promise, + function () { + expect(progressed1).toBe(true); + expect(progressed2).toBe(true); + expect(progressed3).toBe(true); + }, + function () { + expect(true).toBe(false); + }, + function () { + progressed1 = true; + } + ); + + Q.onerror = function () { }; + + Q.when(deferred.promise, null, null, function () { + progressed2 = true; + throw new Error("just a test, ok if it shows up in the console"); + }); + Q.when(deferred.promise, null, null, function () { + progressed3 = true; + }); + + deferred.notify(); + deferred.resolve(); + + return promise; + }); + + it("calls the progress listener even if later rejected", function () { + var progressed = false; + var deferred = Q.defer(); + var promise = Q.when( + deferred.promise, + function () { + expect(true).toBe(false); + }, + function () { + expect(progressed).toEqual(true); + }, + function () { + progressed = true; + } + ); + + deferred.notify(); + deferred.reject(); + + return promise; + }); + + it("calls the progress listener with the notify values", function () { + var progressValues = []; + var desiredProgressValues = [{}, {}, "foo", 5]; + var deferred = Q.defer(); + var promise = Q.when( + deferred.promise, + function () { + for (var i = 0; i < desiredProgressValues.length; ++i) { + var desired = desiredProgressValues[i]; + var actual = progressValues[i]; + expect(actual).toBe(desired); + } + }, + function () { + expect(true).toBe(false); + }, + function (value) { + progressValues.push(value); + } + ); + + for (var i = 0; i < desiredProgressValues.length; ++i) { + deferred.notify(desiredProgressValues[i]); + } + deferred.resolve(); + + return promise; + }); + + it("does not call the progress listener if notify is called after fulfillment", function () { + var deferred = Q.defer(); + var called = false; + + Q.when(deferred.promise, null, null, function () { + called = true; + }); + + deferred.resolve(); + deferred.notify(); + + return Q.delay(10).then(function () { + expect(called).toBe(false); + }); + }); + + it("does not call the progress listener if notify is called after rejection", function () { + var deferred = Q.defer(); + var called = false; + + Q.when(deferred.promise, null, null, function () { + called = true; + }); + + deferred.reject(); + deferred.notify(); + + return Q.delay(10).then(function () { + expect(called).toBe(false); + }); + }); + + it("should not save and re-emit progress notifications", function () { + var deferred = Q.defer(); + var progressValues = []; + + deferred.notify(1); + + var promise = Q.when( + deferred.promise, + function () { + expect(progressValues).toEqual([2]); + }, + function () { + expect(true).toBe(false); + }, + function (progressValue) { + progressValues.push(progressValue); + } + ); + + deferred.notify(2); + deferred.resolve(); + + return promise; + }); + + it("should allow attaching progress listeners w/ .progress", function () { + var progressed = false; + var deferred = Q.defer(); + + deferred.promise.progress(function () { + progressed = true; + }); + + deferred.notify(); + deferred.resolve(); + + return deferred.promise; + }); + + it("should allow attaching progress listeners w/ Q.progress", function () { + var progressed = false; + var deferred = Q.defer(); + + Q.progress(deferred.promise, function () { + progressed = true; + }); + + deferred.notify(); + deferred.resolve(); + + return deferred.promise; + }); + + it("should call the progress listener with undefined context", function () { + var progressed = false; + var progressContext = {}; + var deferred = Q.defer(); + var promise = Q.when( + deferred.promise, + function () { + expect(progressed).toBe(true); + expect(progressContext).toBe(calledAsFunctionThis); + }, + function () { + expect(true).toBe(false); + }, + function () { + progressed = true; + progressContext = this; + } + ); + + deferred.notify(); + deferred.resolve(); + + return promise; + }); + + it("should forward only the first notify argument to listeners", function () { + var progressValueArrays = []; + var deferred = Q.defer(); + + var promise = Q.when( + deferred.promise, + function () { + expect(progressValueArrays).toEqual([[1], [2], [4]]); + }, + function () { + expect(true).toBe(false); + }, + function () { + var args = Array.prototype.slice.call(arguments); + progressValueArrays.push(args); + } + ); + + deferred.notify(1); + deferred.notify(2, 3); + deferred.notify(4, 5, 6); + deferred.resolve(); + + return promise; + }); + + it("should work with .then as well", function () { + var progressed = false; + var deferred = Q.defer(); + + var promise = deferred.promise.then( + function () { + expect(progressed).toBe(true); + }, + function () { + expect(true).toBe(false); + }, + function () { + progressed = true; + } + ); + + deferred.notify(); + deferred.resolve(); + + return promise; + }); + + it("should re-throw all errors thrown by listeners to Q.onerror", function () { + var theError = new Error("boo!"); + + var def = Q.defer(); + def.promise.progress(function () { + throw theError; + }); + + var deferred = Q.defer(); + Q.onerror = function (error) { + expect(error).toBe(theError); + deferred.resolve(); + }; + Q.delay(100).then(deferred.reject); + + def.notify(); + + return deferred.promise; + }); +}); + +describe("promises for objects", function () { + + describe("get", function () { + + it("fulfills a promise", function () { + var deferred = Q.defer(); + deferred.resolve({a: 1}); + return deferred.promise.get("a") + .then(function (a) { + expect(a).toBe(1); + }); + }); + + it("propagates a rejection", function () { + var exception = new Error("boo!"); + return Q.fcall(function () { + throw exception; + }) + .get("a") + .then(function () { + expect("be").toBe("not to be"); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + + }); + + describe("set", function () { + + it("fulfills a promise", function () { + var object = {}; + return Q(object) + .set("a", 1) + .then(function (result) { + expect(result).toBe(undefined); + expect(object.a).toBe(1); + }); + }); + + it("propagates a rejection", function () { + var exception = new Error("Gah!"); + return Q.reject(exception) + .set("a", 1) + .then(function () { + expect("frozen over").toBe("quite warm"); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + + }); + + describe("del", function () { + + it("fulfills a promise", function () { + var object = {a: 10}; + return Q.fcall(function () { + return object; + }) + .del("a") + .then(function (result) { + expect("a" in object).toBe(false); + expect(result).toBe(void 0); + }, function () { + expect("up").toBe("down"); + }); + }); + + it("propagates a rejection", function () { + var exception = new Error("hah-hah"); + return Q.fcall(function () { + throw exception; + }) + .del("a") + .then(function () { + expect(true).toBe(false); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + + }); + + describe("post", function () { + + it("fulfills a promise", function () { + var subject = { + a: function a(value) { + this._a = value; + return 1 + value; + } + }; + return Q.when(Q.post(subject, "a", [1]), function (two) { + expect(subject._a).toBe(1); + expect(two).toBe(2); + }); + }); + + it("works as apply when given no name", function () { + return Q(function (a, b, c) { + return a + b + c; + }) + .post(undefined, [1, 2, 3]) + .then(function (sum) { + expect(sum).toEqual(6); + }); + }); + + }); + + describe("send", function () { + + it("fulfills a promise", function () { + var foo; + var subject = { + foo: function (_bar) { + return _bar; + }, + bar: function (_foo, _bar) { + foo = _foo; + return this.foo(_bar); + } + }; + return Q.send(subject, "bar", 1, 2) + .then(function (two) { + expect(foo).toEqual(1); + expect(two).toEqual(2); + }); + }); + + it("is rejected for undefined method", function () { + var subject = {}; + return Q(subject) + .send("foo") + .then(function () { + expect("here").toEqual("not here"); + }, function () { + }); + }); + + it("is rejected for undefined object", function () { + return Q() + .send("foo") + .then(function () { + expect("here").toEqual("not here"); + }, function () { + }); + }); + + }); + + describe("keys", function () { + + function Klass (a, b) { + this.a = a; + this.b = b; + } + Klass.prototype.notOwn = 1; + + it("fulfills a promise", function () { + return Q.keys(new Klass(10, 20)) + .then(function (keys) { + expect(keys.sort()).toEqual(["a", "b"]); + }); + }); + + }); + +}); + +describe("promises for functions", function () { + + describe("fapply", function () { + it("fulfills a promise using arguments", function () { + return Q(function (a, b, c) { + return a + b + c; + }) + .fapply([1, 2, 3]) + .then(function (sum) { + expect(sum).toEqual(6); + }); + }); + }); + + describe("fcall", function () { + it("fulfills a promise using arguments", function () { + return Q(function (a, b, c) { + return a + b + c; + }) + .fcall(1, 2, 3) + .then(function (sum) { + expect(sum).toEqual(6); + }); + }); + }); + + describe("fbind", function () { + + it("accepts a promise for a function", function () { + return Q.fbind(Q(function (high, low) { + return high - low; + })) + (2, 1) + .then(function (difference) { + expect(difference).toEqual(1); + }); + }); + + it("chains partial application on a promise for a function", function () { + return Q(function (a, b) { + return a * b; + }) + .fbind(2)(3) + .then(function (product) { + expect(product).toEqual(6); + }); + }); + + it("returns a fulfilled promise", function () { + var result = {}; + var bound = Q.fbind(function () { + return result; + }); + return bound() + .then(function (_result) { + expect(_result).toBe(result); + }); + }); + + it("returns a rejected promise from a thrown error", function () { + var exception = new Error("Boo!"); + var bound = Q.fbind(function () { + throw exception; + }); + return bound() + .then(function () { + expect("flying pigs").toBe("swillin' pigs"); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + + it("passes arguments through", function () { + var x = {}, y = {}; + var bound = Q.fbind(function (a, b) { + expect(a).toBe(x); + expect(b).toBe(y); + }); + return bound(x, y); + }); + + it("passes and also partially applies arguments", function () { + var x = {}, y = {}; + var bound = Q.fbind(function (a, b) { + expect(a).toBe(x); + expect(b).toBe(y); + }, x); + return bound(y); + }); + + it("doesn't bind `this`", function () { + var theThis = { me: "this" }; + var bound = Q.fbind(function () { + expect(this).toBe(theThis); + }); + + return bound.call(theThis); + }); + + }); + +}); + +describe("inspect", function () { + + it("for a fulfilled promise", function () { + expect(Q(10).inspect()).toEqual({ + state: "fulfilled", + value: 10 + }); + }); + + it("for a rejected promise", function () { + var error = new Error("In your face."); + var rejected = Q.reject(error); + expect(rejected.inspect()).toEqual({ + state: "rejected", + reason: error + }); + }); + + it("for a pending, unresolved promise", function () { + var pending = Q.defer().promise; + expect(pending.inspect()).toEqual({ state: "pending" }); + }); + + it("for a promise resolved to a rejected promise", function () { + var deferred = Q.defer(); + var error = new Error("Rejected!"); + var rejected = Q.reject(error); + deferred.resolve(rejected); + + expect(deferred.promise.inspect()).toEqual({ + state: "rejected", + reason: error + }); + }); + + it("for a promise resolved to a fulfilled promise", function () { + var deferred = Q.defer(); + var fulfilled = Q(10); + deferred.resolve(fulfilled); + + expect(deferred.promise.inspect()).toEqual({ + state: "fulfilled", + value: 10 + }); + }); + + it("for a promise resolved to a pending promise", function () { + var a = Q.defer(); + var b = Q.defer(); + a.resolve(b.promise); + + expect(a.promise.inspect()).toEqual({ state: "pending" }); + }); + +}); + +describe("promise states", function () { + + it("of fulfilled value", function () { + expect(Q.isFulfilled(void 0)).toBe(true); + expect(Q.isRejected(false)).toBe(false); + expect(Q.isPending(true)).toBe(false); + }); + + it("of fulfillment", function () { + var promise = Q(10); + expect(Q.isFulfilled(promise)).toBe(true); + expect(promise.isFulfilled()).toBe(true); + expect(Q.isRejected(promise)).toBe(false); + expect(promise.isRejected()).toBe(false); + expect(Q.isPending(promise)).toBe(false); + expect(promise.isPending()).toBe(false); + }); + + it("of rejection", function () { + var error = new Error("Oh, snap."); + var promise = Q.reject(error); + expect(promise.isFulfilled()).toBe(false); + expect(promise.isRejected()).toBe(true); + expect(promise.isPending()).toBe(false); + }); + + it("of rejection with a falsy value", function () { + var promise = Q.reject(undefined); + expect(promise.isFulfilled()).toBe(false); + expect(promise.isRejected()).toBe(true); + expect(promise.isPending()).toBe(false); + }); + + it("of deferred", function () { + var deferred = Q.defer(); + var promise = deferred.promise; + expect(promise.isFulfilled()).toBe(false); + expect(promise.isRejected()).toBe(false); + expect(promise.isPending()).toBe(true); + }); + + it("of deferred rejection", function () { + var deferred = Q.defer(); + var rejection = Q.reject(new Error("Rejected!")); + deferred.resolve(rejection); + var promise = deferred.promise; + expect(promise.isFulfilled()).toBe(false); + expect(promise.isRejected()).toBe(true); + expect(promise.isPending()).toBe(false); + }); + + it("of deferred fulfillment", function () { + var deferred = Q.defer(); + deferred.resolve(10); + var promise = deferred.promise; + expect(promise.isFulfilled()).toBe(true); + expect(promise.isRejected()).toBe(false); + expect(promise.isPending()).toBe(false); + }); + + it("of deferred deferred", function () { + var a = Q.defer(); + var b = Q.defer(); + a.resolve(b.promise); + var promise = a.promise; + expect(promise.isFulfilled()).toBe(false); + expect(promise.isRejected()).toBe(false); + expect(promise.isPending()).toBe(true); + }); + + it("of isFulfilled side effects", function () { + var deferred = Q.defer(); + var finished = false; + + waitsFor(function () { + return finished; + }); + + var parentPromise = deferred.promise; + + var childPromise = parentPromise.then(function () { + expect(parentPromise.isFulfilled()).toBe(true); + expect(childPromise.isFulfilled()).toBe(false); + + return parentPromise.then(function (value) { + finished = true; + return value + 1; + }); + }); + + deferred.resolve(1); + + runs(function () { + expect(childPromise.isPending()).toBe(false); + expect(childPromise.isRejected()).toBe(false); + expect(childPromise.isFulfilled()).toBe(true); + expect(childPromise.inspect().value).toBe(2); + }); + }); + +}); + +describe("propagation", function () { + + it("propagate through then with no callback", function () { + return Q(10) + .then() + .then(function (ten) { + expect(ten).toBe(10); + }); + }); + + it("propagate through then with modifying callback", function () { + return Q(10) + .then(function (ten) { + return ten + 10; + }) + .then(function (twen) { + expect(twen).toBe(20); + }); + }); + + it("errback recovers from exception", function () { + var error = new Error("Bah!"); + return Q.reject(error) + .then(null, function (_error) { + expect(_error).toBe(error); + return 10; + }) + .then(function (value) { + expect(value).toBe(10); + }); + }); + + it("rejection propagates through then with no errback", function () { + var error = new Error("Foolish mortals!"); + return Q.reject(error) + .then() + .then(null, function (_error) { + expect(_error).toBe(error); + }); + }); + + it("rejection intercepted and rethrown", function () { + var error = new Error("Foolish mortals!"); + var nextError = new Error("Silly humans!"); + return Q.reject(error) + .fail(function () { + throw nextError; + }) + .then(null, function (_error) { + expect(_error).toBe(nextError); + }); + }); + + it("resolution is forwarded through deferred promise", function () { + var a = Q.defer(); + var b = Q.defer(); + a.resolve(b.promise); + b.resolve(10); + return a.promise.then(function (eh) { + expect(eh).toEqual(10); + }); + }); + + it("should propagate progress by default", function () { + var d = Q.defer(); + + var progressValues = []; + var promise = d.promise + .then() + .then( + function () { + expect(progressValues).toEqual([1]); + }, + function () { + expect(true).toBe(false); + }, + function (progressValue) { + progressValues.push(progressValue); + } + ); + + d.notify(1); + d.resolve(); + + return promise; + }); + + it("should allow translation of progress in the progressback", function () { + var d = Q.defer(); + + var progressValues = []; + var promise = d.promise + .progress(function (p) { + return p + 5; + }) + .then( + function () { + expect(progressValues).toEqual([10]); + }, + function () { + expect(true).toBe(false); + }, + function (progressValue) { + progressValues.push(progressValue); + } + ); + + d.notify(5); + d.resolve(); + + return promise; + }); + + + it("should stop progress propagation if an error is thrown", function () { + var def = Q.defer(); + var p2 = def.promise.progress(function () { + throw new Error("boo!"); + }); + + Q.onerror = function () { /* just swallow it for this test */ }; + + var progressValues = []; + var result = p2.then( + function () { + expect(progressValues).toEqual([]); + }, + function () { + expect(true).toBe(false); + }, + function (progressValue) { + progressValues.push(progressValue); + } + ); + + def.notify(); + def.resolve(); + return result; + }); +}); + +describe("all", function () { + it("fulfills when passed an empty array", function () { + return Q.all([]); + }); + + it("rejects after any constituent promise is rejected", function () { + var toResolve = Q.defer(); // never resolve + var toReject = Q.defer(); + var promises = [toResolve.promise, toReject.promise]; + var promise = Q.all(promises); + + toReject.reject(new Error("Rejected")); + + return Q.delay(250) + .then(function () { + expect(promise.isRejected()).toBe(true); + }) + .timeout(1000); + }); + + it("resolves foreign thenables", function () { + var normal = Q(1); + var foreign = { then: function (f) { f(2); } }; + + return Q.all([normal, foreign]) + .then(function (result) { + expect(result).toEqual([1, 2]); + }); + }); + + it("fulfills when passed an sparse array", function () { + var toResolve = Q.defer(); + var promises = []; + promises[0] = Q(0); + promises[2] = toResolve.promise; + var promise = Q.all(promises); + + toResolve.resolve(2); + + return promise.then(function (result) { + expect(result).toEqual([0, void 0, 2]); + }); + }); + + it("modifies the input array", function () { + var input = [Q(0), Q(1)]; + + return Q.all(input).then(function (result) { + expect(result).toBe(input); + expect(input).toEqual([0, 1]); + }); + }); + + it("sends { index, value } progress updates", function () { + var deferred1 = Q.defer(); + var deferred2 = Q.defer(); + + var progressValues = []; + + Q.delay(50).then(function () { + deferred1.notify("a"); + }); + Q.delay(100).then(function () { + deferred2.notify("b"); + deferred2.resolve(); + }); + Q.delay(150).then(function () { + deferred1.notify("c"); + deferred1.resolve(); + }); + + return Q.all([deferred1.promise, deferred2.promise]).then( + function () { + expect(progressValues).toEqual([ + { index: 0, value: "a" }, + { index: 1, value: "b" }, + { index: 0, value: "c" } + ]); + }, + undefined, + function (progressValue) { + progressValues.push(progressValue); + } + ) + }); + +}); + +describe("any", function() { + it("fulfills when passed an empty array", function() { + return Q.any([]); + }); + + it("rejects after all promises are rejected", function() { + var deferreds = [Q.defer(), Q.defer()]; + var promises = [deferreds[0].promise, deferreds[1].promise]; + + return testReject(promises, deferreds); + }); + + it("rejects after all promises in a sparse array are rejected", function() { + var deferreds = [Q.defer(), Q.defer()]; + var promises = []; + promises[0] = deferreds[0].promise; + promises[3] = deferreds[1].promise; + + return testReject(promises, deferreds); + }); + + function testReject(promises, deferreds) { + var promise = Q.any(promises); + + for (var index = 0; index < deferreds.length; index++) { + var deferred = deferreds[index]; + (function() { + deferred.reject(new Error('Rejected')); + })(); + } + + return Q.delay(250) + .then(function() { + expect(promise.isRejected()).toBe(true); + expect(promise.inspect().reason.message) + .toBe("Can't get fulfillment value from any promise, all promises were rejected."); + }) + .timeout(1000); + } + + it("fulfills with the first resolved promise", function() { + var deferreds = [Q.defer(), Q.defer()]; + var promises = [deferreds[0].promise, deferreds[1].promise]; + + testFulfill(promises, deferreds); + }); + + it("fulfills when passed a sparse array", function() { + var deferreds = [Q.defer(), Q.defer()]; + var promises = []; + promises[0] = deferreds[0].promise; + promises[2] = deferreds[1].promise; + + testFulfill(promises, deferreds); + }); + + function testFulfill(promises, deferreds) { + var promise = Q.any(promises); + + var j = 1; + for (var index = 0; index < deferreds.length; index++) { + var toResolve = deferreds[index]; + if (!toResolve || !Q.isPromiseAlike(toResolve.promise)) { + continue; + } + + (function(index, toResolve) { + var time = index * 50; + Q.delay(time).then(function() { + toResolve.resolve('Fulfilled' + index); + }); + })(j, toResolve); + + j++; + } + + return Q.delay(400) + .then(function() { + expect(promise.isFulfilled()).toBe(true); + expect(promise.inspect().value).toBe('Fulfilled1'); + }) + .timeout(1000); + } + + it("fulfills with the first value", function() { + var toResolve1 = Q.defer(); + var toResolve2 = Q.defer(); + var toResolve3 = Q.defer(); + var promises = [toResolve1.promise, toResolve2.promise, 4, 5, + toResolve3.promise + ]; + + var promise = Q.any(promises); + + Q.delay(150).then(function() { + toResolve1.resolve(1); + }); + Q.delay(50).then(function() { + toResolve2.resolve(2); + }); + Q.delay(100).then(function() { + toResolve3.resolve(3); + }); + + return Q.delay(250) + .then(function() { + expect(promise.isFulfilled()).toBe(true); + expect(promise.inspect().value).toBe(4); + }) + .timeout(1000); + }); + + it("fulfills after rejections", function() { + var toReject = [Q.defer(), Q.defer()]; + var toResolve = Q.defer(); + var promises = [toReject[0].promise, toReject[1].promise, + toResolve + .promise + ]; + + var promise = Q.any(promises); + + testFulfillAfterRejections(promises, toReject, toResolve); + }); + + it("fulfills after rejections in sparse array", function() { + var toReject = [Q.defer(), Q.defer()]; + var toResolve = Q.defer(); + var promises = []; + promises[2] = toReject[0].promise; + promises[5] = toReject[1].promise; + promises[9] = toResolve.promise; + + testFulfillAfterRejections(promises, toReject, toResolve); + }); + + function testFulfillAfterRejections(promises, rejectDeferreds, + fulfillDeferred) { + var promise = Q.any(promises); + + for (var index = 0; index < rejectDeferreds.length; index++) { + var toReject = rejectDeferreds[index]; + (function(index, toReject) { + var time = (index + 1) * 50; + Q.delay(time).then(function() { + toReject.reject(new Error('Rejected')); + }); + })(index, toReject); + + index++; + } + Q.delay(index * 50).then(function() { + fulfillDeferred.resolve('Fulfilled'); + }); + + return Q.delay(400) + .then(function() { + expect(promise.isFulfilled()).toBe(true); + expect(promise.inspect().value).toBe('Fulfilled'); + }) + .timeout(1000); + } + + it("resolves foreign thenables", function() { + var normal = Q.delay(150) + .then(function() {}) + .thenResolve(1); + var foreign = { + then: function(f) { + return f(2); + } + }; + + return Q.any([normal, foreign]) + .then(function(result) { + expect(result).toEqual(2); + }); + }); + + it("sends { index, value } progress updates", function() { + var deferred1 = Q.defer(); + var deferred2 = Q.defer(); + + var progressValues = []; + + Q.delay(50).then(function() { + deferred1.notify("a"); + }); + Q.delay(100).then(function() { + deferred2.notify("b"); + deferred2.resolve(); + }); + Q.delay(150).then(function() { + deferred1.notify("c"); // Is lost, deferred2 already resolved. + deferred1.resolve(); + }); + + return Q.any([deferred1.promise, deferred2.promise]) + .delay(250) + .then(function() { + expect(progressValues).toEqual([{ + index: 0, + value: "a" + }, { + index: 1, + value: "b" + }]); + }, + undefined, + function(progressValue) { + progressValues.push(progressValue); + } + ); + }); + +}); + +describe("allSettled", function () { + it("works on an empty array", function () { + return Q.allSettled([]) + .then(function (snapshots) { + expect(snapshots).toEqual([]); + }); + }); + + it("deals with a mix of non-promises and promises", function () { + return Q.allSettled([1, Q(2), Q.reject(3)]) + .then(function (snapshots) { + expect(snapshots).toEqual([ + { state: "fulfilled", value: 1 }, + { state: "fulfilled", value: 2 }, + { state: "rejected", reason: 3 } + ]); + }); + }); + + it("is settled after every constituent promise is settled", function () { + var toFulfill = Q.defer(); + var toReject = Q.defer(); + var promises = [toFulfill.promise, toReject.promise]; + var fulfilled; + var rejected; + + Q.fcall(function () { + toReject.reject(); + rejected = true; + }) + .delay(15) + .then(function () { + toFulfill.resolve(); + fulfilled = true; + }); + + return Q.allSettled(promises) + .then(function () { + expect(fulfilled).toBe(true); + expect(rejected).toBe(true); + }); + }); + + it("does not modify the input array", function () { + var input = [1, Q(2), Q.reject(3)]; + + return Q.allSettled(input) + .then(function (snapshots) { + expect(snapshots).not.toBe(input); + expect(snapshots).toEqual([ + { state: "fulfilled", value: 1 }, + { state: "fulfilled", value: 2 }, + { state: "rejected", reason: 3 } + ]); + }); + }); + +}); + +describe("spread", function () { + + it("spreads values across arguments", function () { + return Q.spread([1, 2, 3], function (a, b) { + expect(b).toBe(2); + }); + }); + + it("spreads promises for arrays across arguments", function () { + return Q([Q(10)]) + .spread(function (value) { + expect(value).toEqual(10); + }); + }); + + it("spreads arrays of promises across arguments", function () { + var deferredA = Q.defer(); + var deferredB = Q.defer(); + + var promise = Q.spread([deferredA.promise, deferredB.promise], + function (a, b) { + expect(a).toEqual(10); + expect(b).toEqual(20); + }); + + Q.delay(5).then(function () { + deferredA.resolve(10); + }); + Q.delay(10).then(function () { + deferredB.resolve(20); + }); + + return promise; + }); + + it("calls the errback when given a rejected promise", function () { + var err = new Error(); + return Q.spread([Q(10), Q.reject(err)], + function () { + expect(true).toBe(false); + }, + function (actual) { + expect(actual).toBe(err); + } + ); + }); + +}); + +describe("fin", function () { + + var exception1 = new Error("boo!"); + var exception2 = new TypeError("evil!"); + + describe("when the promise is fulfilled", function () { + + it("should call the callback", function () { + var called = false; + + return Q("foo") + .fin(function () { + called = true; + }) + .then(function () { + expect(called).toBe(true); + }); + }); + + it("should fulfill with the original value", function () { + return Q("foo") + .fin(function () { + return "bar"; + }) + .then(function (result) { + expect(result).toBe("foo"); + }); + }); + + describe("when the callback returns a promise", function () { + + describe("that is fulfilled", function () { + it("should fulfill with the original reason after that promise resolves", function () { + var promise = Q.delay(250); + + return Q("foo") + .fin(function () { + return promise; + }) + .then(function (result) { + expect(Q.isPending(promise)).toBe(false); + expect(result).toBe("foo"); + }); + }); + }); + + describe("that is rejected", function () { + it("should reject with this new rejection reason", function () { + return Q("foo") + .fin(function () { + return Q.reject(exception1); + }) + .then(function () { + expect(false).toBe(true); + }, + function (exception) { + expect(exception).toBe(exception1); + }); + }); + }); + + }); + + describe("when the callback throws an exception", function () { + it("should reject with this new exception", function () { + return Q("foo") + .fin(function () { + throw exception1; + }) + .then(function () { + expect(false).toBe(true); + }, + function (exception) { + expect(exception).toBe(exception1); + }); + }); + }); + + }); + + describe("when the promise is rejected", function () { + + it("should call the callback", function () { + var called = false; + + return Q.reject(exception1) + .fin(function () { + called = true; + }) + .then(function () { + expect(called).toBe(true); + }, function () { + expect(called).toBe(true); + }); + }); + + it("should reject with the original reason", function () { + return Q.reject(exception1) + .fin(function () { + return "bar"; + }) + .then(function () { + expect(false).toBe(true); + }, + function (exception) { + expect(exception).toBe(exception1); + }); + }); + + describe("when the callback returns a promise", function () { + + describe("that is fulfilled", function () { + it("should reject with the original reason after that promise resolves", function () { + var promise = Q.delay(250); + + return Q.reject(exception1) + .fin(function () { + return promise; + }) + .then(function () { + expect(false).toBe(true); + }, + function (exception) { + expect(exception).toBe(exception1); + expect(Q.isPending(promise)).toBe(false); + }); + }); + }); + + describe("that is rejected", function () { + it("should reject with the new reason", function () { + return Q.reject(exception1) + .fin(function () { + return Q.reject(exception2); + }) + .then(function () { + expect(false).toBe(true); + }, + function (exception) { + expect(exception).toBe(exception2); + }); + }); + }); + + }); + + describe("when the callback throws an exception", function () { + it("should reject with this new exception", function () { + return Q.reject(exception1) + .fin(function () { + throw exception2; + }) + .then(function () { + expect(false).toBe(true); + }, + function (exception) { + expect(exception).toBe(exception2); + }); + }); + }); + + }); + +}); + +// Almost like "fin" +describe("tap", function () { + var exception1 = new Error("boo!"); + + describe("when the promise is fulfilled", function () { + it("should call the callback", function () { + var called = false; + return Q("foo") + .tap(function () { + called = true; + }) + .then(function () { + expect(called).toBe(true); + }); + }); + + it("should fulfill with the original value", function () { + return Q("foo") + .tap(function () { + return "bar"; + }) + .then(function (result) { + expect(result).toBe("foo"); + }); + }); + + describe("when the callback returns a promise", function () { + describe("that is fulfilled", function () { + it("should fulfill with the original reason after that promise resolves", function () { + var promise = Q.delay(250); + + return Q("foo") + .tap(function () { + return promise; + }) + .then(function (result) { + expect(Q.isPending(promise)).toBe(false); + expect(result).toBe("foo"); + }); + }); + }); + + describe("that is rejected", function () { + it("should reject with this new rejection reason", function () { + return Q("foo") + .tap(function () { + return Q.reject(exception1); + }) + .then(function () { + expect(false).toBe(true); + }, + function (exception) { + expect(exception).toBe(exception1); + }); + }); + }); + + }); + + describe("when the callback throws an exception", function () { + it("should reject with this new exception", function () { + return Q("foo") + .tap(function () { + throw exception1; + }) + .then(function () { + expect(false).toBe(true); + }, + function (exception) { + expect(exception).toBe(exception1); + }); + }); + }); + + }); + + describe("when the promise is rejected", function () { + it("should not call the callback", function () { + var called = false; + + return Q.reject(exception1) + .tap(function () { + called = true; + }) + .then(function () { + expect(called).toBe(false); + }, function () { + expect(called).toBe(false); + }); + }); + }); +}); + + +describe("done", function () { + describe("when the promise is fulfilled", function () { + describe("and the callback does not throw", function () { + it("should call the callback and return nothing", function () { + var called = false; + + var promise = Q(); + + var returnValue = promise.done(function () { + called = true; + }); + + return promise.fail(function () { }).fin(function () { + expect(called).toBe(true); + expect(returnValue).toBe(undefined); + }); + }); + }); + + describe("and the callback throws", function () { + it("should rethrow that error in the next turn and return nothing", function () { + var turn = 0; + Q.nextTick(function () { + ++turn; + }); + + var returnValue = Q().done( + function () { + throw "foo"; + } + ); + + var deferred = Q.defer(); + Q.onerror = function (error) { + expect(turn).toBe(1); + expect(error).toBe("foo"); + expect(returnValue).toBe(undefined); + deferred.resolve(); + }; + Q.delay(100).then(deferred.reject); + + return deferred.promise; + }); + }); + }); + + describe("when the promise is rejected", function () { + describe("and the errback handles it", function () { + it("should call the errback and return nothing", function () { + var called = false; + + var promise = Q.reject(new Error()); + + var returnValue = promise.done( + function () { }, + function () { + called = true; + } + ); + + return promise.fail(function () { }).fin(function () { + expect(called).toBe(true); + expect(returnValue).toBe(undefined); + }); + }); + }); + + describe("and the errback throws", function () { + it("should rethrow that error in the next turn and return nothing", function () { + var turn = 0; + Q.nextTick(function () { + ++turn; + }); + + var returnValue = Q.reject("bar").done( + null, + function () { + throw "foo"; + } + ); + + var deferred = Q.defer(); + Q.onerror = function (error) { + expect(turn).toBe(1); + expect(error).toBe("foo"); + expect(returnValue).toBe(undefined); + deferred.resolve(); + }; + Q.delay(100).then(deferred.reject); + + return deferred.promise; + }); + }); + + describe("and there is no errback", function () { + it("should throw the original error in the next turn", function () { + var turn = 0; + Q.nextTick(function () { + ++turn; + }); + + var returnValue = Q.reject("bar").done(); + + var deferred = Q.defer(); + Q.onerror = function (error) { + expect(turn).toBe(1); + expect(error).toBe("bar"); + expect(returnValue).toBe(undefined); + deferred.resolve(); + }; + Q.delay(10).then(deferred.reject); + + return deferred.promise; + }); + }); + }); + + it("should attach a progress listener", function () { + var deferred = Q.defer(); + + var spy = jasmine.createSpy(); + deferred.promise.done(null, null, spy); + + deferred.notify(10); + deferred.resolve(); + + return deferred.promise.then(function () { + expect(spy).toHaveBeenCalledWith(10); + }); + }); +}); + +describe("timeout", function () { + it("should do nothing if the promise fulfills quickly", function () { + return Q.delay(10).timeout(200); + }); + + it("should do nothing if the promise rejects quickly", function () { + var goodError = new Error("haha!"); + return Q.delay(10) + .then(function () { + throw goodError; + }) + .timeout(200) + .then(undefined, function (error) { + expect(error).toBe(goodError); + }); + }); + + it("should reject with a timeout error if the promise is too slow", function () { + return Q.delay(100) + .timeout(10) + .then( + function () { + expect(true).toBe(false); + }, + function (error) { + expect(/time/i.test(error.message)).toBe(true); + } + ); + }); + + it("should pass through progress notifications", function () { + var deferred = Q.defer(); + + var progressValsSeen = []; + var promise = Q.timeout(deferred.promise, 300).then(function () { + expect(progressValsSeen).toEqual([1, 2, 3]); + }, undefined, function (progressVal) { + progressValsSeen.push(progressVal); + }); + + Q.delay(5).then(function () { deferred.notify(1); }); + Q.delay(15).then(function () { deferred.notify(2); }); + Q.delay(25).then(function () { deferred.notify(3); }); + Q.delay(35).then(function () { deferred.resolve(); }); + + return promise; + }); + + it("should reject with a custom timeout error if the promise is too slow and msg was provided", function () { + return Q.delay(100) + .timeout(10, "custom") + .then( + function () { + expect(true).toBe(false); + }, + function (error) { + expect(/custom/i.test(error.message)).toBe(true); + expect(error.code).toBe("ETIMEDOUT"); + } + ); + }); + + it("should reject with a custom timeout error if the promise is too slow and Error object was provided", function () { + var customError = new Error("custom"); + customError.isCustom = true; + return Q.delay(100) + .timeout(10, customError) + .then( + function () { + expect(true).toBe(false); + }, + function (error) { + expect(/custom/i.test(error.message)).toBe(true); + expect(error.isCustom).toBe(true); + } + ); + }); + +}); + +describe("delay", function () { + it("should delay fulfillment", function () { + var promise = Q(5).delay(50); + + setTimeout(function () { + expect(promise.isPending()).toBe(true); + }, 40); + + return promise; + }); + + it("should not delay rejection", function () { + var promise = Q.reject(5).delay(50); + + return Q.delay(20).then(function () { + expect(promise.isPending()).toBe(false); + }); + }); + + it("should treat a single argument as a time", function () { + var promise = Q.delay(50); + + setTimeout(function () { + expect(promise.isPending()).toBe(true); + }, 40); + + return promise; + }); + + it("should treat two arguments as a value + a time", function () { + var promise = Q.delay("what", 50); + + setTimeout(function () { + expect(promise.isPending()).toBe(true); + }, 40); + + return promise.then(function (value) { + expect(value).toBe("what"); + }); + }); + + it("should delay after resolution", function () { + var promise1 = Q.delay("what", 30); + var promise2 = promise1.delay(30); + + setTimeout(function () { + expect(promise1.isPending()).toBe(false); + expect(promise2.isPending()).toBe(true); + }, 40); + + return promise2.then(function (value) { + expect(value).toBe("what"); + }); + }); + + + it("should pass through progress notifications from passed promises", function () { + var deferred = Q.defer(); + + var progressValsSeen = []; + var promise = Q.delay(deferred.promise, 100).then(function () { + expect(progressValsSeen).toEqual([1, 2, 3]); + }, undefined, function (progressVal) { + progressValsSeen.push(progressVal); + }); + + Q.delay(5).then(function () { deferred.notify(1); }); + Q.delay(15).then(function () { deferred.notify(2); }); + Q.delay(25).then(function () { deferred.notify(3); }); + Q.delay(35).then(function () { deferred.resolve(); }); + + return promise; + }); +}); + +describe("thenResolve", function () { + describe("Resolving with a non-thenable value", function () { + it("returns a promise for that object once the promise is resolved", function () { + var waited = false; + return Q.delay(20) + .then(function () { + waited = true; + }) + .thenResolve("foo") + .then(function (val) { + expect(waited).toBe(true); + expect(val).toBe("foo"); + }); + }); + + describe("based off a rejected promise", function () { + it("does nothing, letting the rejection flow through", function () { + return Q.reject("boo") + .thenResolve("foo") + .then( + function () { + expect(true).toBe(false); + }, + function (reason) { + expect(reason).toBe("boo"); + } + ); + }); + }); + }); + + describe("Resolving with an promise", function () { + it("returns a promise for the result of that promise once the promise is resolved", function () { + var waited = false; + return Q.delay(20) + .then(function () { + waited = true; + }) + .thenResolve(Q("foo")) + .then(function (val) { + expect(waited).toBe(true); + expect(val).toBe("foo"); + }); + }); + }); +}); + +describe("thenReject", function () { + describe("Rejecting with a reason", function () { + it("returns a promise rejected with that object once the original promise is resolved", function () { + var waited = false; + return Q.delay(20) + .then(function () { + waited = true; + }) + .thenReject("foo") + .then( + function () { + expect(true).toBe(false); + }, + function (reason) { + expect(waited).toBe(true); + expect(reason).toBe("foo"); + } + ); + }); + + describe("based off a rejected promise", function () { + it("does nothing, letting the rejection flow through", function () { + return Q.reject("boo") + .thenResolve("foo") + .then( + function () { + expect(true).toBe(false); + }, + function (reason) { + expect(reason).toBe("boo"); + } + ); + }); + }); + }); +}); + +describe("thenables", function () { + + it("assimilates a thenable with fulfillment with resolve", function () { + return Q({ + then: function (resolved) { + resolved(10); + } + }) + .then(function (ten) { + expect(ten).toEqual(10); + }) + .then(function (undefined) { + expect(undefined).toEqual(void 0); + }); + }); + + it("assimilates a thenable with progress and fulfillment (using resolve)", function () { + var progressValueArrays = []; + return Q({ + then: function (fulfilled, rejected, progressed) { + Q.nextTick(function () { + progressed(1, 2); + progressed(3, 4, 5); + fulfilled(); + }); + } + }) + .progress(function () { + progressValueArrays.push(Array.prototype.slice.call(arguments)); + }) + .then(function () { + expect(progressValueArrays).toEqual([[1], [3]]); + }); + }); + + it("assimilates a thenable with progress and fulfillment (using when)", function () { + var progressValueArrays = []; + return Q.when({ + then: function (fulfilled, rejected, progressed) { + Q.nextTick(function () { + progressed(1, 2); + progressed(3, 4, 5); + fulfilled(); + }); + } + }) + .progress(function () { + progressValueArrays.push(Array.prototype.slice.call(arguments)); + }) + .then(function () { + expect(progressValueArrays).toEqual([[1], [3]]); + }); + }); + + it("flows fulfillment into a promise pipeline", function () { + return Q({ + then: function (resolved) { + resolved([10]); + } + }) + .get(0) + .then(function (ten) { + expect(ten).toEqual(10); + }); + }); + + it("assimilates an immediately-fulfilled thenable in allSettled", function () { + return Q.allSettled([ + {then: function (win) { + win(10); + }} + ]) + .then(function (snapshots) { + expect(snapshots).toEqual([{ state: "fulfilled", value: 10 }]); + }); + }); + + it("assimilates an eventually-fulfilled thenable in allSettled", function () { + return Q.allSettled([ + {then: function (win) { + setTimeout(function () { + win(10); + }, 100); + }} + ]) + .then(function (snapshots) { + expect(snapshots).toEqual([{ state: "fulfilled", value: 10 }]); + }); + }); + +}); + +describe("node support", function () { + + var exception = new Error("That is not your favorite color."); + + var obj = { + method: function (a, b, c, callback) { + callback(null, a + b + c); + }, + thispChecker: function (callback) { + callback(null, this === obj); + }, + errorCallbacker: function (a, b, c, callback) { + callback(exception); + }, + errorThrower: function () { + throw exception; + } + }; + + describe("nfapply", function () { + + it("fulfills with callback result", function () { + return Q.nfapply(function (a, b, c, callback) { + callback(null, a + b + c); + }, [1, 2, 3]) + .then(function (sum) { + expect(sum).toEqual(6); + }); + }); + + it("rejects with callback error", function () { + var exception = new Error("That is not your favorite color."); + return Q.nfapply(function (a, b, c, callback) { + callback(exception); + }, [1, 2, 3]) + .then(function () { + expect(true).toBe(false); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + + }); + + describe("nfcall", function () { + it("fulfills with callback result", function () { + return Q.nfcall(function (a, b, c, callback) { + callback(null, a + b + c); + }, 1, 2, 3) + .then(function (sum) { + expect(sum).toEqual(6); + }); + }); + + it("rejects with callback error", function () { + var exception = new Error("That is not your favorite color."); + return Q.nfcall(function (a, b, c, callback) { + callback(exception); + }, 1, 2, 3) + .then(function () { + expect(true).toBe(false); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + + }); + + describe("nfbind", function () { + + it("mixes partial application with complete application", function () { + return Q.nfbind(function (a, b, c, d, callback) { + callback(null, a + b + c + d); + }, 1, 2).call({}, 3, 4) + .then(function (ten) { + expect(ten).toBe(10); + }); + }); + + }); + + describe("nbind", function () { + + it("binds this, and mixes partial application with complete application", function () { + return Q.nbind(function (a, b, c, callback) { + callback(null, this + a + b + c); + }, 1, 2).call(3 /* effectively ignored as fn bound to 1 */, 4, 5) + .then(function (twelve) { + expect(twelve).toBe(12); + }); + }); + + it("second arg binds this", function() { + var expectedThis = { test: null }; + + return Q.nbind(function(callback) { + callback(null, this); + }, expectedThis).call() + .then(function(actualThis) { + expect(actualThis).toEqual(expectedThis); + }); + }); + + }); + + describe("npost", function () { + + it("fulfills with callback result", function () { + return Q.npost(obj, "method", [1, 2, 3]) + .then(function (sum) { + expect(sum).toEqual(6); + }); + }); + + it("gets the correct thisp", function () { + return Q.npost(obj, "thispChecker", []) + .then(function (result) { + expect(result).toBe(true); + }); + }); + + it("rejects with callback error", function () { + return Q.npost(obj, "errorCallbacker", [1, 2, 3]) + .then(function () { + expect("blue").toBe("no, yellow!"); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + + it("rejects with thrown error", function () { + return Q.npost(obj, "errorThrower", [1, 2, 3]) + .then(function () { + expect(true).toBe(false); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + + it("works on promises for objects with Node methods", function () { + return Q(obj) + .npost("method", [1, 2, 3]) + .then(function (sum) { + expect(sum).toEqual(6); + }); + }); + + }); + + describe("nsend", function () { + + it("fulfills with callback result", function () { + return Q.nsend(obj, "method", 1, 2, 3) + .then(function (sum) { + expect(sum).toEqual(6); + }); + }); + + it("gets the correct thisp", function () { + return Q.nsend(obj, "thispChecker") + .then(function (result) { + expect(result).toBe(true); + }); + }); + + it("rejects with callback error", function () { + return Q.nsend(obj, "errorCallbacker", 1, 2, 3) + .then(function () { + expect("blue").toBe("no, yellow!"); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + + it("rejects with thrown error", function () { + return Q.nsend(obj, "errorThrower", 1, 2, 3) + .then(function () { + expect(true).toBe(false); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + + it("works on promises for objects with Node methods", function () { + return Q(obj) + .nsend("method", 1, 2, 3) + .then(function (sum) { + expect(sum).toEqual(6); + }); + }); + + }); + + describe("deferred.makeNodeResolver", function () { + + it("fulfills a promise with a single callback argument", function () { + var deferred = Q.defer(); + var callback = deferred.makeNodeResolver(); + callback(null, 10); + return deferred.promise.then(function (value) { + expect(value).toBe(10); + }); + }); + + it("fulfills a promise with multiple callback arguments", function () { + var deferred = Q.defer(); + var callback = deferred.makeNodeResolver(); + callback(null, 10, 20); + return deferred.promise.then(function (value) { + expect(value).toEqual([10, 20]); + }); + }); + + it("rejects a promise", function () { + var deferred = Q.defer(); + var callback = deferred.makeNodeResolver(); + var exception = new Error("Holy Exception of Anitoch"); + callback(exception); + return deferred.promise.then(function () { + expect(5).toBe(3); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + + }); + + describe("nodeify", function () { + + it("calls back with a resolution", function () { + var spy = jasmine.createSpy(); + Q(10).nodeify(spy); + waitsFor(function () { + return spy.argsForCall.length; + }); + runs(function () { + expect(spy.argsForCall).toEqual([[null, 10]]); + }); + }); + + it("calls back with an error", function () { + var spy = jasmine.createSpy(); + Q.reject(10).nodeify(spy); + waitsFor(function () { + return spy.argsForCall.length; + }); + runs(function () { + expect(spy.argsForCall).toEqual([[10]]); + }); + }); + + it("forwards a promise", function () { + return Q(10).nodeify().then(function (ten) { + expect(ten).toBe(10); + }); + }); + + }); + +}); + +describe("browser support", function () { + var _Q; + + beforeEach(function() { + _Q = Q; + }); + + afterEach(function() { + Q = _Q; + }); + + it("sets the global Q object to its original value", function() { + if (typeof window !== 'undefined') { + // If window is not undefined, the tests are running in the browser + // assert that Q.noConflict returns window.Q to it's initial value + // In this context the original value of Q is undefined + Q.noConflict(); + expect(Q).toEqual(undefined); + } + }); + + it("throws an error if Q.noConflict is called in node", function () { + if (typeof window === 'undefined') { + // If window is undefined the tests are being run in node, and + // Q.noConflict should throw an error + expect(Q.noConflict).toThrow(); + } + }); +}); + +describe("isPromise", function () { + it("returns true if passed a promise", function () { + expect(Q.isPromise(Q(10))).toBe(true); + }); + + it("returns false if not passed a promise", function () { + expect(Q.isPromise(undefined)).toBe(false); + expect(Q.isPromise(null)).toBe(false); + expect(Q.isPromise(10)).toBe(false); + expect(Q.isPromise("str")).toBe(false); + expect(Q.isPromise("")).toBe(false); + expect(Q.isPromise(true)).toBe(false); + expect(Q.isPromise(false)).toBe(false); + expect(Q.isPromise({})).toBe(false); + expect(Q.isPromise({ + then: function () {} + })).toBe(false); + expect(Q.isPromise(function () {})).toBe(false); + }); +}); + +describe("isPromiseAlike", function () { + it("returns true if passed a promise like object", function () { + expect(Q.isPromiseAlike(Q(10))).toBe(true); + expect(Q.isPromiseAlike({ + then: function () {} + })).toBe(true); + }); + + it("returns false if not passed a promise like object", function () { + expect(Q.isPromiseAlike(undefined)).toBe(false); + expect(Q.isPromiseAlike(null)).toBe(false); + expect(Q.isPromiseAlike(10)).toBe(false); + expect(Q.isPromiseAlike("str")).toBe(false); + expect(Q.isPromiseAlike("")).toBe(false); + expect(Q.isPromiseAlike(true)).toBe(false); + expect(Q.isPromiseAlike(false)).toBe(false); + expect(Q.isPromiseAlike({})).toBe(false); + expect(Q.isPromiseAlike(function () {})).toBe(false); + }); +}); + +if (typeof require === "function") { + var domain; + try { + domain = require("domain"); + } catch (e) { } + + if (domain) { + var EventEmitter = require("events").EventEmitter; + + describe("node domain support", function () { + var d; + + beforeEach(function () { + d = domain.create(); + }); + afterEach(function() { + d.dispose(); + }); + + it("should work for non-promise async inside a promise handler", + function (done) { + var error = new Error("should be caught by the domain"); + + d.run(function () { + Q().then(function () { + setTimeout(function () { + throw error; + }, 10); + }); + }); + + var errorTimeout = setTimeout(function () { + done(new Error("Wasn't caught")); + }, 100); + + d.on("error", function (theError) { + expect(theError).toBe(error); + clearTimeout(errorTimeout); + done(); + }); + }); + + it("should transfer errors from `done` into the domain", + function (done) { + var error = new Error("should be caught by the domain"); + + d.run(function () { + Q.reject(error).done(); + }); + + var errorTimeout = setTimeout(function () { + done(new Error("Wasn't caught")); + }, 100); + + d.on("error", function (theError) { + expect(theError).toBe(error); + clearTimeout(errorTimeout); + done(); + }); + }); + + it("should take care of re-used event emitters", function (done) { + // See discussion in https://github.com/kriskowal/q/issues/120 + var error = new Error("should be caught by the domain"); + + var e = new EventEmitter(); + + d.run(function () { + callAsync().done(); + }); + setTimeout(function () { + e.emit("beep"); + }, 100); + + var errorTimeout = setTimeout(function () { + done(new Error("Wasn't caught")); + }, 500); + + d.on("error", function (theError) { + expect(theError).toBe(error); + clearTimeout(errorTimeout); + done(); + }); + + function callAsync() { + var def = Q.defer(); + e.once("beep", function () { + def.reject(error); + }); + return def.promise; + } + }); + }); + } +} + +describe("decorator functions", function () { + describe("promised", function () { + var exception = new Error("That is not the meaning of life."); + it("resolves promised arguments", function () { + var sum = Q.promised(function add(a, b) { + return a + b; + }); + return sum(Q(4), Q(5)).then(function (sum) { + expect(sum).toEqual(9); + }); + }); + it("resolves promised `this`", function () { + var inc = Q.promised(function inc(a) { + return this + a; + }); + return inc.call(Q(4), Q(5)).then(function (sum) { + expect(sum).toEqual(9); + }); + }); + it("is rejected if an argument is rejected", function () { + var sum = Q.promised(function add(a, b) { + return a + b; + }); + return sum(Q.reject(exception), Q(4)).then(function () { + expect(4).toEqual(42); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + it("is rejected if `this` is rejected", function () { + var inc = Q.promised(function inc(a) { + return this + a; + }); + return inc.call(Q.reject(exception), Q(4)).then(function () { + expect(4).toEqual(42); + }, function (_exception) { + expect(_exception).toBe(exception); + }); + }); + }); +}); + +describe("stack trace formatting", function () { + it("doesn't mangle a stack trace that gets handled twice", function () { + var d1 = Q.defer(); + var d2 = Q.defer(); + var captured = []; + d1.promise.done(); + d2.promise.done(); + + Q.onerror = function (err) { + captured.push(err.stack); + }; + + var error = new Error("boom!"); + d1.reject(error); + d2.reject(error); + + return Q.all([d1.promise.fail(function () {}), d2.promise.fail(function () { })]) + .then(function () { + expect(captured[0]).toEqual(captured[1]); + }); + }); +}); + +describe("possible regressions", function () { + + describe("gh-9", function () { + it("treats falsy values as resolved values without error", function () { + expect(Q.isPending(null)).toEqual(false); + expect(Q.isPending(void 0)).toEqual(false); + expect(Q.isPending(false)).toEqual(false); + expect(Q.isPending()).toEqual(false); + }); + }); + + describe("gh-22", function () { + it("ensures that the array prototype is intact", function () { + var keys = []; + for (var key in []) { + keys.push(key); + } + expect(keys.length).toBe(0); + }); + }); + + describe("gh-73", function () { + it("does not choke on non-error rejection reasons", function () { + Q.reject(REASON).done(); + + var deferred = Q.defer(); + + Q.onerror = function (error) { + expect(error).toBe(REASON); + deferred.resolve(); + }; + Q.delay(10).then(deferred.reject); + + return deferred.promise; + }); + }); + + describe("gh-90", function () { + it("does not choke on rejection reasons with an undefined `stack`", function () { + var error = new RangeError(REASON); + error.stack = undefined; + Q.reject(error).done(); + + var deferred = Q.defer(); + + Q.onerror = function (theError) { + expect(theError).toBe(error); + deferred.resolve(); + }; + Q.delay(10).then(deferred.reject); + + return deferred.promise; + }); + }); + + describe("gh-75", function () { + it("does not double-resolve misbehaved promises", function () { + var badPromise = Q.makePromise({ + post: function () { return "hello"; } + }); + + var resolutions = 0; + function onResolution() { + ++resolutions; + } + + return Q.when(badPromise, onResolution, onResolution).then(function () { + expect(resolutions).toBe(1); + }); + }); + }); + +}); + +describe("unhandled rejection reporting", function () { + beforeEach(function () { + Q.resetUnhandledRejections(); + }); + + it("doesn't report a resolve, then reject (gh-252)", function () { + var deferred = Q.defer(); + deferred.resolve(); + deferred.reject(); + + expect(Q.getUnhandledReasons().length).toEqual(0); + }); + + it("doesn't report when you chain off a rejection", function () { + return Q.reject("this will be handled").get("property").fail(function () { + // now it should be handled. + }).fin(function() { + expect(Q.getUnhandledReasons().length).toEqual(0); + }); + }); + + it("reports the most basic case", function () { + Q.reject("a reason"); + + expect(Q.getUnhandledReasons()).toEqual(["(no stack) a reason"]); + }); + + it("reports a stack trace", function () { + var error = new Error("a reason"); + Q.reject(error); + + expect(Q.getUnhandledReasons()).toEqual([error.stack]); + }); + + it("doesn't let you mutate the internal array", function () { + Q.reject("a reason"); + + Q.getUnhandledReasons().length = 0; + expect(Q.getUnhandledReasons()).toEqual(["(no stack) a reason"]); + }); + + it("resets after calling `Q.resetUnhandledRejections`", function () { + Q.reject("a reason"); + + Q.resetUnhandledRejections(); + expect(Q.getUnhandledReasons()).toEqual([]); + }); + + it("stops tracking after calling `Q.stopUnhandledRejectionTracking`", function () { + Q.reject("a reason"); + + Q.stopUnhandledRejectionTracking(); + + Q.reject("another reason"); + + expect(Q.getUnhandledReasons()).toEqual([]); + }); +}); diff --git a/tests/lib/q-1.4.1/spec/queue-spec.js b/tests/lib/q-1.4.1/spec/queue-spec.js new file mode 100644 index 0000000000000000000000000000000000000000..4cec14e23bf6a15ee16f4a3289042da0a2c4dd64 --- /dev/null +++ b/tests/lib/q-1.4.1/spec/queue-spec.js @@ -0,0 +1,180 @@ + +var Q = require("../q"); +var Queue = require("../queue"); + +global.Q = Q; +require("./lib/jasmine-promise"); + +describe("queue", function () { + + it("should enqueue then dequeue", function () { + var queue = Queue(); + queue.put(1); + return queue.get().then(function (value) { + expect(value).toBe(1); + }); + }); + + it("should dequeue then enqueue", function () { + var queue = Queue(); + var promise = queue.get().then(function (value) { + expect(value).toBe(1); + }); + queue.put(1); + return promise; + }); + + it("should stream", function () { + var queue = Queue(); + + Q.try(function () { + return Q.delay(20).then(function () { + queue.put(1); + }) + }) + .then(function () { + return Q.delay(20).then(function () { + queue.put(2); + }) + }) + .then(function () { + return Q.delay(20).then(function () { + queue.put(3); + }) + }) + .done(); + + return Q.try(function () { + return queue.get() + .then(function (value) { + expect(value).toBe(1); + }); + }) + .then(function () { + return queue.get() + .then(function (value) { + expect(value).toBe(2); + }); + }) + .then(function () { + return queue.get() + .then(function (value) { + expect(value).toBe(3); + }); + }) + + }); + + it("should be order agnostic", function () { + var queue = Queue(); + + Q.try(function () { + return Q.delay(20).then(function () { + queue.put(1); + }) + }) + .then(function () { + return Q.delay(20).then(function () { + queue.put(2); + }) + }) + .then(function () { + return Q.delay(20).then(function () { + queue.put(3); + }) + }) + .done(); + + return Q.all([ + queue.get() + .then(function (value) { + expect(value).toBe(1); + }), + queue.get() + .then(function (value) { + expect(value).toBe(2); + }), + queue.get() + .then(function (value) { + expect(value).toBe(3); + }) + ]); + }); + + it("should close", function () { + + var queue = Queue(); + + Q.try(function () { + return Q.delay(20).then(function () { + queue.put(1); + }) + }) + .then(function () { + return Q.delay(20).then(function () { + queue.put(2); + }) + }) + .then(function () { + queue.close(); + }) + .done(); + + return Q.try(function () { + return queue.get() + .then(function (value) { + expect(value).toBe(1); + }); + }) + .then(function () { + return queue.get() + .then(function (value) { + expect(value).toBe(2); + }); + }) + .then(function () { + return queue.get() + .then(function (value) { + expect(false).toBe(true); // should not get here + }); + }) + .catch(function (error) { + expect(error.message).toBe("Can't get value from closed queue"); + return queue.get(); + }) + .catch(function (error) { + expect(error.message).toBe("Can't get value from closed queue"); + }) + .then(function () { + return queue.closed; + }) + .then(function (error) { + expect(error.message).toBe("Can't get value from closed queue"); + }) + }); + + it("should close with alternate error", function () { + + var queue = Queue(); + queue.close(new Error("Alternate reason")); + + return Q.try(function () { + return queue.get(); + }) + .catch(function (error) { + expect(error.message).toBe("Alternate reason"); + return queue.get(); + }) + .catch(function (error) { + expect(error.message).toBe("Alternate reason"); + }) + .then(function () { + return queue.closed; + }) + .then(function (error) { + expect(error.message).toBe("Alternate reason"); + }) + }); + +}); + diff --git a/tests/lib/resemblejs/LICENSE b/tests/lib/resemblejs/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..df12acc4780fc17da2fef32f4c90037e329aedea --- /dev/null +++ b/tests/lib/resemblejs/LICENSE @@ -0,0 +1,18 @@ +The MIT License (MIT) Copyright © 2013 Huddle + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the “Softwareâ€�), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS ISâ€�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/tests/lib/resemblejs/README.md b/tests/lib/resemblejs/README.md new file mode 100644 index 0000000000000000000000000000000000000000..62e104110480f446bf8fc8b5fc62ba22e6090b22 --- /dev/null +++ b/tests/lib/resemblejs/README.md @@ -0,0 +1,73 @@ +Resemble.js +========== + +Analyse and compare images with Javascript and HTML5. [Resemble.js Demo](http://huddle.github.com/Resemble.js/) + +![Two image diff examples side-by-side, one pink, one yellow.](https://raw.github.com/Huddle/Resemble.js/master/demoassets/readmeimage.jpg "Visual image comparison") + +### Get it + +`npm install resemblejs` + +`bower install resemblejs` + +### Example + +Retrieve basic analysis on image. + +```javascript +var api = resemble(fileData).onComplete(function(data){ + console.log(data); + /* + { + red: 255, + green: 255, + blue: 255, + brightness: 255 + } + */ +}); +``` + +Use resemble to compare two images. + +```javascript +var diff = resemble(file).compareTo(file2).ignoreColors().onComplete(function(data){ + console.log(data); + /* + { + misMatchPercentage : 100, // % + isSameDimensions: true, // or false + dimensionDifference: { width: 0, height: -1 }, // defined if dimensions are not the same + getImageDataUrl: function(){} + } + */ +}); +``` + +You can also change the comparison method after the first analysis. + +```javascript +// diff.ignoreNothing(); +// diff.ignoreColors(); +diff.ignoreAntialiasing(); +``` + +And change the output display style. + +```javascript +resemble.outputSettings({ + errorColor: { + red: 255, + green: 0, + blue: 255 + }, + errorType: 'movement', + transparency: 0.3 +}); +// resembleControl.repaint(); +``` + +-------------------------------------- + +Created by [James Cryer](http://github.com/jamescryer) and the Huddle development team. \ No newline at end of file diff --git a/tests/lib/resemblejs/resemble.js b/tests/lib/resemblejs/resemble.js new file mode 100644 index 0000000000000000000000000000000000000000..1f4b36b1d41798671eb94071aa5149cb61398993 --- /dev/null +++ b/tests/lib/resemblejs/resemble.js @@ -0,0 +1,659 @@ +/* +James Cryer / Huddle 2014 +URL: https://github.com/Huddle/Resemble.js +*/ + +(function(_this){ + 'use strict'; + + var pixelTransparency = 1; + + var errorPixelColor = { // Color for Error Pixels. Between 0 and 255. + red: 255, + green: 0, + blue: 255, + alpha: 255 + }; + + function colorsDistance(c1, c2){ + return (Math.abs(c1.r - c2.r) + Math.abs(c1.g - c2.g) + Math.abs(c1.b - c2.b))/3; + } + + var errorPixelTransform = { + flat : function (d1, d2){ + return { + r: errorPixelColor.red, + g: errorPixelColor.green, + b: errorPixelColor.blue, + a: errorPixelColor.alpha + } + }, + movement: function (d1, d2){ + return { + r: ((d2.r*(errorPixelColor.red/255)) + errorPixelColor.red)/2, + g: ((d2.g*(errorPixelColor.green/255)) + errorPixelColor.green)/2, + b: ((d2.b*(errorPixelColor.blue/255)) + errorPixelColor.blue)/2, + a: d2.a + } + }, + flatDifferenceIntensity: function (d1, d2){ + return { + r: errorPixelColor.red, + g: errorPixelColor.green, + b: errorPixelColor.blue, + a: colorsDistance(d1, d2) + } + }, + movementDifferenceIntensity: function (d1, d2){ + var ratio = colorsDistance(d1, d2)/255 * 0.8; + return { + r: ((1-ratio)*(d2.r*(errorPixelColor.red/255)) + ratio*errorPixelColor.red), + g: ((1-ratio)*(d2.g*(errorPixelColor.green/255)) + ratio*errorPixelColor.green), + b: ((1-ratio)*(d2.b*(errorPixelColor.blue/255)) + ratio*errorPixelColor.blue), + a: d2.a + } + } + }; + + var errorPixelTransformer = errorPixelTransform.flat; + + var largeImageThreshold = 1200; + + var httpRegex = /^https?:\/\//; + var document = typeof window != "undefined" ? window.document : {}; + var documentDomainRegex = new RegExp('^https?://' + document.domain); + + _this['resemble'] = function( fileData ){ + + var data = {}; + var images = []; + var updateCallbackArray = []; + + var tolerance = { // between 0 and 255 + red: 16, + green: 16, + blue: 16, + alpha: 16, + minBrightness: 16, + maxBrightness: 240 + }; + + var ignoreAntialiasing = false; + var ignoreColors = false; + + function triggerDataUpdate(){ + var len = updateCallbackArray.length; + var i; + for(i=0;i tolerance.maxBrightness; + } + + function getHue(r,g,b){ + + r = r / 255; + g = g / 255; + b = b / 255; + var max = Math.max(r, g, b), min = Math.min(r, g, b); + var h; + var d; + + if (max == min){ + h = 0; // achromatic + } else{ + d = max - min; + switch(max){ + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + h /= 6; + } + + return h; + } + + function isAntialiased(sourcePix, data, cacheSet, verticalPos, horizontalPos, width){ + var offset; + var targetPix; + var distance = 1; + var i; + var j; + var hasHighContrastSibling = 0; + var hasSiblingWithDifferentHue = 0; + var hasEquivilantSibling = 0; + + addHueInfo(sourcePix); + + for (i = distance*-1; i <= distance; i++){ + for (j = distance*-1; j <= distance; j++){ + + if(i===0 && j===0){ + // ignore source pixel + } else { + + offset = ((verticalPos+j)*width + (horizontalPos+i)) * 4; + targetPix = getPixelInfo(data, offset, cacheSet); + + if(targetPix === null){ + continue; + } + + addBrightnessInfo(targetPix); + addHueInfo(targetPix); + + if( isContrasting(sourcePix, targetPix) ){ + hasHighContrastSibling++; + } + + if( isRGBSame(sourcePix,targetPix) ){ + hasEquivilantSibling++; + } + + if( Math.abs(targetPix.h - sourcePix.h) > 0.3 ){ + hasSiblingWithDifferentHue++; + } + + if( hasSiblingWithDifferentHue > 1 || hasHighContrastSibling > 1){ + return true; + } + } + } + } + + if(hasEquivilantSibling < 2){ + return true; + } + + return false; + } + + function errorPixel(px, offset, data1, data2){ + var data = errorPixelTransformer(data1, data2); + px[offset] = data.r; + px[offset + 1] = data.g; + px[offset + 2] = data.b; + px[offset + 3] = data.a; + } + + function copyPixel(px, offset, data){ + px[offset] = data.r; //r + px[offset + 1] = data.g; //g + px[offset + 2] = data.b; //b + px[offset + 3] = data.a * pixelTransparency; //a + } + + function copyGrayScalePixel(px, offset, data){ + px[offset] = data.brightness; //r + px[offset + 1] = data.brightness; //g + px[offset + 2] = data.brightness; //b + px[offset + 3] = data.a * pixelTransparency; //a + } + + function getPixelInfo(data, offset, cacheSet){ + var r; + var g; + var b; + var d; + var a; + + r = data[offset]; + + if(typeof r !== 'undefined'){ + g = data[offset+1]; + b = data[offset+2]; + a = data[offset+3]; + d = { + r: r, + g: g, + b: b, + a: a + }; + + return d; + } else { + return null; + } + } + + function addBrightnessInfo(data){ + data.brightness = getBrightness(data.r,data.g,data.b); // 'corrected' lightness + } + + function addHueInfo(data){ + data.h = getHue(data.r,data.g,data.b); + } + + function analyseImages(img1, img2, width, height){ + + var hiddenCanvas = document.createElement('canvas'); + + var data1 = img1.data; + var data2 = img2.data; + + hiddenCanvas.width = width; + hiddenCanvas.height = height; + + var context = hiddenCanvas.getContext('2d'); + var imgd = context.createImageData(width,height); + var targetPix = imgd.data; + + var mismatchCount = 0; + var diffBounds = { + top: height, + left: width, + bottom: 0, + right: 0 + }; + var updateBounds = function(x, y) { + diffBounds.left = Math.min(x, diffBounds.left); + diffBounds.right = Math.max(x, diffBounds.right); + diffBounds.top = Math.min(y, diffBounds.top); + diffBounds.bottom = Math.max(y, diffBounds.bottom); + } + + var time = Date.now(); + + var skip; + + if(!!largeImageThreshold && ignoreAntialiasing && (width > largeImageThreshold || height > largeImageThreshold)){ + skip = 6; + } + + loop(height, width, function(verticalPos, horizontalPos){ + + if(skip){ // only skip if the image isn't small + if(verticalPos % skip === 0 || horizontalPos % skip === 0){ + return; + } + } + + var offset = (verticalPos*width + horizontalPos) * 4; + var pixel1 = getPixelInfo(data1, offset, 1); + var pixel2 = getPixelInfo(data2, offset, 2); + + if(pixel1 === null || pixel2 === null){ + return; + } + + if (ignoreColors){ + + addBrightnessInfo(pixel1); + addBrightnessInfo(pixel2); + + if( isPixelBrightnessSimilar(pixel1, pixel2) ){ + copyGrayScalePixel(targetPix, offset, pixel2); + } else { + errorPixel(targetPix, offset, pixel1, pixel2); + mismatchCount++; + updateBounds(horizontalPos, verticalPos); + } + return; + } + + if( isRGBSimilar(pixel1, pixel2) ){ + copyPixel(targetPix, offset, pixel1, pixel2); + + } else if( ignoreAntialiasing && ( + addBrightnessInfo(pixel1), // jit pixel info augmentation looks a little weird, sorry. + addBrightnessInfo(pixel2), + isAntialiased(pixel1, data1, 1, verticalPos, horizontalPos, width) || + isAntialiased(pixel2, data2, 2, verticalPos, horizontalPos, width) + )){ + + if( isPixelBrightnessSimilar(pixel1, pixel2) ){ + copyGrayScalePixel(targetPix, offset, pixel2); + } else { + errorPixel(targetPix, offset, pixel1, pixel2); + mismatchCount++; + updateBounds(horizontalPos, verticalPos); + } + } else { + errorPixel(targetPix, offset, pixel1, pixel2); + mismatchCount++; + updateBounds(horizontalPos, verticalPos); + } + + }); + + data.misMatchPercentage = (mismatchCount / (height*width) * 100).toFixed(2); + data.diffBounds = diffBounds; + data.analysisTime = Date.now() - time; + + data.getImageDataUrl = function(text){ + var barHeight = 0; + + if(text){ + barHeight = addLabel(text,context,hiddenCanvas); + } + + context.putImageData(imgd, 0, barHeight); + + return hiddenCanvas.toDataURL("image/png"); + }; + } + + function addLabel(text, context, hiddenCanvas){ + var textPadding = 2; + + context.font = '12px sans-serif'; + + var textWidth = context.measureText(text).width + textPadding*2; + var barHeight = 22; + + if(textWidth > hiddenCanvas.width){ + hiddenCanvas.width = textWidth; + } + + hiddenCanvas.height += barHeight; + + context.fillStyle = "#666"; + context.fillRect(0,0,hiddenCanvas.width,barHeight -4); + context.fillStyle = "#fff"; + context.fillRect(0,barHeight -4,hiddenCanvas.width, 4); + + context.fillStyle = "#fff"; + context.textBaseline = "top"; + context.font = '12px sans-serif'; + context.fillText(text, textPadding, 1); + + return barHeight; + } + + function normalise(img, w, h){ + var c; + var context; + + if(img.height < h || img.width < w){ + c = document.createElement('canvas'); + c.width = w; + c.height = h; + context = c.getContext('2d'); + context.putImageData(img, 0, 0); + return context.getImageData(0, 0, w, h); + } + + return img; + } + + function compare(one, two){ + + function onceWeHaveBoth(){ + var width; + var height; + if(images.length === 2){ + width = images[0].width > images[1].width ? images[0].width : images[1].width; + height = images[0].height > images[1].height ? images[0].height : images[1].height; + + if( (images[0].width === images[1].width) && (images[0].height === images[1].height) ){ + data.isSameDimensions = true; + } else { + data.isSameDimensions = false; + } + + data.dimensionDifference = { width: images[0].width - images[1].width, height: images[0].height - images[1].height }; + + analyseImages( normalise(images[0],width, height), normalise(images[1],width, height), width, height); + + triggerDataUpdate(); + } + } + + images = []; + loadImageData(one, onceWeHaveBoth); + loadImageData(two, onceWeHaveBoth); + } + + function getCompareApi(param){ + + var secondFileData, + hasMethod = typeof param === 'function'; + + if( !hasMethod ){ + // assume it's file data + secondFileData = param; + } + + var self = { + ignoreNothing: function(){ + + tolerance.red = 0; + tolerance.green = 0; + tolerance.blue = 0; + tolerance.alpha = 0; + tolerance.minBrightness = 0; + tolerance.maxBrightness = 255; + + ignoreAntialiasing = false; + ignoreColors = false; + + if(hasMethod) { param(); } + return self; + }, + ignoreAntialiasing: function(){ + + tolerance.red = 32; + tolerance.green = 32; + tolerance.blue = 32; + tolerance.alpha = 32; + tolerance.minBrightness = 64; + tolerance.maxBrightness = 96; + + ignoreAntialiasing = true; + ignoreColors = false; + + if(hasMethod) { param(); } + return self; + }, + ignoreColors: function(){ + + tolerance.alpha = 16; + tolerance.minBrightness = 16; + tolerance.maxBrightness = 240; + + ignoreAntialiasing = false; + ignoreColors = true; + + if(hasMethod) { param(); } + return self; + }, + repaint: function(){ + if(hasMethod) { param(); } + return self; + }, + onComplete: function( callback ){ + + updateCallbackArray.push(callback); + + var wrapper = function(){ + compare(fileData, secondFileData); + }; + + wrapper(); + + return getCompareApi(wrapper); + } + }; + + return self; + } + + return { + onComplete: function( callback ){ + updateCallbackArray.push(callback); + loadImageData(fileData, function(imageData, width, height){ + parseImage(imageData.data, width, height); + }); + }, + compareTo: function(secondFileData){ + return getCompareApi(secondFileData); + } + }; + + }; + + _this['resemble'].outputSettings = function(options){ + var key; + var undefined; + + if(options.errorColor){ + for (key in options.errorColor) { + errorPixelColor[key] = options.errorColor[key] === undefined ? errorPixelColor[key] : options.errorColor[key]; + } + } + + if(options.errorType && errorPixelTransform[options.errorType] ){ + errorPixelTransformer = errorPixelTransform[options.errorType]; + } + + pixelTransparency = isNaN(Number(options.transparency)) ? pixelTransparency : options.transparency; + + if (options.largeImageThreshold !== undefined) { + largeImageThreshold = options.largeImageThreshold; + } + + return this; + }; + +}(this)); diff --git a/tests/lib/screenshot-testing/.gitignore b/tests/lib/screenshot-testing/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..39404096ba15589164b4467b36095f1e794a3222 --- /dev/null +++ b/tests/lib/screenshot-testing/.gitignore @@ -0,0 +1,3 @@ +/node_modules/ +/*-debug.log +/local-extras.js diff --git a/tests/lib/screenshot-testing/mocha-super-suite.js b/tests/lib/screenshot-testing/mocha-super-suite.js new file mode 100644 index 0000000000000000000000000000000000000000..743a540bde97ee7a8a305eba8e36ee06d6c301d7 --- /dev/null +++ b/tests/lib/screenshot-testing/mocha-super-suite.js @@ -0,0 +1,8 @@ +app.init(); +app.loadTestModules(); + +try { + require('./local-extras'); +} catch (e) { + // ignore +} diff --git a/tests/lib/screenshot-testing/package-lock.json b/tests/lib/screenshot-testing/package-lock.json new file mode 100644 index 0000000000000000000000000000000000000000..9171a0a0b805a25831a8f4d11eeed528bcb54187 --- /dev/null +++ b/tests/lib/screenshot-testing/package-lock.json @@ -0,0 +1,11557 @@ +{ + "name": "matomo-screenshot-testing", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "matomo-screenshot-testing", + "version": "1.0.0", + "license": "GPL-3.0+", + "dependencies": { + "@testomatio/reporter": "^1.0.9", + "chai": "^4.3.4", + "chai-files": "^1.4.0", + "chai-image-assert": "^1.2.0", + "fs-extra": "^7.0.1", + "mocha": "^8.2.0", + "mocha-multi-reporters": "^1.5.1", + "puppeteer": "^8.0.0", + "request": "^2.88.2", + "request-promise": "^4.2.6", + "url-parse": "^1.5.3" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32c/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.395.0.tgz", + "integrity": "sha512-mKEDt/1oS9Cjd+5kS88XPO26hvbIvx6Dzcyih26qz1Gb2BVIZm9y1KopFHtpyCLuOVIhsrXFkfEMoFwggM/swQ==", + "dependencies": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.395.0", + "@aws-sdk/credential-provider-node": "3.395.0", + "@aws-sdk/middleware-bucket-endpoint": "3.391.0", + "@aws-sdk/middleware-expect-continue": "3.391.0", + "@aws-sdk/middleware-flexible-checksums": "3.391.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-location-constraint": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-sdk-s3": "3.391.0", + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/middleware-ssec": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/signature-v4-multi-region": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@aws-sdk/xml-builder": "3.310.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/eventstream-serde-browser": "^2.0.3", + "@smithy/eventstream-serde-config-resolver": "^2.0.3", + "@smithy/eventstream-serde-node": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-blob-browser": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/hash-stream-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/md5-js": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.3", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.3", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.395.0.tgz", + "integrity": "sha512-IEmqpZnflzFk6NTlkRpEXIcU2uBrTYl+pA5z4ZerbKclYWuxJ7MoLtLDNWgIn3mkNxvdroWgaPY1B2dkQlTe4g==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.395.0.tgz", + "integrity": "sha512-zWxZ+pjeP88uRN4k0Zzid6t/8Yhzg1Cv2LnrYX6kZzbS6AOTDho7fVGZgUl+cme33QZhtE8pXUvwGeJAptbhqg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.395.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-sdk-sts": "3.391.0", + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.391.0.tgz", + "integrity": "sha512-mAzICedcg4bfL0mM5O6QTd9mQ331NLse1DMr6XL21ZZiLB48ej19L7AGV2xq5QwVbqKU3IVv1myRyhvpDM9jMg==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.395.0.tgz", + "integrity": "sha512-t7cWs+syJsSkj9NGdKyZ1t/+nYQyOec2nPjTtPWwKs8D7rvH3IMIgJwkvAGNzYaiIoIpXXx0wgCqys84TSEIYQ==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.395.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.395.0.tgz", + "integrity": "sha512-qJawWTYf5L7Z1Is0sSJEYc4e96Qd0HWGqluO2h9qoUNrRREZ9RSxsDq+LGxVVAYLupYFcIFtiCnA/MoBBIWhzg==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-ini": "3.395.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.395.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.391.0.tgz", + "integrity": "sha512-KMlzPlBI+hBmXDo+EoFZdLgCVRkRa9B9iEE6x0+hQQ6g9bW6HI7cDRVdceR1ZoPasSaNAZ9QOXMTIBxTpn0sPQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.395.0.tgz", + "integrity": "sha512-wAoHG9XqO0L8TvJv4cjwN/2XkYskp0cbnupKKTJm+D29MYcctKEtL0aYOHxaNN2ECAYxIFIQDdlo62GKb3nJ5Q==", + "dependencies": { + "@aws-sdk/client-sso": "3.395.0", + "@aws-sdk/token-providers": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.391.0.tgz", + "integrity": "sha512-n0vYg82B8bc4rxKltVbVqclev7hx+elyS9pEnZs3YbnbWJq0qqsznXmDfLqd1TcWpa09PGXcah0nsRDolVThsA==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.395.0.tgz", + "integrity": "sha512-b7rgVB4ZLj1NIYevSdBpPekh2Yl0kRsszBofCLyer2cRl3rBKBBrQnWex6tJd87XH2cfwhfrs4wjzDSvRDFqIw==", + "dependencies": { + "@smithy/abort-controller": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.391.0.tgz", + "integrity": "sha512-R8poMkfi54kce6b0d9RQjNm2E+je/dpA1y/TTjCAoWfaBoq6X8UhX6ZD5wdlgg+38FK/2TPjrnXdsm4gtDJuUQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/util-config-provider": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.391.0.tgz", + "integrity": "sha512-BdZetUens7vx6PFcDehGTJGFYh/s2SyQk51r5u7OlzYTkdX6DhuBX2CzfzJbswFGKgSHXoiQY0WbSGmNOkRF3A==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.391.0.tgz", + "integrity": "sha512-To9gjXzLvNQ6xbN2FtTFNjirvy1OmAuQR+mzZPgxFGgGKVPAKYz1+gFqHAEoFJVDyaxHMd8x4F7hEgDoPWQe7Q==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/types": "3.391.0", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.391.0.tgz", + "integrity": "sha512-+nyNr0rb2ixY7mU48nibr7L7gsw37y4oELhqgnNKhcjZDJ34imBwKIMFa64n21FdftmhcjR8IdSpzXE9xrkJ8g==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.391.0.tgz", + "integrity": "sha512-2ff6/OU7XTMqIZHkyMu4V1xD1iAER/pyT0FNCX2fcc8b0wr0ltBmsJ5Zh+hfMs06/oPO36NDcvJMat/waghHgQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.391.0.tgz", + "integrity": "sha512-KOwl5zo16b17JDhqILHBStccBQ2w35em7+/6vdkJdUII6OU8aVIFTlIQT9wOUvd4do6biIRBMZG3IK0Rg7mRDQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.391.0.tgz", + "integrity": "sha512-hVR3z59G7pX4pjDQs9Ag1tMgbLeGXOzeAAaNP9fEtHSd3KBMAGQgN3K3b9WPjzE2W0EoloHRJMK4qxZErdde2g==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.391.0.tgz", + "integrity": "sha512-/G77j3IdZFtzI6CWns5f//xOOJ8DezDD9sEvAlfSiBgJLaL3SUFZLmG+lHqEPzCQyNpNSY5RvuojtjloaLDi5A==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.391.0.tgz", + "integrity": "sha512-6ZXI3Z4QU+TnT5PwKWloGmRHG81tWeI18/zxf9wWzrO2NhYFvITzEJH0vWLLiXdWtn/BYfLULXtDvkTaepbI5A==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.391.0.tgz", + "integrity": "sha512-2pAJJlZqaHc0d+cz2FTVrQmWi8ygKfqfczHUo/loCtOaMNtWXBHb/JsLEecs6cXdizy6gi3YsLz6VZYwY4Ssxw==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.391.0.tgz", + "integrity": "sha512-Mhz0wBWccjwmFNb9zNLQD9HpPfU/Ygv7HtaPAkcmnWOMuUNhAS6aXExZc3QGE2owzAaLS2g3m24JEE3LsIYZJQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.391.0.tgz", + "integrity": "sha512-LdK9uMNA14zqRw3B79Mhy7GX36qld/GYo93xuu+lr+AQ98leZEdc6GUbrtNDI3fP1Z8TMQcyHUKBml4/B+wXpQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.391.0.tgz", + "integrity": "sha512-YMBWCkk8/Q85mqyf5eOn/XxAYflmxikYAU9ZL11fu9zPTUU2JsrsMJrsQmqia+Lp1jhQNQ9K3QFngG1hECflgQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/signature-v4-crt": "^3.118.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/signature-v4-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.391.0.tgz", + "integrity": "sha512-kgfArsKLDJE71qQjfXiHiM5cZqgDHlMsqEx35+A65GmTWJaS1PGDqu3ZvVVU8E5mxnCCLw7vho21fsjvH6TBpg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.391.0.tgz", + "integrity": "sha512-QpYVFKMOnzHz/JMj/b8wb18qxiT92U/5r5MmtRz2R3LOH6ooTO96k4ozXCrYr0qNed1PAnOj73rPrrH2wnCJKQ==", + "dependencies": { + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.391.0.tgz", + "integrity": "sha512-zv4sYDTQhNxyLoekcE02/nk3xvoo6yCHDy1kDJk0MFxOKaqUB+CvZdQBR4YBLSDlD4o4DUBmdYgKT58FfbM8sQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.391.0.tgz", + "integrity": "sha512-6ipHOB1WdCBNeAMJauN7l2qNE0WLVaTNhkD290/ElXm1FHGTL8yw6lIDIjhIFO1bmbZxDiKApwDiG7ROhaJoxQ==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.391.0.tgz", + "integrity": "sha512-PVvAK/Lf4BdB1eJIZtyFpGSslGQwKpYt9/hKs5NlR+qxBMXU9T0DnTqH4GiXZaazvXr7OUVWitIF2b7iKBMTow==", + "dependencies": { + "@aws-sdk/types": "3.391.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", + "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@devexpress/error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@devexpress/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-fneVypElGUH6Be39mlRZeAu00pccTlf4oVuzf9xPJD1cdEqI8NyAiQua/EW7lZdrbMUbgyXcJmfKPefhYius3A==", + "dependencies": { + "stackframe": "^1.1.1" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", + "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.4.1", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", + "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", + "dependencies": { + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/graphql": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", + "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", + "dependencies": { + "@octokit/request": "^8.4.1", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "11.4.4-cjs.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.4-cjs.2.tgz", + "integrity": "sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw==", + "dependencies": { + "@octokit/types": "^13.7.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", + "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "13.3.2-cjs.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.2-cjs.1.tgz", + "integrity": "sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ==", + "dependencies": { + "@octokit/types": "^13.8.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^5" + } + }, + "node_modules/@octokit/request": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", + "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", + "dependencies": { + "@octokit/endpoint": "^9.0.6", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", + "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", + "dependencies": { + "@octokit/types": "^13.1.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/rest": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.2.tgz", + "integrity": "sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA==", + "dependencies": { + "@octokit/core": "^5.0.2", + "@octokit/plugin-paginate-rest": "11.4.4-cjs.2", + "@octokit/plugin-request-log": "^4.0.0", + "@octokit/plugin-rest-endpoint-methods": "13.3.2-cjs.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "dependencies": { + "@octokit/openapi-types": "^24.2.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.4.tgz", + "integrity": "sha512-3+3/xRQ0K/NFVtKSiTGsUa3muZnVaBmHrLNgxwoBLZO9rNhwZtjjjf7pFJ6aoucoul/c/w3xobRkgi8F9MWX8Q==", + "dependencies": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", + "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", + "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", + "dependencies": { + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.4.tgz", + "integrity": "sha512-JtKWIKoCFeOY5JGQeEl81AKdIpzeLLSjSMmO5yoKqc58Yn3cxmteylT6Elba3FgAHjK1OthARRXz5JXaKKRB7g==", + "dependencies": { + "@smithy/types": "^2.2.1", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.4.tgz", + "integrity": "sha512-vW7xoDKZwjjf/2GCwVf/uvZce/QJOAYan9r8UsqlzOrnnpeS2ffhxeZjLK0/emZu8n6qU3amGgZ/BTo3oVtEyQ==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.4", + "@smithy/property-provider": "^2.0.4", + "@smithy/types": "^2.2.1", + "@smithy/url-parser": "^2.0.4", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.4.tgz", + "integrity": "sha512-DkVLcQjhOxPj/4pf2hNj2kvOeoLczirHe57g7czMNJCUBvg9cpU9hNgqS37Y5sjdEtMSa2oTyCS5oeHZtKgoIw==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.2.1", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.4.tgz", + "integrity": "sha512-6eY3NZb0kHoHh1j0wK+nZwrEe0qnqUzTBEBr+auB/Dd2GJj6quFVRKG65UnuOym/fnGzM0Cc6vULb7fQqqhbiw==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.4.tgz", + "integrity": "sha512-OH+CxOki+MzMhasco3AL9bHw/6u2UcNz0XcP5kvmWTZngZTEiqEEnG6u20LHKu1HD3sDqsdK0n4hyelH5zce6A==", + "dependencies": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.4.tgz", + "integrity": "sha512-O4KaVw0JdtWJ1Dbo0dBNa2wW5xEbDDTVbn/VY9hxLgS1TXHVPNYuvMP0Du+ZOJGmNul+1dOhIOx9kPBncS2MDg==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.4.tgz", + "integrity": "sha512-WHgAxBmWqKE6/LuwgbDZckS0ycN34drEMYQAbYGz5SK+Kpakl3zEeJ0DxnFXgdHdlVrlvaYtgzrMqfowH9of6g==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.4.tgz", + "integrity": "sha512-1dwR8T+QMe5Gs60NpZgF7ReZp0SXz1O/aX5BdDhsOJh72fi3Bx2UZlDihCdb++9vPyBRMXFRF7I8/C4x8iIm8A==", + "dependencies": { + "@smithy/protocol-http": "^2.0.4", + "@smithy/querystring-builder": "^2.0.4", + "@smithy/types": "^2.2.1", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.4.tgz", + "integrity": "sha512-5upzN7wnk+NBtL6rfJXT8NI1HPQKzz+i+qgaGqpfJ8I1OZaBJhYibRFY7s9mmVAi5ghetpvmDuvfwjvzZd2KRg==", + "dependencies": { + "@smithy/chunked-blob-reader": "^2.0.0", + "@smithy/chunked-blob-reader-native": "^2.0.0", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.4.tgz", + "integrity": "sha512-vZ6a/fvEAFJKNtxJsn0I2WM8uBdypLLhLTpP4BA6fRsBAtwIl5S4wTt0Hspy6uGNn/74LmCxGmFSTMMbSd7ZDA==", + "dependencies": { + "@smithy/types": "^2.2.1", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.4.tgz", + "integrity": "sha512-axmyXnyEm6C9BBSFkmrkdYRDcBOOjxHdCxLUHO/VuTlLI10fC1Km46CzBMC0hRsIdLaR2BYJUEfDLESBXLBhrw==", + "dependencies": { + "@smithy/types": "^2.2.1", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.4.tgz", + "integrity": "sha512-zfbPPZFiZvhIXJYKlzQwDUnxmWK/SmyDcM6iQJRZHU2jQZAzhHUXFGIu2lKH9L02VUqysOgQi3S/HY4fhrVT8w==", + "dependencies": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.4.tgz", + "integrity": "sha512-MN7tKNljSk0V8tLNFAfLFa5gYb/EPkNvPDMEsXSSZdgL+uD95idz7UyNV34f/0rVuBjKzM1AqULFI7tKpH+Z3w==", + "dependencies": { + "@smithy/types": "^2.2.1", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.4.tgz", + "integrity": "sha512-Pdd+fhRbvizqsgYJ0pLWE6hjhq42wDFWzMj/1T7mEY9tG9bP6/AcdsQK8SAOckrBLURDoeSqTAwPKalsgcZBxw==", + "dependencies": { + "@smithy/protocol-http": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.4.tgz", + "integrity": "sha512-aLPqkqKjZQ1V718P0Ostpp53nWfwK32uD0HFKSAOT25RvL285dqzGl0PAKDXpyLsPsPmHe0Yrg0AUFkRv4CRbQ==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.4", + "@smithy/types": "^2.2.1", + "@smithy/url-parser": "^2.0.4", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.4.tgz", + "integrity": "sha512-stozO6NgH9W/OSfFMOJEtlJCsnJFSoGyV4LHzIVQeXTzZ2RHjmytQ/Ez7GngHGZ1YsB4zxE1qDTXAU0AlaKf2w==", + "dependencies": { + "@smithy/protocol-http": "^2.0.4", + "@smithy/service-error-classification": "^2.0.0", + "@smithy/types": "^2.2.1", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-retry": "^2.0.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.4.tgz", + "integrity": "sha512-oDttJMMES7yXmopjQHnqTkxu8vZOdjB9VpSj94Ff4/GXdKQH7ozKLNIPq4C568nbeQbBt/gsLb6Ttbx1+j+JPQ==", + "dependencies": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", + "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.4.tgz", + "integrity": "sha512-s9O90cEhkpzZulvdHBBaroZ6AJ5uV6qtmycgYKP1yOCSfPHGIWYwaULdbfxraUsvzCcnMosDNkfckqXYoKI6jw==", + "dependencies": { + "@smithy/property-provider": "^2.0.4", + "@smithy/shared-ini-file-loader": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.4.tgz", + "integrity": "sha512-svqeqkGgQz1B2m3IurHtp1O8vfuUGbqw6vynFmOrvPirRdiIPukHTZW1GN/JuBCtDpq9mNPutSVipfz2n4sZbQ==", + "dependencies": { + "@smithy/abort-controller": "^2.0.4", + "@smithy/protocol-http": "^2.0.4", + "@smithy/querystring-builder": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.4.tgz", + "integrity": "sha512-OfaUIhnyvOkuCPHWMPkJqX++dUaDKsiZWuZqCdU04Z9dNAl2TtZAh7dw2rsZGb57vq6YH3PierNrDfQJTAKYtg==", + "dependencies": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.4.tgz", + "integrity": "sha512-I1vCZ/m1U424gA9TXkL/pJ3HlRfujY8+Oj3GfDWcrNiWVmAeyx3CTvXw+yMHp2X01BOOu5fnyAa6JwAn1O+txA==", + "dependencies": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.4.tgz", + "integrity": "sha512-Jc7UPx1pNeisYcABkoo2Pn4kvomy1UI7uxv7R+1W3806KMAKgYHutWmZG01aPHu2XH0zY2RF2KfGiuialsxHvA==", + "dependencies": { + "@smithy/types": "^2.2.1", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.4.tgz", + "integrity": "sha512-Uh6+PhGxSo17qe2g/JlyoekvTHKn7dYWfmHqUzPAvkW+dHlc3DNVG3++PV48z33lCo5YDVBBturWQ9N/TKn+EA==", + "dependencies": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", + "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.4.tgz", + "integrity": "sha512-091yneupXnSqvAU+vLG7h0g4QRRO6TjulpECXYVU6yW/LiNp7QE533DBpaphmbtI6tTC4EfGrhn35gTa0w+GQg==", + "dependencies": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.4.tgz", + "integrity": "sha512-y2xblkS0hb44QJDn9YjPp5aRFYSiI7w0bI3tATE3ybOrII2fppqD0SE3zgvew/B/3rTunuiCW+frTD0W4UYb9Q==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.4", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.2.1", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.4.tgz", + "integrity": "sha512-Dg1dkqyj3jwa03RFs6E4ASmfQ7CjplbGISJIJNSt3F8NfIid2RalbeCMOIHK7VagKh9qngZNyoKxObZC9LB9Lg==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.0", + "@smithy/types": "^2.2.1", + "@smithy/util-stream": "^2.0.4", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.2.1.tgz", + "integrity": "sha512-6nyDOf027ZeJiQVm6PXmLm7dR+hR2YJUkr4VwUniXA8xZUGAu5Mk0zfx2BPFrt+e5YauvlIqQoH0CsrM4tLkfg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.4.tgz", + "integrity": "sha512-puIQ6+TJpI2AAPw7IGdGG6d2DEcVP5nJqa1VjrxzUcy2Jx7LtGn+gDHY2o9Pc9vQkmoicovTEKgvv7CdqP+0gg==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.0.0.tgz", + "integrity": "sha512-ZV7Z/WHTMxHJe/xL/56qZwSUcl63/5aaPAGjkfynJm4poILjdD4GmFI+V+YWabh2WJIjwTKZ5PNsuvPQKt93Mg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.4.tgz", + "integrity": "sha512-wGdnPt4Ng72duUd97HrlqVkq6DKVB/yjaGkSg5n3uuQKzzHjoi3OdjXGumD/VYPHz0dYd7wpLNG2CnMm/nfDrg==", + "dependencies": { + "@smithy/property-provider": "^2.0.4", + "@smithy/types": "^2.2.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.4.tgz", + "integrity": "sha512-QMkNcV6x52BeeeIvhvow6UmOu7nP7DXQljY6DKOP/aAokrli53IWTP/kUTd9B0Mp9tbW3WC10O6zaM69xiMNYw==", + "dependencies": { + "@smithy/config-resolver": "^2.0.4", + "@smithy/credential-provider-imds": "^2.0.4", + "@smithy/node-config-provider": "^2.0.4", + "@smithy/property-provider": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", + "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", + "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.4.tgz", + "integrity": "sha512-ZVje79afuv3DB1Ma/g5m/5v9Zda8nA0xNgvE1pOD3EnoTp/Ekch1z20AN6gfVsf7JYWK2VSMVDiqI9N8Ua4wbg==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.0.4", + "@smithy/node-http-handler": "^2.0.4", + "@smithy/types": "^2.2.1", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.4.tgz", + "integrity": "sha512-NAzHgewL+sIJw9vlgR4m8btJiu1u0vuQRNRT7Bd5B66h02deFMmOaw1zeGePORZa7zyUwNZ2J5ZPkKzq4ced7Q==", + "dependencies": { + "@smithy/abort-controller": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@testomatio/reporter": { + "version": "1.6.17", + "resolved": "https://registry.npmjs.org/@testomatio/reporter/-/reporter-1.6.17.tgz", + "integrity": "sha512-IJZO14JR+wMz72nZu2J+DgluyxdKGVs9zv6/gMKjcLarmOtmSc84GHW18as5mjgkLAHLEwKLJNT+W/rdHq3+nA==", + "dependencies": { + "@aws-sdk/client-s3": "^3.279.0", + "@aws-sdk/lib-storage": "^3.279.0", + "@octokit/rest": "^20.1.2", + "aws-sdk": "^2.1072.0", + "axios": "^1.6.2", + "axios-retry": "^3.9.1", + "callsite-record": "^4.1.4", + "chalk": "^4.1.0", + "commander": "^12", + "cross-spawn": "^7.0.3", + "csv-writer": "^1.6.0", + "debug": "^4.3.4", + "dotenv": "^16.0.1", + "fast-xml-parser": "^4.4.1", + "file-url": "3.0.0", + "filesize": "^10.1.6", + "glob": "^10.3", + "handlebars": "^4.7.8", + "has-flag": "^5.0.1", + "humanize-duration": "^3.27.3", + "is-valid-path": "^0.1.1", + "json-cycle": "^1.3.0", + "lodash.memoize": "^4.1.2", + "lodash.merge": "^4.6.2", + "minimatch": "^9.0.3", + "pretty-ms": "^7.0.1", + "promise-retry": "^2.0.1", + "strip-ansi": "^7.1.0", + "uuid": "^9.0.0" + }, + "bin": { + "report-xml": "lib/bin/reportXml.js", + "reporter": "lib/bin/cli.js", + "start-test-run": "lib/bin/startTest.js", + "upload-artifacts": "lib/bin/uploadArtifacts.js" + } + }, + "node_modules/@testomatio/reporter/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@testomatio/reporter/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testomatio/reporter/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@testomatio/reporter/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testomatio/reporter/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testomatio/reporter/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@testomatio/reporter/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@testomatio/reporter/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@testomatio/reporter/node_modules/filesize": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz", + "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 10.4.0" + } + }, + "node_modules/@testomatio/reporter/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@testomatio/reporter/node_modules/has-flag": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", + "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@testomatio/reporter/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@testomatio/reporter/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@testomatio/reporter/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testomatio/reporter/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testomatio/reporter/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@testomatio/reporter/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testomatio/reporter/node_modules/supports-color/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testomatio/reporter/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@testomatio/reporter/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.197", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", + "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==" + }, + "node_modules/@types/node": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.0.tgz", + "integrity": "sha512-OyiZPohMMjZEYqcVo/UJ04GyAxXOJEZO/FpzyXxcH4r/ArrVoXHf4MbUrkLp0Tz7/p1mMKpo5zJ6ZHl8XBNthQ==", + "optional": true + }, + "node_modules/@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/address": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", + "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==", + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1441.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1441.0.tgz", + "integrity": "sha512-qMmFt7jyBoe9HsS0o9YoY/zGfURM/rD8DYR1VFzsJKKb8UMnjZrUfDX+fb+rQKK1WLp0+k9dBVFhU09EcSJTKQ==", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/aws-sdk/node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/aws-sdk/node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/aws-sdk/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "node_modules/axios": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios-retry": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.9.1.tgz", + "integrity": "sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w==", + "dependencies": { + "@babel/runtime": "^7.15.4", + "is-retry-allowed": "^2.2.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" + } + }, + "node_modules/bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" + }, + "node_modules/cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "dependencies": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "engines": { + "node": "*" + } + }, + "node_modules/callsite-record": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/callsite-record/-/callsite-record-4.1.5.tgz", + "integrity": "sha512-OqeheDucGKifjQRx524URgV4z4NaKjocGhygTptDea+DLROre4ZEecA4KXDq+P7qlGCohYVNOh3qr+y5XH5Ftg==", + "dependencies": { + "@devexpress/error-stack-parser": "^2.0.6", + "@types/lodash": "^4.14.72", + "callsite": "^1.0.0", + "chalk": "^2.4.0", + "highlight-es": "^1.0.0", + "lodash": "4.6.1 || ^4.16.1", + "pinkie-promise": "^2.0.0" + } + }, + "node_modules/callsite-record/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsite-record/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsite-record/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-files": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/chai-files/-/chai-files-1.4.0.tgz", + "integrity": "sha1-DiVhD63FUbHq55wvTuefry+EIpY=", + "dependencies": { + "assertion-error": "^1.0.1" + } + }, + "node_modules/chai-image-assert": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/chai-image-assert/-/chai-image-assert-1.2.1.tgz", + "integrity": "sha512-5E5H6HvxbmBGcxgZo0rHvqMHZFuhPHQoboeohQKFlrca5Rncb94pHbvtz0jyiUBrM1kCKOah/eyzGXc/dVyFNg==", + "dependencies": { + "fs-extra": "^4.0.1", + "koa": "^2.3.0", + "koa-bodyparser": "3", + "koa-mount": "2", + "koa-route": "^3.2.0", + "koa-static": "3", + "lodash": "^4.17.4", + "react-dev-utils": "^4.0.0" + }, + "bin": { + "chai-image-assert-viewer": "bin/launch-viewer" + } + }, + "node_modules/chai-image-assert/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/chokidar/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/co-body": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-4.2.0.tgz", + "integrity": "sha1-dN8g+nMmISXcRUgq8E40LqjbNRU=", + "dependencies": { + "inflation": "~2.0.0", + "qs": "~4.0.0", + "raw-body": "~2.1.2", + "type-is": "~1.6.6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookies": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.3.tgz", + "integrity": "sha512-+gixgxYSgQLTaTIilDHAdlNPZDENDQernEMiIcZpYYP14zgHsCt4Ce1FEjFtcp6GefhozebB6orvhAAWx/IS0A==", + "dependencies": { + "depd": "~1.1.2", + "keygrip": "~1.0.3" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/csv-writer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/csv-writer/-/csv-writer-1.6.0.tgz", + "integrity": "sha512-NOx7YDFWEsM/fTRAJjRpPp8t+MKRVvniAg9wQlUKx20MFrPs73WLJhFf5iteqrxNYnsy924K3Iroh3yNHeYd2g==" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/detect-port-alt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.3.tgz", + "integrity": "sha1-pNLwYddXoDTs83xRQmCph1DysTE=", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.854822", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.854822.tgz", + "integrity": "sha512-xd4D8kHQtB0KtWW0c9xBZD5LVtm9chkMOfs/3Yn01RhT/sFIsVtzTtypfKoFfWBaL+7xCYLxjOLkhwPXaX/Kcg==" + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + }, + "node_modules/error-inject": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz", + "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dependencies": { + "original": ">=0.0.5" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dependencies": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-xml-parser": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", + "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", + "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/filesize": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz", + "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-parent/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "engines": { + "node": ">=4.x" + } + }, + "node_modules/gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "dependencies": { + "duplexer": "^0.1.1" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight-es": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/highlight-es/-/highlight-es-1.0.3.tgz", + "integrity": "sha512-s/SIX6yp/5S1p8aC/NRDC1fwEb+myGIfp8/TzZz0rtAv8fzsdX7vGl3Q1TrXCsczFq8DI3CBFBCySPClfBSdbg==", + "dependencies": { + "chalk": "^2.4.0", + "is-es2016-keyword": "^1.0.0", + "js-tokens": "^3.0.0" + } + }, + "node_modules/highlight-es/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/highlight-es/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/highlight-es/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz", + "integrity": "sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==", + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.7.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/humanize-duration": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.29.0.tgz", + "integrity": "sha512-G5wZGwYTLaQAmYqhfK91aw3xt6wNbJW1RnWDh4qP1PvF4T/jnkjx2RVhG5kzB2PGsYGTn+oSDBQp+dMdILLxcg==" + }, + "node_modules/iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dependencies": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-es2016-keyword": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-es2016-keyword/-/is-es2016-keyword-1.0.0.tgz", + "integrity": "sha512-JtZWPUwjdbQ1LIo9OSZ8MdkWEve198ors27vH+RzUUvZXXZkzXCxFnlUhzWYxy5IexQSRiXVw9j2q/tHMmkVYQ==" + }, + "node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", + "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "dependencies": { + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "node_modules/is-retry-allowed": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", + "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-root": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-1.0.0.tgz", + "integrity": "sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "dependencies": { + "is-invalid-path": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "node_modules/js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "node_modules/json-cycle": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.5.0.tgz", + "integrity": "sha512-GOehvd5PO2FeZ5T4c+RxobeT5a1PiGpF4u9/3+UvrMU4bhnVqzJY7hm39wg8PDCqkU91fWGH8qjWR4bn+wgq9w==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/keygrip": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.3.tgz", + "integrity": "sha512-/PpesirAIfaklxUzp4Yb7xBper9MwP6hNRA6BGGUFCgbJ+BM5CKBtsoxinNXkLHAr+GXS1/lSlF2rP7cv5Fl+g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.7.0.tgz", + "integrity": "sha512-7ojD05s2Q+hFudF8tDLZ1CpCdVZw8JQELWSkcfG9bdtoTDzMmkRF6BQBU7JzIzCCOY3xd3tftiy/loHBUYaY2Q==", + "dependencies": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.7.1", + "debug": "~3.1.0", + "delegates": "^1.0.0", + "depd": "^1.1.2", + "destroy": "^1.0.4", + "error-inject": "^1.0.0", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^1.2.0", + "koa-is-json": "^1.0.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "engines": { + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" + } + }, + "node_modules/koa-bodyparser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-3.2.0.tgz", + "integrity": "sha1-uRbeF+IDn+gmUEgZc9fClPELVxk=", + "dependencies": { + "co-body": "^4.2.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" + }, + "node_modules/koa-convert": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", + "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "dependencies": { + "co": "^4.6.0", + "koa-compose": "^3.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/koa-convert/node_modules/koa-compose": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "dependencies": { + "any-promise": "^1.1.0" + } + }, + "node_modules/koa-is-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", + "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=" + }, + "node_modules/koa-mount": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-mount/-/koa-mount-2.0.0.tgz", + "integrity": "sha1-cot9Aasj5+WNxYjlL8VU1n7pgds=", + "dependencies": { + "debug": "*", + "koa-compose": "^3.0.0" + } + }, + "node_modules/koa-mount/node_modules/koa-compose": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "dependencies": { + "any-promise": "^1.1.0" + } + }, + "node_modules/koa-route": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/koa-route/-/koa-route-3.2.0.tgz", + "integrity": "sha1-dimLmaa8+p44yrb+XHmocz51i84=", + "dependencies": { + "debug": "*", + "methods": "~1.1.0", + "path-to-regexp": "^1.2.0" + } + }, + "node_modules/koa-send": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-3.3.0.tgz", + "integrity": "sha1-WkriRVZGgMbs9geeknX6UXOoYdw=", + "dependencies": { + "co": "^4.6.0", + "debug": "^2.6.0", + "mz": "^2.3.1", + "resolve-path": "^1.3.1" + } + }, + "node_modules/koa-send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/koa-static": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-3.0.0.tgz", + "integrity": "sha1-QEQiM9LAs1wiXkUBmcEL+KU55BY=", + "dependencies": { + "debug": "*", + "koa-send": "^3.2.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dependencies": { + "mime-db": "1.40.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "dependencies": { + "brace-expansion": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/mocha": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 10.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha-multi-reporters": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/mocha-multi-reporters/-/mocha-multi-reporters-1.5.1.tgz", + "integrity": "sha512-Yb4QJOaGLIcmB0VY7Wif5AjvLMUFAdV57D2TWEva1Y0kU/3LjKpeRVmlMIfuO1SVbauve459kgtIizADqxMWPg==", + "dependencies": { + "debug": "^4.1.1", + "lodash": "^4.17.15" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "mocha": ">=3.1.2" + } + }, + "node_modules/mocha-multi-reporters/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha-multi-reporters/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + }, + "node_modules/opn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "engines": { + "node": "*" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "license": "MIT", + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-8.0.0.tgz", + "integrity": "sha512-D0RzSWlepeWkxPPdK3xhTcefj8rjah1791GE82Pdjsri49sy11ci/JQsAO8K2NRukqvwEtcI+ImP5F4ZiMvtIQ==", + "deprecated": "< 19.4.0 is no longer supported", + "hasInstallScript": true, + "dependencies": { + "debug": "^4.1.0", + "devtools-protocol": "0.0.854822", + "extract-zip": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", + "pkg-dir": "^4.2.0", + "progress": "^2.0.1", + "proxy-from-env": "^1.1.0", + "rimraf": "^3.0.2", + "tar-fs": "^2.0.0", + "unbzip2-stream": "^1.3.3", + "ws": "^7.2.3" + }, + "engines": { + "node": ">=10.18.1" + } + }, + "node_modules/puppeteer/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/qs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", + "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/raw-body": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "dependencies": { + "bytes": "2.4.0", + "iconv-lite": "0.4.13", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-dev-utils": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-4.2.3.tgz", + "integrity": "sha512-uvmkwl5uMexCmC0GUv1XGQP0YjfYePJufGg4YYiukhqk2vN1tQxwWJIBERqhOmSi80cppZg8mZnPP/kOMf1sUQ==", + "dependencies": { + "address": "1.0.3", + "babel-code-frame": "6.26.0", + "chalk": "1.1.3", + "cross-spawn": "5.1.0", + "detect-port-alt": "1.1.3", + "escape-string-regexp": "1.0.5", + "filesize": "3.5.11", + "global-modules": "1.0.0", + "gzip-size": "3.0.0", + "inquirer": "3.3.0", + "is-root": "1.0.0", + "opn": "5.1.0", + "react-error-overlay": "^3.0.0", + "recursive-readdir": "2.2.1", + "shell-quote": "1.6.1", + "sockjs-client": "1.1.4", + "strip-ansi": "3.0.1", + "text-table": "0.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/react-error-overlay": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-3.0.0.tgz", + "integrity": "sha512-XzgvowFrwDo6TWcpJ/WTiarb9UI6lhA4PMzS7n1joK3sHfBBBOQHUc0U4u57D6DWO9vHv6lVSWx2Q/Ymfyv4hw==" + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.1.tgz", + "integrity": "sha1-kO8jHQd4xc4JPJpI105cVCLROpk=", + "dependencies": { + "minimatch": "3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dependencies": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-core/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "dependencies": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/resolve-path/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/resolve-path/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dependencies": { + "is-promise": "^2.1.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + }, + "node_modules/rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dependencies": { + "rx-lite": "*" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "node_modules/sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "dependencies": { + "debug": "^2.6.6", + "eventsource": "0.1.6", + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "dependencies": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/ylru": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "requires": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "requires": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "requires": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/client-s3": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.395.0.tgz", + "integrity": "sha512-mKEDt/1oS9Cjd+5kS88XPO26hvbIvx6Dzcyih26qz1Gb2BVIZm9y1KopFHtpyCLuOVIhsrXFkfEMoFwggM/swQ==", + "requires": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.395.0", + "@aws-sdk/credential-provider-node": "3.395.0", + "@aws-sdk/middleware-bucket-endpoint": "3.391.0", + "@aws-sdk/middleware-expect-continue": "3.391.0", + "@aws-sdk/middleware-flexible-checksums": "3.391.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-location-constraint": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-sdk-s3": "3.391.0", + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/middleware-ssec": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/signature-v4-multi-region": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@aws-sdk/xml-builder": "3.310.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/eventstream-serde-browser": "^2.0.3", + "@smithy/eventstream-serde-config-resolver": "^2.0.3", + "@smithy/eventstream-serde-node": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-blob-browser": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/hash-stream-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/md5-js": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.3", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.3", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "dependencies": { + "fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "requires": { + "strnum": "^1.0.5" + } + } + } + }, + "@aws-sdk/client-sso": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.395.0.tgz", + "integrity": "sha512-IEmqpZnflzFk6NTlkRpEXIcU2uBrTYl+pA5z4ZerbKclYWuxJ7MoLtLDNWgIn3mkNxvdroWgaPY1B2dkQlTe4g==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/client-sts": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.395.0.tgz", + "integrity": "sha512-zWxZ+pjeP88uRN4k0Zzid6t/8Yhzg1Cv2LnrYX6kZzbS6AOTDho7fVGZgUl+cme33QZhtE8pXUvwGeJAptbhqg==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.395.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-sdk-sts": "3.391.0", + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "dependencies": { + "fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "requires": { + "strnum": "^1.0.5" + } + } + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.391.0.tgz", + "integrity": "sha512-mAzICedcg4bfL0mM5O6QTd9mQ331NLse1DMr6XL21ZZiLB48ej19L7AGV2xq5QwVbqKU3IVv1myRyhvpDM9jMg==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.395.0.tgz", + "integrity": "sha512-t7cWs+syJsSkj9NGdKyZ1t/+nYQyOec2nPjTtPWwKs8D7rvH3IMIgJwkvAGNzYaiIoIpXXx0wgCqys84TSEIYQ==", + "requires": { + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.395.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.395.0.tgz", + "integrity": "sha512-qJawWTYf5L7Z1Is0sSJEYc4e96Qd0HWGqluO2h9qoUNrRREZ9RSxsDq+LGxVVAYLupYFcIFtiCnA/MoBBIWhzg==", + "requires": { + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-ini": "3.395.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.395.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.391.0.tgz", + "integrity": "sha512-KMlzPlBI+hBmXDo+EoFZdLgCVRkRa9B9iEE6x0+hQQ6g9bW6HI7cDRVdceR1ZoPasSaNAZ9QOXMTIBxTpn0sPQ==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.395.0.tgz", + "integrity": "sha512-wAoHG9XqO0L8TvJv4cjwN/2XkYskp0cbnupKKTJm+D29MYcctKEtL0aYOHxaNN2ECAYxIFIQDdlo62GKb3nJ5Q==", + "requires": { + "@aws-sdk/client-sso": "3.395.0", + "@aws-sdk/token-providers": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.391.0.tgz", + "integrity": "sha512-n0vYg82B8bc4rxKltVbVqclev7hx+elyS9pEnZs3YbnbWJq0qqsznXmDfLqd1TcWpa09PGXcah0nsRDolVThsA==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/lib-storage": { + "version": "3.395.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.395.0.tgz", + "integrity": "sha512-b7rgVB4ZLj1NIYevSdBpPekh2Yl0kRsszBofCLyer2cRl3rBKBBrQnWex6tJd87XH2cfwhfrs4wjzDSvRDFqIw==", + "requires": { + "@smithy/abort-controller": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + } + } + }, + "@aws-sdk/middleware-bucket-endpoint": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.391.0.tgz", + "integrity": "sha512-R8poMkfi54kce6b0d9RQjNm2E+je/dpA1y/TTjCAoWfaBoq6X8UhX6ZD5wdlgg+38FK/2TPjrnXdsm4gtDJuUQ==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/util-config-provider": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-expect-continue": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.391.0.tgz", + "integrity": "sha512-BdZetUens7vx6PFcDehGTJGFYh/s2SyQk51r5u7OlzYTkdX6DhuBX2CzfzJbswFGKgSHXoiQY0WbSGmNOkRF3A==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-flexible-checksums": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.391.0.tgz", + "integrity": "sha512-To9gjXzLvNQ6xbN2FtTFNjirvy1OmAuQR+mzZPgxFGgGKVPAKYz1+gFqHAEoFJVDyaxHMd8x4F7hEgDoPWQe7Q==", + "requires": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/types": "3.391.0", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.391.0.tgz", + "integrity": "sha512-+nyNr0rb2ixY7mU48nibr7L7gsw37y4oELhqgnNKhcjZDJ34imBwKIMFa64n21FdftmhcjR8IdSpzXE9xrkJ8g==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-location-constraint": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.391.0.tgz", + "integrity": "sha512-2ff6/OU7XTMqIZHkyMu4V1xD1iAER/pyT0FNCX2fcc8b0wr0ltBmsJ5Zh+hfMs06/oPO36NDcvJMat/waghHgQ==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.391.0.tgz", + "integrity": "sha512-KOwl5zo16b17JDhqILHBStccBQ2w35em7+/6vdkJdUII6OU8aVIFTlIQT9wOUvd4do6biIRBMZG3IK0Rg7mRDQ==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.391.0.tgz", + "integrity": "sha512-hVR3z59G7pX4pjDQs9Ag1tMgbLeGXOzeAAaNP9fEtHSd3KBMAGQgN3K3b9WPjzE2W0EoloHRJMK4qxZErdde2g==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-sdk-s3": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.391.0.tgz", + "integrity": "sha512-/G77j3IdZFtzI6CWns5f//xOOJ8DezDD9sEvAlfSiBgJLaL3SUFZLmG+lHqEPzCQyNpNSY5RvuojtjloaLDi5A==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-sdk-sts": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.391.0.tgz", + "integrity": "sha512-6ZXI3Z4QU+TnT5PwKWloGmRHG81tWeI18/zxf9wWzrO2NhYFvITzEJH0vWLLiXdWtn/BYfLULXtDvkTaepbI5A==", + "requires": { + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.391.0.tgz", + "integrity": "sha512-2pAJJlZqaHc0d+cz2FTVrQmWi8ygKfqfczHUo/loCtOaMNtWXBHb/JsLEecs6cXdizy6gi3YsLz6VZYwY4Ssxw==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-ssec": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.391.0.tgz", + "integrity": "sha512-Mhz0wBWccjwmFNb9zNLQD9HpPfU/Ygv7HtaPAkcmnWOMuUNhAS6aXExZc3QGE2owzAaLS2g3m24JEE3LsIYZJQ==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.391.0.tgz", + "integrity": "sha512-LdK9uMNA14zqRw3B79Mhy7GX36qld/GYo93xuu+lr+AQ98leZEdc6GUbrtNDI3fP1Z8TMQcyHUKBml4/B+wXpQ==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/signature-v4-multi-region": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.391.0.tgz", + "integrity": "sha512-YMBWCkk8/Q85mqyf5eOn/XxAYflmxikYAU9ZL11fu9zPTUU2JsrsMJrsQmqia+Lp1jhQNQ9K3QFngG1hECflgQ==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/token-providers": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.391.0.tgz", + "integrity": "sha512-kgfArsKLDJE71qQjfXiHiM5cZqgDHlMsqEx35+A65GmTWJaS1PGDqu3ZvVVU8E5mxnCCLw7vho21fsjvH6TBpg==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/types": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.391.0.tgz", + "integrity": "sha512-QpYVFKMOnzHz/JMj/b8wb18qxiT92U/5r5MmtRz2R3LOH6ooTO96k4ozXCrYr0qNed1PAnOj73rPrrH2wnCJKQ==", + "requires": { + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-arn-parser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-endpoints": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.391.0.tgz", + "integrity": "sha512-zv4sYDTQhNxyLoekcE02/nk3xvoo6yCHDy1kDJk0MFxOKaqUB+CvZdQBR4YBLSDlD4o4DUBmdYgKT58FfbM8sQ==", + "requires": { + "@aws-sdk/types": "3.391.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.391.0.tgz", + "integrity": "sha512-6ipHOB1WdCBNeAMJauN7l2qNE0WLVaTNhkD290/ElXm1FHGTL8yw6lIDIjhIFO1bmbZxDiKApwDiG7ROhaJoxQ==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.391.0.tgz", + "integrity": "sha512-PVvAK/Lf4BdB1eJIZtyFpGSslGQwKpYt9/hKs5NlR+qxBMXU9T0DnTqH4GiXZaazvXr7OUVWitIF2b7iKBMTow==", + "requires": { + "@aws-sdk/types": "3.391.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/types": "^2.2.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/xml-builder": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", + "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==" + }, + "@devexpress/error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@devexpress/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-fneVypElGUH6Be39mlRZeAu00pccTlf4oVuzf9xPJD1cdEqI8NyAiQua/EW7lZdrbMUbgyXcJmfKPefhYius3A==", + "requires": { + "stackframe": "^1.1.1" + } + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==" + }, + "@octokit/core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", + "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", + "requires": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.4.1", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", + "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", + "requires": { + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/graphql": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", + "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", + "requires": { + "@octokit/request": "^8.4.1", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==" + }, + "@octokit/plugin-paginate-rest": { + "version": "11.4.4-cjs.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.4-cjs.2.tgz", + "integrity": "sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw==", + "requires": { + "@octokit/types": "^13.7.0" + } + }, + "@octokit/plugin-request-log": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", + "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", + "requires": {} + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "13.3.2-cjs.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.2-cjs.1.tgz", + "integrity": "sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ==", + "requires": { + "@octokit/types": "^13.8.0" + } + }, + "@octokit/request": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", + "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", + "requires": { + "@octokit/endpoint": "^9.0.6", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", + "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", + "requires": { + "@octokit/types": "^13.1.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/rest": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.2.tgz", + "integrity": "sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA==", + "requires": { + "@octokit/core": "^5.0.2", + "@octokit/plugin-paginate-rest": "11.4.4-cjs.2", + "@octokit/plugin-request-log": "^4.0.0", + "@octokit/plugin-rest-endpoint-methods": "13.3.2-cjs.1" + } + }, + "@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "requires": { + "@octokit/openapi-types": "^24.2.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, + "@smithy/abort-controller": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.4.tgz", + "integrity": "sha512-3+3/xRQ0K/NFVtKSiTGsUa3muZnVaBmHrLNgxwoBLZO9rNhwZtjjjf7pFJ6aoucoul/c/w3xobRkgi8F9MWX8Q==", + "requires": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/chunked-blob-reader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", + "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/chunked-blob-reader-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", + "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", + "requires": { + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/config-resolver": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.4.tgz", + "integrity": "sha512-JtKWIKoCFeOY5JGQeEl81AKdIpzeLLSjSMmO5yoKqc58Yn3cxmteylT6Elba3FgAHjK1OthARRXz5JXaKKRB7g==", + "requires": { + "@smithy/types": "^2.2.1", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/credential-provider-imds": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.4.tgz", + "integrity": "sha512-vW7xoDKZwjjf/2GCwVf/uvZce/QJOAYan9r8UsqlzOrnnpeS2ffhxeZjLK0/emZu8n6qU3amGgZ/BTo3oVtEyQ==", + "requires": { + "@smithy/node-config-provider": "^2.0.4", + "@smithy/property-provider": "^2.0.4", + "@smithy/types": "^2.2.1", + "@smithy/url-parser": "^2.0.4", + "tslib": "^2.5.0" + } + }, + "@smithy/eventstream-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.4.tgz", + "integrity": "sha512-DkVLcQjhOxPj/4pf2hNj2kvOeoLczirHe57g7czMNJCUBvg9cpU9hNgqS37Y5sjdEtMSa2oTyCS5oeHZtKgoIw==", + "requires": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.2.1", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/eventstream-serde-browser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.4.tgz", + "integrity": "sha512-6eY3NZb0kHoHh1j0wK+nZwrEe0qnqUzTBEBr+auB/Dd2GJj6quFVRKG65UnuOym/fnGzM0Cc6vULb7fQqqhbiw==", + "requires": { + "@smithy/eventstream-serde-universal": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/eventstream-serde-config-resolver": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.4.tgz", + "integrity": "sha512-OH+CxOki+MzMhasco3AL9bHw/6u2UcNz0XcP5kvmWTZngZTEiqEEnG6u20LHKu1HD3sDqsdK0n4hyelH5zce6A==", + "requires": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/eventstream-serde-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.4.tgz", + "integrity": "sha512-O4KaVw0JdtWJ1Dbo0dBNa2wW5xEbDDTVbn/VY9hxLgS1TXHVPNYuvMP0Du+ZOJGmNul+1dOhIOx9kPBncS2MDg==", + "requires": { + "@smithy/eventstream-serde-universal": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/eventstream-serde-universal": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.4.tgz", + "integrity": "sha512-WHgAxBmWqKE6/LuwgbDZckS0ycN34drEMYQAbYGz5SK+Kpakl3zEeJ0DxnFXgdHdlVrlvaYtgzrMqfowH9of6g==", + "requires": { + "@smithy/eventstream-codec": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/fetch-http-handler": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.4.tgz", + "integrity": "sha512-1dwR8T+QMe5Gs60NpZgF7ReZp0SXz1O/aX5BdDhsOJh72fi3Bx2UZlDihCdb++9vPyBRMXFRF7I8/C4x8iIm8A==", + "requires": { + "@smithy/protocol-http": "^2.0.4", + "@smithy/querystring-builder": "^2.0.4", + "@smithy/types": "^2.2.1", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/hash-blob-browser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.4.tgz", + "integrity": "sha512-5upzN7wnk+NBtL6rfJXT8NI1HPQKzz+i+qgaGqpfJ8I1OZaBJhYibRFY7s9mmVAi5ghetpvmDuvfwjvzZd2KRg==", + "requires": { + "@smithy/chunked-blob-reader": "^2.0.0", + "@smithy/chunked-blob-reader-native": "^2.0.0", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/hash-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.4.tgz", + "integrity": "sha512-vZ6a/fvEAFJKNtxJsn0I2WM8uBdypLLhLTpP4BA6fRsBAtwIl5S4wTt0Hspy6uGNn/74LmCxGmFSTMMbSd7ZDA==", + "requires": { + "@smithy/types": "^2.2.1", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/hash-stream-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.4.tgz", + "integrity": "sha512-axmyXnyEm6C9BBSFkmrkdYRDcBOOjxHdCxLUHO/VuTlLI10fC1Km46CzBMC0hRsIdLaR2BYJUEfDLESBXLBhrw==", + "requires": { + "@smithy/types": "^2.2.1", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/invalid-dependency": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.4.tgz", + "integrity": "sha512-zfbPPZFiZvhIXJYKlzQwDUnxmWK/SmyDcM6iQJRZHU2jQZAzhHUXFGIu2lKH9L02VUqysOgQi3S/HY4fhrVT8w==", + "requires": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/md5-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.4.tgz", + "integrity": "sha512-MN7tKNljSk0V8tLNFAfLFa5gYb/EPkNvPDMEsXSSZdgL+uD95idz7UyNV34f/0rVuBjKzM1AqULFI7tKpH+Z3w==", + "requires": { + "@smithy/types": "^2.2.1", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/middleware-content-length": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.4.tgz", + "integrity": "sha512-Pdd+fhRbvizqsgYJ0pLWE6hjhq42wDFWzMj/1T7mEY9tG9bP6/AcdsQK8SAOckrBLURDoeSqTAwPKalsgcZBxw==", + "requires": { + "@smithy/protocol-http": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/middleware-endpoint": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.4.tgz", + "integrity": "sha512-aLPqkqKjZQ1V718P0Ostpp53nWfwK32uD0HFKSAOT25RvL285dqzGl0PAKDXpyLsPsPmHe0Yrg0AUFkRv4CRbQ==", + "requires": { + "@smithy/middleware-serde": "^2.0.4", + "@smithy/types": "^2.2.1", + "@smithy/url-parser": "^2.0.4", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/middleware-retry": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.4.tgz", + "integrity": "sha512-stozO6NgH9W/OSfFMOJEtlJCsnJFSoGyV4LHzIVQeXTzZ2RHjmytQ/Ez7GngHGZ1YsB4zxE1qDTXAU0AlaKf2w==", + "requires": { + "@smithy/protocol-http": "^2.0.4", + "@smithy/service-error-classification": "^2.0.0", + "@smithy/types": "^2.2.1", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-retry": "^2.0.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, + "@smithy/middleware-serde": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.4.tgz", + "integrity": "sha512-oDttJMMES7yXmopjQHnqTkxu8vZOdjB9VpSj94Ff4/GXdKQH7ozKLNIPq4C568nbeQbBt/gsLb6Ttbx1+j+JPQ==", + "requires": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/middleware-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", + "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/node-config-provider": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.4.tgz", + "integrity": "sha512-s9O90cEhkpzZulvdHBBaroZ6AJ5uV6qtmycgYKP1yOCSfPHGIWYwaULdbfxraUsvzCcnMosDNkfckqXYoKI6jw==", + "requires": { + "@smithy/property-provider": "^2.0.4", + "@smithy/shared-ini-file-loader": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/node-http-handler": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.4.tgz", + "integrity": "sha512-svqeqkGgQz1B2m3IurHtp1O8vfuUGbqw6vynFmOrvPirRdiIPukHTZW1GN/JuBCtDpq9mNPutSVipfz2n4sZbQ==", + "requires": { + "@smithy/abort-controller": "^2.0.4", + "@smithy/protocol-http": "^2.0.4", + "@smithy/querystring-builder": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/property-provider": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.4.tgz", + "integrity": "sha512-OfaUIhnyvOkuCPHWMPkJqX++dUaDKsiZWuZqCdU04Z9dNAl2TtZAh7dw2rsZGb57vq6YH3PierNrDfQJTAKYtg==", + "requires": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/protocol-http": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.4.tgz", + "integrity": "sha512-I1vCZ/m1U424gA9TXkL/pJ3HlRfujY8+Oj3GfDWcrNiWVmAeyx3CTvXw+yMHp2X01BOOu5fnyAa6JwAn1O+txA==", + "requires": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/querystring-builder": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.4.tgz", + "integrity": "sha512-Jc7UPx1pNeisYcABkoo2Pn4kvomy1UI7uxv7R+1W3806KMAKgYHutWmZG01aPHu2XH0zY2RF2KfGiuialsxHvA==", + "requires": { + "@smithy/types": "^2.2.1", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/querystring-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.4.tgz", + "integrity": "sha512-Uh6+PhGxSo17qe2g/JlyoekvTHKn7dYWfmHqUzPAvkW+dHlc3DNVG3++PV48z33lCo5YDVBBturWQ9N/TKn+EA==", + "requires": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/service-error-classification": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", + "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==" + }, + "@smithy/shared-ini-file-loader": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.4.tgz", + "integrity": "sha512-091yneupXnSqvAU+vLG7h0g4QRRO6TjulpECXYVU6yW/LiNp7QE533DBpaphmbtI6tTC4EfGrhn35gTa0w+GQg==", + "requires": { + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/signature-v4": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.4.tgz", + "integrity": "sha512-y2xblkS0hb44QJDn9YjPp5aRFYSiI7w0bI3tATE3ybOrII2fppqD0SE3zgvew/B/3rTunuiCW+frTD0W4UYb9Q==", + "requires": { + "@smithy/eventstream-codec": "^2.0.4", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.2.1", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/smithy-client": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.4.tgz", + "integrity": "sha512-Dg1dkqyj3jwa03RFs6E4ASmfQ7CjplbGISJIJNSt3F8NfIid2RalbeCMOIHK7VagKh9qngZNyoKxObZC9LB9Lg==", + "requires": { + "@smithy/middleware-stack": "^2.0.0", + "@smithy/types": "^2.2.1", + "@smithy/util-stream": "^2.0.4", + "tslib": "^2.5.0" + } + }, + "@smithy/types": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.2.1.tgz", + "integrity": "sha512-6nyDOf027ZeJiQVm6PXmLm7dR+hR2YJUkr4VwUniXA8xZUGAu5Mk0zfx2BPFrt+e5YauvlIqQoH0CsrM4tLkfg==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/url-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.4.tgz", + "integrity": "sha512-puIQ6+TJpI2AAPw7IGdGG6d2DEcVP5nJqa1VjrxzUcy2Jx7LtGn+gDHY2o9Pc9vQkmoicovTEKgvv7CdqP+0gg==", + "requires": { + "@smithy/querystring-parser": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "requires": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/util-body-length-node": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.0.0.tgz", + "integrity": "sha512-ZV7Z/WHTMxHJe/xL/56qZwSUcl63/5aaPAGjkfynJm4poILjdD4GmFI+V+YWabh2WJIjwTKZ5PNsuvPQKt93Mg==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "requires": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/util-defaults-mode-browser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.4.tgz", + "integrity": "sha512-wGdnPt4Ng72duUd97HrlqVkq6DKVB/yjaGkSg5n3uuQKzzHjoi3OdjXGumD/VYPHz0dYd7wpLNG2CnMm/nfDrg==", + "requires": { + "@smithy/property-provider": "^2.0.4", + "@smithy/types": "^2.2.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "@smithy/util-defaults-mode-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.4.tgz", + "integrity": "sha512-QMkNcV6x52BeeeIvhvow6UmOu7nP7DXQljY6DKOP/aAokrli53IWTP/kUTd9B0Mp9tbW3WC10O6zaM69xiMNYw==", + "requires": { + "@smithy/config-resolver": "^2.0.4", + "@smithy/credential-provider-imds": "^2.0.4", + "@smithy/node-config-provider": "^2.0.4", + "@smithy/property-provider": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/util-middleware": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", + "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/util-retry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", + "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "requires": { + "@smithy/service-error-classification": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/util-stream": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.4.tgz", + "integrity": "sha512-ZVje79afuv3DB1Ma/g5m/5v9Zda8nA0xNgvE1pOD3EnoTp/Ekch1z20AN6gfVsf7JYWK2VSMVDiqI9N8Ua4wbg==", + "requires": { + "@smithy/fetch-http-handler": "^2.0.4", + "@smithy/node-http-handler": "^2.0.4", + "@smithy/types": "^2.2.1", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "requires": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/util-waiter": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.4.tgz", + "integrity": "sha512-NAzHgewL+sIJw9vlgR4m8btJiu1u0vuQRNRT7Bd5B66h02deFMmOaw1zeGePORZa7zyUwNZ2J5ZPkKzq4ced7Q==", + "requires": { + "@smithy/abort-controller": "^2.0.4", + "@smithy/types": "^2.2.1", + "tslib": "^2.5.0" + } + }, + "@testomatio/reporter": { + "version": "1.6.17", + "resolved": "https://registry.npmjs.org/@testomatio/reporter/-/reporter-1.6.17.tgz", + "integrity": "sha512-IJZO14JR+wMz72nZu2J+DgluyxdKGVs9zv6/gMKjcLarmOtmSc84GHW18as5mjgkLAHLEwKLJNT+W/rdHq3+nA==", + "requires": { + "@aws-sdk/client-s3": "^3.279.0", + "@aws-sdk/lib-storage": "^3.279.0", + "@octokit/rest": "^20.1.2", + "aws-sdk": "^2.1072.0", + "axios": "^1.12.2", + "axios-retry": "^3.9.1", + "callsite-record": "^4.1.4", + "chalk": "^4.1.0", + "commander": "^12", + "cross-spawn": "^7.0.3", + "csv-writer": "^1.6.0", + "debug": "^4.3.4", + "dotenv": "^16.0.1", + "fast-xml-parser": "^4.4.1", + "file-url": "3.0.0", + "filesize": "^10.1.6", + "glob": "^10.3", + "handlebars": "^4.7.8", + "has-flag": "^5.0.1", + "humanize-duration": "^3.27.3", + "is-valid-path": "^0.1.1", + "json-cycle": "^1.3.0", + "lodash.memoize": "^4.1.2", + "lodash.merge": "^4.6.2", + "minimatch": "^9.0.3", + "pretty-ms": "^7.0.1", + "promise-retry": "^2.0.1", + "strip-ansi": "^7.1.0", + "uuid": "^9.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "filesize": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz", + "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==" + }, + "glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "has-flag": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", + "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==" + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + } + } + }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@types/lodash": { + "version": "4.14.197", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", + "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==" + }, + "@types/node": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.0.tgz", + "integrity": "sha512-OyiZPohMMjZEYqcVo/UJ04GyAxXOJEZO/FpzyXxcH4r/ArrVoXHf4MbUrkLp0Tz7/p1mMKpo5zJ6ZHl8XBNthQ==", + "optional": true + }, + "@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "address": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", + "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "aws-sdk": { + "version": "2.1441.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1441.0.tgz", + "integrity": "sha512-qMmFt7jyBoe9HsS0o9YoY/zGfURM/rD8DYR1VFzsJKKb8UMnjZrUfDX+fb+rQKK1WLp0+k9dBVFhU09EcSJTKQ==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.5.0" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==" + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "axios": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "requires": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + } + } + } + }, + "axios-retry": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.9.1.tgz", + "integrity": "sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w==", + "requires": { + "@babel/runtime": "^7.15.4", + "is-retry-allowed": "^2.2.0" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" + }, + "cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "requires": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==" + }, + "callsite-record": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/callsite-record/-/callsite-record-4.1.5.tgz", + "integrity": "sha512-OqeheDucGKifjQRx524URgV4z4NaKjocGhygTptDea+DLROre4ZEecA4KXDq+P7qlGCohYVNOh3qr+y5XH5Ftg==", + "requires": { + "@devexpress/error-stack-parser": "^2.0.6", + "@types/lodash": "^4.14.72", + "callsite": "^1.0.0", + "chalk": "^2.4.0", + "highlight-es": "^1.0.0", + "lodash": "4.6.1 || ^4.16.1", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + } + }, + "chai-files": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/chai-files/-/chai-files-1.4.0.tgz", + "integrity": "sha1-DiVhD63FUbHq55wvTuefry+EIpY=", + "requires": { + "assertion-error": "^1.0.1" + } + }, + "chai-image-assert": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/chai-image-assert/-/chai-image-assert-1.2.1.tgz", + "integrity": "sha512-5E5H6HvxbmBGcxgZo0rHvqMHZFuhPHQoboeohQKFlrca5Rncb94pHbvtz0jyiUBrM1kCKOah/eyzGXc/dVyFNg==", + "requires": { + "fs-extra": "^4.0.1", + "koa": "^2.3.0", + "koa-bodyparser": "3", + "koa-mount": "2", + "koa-route": "^3.2.0", + "koa-static": "3", + "lodash": "^4.17.4", + "react-dev-utils": "^4.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, + "check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "requires": { + "get-func-name": "^2.0.2" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "co-body": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-4.2.0.tgz", + "integrity": "sha1-dN8g+nMmISXcRUgq8E40LqjbNRU=", + "requires": { + "inflation": "~2.0.0", + "qs": "~4.0.0", + "raw-body": "~2.1.2", + "type-is": "~1.6.6" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookies": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.3.tgz", + "integrity": "sha512-+gixgxYSgQLTaTIilDHAdlNPZDENDQernEMiIcZpYYP14zgHsCt4Ce1FEjFtcp6GefhozebB6orvhAAWx/IS0A==", + "requires": { + "depd": "~1.1.2", + "keygrip": "~1.0.3" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "csv-writer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/csv-writer/-/csv-writer-1.6.0.tgz", + "integrity": "sha512-NOx7YDFWEsM/fTRAJjRpPp8t+MKRVvniAg9wQlUKx20MFrPs73WLJhFf5iteqrxNYnsy924K3Iroh3yNHeYd2g==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, + "deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-port-alt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.3.tgz", + "integrity": "sha1-pNLwYddXoDTs83xRQmCph1DysTE=", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "devtools-protocol": { + "version": "0.0.854822", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.854822.tgz", + "integrity": "sha512-xd4D8kHQtB0KtWW0c9xBZD5LVtm9chkMOfs/3Yn01RhT/sFIsVtzTtypfKoFfWBaL+7xCYLxjOLkhwPXaX/Kcg==" + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + }, + "dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + }, + "error-inject": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz", + "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=" + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "requires": { + "original": ">=0.0.5" + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-xml-parser": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", + "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", + "requires": { + "strnum": "^1.0.5" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", + "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==" + }, + "filesize": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz", + "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, + "follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==" + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "graceful-fs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + }, + "gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "requires": { + "duplexer": "^0.1.1" + } + }, + "handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "highlight-es": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/highlight-es/-/highlight-es-1.0.3.tgz", + "integrity": "sha512-s/SIX6yp/5S1p8aC/NRDC1fwEb+myGIfp8/TzZz0rtAv8fzsdX7vGl3Q1TrXCsczFq8DI3CBFBCySPClfBSdbg==", + "requires": { + "chalk": "^2.4.0", + "is-es2016-keyword": "^1.0.0", + "js-tokens": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "http-assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz", + "integrity": "sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==", + "requires": { + "deep-equal": "~1.0.1", + "http-errors": "~1.7.2" + } + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "humanize-duration": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.29.0.tgz", + "integrity": "sha512-G5wZGwYTLaQAmYqhfK91aw3xt6wNbJW1RnWDh4qP1PvF4T/jnkjx2RVhG5kzB2PGsYGTn+oSDBQp+dMdILLxcg==" + }, + "iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + }, + "is-es2016-keyword": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-es2016-keyword/-/is-es2016-keyword-1.0.0.tgz", + "integrity": "sha512-JtZWPUwjdbQ1LIo9OSZ8MdkWEve198ors27vH+RzUUvZXXZkzXCxFnlUhzWYxy5IexQSRiXVw9j2q/tHMmkVYQ==" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-generator-function": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", + "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-retry-allowed": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", + "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==" + }, + "is-root": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-1.0.0.tgz", + "integrity": "sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU=" + }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "requires": { + "which-typed-array": "^1.1.11" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "requires": { + "is-invalid-path": "^0.1.0" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-cycle": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.5.0.tgz", + "integrity": "sha512-GOehvd5PO2FeZ5T4c+RxobeT5a1PiGpF4u9/3+UvrMU4bhnVqzJY7hm39wg8PDCqkU91fWGH8qjWR4bn+wgq9w==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "keygrip": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.3.tgz", + "integrity": "sha512-/PpesirAIfaklxUzp4Yb7xBper9MwP6hNRA6BGGUFCgbJ+BM5CKBtsoxinNXkLHAr+GXS1/lSlF2rP7cv5Fl+g==" + }, + "koa": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.7.0.tgz", + "integrity": "sha512-7ojD05s2Q+hFudF8tDLZ1CpCdVZw8JQELWSkcfG9bdtoTDzMmkRF6BQBU7JzIzCCOY3xd3tftiy/loHBUYaY2Q==", + "requires": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.7.1", + "debug": "~3.1.0", + "delegates": "^1.0.0", + "depd": "^1.1.2", + "destroy": "^1.0.4", + "error-inject": "^1.0.0", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^1.2.0", + "koa-is-json": "^1.0.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + } + }, + "koa-bodyparser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-3.2.0.tgz", + "integrity": "sha1-uRbeF+IDn+gmUEgZc9fClPELVxk=", + "requires": { + "co-body": "^4.2.0" + } + }, + "koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" + }, + "koa-convert": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", + "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "requires": { + "co": "^4.6.0", + "koa-compose": "^3.0.0" + }, + "dependencies": { + "koa-compose": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "^1.1.0" + } + } + } + }, + "koa-is-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", + "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=" + }, + "koa-mount": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-mount/-/koa-mount-2.0.0.tgz", + "integrity": "sha1-cot9Aasj5+WNxYjlL8VU1n7pgds=", + "requires": { + "debug": "*", + "koa-compose": "^3.0.0" + }, + "dependencies": { + "koa-compose": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "^1.1.0" + } + } + } + }, + "koa-route": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/koa-route/-/koa-route-3.2.0.tgz", + "integrity": "sha1-dimLmaa8+p44yrb+XHmocz51i84=", + "requires": { + "debug": "*", + "methods": "~1.1.0", + "path-to-regexp": "^1.2.0" + } + }, + "koa-send": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-3.3.0.tgz", + "integrity": "sha1-WkriRVZGgMbs9geeknX6UXOoYdw=", + "requires": { + "co": "^4.6.0", + "debug": "^2.6.0", + "mz": "^2.3.1", + "resolve-path": "^1.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "koa-static": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-3.0.0.tgz", + "integrity": "sha1-QEQiM9LAs1wiXkUBmcEL+KU55BY=", + "requires": { + "debug": "*", + "koa-send": "^3.2.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "requires": { + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "requires": { + "get-func-name": "^2.0.1" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "requires": { + "brace-expansion": "^1.0.0" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "mocha": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "mocha-multi-reporters": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/mocha-multi-reporters/-/mocha-multi-reporters-1.5.1.tgz", + "integrity": "sha512-Yb4QJOaGLIcmB0VY7Wif5AjvLMUFAdV57D2TWEva1Y0kU/3LjKpeRVmlMIfuO1SVbauve459kgtIizADqxMWPg==", + "requires": { + "debug": "^4.1.1", + "lodash": "^4.17.15" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + }, + "opn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==" + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + } + } + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "requires": { + "isarray": "0.0.1" + } + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "requires": { + "parse-ms": "^2.1.0" + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "puppeteer": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-8.0.0.tgz", + "integrity": "sha512-D0RzSWlepeWkxPPdK3xhTcefj8rjah1791GE82Pdjsri49sy11ci/JQsAO8K2NRukqvwEtcI+ImP5F4ZiMvtIQ==", + "requires": { + "debug": "^4.1.0", + "devtools-protocol": "0.0.854822", + "extract-zip": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", + "pkg-dir": "^4.2.0", + "progress": "^2.0.1", + "proxy-from-env": "^1.1.0", + "rimraf": "^3.0.2", + "tar-fs": "^2.0.0", + "unbzip2-stream": "^1.3.3", + "ws": "^7.2.3" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "qs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", + "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "raw-body": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.13", + "unpipe": "1.0.0" + } + }, + "react-dev-utils": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-4.2.3.tgz", + "integrity": "sha512-uvmkwl5uMexCmC0GUv1XGQP0YjfYePJufGg4YYiukhqk2vN1tQxwWJIBERqhOmSi80cppZg8mZnPP/kOMf1sUQ==", + "requires": { + "address": "1.0.3", + "babel-code-frame": "6.26.0", + "chalk": "1.1.3", + "cross-spawn": "5.1.0", + "detect-port-alt": "1.1.3", + "escape-string-regexp": "1.0.5", + "filesize": "3.5.11", + "global-modules": "1.0.0", + "gzip-size": "3.0.0", + "inquirer": "3.3.0", + "is-root": "1.0.0", + "opn": "5.1.0", + "react-error-overlay": "^3.0.0", + "recursive-readdir": "2.2.1", + "shell-quote": "^1.8.3", + "sockjs-client": "1.1.4", + "strip-ansi": "3.0.1", + "text-table": "0.2.0" + } + }, + "react-error-overlay": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-3.0.0.tgz", + "integrity": "sha512-XzgvowFrwDo6TWcpJ/WTiarb9UI6lhA4PMzS7n1joK3sHfBBBOQHUc0U4u57D6DWO9vHv6lVSWx2Q/Ymfyv4hw==" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "recursive-readdir": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.1.tgz", + "integrity": "sha1-kO8jHQd4xc4JPJpI105cVCLROpk=", + "requires": { + "minimatch": "3.0.3" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + } + } + }, + "request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "requires": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "requires": { + "lodash": "^4.17.19" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "requires": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "^2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "requires": { + "rx-lite": "*" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "requires": { + "debug": "^2.6.6", + "eventsource": "0.1.6", + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + } + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "optional": true + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + } + } + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "requires": {} + }, + "xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "ylru": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + } + } +} diff --git a/tests/lib/screenshot-testing/package.json b/tests/lib/screenshot-testing/package.json new file mode 100644 index 0000000000000000000000000000000000000000..fb4bc3d1cc9f691631b8f5a845395824448ed14b --- /dev/null +++ b/tests/lib/screenshot-testing/package.json @@ -0,0 +1,24 @@ +{ + "name": "matomo-screenshot-testing", + "version": "1.0.0", + "main": "index.js", + "author": "Matomo Team", + "license": "GPL-3.0+", + "dependencies": { + "chai": "^4.3.4", + "chai-files": "^1.4.0", + "chai-image-assert": "^1.2.0", + "fs-extra": "^7.0.1", + "mocha": "^8.2.0", + "puppeteer": "^8.0.0", + "request": "^2.88.2", + "request-promise": "^4.2.6", + "url-parse": "^1.5.3", + "@testomatio/reporter": "^1.0.9", + "mocha-multi-reporters": "^1.5.1" + }, + "overrides": { + "shell-quote": "^1.8.3", + "axios": "^1.12.2" + } +} diff --git a/tests/lib/screenshot-testing/run-tests.js b/tests/lib/screenshot-testing/run-tests.js new file mode 100644 index 0000000000000000000000000000000000000000..03ad2332d0999a42acd98a95937d9873320653a9 --- /dev/null +++ b/tests/lib/screenshot-testing/run-tests.js @@ -0,0 +1,64 @@ +/*! + * Matomo - free/libre analytics platform + * + * UI test runner script + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0; // ignore ssl errors + +const path = require('path'); +const puppeteer = require('puppeteer'); +const setUpGlobals = require('./support/globals.js'); +const Mocha = require('mocha'); +const chai = require('chai'); +const chaiFiles = require('chai-files'); +require('./support/fs-extras'); + +main(); + +async function main() { + // require config and local config overrides + let config = require("./../../UI/config.dist"); + try { + config = Object.assign({}, config, require("./../../UI/config")); + } catch (e) { + // ignore + } + + const browser = await puppeteer.launch(config.browserConfig); + const originalUserAgent = await browser.userAgent(); + + // assume the URI points to a folder and make sure Piwik won't cut off the last path segment + if (config.phpServer.REQUEST_URI.slice(-1) !== '/') { + config.phpServer.REQUEST_URI += '/'; + } + + setUpGlobals(config, browser, originalUserAgent); + + mocha = new Mocha({ + ui: 'bdd', + bail: false, + reporter: config.reporter, + reporterOptions: config.reporterOptions, + color: 1, + timeout: options.timeout || 240000, + }); + + const imageAssert = require('./support/chai-extras'); + chai.use(imageAssert()); + chai.use(chaiFiles); + + // run script + if (options['help']) { + app.printHelpAndExit(); + } + + // the mocha-super-suite imports the individual specs. kept for expedience when converting to chromium + // headless. + mocha.addFile(path.join(__dirname, 'mocha-super-suite.js')); + + app.runTests(mocha) +} diff --git a/tests/lib/screenshot-testing/support/app.js b/tests/lib/screenshot-testing/support/app.js new file mode 100644 index 0000000000000000000000000000000000000000..83faec8483804b0badc5978e994736b9f1d59aec --- /dev/null +++ b/tests/lib/screenshot-testing/support/app.js @@ -0,0 +1,339 @@ +/*! + * Matomo - free/libre analytics platform + * + * UI screenshot test runner Application class + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +var fs = require('fs'), + fsExtra = require('fs-extra'), + path = require('./path'); + +var walk = function (dir, pattern, result) { + result = result || []; + + if (!fs.isDirectory(dir)) { + return result; + } + + fs.readdirSync(dir).forEach(function (item) { + if (item === '.' + || item === '..' + ) { + return; + } + + var wholePath = path.join(dir, item); + + if (fs.isDirectory(wholePath)) { + walk(wholePath, pattern, result); + } else if (wholePath.match(pattern)) { + result.push(wholePath); + } + }); + + return result; +}; + +var isCorePlugin = function (pathToPlugin) { + // if the plugin is a .git checkout, it's not part of core + var gitDir = path.join(pathToPlugin, '.git'); + return !fs.existsSync(gitDir); +}; + +var hasSpecialNeeds = function (pathToPlugin) { + // skip plugins that have special needs in core build + var actionFile = path.join(pathToPlugin, '.github/workflows/matomo-tests.yml'); + if (!fs.existsSync(actionFile)) { + return false; + } + var action = fs.readFileSync(actionFile); + return /setup-script:/.test(action); +}; + +var Application = function () { + this.runner = null; + + this.diffviewerDir = path.join(PIWIK_INCLUDE_PATH, 'tests/UI', config.screenshotDiffDir); +}; + +Application.prototype.printHelpAndExit = function () { + console.log("Usage: node run-tests.js [options] [test-files]"); + console.log(); + console.log("Available options:"); + console.log(" --help: Prints this message."); + console.log(" --persist-fixture-data: Persists test data in a database and does not execute tear down."); + console.log(" After the first run, the database setup will not be called, which"); + console.log(" Makes running tests faster."); + console.log(" --plugin=name: Runs all tests for a plugin."); + console.log(" --keep-symlinks: If supplied, the recursive symlinks created in tests/PHPUnit/proxy"); + console.log(" aren't deleted after tests are run. Specify this option if you'd like"); + console.log(" to view pages puppeteer captures in a browser."); + console.log(" --print-logs: Prints webpage logs even if tests succeed."); + console.log(" --store-in-ui-tests-repo: Stores processed screenshots within the UI tests repository even if"); + console.log(" the tests are in another plugin. For use with CI build."); + console.log(" --assume-artifacts: Assume the diffviewer and processed screenshots will be stored on the."); + console.log(" builds artifacts server. For use with CI build."); + console.log(" --screenshot-repo: Specifies the GitHub repository that contains the expected screenshots"); + console.log(" to link to in the diffviewer. For use with CI build."); + console.log(" --core: Only execute UI tests that are for Matomo core or Matomo core plugins."); + console.log(" --core-tests-only: Only execute UI tests from tests/UI and skip plugin UI specs."); + console.log(" --num-test-groups: Divide all test execution into this many overall groups. Use --test-group to pick which group to run in this execution."); + console.log(" --test-group: The test group to run."); + + process.exit(0); +}; + +Application.prototype.init = function () { + var app = this; + + // overwrite describe function so we can inject the base directory of a suite + var oldDescribe = describe; + describe = function () { + var suite = oldDescribe.apply(null, arguments); + suite.baseDirectory = app.currentModulePath.match(/\/plugins\//) ? path.dirname(app.currentModulePath) : uiTestsDir; + if (options['assume-artifacts']) { + suite.diffDir = path.join(PIWIK_INCLUDE_PATH, 'tests/UI', config.screenshotDiffDir); + } else { + suite.diffDir = path.join(suite.baseDirectory, config.screenshotDiffDir); + } + + // remove existing diffs + if (!fs.existsSync(suite.diffDir)) { + fs.mkdirSync(suite.diffDir); + } + + fs.readdirSync(suite.diffDir).forEach(function (item) { + var file = path.join(suite.diffDir, item); + if (fs.existsSync(file) + && item.slice(-4) === '.png' + ) { + fs.unlinkSync(file); + } + }); + + return suite; + }; +}; + +Application.prototype.loadTestModules = function () { + var self = this, + pluginDir = path.join(PIWIK_INCLUDE_PATH, 'plugins'); + + // find all installed plugins + var plugins = fs.readdirSync(pluginDir).map(function (item) { + return path.join(pluginDir, item); + }).filter(function (path) { + return fs.isDirectory(path) && !path.match(/\/\.*$/); + }); + + // load all UI tests we can find + var modulePaths = walk(uiTestsDir, /_spec\.js$/); + + if (options.core && !options.plugin) { + plugins = plugins.filter(function (path) { + return isCorePlugin(path); + }); + } + + if (!options.plugin) { + plugins = plugins.filter(function (path) { + return !hasSpecialNeeds(path); + }); + } + + if (!options['core-tests-only']) { + plugins.forEach(function (pluginPath) { + walk(path.join(pluginPath, 'Test'), /_spec\.js$/, modulePaths); + walk(path.join(pluginPath, 'tests'), /_spec\.js$/, modulePaths); + }); + } + + modulePaths.forEach(function (path) { + self.currentModulePath = path; + + require(path); + }); + + // filter suites to run + if (options.tests.length) { + mocha.suite.suites = mocha.suite.suites.filter(function (suite) { + return options.tests.indexOf(suite.title) != -1; + }); + } + + if (options.plugin) { + mocha.suite.suites = mocha.suite.suites.filter(function (suite) { + return suite.baseDirectory.match(new RegExp("\/plugins\/" + options.plugin + "\/")); + }); + } + + var specificTestsRequested = options.plugin || options.tests.length; + + if (options['num-test-groups'] && options['test-group'] && !specificTestsRequested) { + // run only N% of the test suites. + // we apply this option only if not a specific plugin or test suite was requested. + // Only there for CI to split tests into multiple jobs. + + var numberOfGroupsToSplitTestsInto = parseInt(options['num-test-groups']); + var testGroupToRun = parseInt(options['test-group']); + + mocha.suite.suites = mocha.suite.suites.filter(function (suite, index) { + return index % numberOfGroupsToSplitTestsInto === testGroupToRun; + }); + } + + if (!mocha.suite.suites.length) { + console.log("No tests are executing... are you running tests for a plugin? Make sure to use the" + + " --plugin=MyPlugin option."); + } + + // configure suites (auto-add fixture setup/teardown) + mocha.suite.suites.forEach(function (suite) { + var fixture = typeof suite.fixture === 'undefined' ? "Piwik\\Tests\\Fixtures\\UITestFixture" : suite.fixture; + + suite.beforeAll(async function () { + await page.createPage(); + }); + + suite.beforeAll(function (done) { + this.timeout(0); // no timeout for fixture setup (this requires normal anonymous function, not fat arrow function) + + var oldOptions = JSON.parse(JSON.stringify(options)); + if (suite.optionsOverride) { + for (var key in suite.optionsOverride) { + options[key] = suite.optionsOverride[key]; + } + } + + testEnvironment.setupFixture(fixture, (error, result) => { + options = oldOptions; + + done(error, result); + }); + }); + + // move in front of other beforeAll hooks (called twice as we're adding two beforeAll handlers) + suite._beforeAll.unshift(suite._beforeAll.pop()); + suite._beforeAll.unshift(suite._beforeAll.pop()); + + suite.afterAll(function (done) { + this.timeout(0); // no timeout for fixture teardown (this requires normal anonymous function, not fat arrow function) + + var oldOptions = JSON.parse(JSON.stringify(options)); + if (suite.optionsOverride) { + for (var key in suite.optionsOverride) { + options[key] = suite.optionsOverride[key]; + } + } + + testEnvironment.teardownFixture(fixture, (error, result) => { + options = oldOptions; + + done(error, result); + }); + }); + + // if a test fails, print failure info and for non-comparison fails, save failure screenshot + suite.afterEach(async function() { + const test = this.currentTest; + const err = this.currentTest && this.currentTest.err; + if (!err) { + return; + } + + var indent = " "; + + var message = err && err.message ? err.message : err; + if (message.indexOf(indent) !== 0) { + message = indent + message.replace(/\n/g, "\n" + indent); + } + + const url = await page.getWholeCurrentUrl(); + message += "\n" + indent + indent + "Url to reproduce: " + url + "\n"; + + if (message.indexOf('Generated screenshot') === -1) { + + var processedPath = path.join(PIWIK_INCLUDE_PATH, 'tests/UI/processed-ui-screenshots'); + + if (options.plugin) { + processedPath = path.join(PIWIK_INCLUDE_PATH, 'plugins', options.plugin, 'tests/UI/processed-ui-screenshots'); + } + + if (!fs.existsSync(processedPath)) { + fsExtra.mkdirsSync(processedPath); + } + const failurePath = path.join(processedPath, test.title.replace(/(\s|[^a-zA-Z0-9_])+/g, '_') + '_failure.png'); + + message += indent + indent + "Screenshot of failure: " + failurePath + "\n"; + + const screenshot = await page.screenshot({ fullPage: true }); + fs.writeFileSync(failurePath, screenshot); + } else { + delete this.currentTest.err.stack; + } + + var renderingLogs = page.getPageLogsString(indent); + if (renderingLogs) { + message += renderingLogs + "\n"; + } else { + message += indent + indent + "No captured console logs.\n"; + } + + console.log(message); // so it prints out as the test fails (for builds that run too long) + this.currentTest.err.message = message.replace(/\n/g, "\n "); + }); + }); +}; + +Application.prototype.runTests = function (mocha) { + // make sure all necessary directories exist (symlinks handled by PHP since puppeteer can't create any) + var dirsToCreate = [ + path.join(PIWIK_INCLUDE_PATH, 'tmp/sessions') + ]; + + dirsToCreate.forEach(function (path) { + if (!fs.isDirectory(path)) { + fsExtra.mkdirsSync(path); + } + }); + + this.doRunTests(mocha); +}; + +Application.prototype.doRunTests = function (mocha) { + testEnvironment.reload(); + + // run tests + this.runner = mocha.run(function (failures) { + // remove symlinks + if (!options['keep-symlinks']) { + var symlinks = ['libs', 'plugins', 'tests', 'misc', 'node_modules', 'piwik.js', 'matomo.js']; + + symlinks.forEach(function (item) { + var file = path.join(uiTestsDir, '..', 'PHPUnit', 'proxy', item); + if (fs.existsSync(file)) { + fs.unlinkSync(file); + } + }); + } + }); + + this.runner.on('test', function () { + page._reset(); + }); + + this.runner.on('end', function() { + // we are terminating but we are waiting for all other events to finish + setTimeout(() => process.exit(this.failures), 10000); + }) +}; + +Application.prototype.appendMissingExpected = function (screenName) { + var missingExpectedFilePath = path.join(this.diffviewerDir, 'missing-expected.list'); + fs.appendFileSync(missingExpectedFilePath, screenName + "\n"); +}; + +exports.Application = new Application(); diff --git a/tests/lib/screenshot-testing/support/chai-extras.js b/tests/lib/screenshot-testing/support/chai-extras.js new file mode 100644 index 0000000000000000000000000000000000000000..9b6bc85c2596df18595f5908cde1a8c96cdc5912 --- /dev/null +++ b/tests/lib/screenshot-testing/support/chai-extras.js @@ -0,0 +1,311 @@ +/*! + * Matomo - free/libre analytics platform + * + * chai assertion extensions + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +var fs = require('fs'), + fsExtra = require('fs-extra'), + path = require('path'), + chai = require('chai'), + chaiFiles = require('chai-files'), + AssertionError = chai.AssertionError; +const { spawnSync } = require('child_process'); + +/** + * Returns a chai plugin that adds the `.matchImage` assertion. + * + * Usage: + * + * var baseFilePath = '...'; + * chai.use(require('chai-image-assert')(baseFilePath)); + * + */ +module.exports = function makeChaiImageAssert(comparisonCommand = 'compare') { + return function chaiImageAssert(chai, utils) { + chai.Assertion.addMethod('matchImage', matchImage); + + function matchImage(params) { + if (typeof params === 'string') { + params = { imageName: params }; + } + + let { imageName, compareAgainst, comparisonThreshold, prefix } = params; + + if (!prefix) { + prefix = app.runner.suite.title; // note: runner is made global by run-tests.js + } + + imageName = prefix + '_' + imageName; + + compareAgainst = compareAgainst || imageName; + + imageName = assumeFileIsImageIfNotSpecified(imageName); + compareAgainst = assumeFileIsImageIfNotSpecified(compareAgainst); + + const expectedPath = getExpectedFilePath(compareAgainst), + processedPath = getProcessedFilePath(imageName); + + const processedScreenshotsPath = path.dirname(processedPath); + + if (!fs.isDirectory(processedScreenshotsPath)) { + fs.mkdirSync(processedScreenshotsPath); + } + + const imageBuffer = this._obj; + + chai.assert.instanceOf(imageBuffer, Buffer); + fs.writeFileSync(processedPath, imageBuffer); + + if (options['skip-screenshots']) { + console.log(` ~ [skip-screenshots] no image comparison for ${imageName}`); + performAutomaticPageChecks(); + return; + } + + try { + if (!fs.isFile(expectedPath)) { + app.appendMissingExpected(imageName); + this.assert(false, `expected file at '${expectedPath}' does not exist`); + } else { + var matches = compareImages(expectedPath, processedPath, comparisonThreshold); + + this.assert( + matches, + `expected screenshot to match ${expectedPath}`, + `expected screenshot to not match ${expectedPath}` + ); + + performAutomaticPageChecks(); + } + } catch (e) { + fail(e.message); + } + + function fail(message) { + var testInfo = { + name: imageName, + processed: fs.isFile(processedPath) ? processedPath : null, + expected: fs.isFile(expectedPath) ? expectedPath : null, + baseDirectory: app.runner.suite.baseDirectory + }; + + if (options['assume-artifacts']) { + const diffPath = getDiffPath(imageName); + + // copy to diff dir for ui tests viewer (we don't generate diffs w/ compare since it slows the tests a bit) + if (!fs.existsSync(diffPath)) { + try { + fs.linkSync(expectedPath, diffPath); + } catch (e) { + console.log(`Failed to copy ${expectedPath} to ${diffPath}`); + } + } + } + + var expectedPathStr = testInfo.expected ? path.resolve(testInfo.expected) : (expectedPath + " (not found)"), + processedPathStr = testInfo.processed ? path.resolve(testInfo.processed) : (processedPath + " (not found)"); + + var indent = " "; + var failureInfo = message + "\n"; + failureInfo += indent + "Generated screenshot: " + processedPathStr + "\n"; + failureInfo += indent + "Expected screenshot: " + expectedPathStr + "\n"; + + var error = new AssertionError(message); + error.message = failureInfo; + + throw error; + } + } + + function compareImages(expectedPath, processedPath, comparisonThreshold) { + const command = comparisonCommand, + args = [ + '-metric', + 'ae', + expectedPath, + processedPath, + 'null:' + ]; + + const result = spawnSync(command, args); + + chai.assert(!isCommandNotFound(result), + `the '${comparisonCommand}' command was not found, ('compare' is provided by imagemagick)`); + + const allOutput = result.stdout.toString() + result.stderr.toString(); + const pixelError = (new Number(allOutput)).valueOf(); + + chai.assert(!isNaN(pixelError), + `the '${comparisonCommand}' command output could not be parsed, should be` + + ` an integer, got: ${allOutput.replace(/\s+$/g, '')}`); + + if (pixelError === 0) { + return true; + } + + if (comparisonThreshold) { + const { imageWidth, imageHeight } = getImageDimensions(expectedPath); + const area = imageWidth * imageHeight; + const percentDifference = pixelError / area; + + chai.assert(percentDifference <= comparisonThreshold, `images differ by ${(percentDifference * 100).toFixed(2)}%, ` + + `which is greater than threshold ${(comparisonThreshold * 100).toFixed(2)}% (command output: ${allOutput.replace(/\s+$/g, '')})`); + return true; + } + + // allow a 10 pixel difference only + chai.assert(pixelError <= 10, `images differ in ${pixelError} pixels (command output: ${allOutput.replace(/\s+$/g, '')})`); + + // if pixel error passes, but status is unexpected for some reason + chai.assert(result.status === 0 || result.status === 1, `the '${comparisonCommand}' command returned a unexpected status: ${result.status}. Output was ${allOutput.replace(/\s+$/g, '')}`); + + return true; + } + + function getImageDimensions(imagePath) { + // NOTE: this method assumes 'identify' exists if 'compare' exists + + const commandArgs = [ + imagePath, + ]; + + const result = spawnSync('identify', commandArgs); + const allOutput = (result.stdout || '').toString() + (result.stderr || '').toString(); + + chai.assert(result.status === 0, `magick command failed, output: ${allOutput}`); + + const dimensions = allOutput.split(' ')[2]; + const [ imageWidth, imageHeight ] = dimensions.split('x'); + + const dimsObj = { + imageWidth: parseInt(imageWidth), + imageHeight: parseInt(imageHeight), + }; + + chai.assert(!isNaN(dimsObj.imageWidth) && !isNaN(dimsObj.imageHeight), + `Could not parse dimensions in magick output. Output: ${allOutput}`); + + return dimsObj; + } + }; +}; + +expect.file = function (filename) { + prefix = app.runner.suite.title; // note: runner is made global by run-tests.js + filename = prefix + '_' + filename; + + return chai.expect(chaiFiles.file(getExpectedFilePath(filename))); +}; + +expect.fileMatchesContent = function (filename, content) { + prefix = app.runner.suite.title; // note: runner is made global by run-tests.js + filename = prefix + '_' + filename; + + fs.writeFileSync(getProcessedFilePath(filename), content); + + const fileContent = chaiFiles.file(getExpectedFilePath(filename)); + return chai.expect(fileContent).to.equal(content); +}; + +function isCommandNotFound(result) { + return result.status === 127 + || (result.error != null && result.error.code === 'ENOENT'); +} + +function getExpectedScreenshotPath() { + if (typeof config.expectedScreenshotsDir === 'string') { + config.expectedScreenshotsDir = [config.expectedScreenshotsDir]; + } + for (var dir in config.expectedScreenshotsDir) { + var expectedScreenshotDir = path.join(app.runner.suite.baseDirectory, config.expectedScreenshotsDir[dir]); + if (fs.isDirectory(expectedScreenshotDir)) { + break; + } + } + + return expectedScreenshotDir; +} + +function getExpectedFilePath(fileName) { + fileName = assumeFileIsImageIfNotSpecified(fileName); + + return path.join(getExpectedScreenshotPath(), fileName); +} + +function getProcessedFilePath(fileName) { + var pathToUITests = options['store-in-ui-tests-repo'] ? uiTestsDir : app.runner.suite.baseDirectory; + var processedScreenshotDir = path.join(pathToUITests, config.processedScreenshotsDir); + + if (!fs.isDirectory(processedScreenshotDir)) { + fsExtra.mkdirsSync(processedScreenshotDir); + } + fileName = assumeFileIsImageIfNotSpecified(fileName); + + return path.join(processedScreenshotDir, fileName); +} + +function assumeFileIsImageIfNotSpecified(filename) { + if(!endsWith(filename, '.png') && !endsWith(filename, '.txt') ) { + return filename + '.png'; + } + return filename; +} + +function endsWith(string, needle) +{ + return needle.length === 0 || string.slice(-needle.length) === needle; +} + +// other automatically run assertions +function performAutomaticPageChecks() { + //checkForDangerousLinks(); +} + +function checkForDangerousLinks() { + var links = page.webpage.evaluate(() => { + try { + var result = []; + + var linkElements = document.getElementsByTagName('a'); + for (var i = 0; i !== linkElements.length; ++i) { + var element = linkElements.item(i); + + var href = element.getAttribute('href'); + if (/^(javascript|vbscript|data):/.test(href) && !isWhitelistedJavaScript(href)) { + result.push(element.innerText + ' - [href = ' + href + ']'); + } + } + + return JSON.stringify(result); + } catch (e) { + return e.message || e; + } + + function isWhitelistedJavaScript(href) { + var whitelistedCode = [ + '', + 'void(0)', + 'window.history.back()', + 'window.location.reload()', + ]; + + var m = /^javascript:(.*?);*$/.exec(href); + if (!m) { + return false; + } + + var code = m[1] || ''; + return whitelistedCode.indexOf(code) !== -1; + } + }); + expect(links, "found dangerous links").to.equal('{}'); +} + +function getDiffPath(testInfoName) { + var baseDir = path.join(PIWIK_INCLUDE_PATH, 'tests/UI'); + return path.resolve(path.join(baseDir, config.screenshotDiffDir, testInfoName)); +} diff --git a/tests/lib/screenshot-testing/support/fs-extras.js b/tests/lib/screenshot-testing/support/fs-extras.js new file mode 100644 index 0000000000000000000000000000000000000000..7589380ea31e53ef235a5aa2e81ad42db7cf2e62 --- /dev/null +++ b/tests/lib/screenshot-testing/support/fs-extras.js @@ -0,0 +1,60 @@ +var fs = require('fs'), + path = require('path'); + +fs.isDirectory = function (p) { + try { + return fs.statSync(p).isDirectory(); + } catch (e) { + return false; + } +}; + +fs.isFile = function (p) { + try { + return fs.statSync(p).isFile(); + } catch (e) { + return false; + } +}; + +fs.commonprefixLength = function (lists) { + var l = 0; + + var rest = lists.slice(1); + + while (l < lists[0].length) { + for (var i = 0; i != rest.length; ++i) { + var list = rest[i]; + if (l == list.length + || list[l] != lists[0][l] + ) { + return l; + } + } + + l += 1; + } + + return l; +}; + +// This and the helper function above are essentially the python version ported to JavaScript +fs.relpath = function (p, start) { + start_list = path.resolve(start).substring(1).split('/'); + path_list = path.resolve(p).substring(1).split('/'); + + l = fs.commonprefixLength([start_list, path_list]); + + rel_list = [] + for (var i = 0; i < start_list.length - l; ++i) { + rel_list.push('..'); + } + + rel_list.push.apply(rel_list, path_list.slice(l)); + + if (rel_list.length == 0) { + return '.'; + } + + return path.join.apply(null, rel_list) +}; \ No newline at end of file diff --git a/tests/lib/screenshot-testing/support/globals.js b/tests/lib/screenshot-testing/support/globals.js new file mode 100644 index 0000000000000000000000000000000000000000..e5bf8cd4974238168c4af4faaafe02ddea750468 --- /dev/null +++ b/tests/lib/screenshot-testing/support/globals.js @@ -0,0 +1,30 @@ +/*! + * Matomo - free/libre analytics platform + * + * UI tests config + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +const path = require('path'); +const chai = require('chai'); +const { PageRenderer } = require('./page-renderer'); + +module.exports = function setUpGlobals(config, browser, originalUserAgent) { + global.config = config; + + global.PIWIK_INCLUDE_PATH = path.join(__dirname, '..', '..', '..', '..'); + global.uiTestsDir = path.join(PIWIK_INCLUDE_PATH, 'tests', 'UI'); + global.testsLibDir = path.join(__dirname, "..", "..", "lib"); + global.mochaPath = path.join(testsLibDir, config.mocha, "mocha.js"); + global.chaiPath = path.join(testsLibDir, config.chai, "chai.js"); + global.resemblePath = path.join(testsLibDir, 'resemblejs', 'resemble.js'); + global.options = require('./parse-cli-args').parse(); + global.testEnvironment = require('./test-environment').TestingEnvironment; + global.app = require('./app').Application; + global.expect = chai.expect; + global.page = new PageRenderer(config.piwikUrl + path.join("tests", "PHPUnit", "proxy"), browser, originalUserAgent); + // The following variables need to be in sync with Fixture::ADMIN_USER_LOGIN and Fixture::ADMIN_USER_PASSWORD + global.superUserLogin = 'superUserLogin'; + global.superUserPassword = 'pas3!"§$%&/()=?\'ㄨ<|-_#*+~>word'; +}; diff --git a/tests/lib/screenshot-testing/support/mocha-loader.js b/tests/lib/screenshot-testing/support/mocha-loader.js new file mode 100644 index 0000000000000000000000000000000000000000..50616ee2b5718efc70cbee1de3426cd7265e6d01 --- /dev/null +++ b/tests/lib/screenshot-testing/support/mocha-loader.js @@ -0,0 +1,11 @@ +/*! + * Matomo - free/libre analytics platform + * + * phantomjs overrides & extras required to allow mocha to run w/ console output + mocha + * loading logic + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + diff --git a/tests/lib/screenshot-testing/support/page-renderer.js b/tests/lib/screenshot-testing/support/page-renderer.js new file mode 100644 index 0000000000000000000000000000000000000000..ae78416eb80a7766f557ac3114c3ce49d658b379 --- /dev/null +++ b/tests/lib/screenshot-testing/support/page-renderer.js @@ -0,0 +1,562 @@ +/*! + * Matomo - free/libre analytics platform + * + * PageRenderer class for screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +const urlModule = require('url'); +const util = require('util'); +const { EventEmitter } = require('events'); + +const parseUrl = urlModule.parse, + formatUrl = urlModule.format; + +const AJAX_IDLE_THRESHOLD = 750; // same as networkIdle event +const VERBOSE = false; +const PAGE_METHODS_TO_PROXY = [ + '$', + '$$', + '$$eval', + '$eval', + '$x', + 'bringToFront', + 'click', + 'content', + 'cookies', + 'coverage', + 'deleteCookie', + 'emulateMediaFeatures', + 'evaluate', + 'evaluateHandle', + 'evaluateOnNewDocument', + 'exposeFunction', + 'focus', + 'frames', + 'goBack', + 'goForward', + 'goto', + 'hover', + 'mainFrame', + 'metrics', + 'on', + 'once', + 'queryObjects', + 'reload', + 'screenshot', + 'select', + 'setBypassCSP', + 'setCacheEnabled', + 'setContent', + 'setExtraHTTPHeaders', + 'setUserAgent', + 'setCookie', + 'tap', + 'target', + 'title', + 'url', + 'viewport', + 'waitForFunction', + 'waitForNavigation', + 'waitForSelector', + 'waitForTimeout', + 'waitForXPath', + 'screenshotNoResize', +]; + +const PAGE_PROPERTIES_TO_PROXY = [ + 'mouse', + 'keyboard', + 'touchscreen', +]; + +const AUTO_WAIT_METHODS = {// TODO: remove this to keep it consistent? + 'goBack': true, + 'goForward': true, + 'goto': true, + 'reload': true, +}; + +var PageRenderer = function (baseUrl, browser, originalUserAgent) { + + this.browser = browser; + this.originalUserAgent = originalUserAgent; + + this.selectorMarkerClass = 0; + this.pageLogs = []; + this.baseUrl = baseUrl; + this.lifeCycleEventEmitter = new EventEmitter(); + this.activeRequestCount = 0; + + if (this.baseUrl.substring(-1) !== '/') { + this.baseUrl = this.baseUrl + '/'; + } +}; + +PageRenderer.prototype._reset = function () { + this.pageLogs = []; + this.webpage.setViewport({ + width: 1350, + height: 768, + }); +}; + +PageRenderer.prototype.createPage = async function () { + if (this.browserContext) { + await this.browserContext.close(); + } + this.browserContext = await this.browser.createIncognitoBrowserContext(); + this.webpage = await this.browserContext.newPage(); + + if (this.activeRequestCount > 0) { + console.log('! activeRequestCount is ' + this.activeRequestCount + '. Resetting it as new browserContext has started.'); + // unset active request count, to ensure unresolved requests from previous suites don't cause any issues + this.activeRequestCount = 0; + } + + // Present the test browser as a regular Chrome rather than headless Chrome. Puppeteer reports a + // "HeadlessChrome" user agent and Sec-CH-UA brand, which the TrackingSpamPrevention plugin blocks + // by default (block_headless). Without this, any tracking that originates from the test browser - + // the JS tracker, and server-side requests that inherit the browser user agent - is treated as a + // headless bot and excluded, so those tests record no visits/data. + const defaultUserAgent = await this.browser.userAgent(); + const chromeUserAgent = defaultUserAgent.replace('HeadlessChrome', 'Chrome'); + await this.webpage.setUserAgent(chromeUserAgent); + + PAGE_PROPERTIES_TO_PROXY.forEach((propertyName) => { + Object.defineProperty(this, propertyName, { + value: this.webpage[propertyName], + writable: true, + }); + }); + + await this.webpage._client.send('Animation.setPlaybackRate', { playbackRate: 50 }); // make animations run 50 times faster, so we don't have to wait as much + await this.webpage.setViewport({ + width: 1350, + height: 768, + }); + await this.webpage.mouse.move(0, 0); + await this.webpage.setExtraHTTPHeaders({ + 'Accept-Language': 'en-US' + }); + this._setupWebpageEvents(); +}; + +/** + * For BC only. Puppeteer drop support for waitFor function in Version 10 + * @param selectorOrTimeoutOrFunction + */ +PageRenderer.prototype.waitFor = function (selectorOrTimeoutOrFunction) { + console.log('Using page.waitFor is deprecated, please use one of this instead: waitForSelector, waitForFunction, waitForTimeout'); + if (typeof selectorOrTimeoutOrFunction === 'function') { + return this.webpage.waitForFunction(selectorOrTimeoutOrFunction) + } else if (typeof selectorOrTimeoutOrFunction === 'number') { + return this.webpage.waitForTimeout(selectorOrTimeoutOrFunction) + } else if (typeof selectorOrTimeoutOrFunction === 'string') { + return this.webpage.waitForSelector(selectorOrTimeoutOrFunction) + } +} + +PageRenderer.prototype.type = async function (...args) { + await this.webpage.type(...args); + await this.waitForTimeout(50); // puppeteer types faster than vue can update the model state +}; + +PageRenderer.prototype.isVisible = function (selector) { + return this.webpage.evaluate(() => { + return jQuery(selector).is(':visible'); + }); +}; + +PageRenderer.prototype.jQuery = async function (selector, options = {}) { + const selectorMarkerClass = '__selector_marker_' + this.selectorMarkerClass; + + ++this.selectorMarkerClass; + + await this.waitForFunction(() => !! window.jQuery); + + if (options.waitFor) { + try { + await this.waitForFunction((selector) => { + return !!jQuery(selector).length; + }, {}, selector); + } catch (err) { + err.message += " (selector = " + selector + ")"; + throw err; + } + } + + await this.webpage.evaluate((selectorMarkerClass, s) => { + jQuery(s).addClass(selectorMarkerClass); + }, selectorMarkerClass, selector); + + return await this.webpage.$('.' + selectorMarkerClass); +}; + +PageRenderer.prototype.resizeViewportToFullPage = async function () { + await this.webpage.waitForFunction(() => !! document.documentElement); + + const dims = await this.webpage.evaluate(() => JSON.stringify({ + width: document.documentElement.scrollWidth, + height: document.documentElement.scrollHeight, + })); + + await this.webpage.setViewport(JSON.parse(dims)); +}; + +PageRenderer.prototype.screenshotSelector = async function (selector, shouldResizeViewport = true) { + await this.waitForFunction(() => !! window.$, { timeout: 60000 }); + + if (shouldResizeViewport) { + await this.resizeViewportToFullPage(); + } + + const result = await this.webpage.evaluate(function (selector) { + window.jQuery('html').addClass('uiTest'); + + var docWidth = window.jQuery(document).width(), + docHeight = window.jQuery(document).height(); + + function isInvalidBoundingRect (rect) { + return !rect.width || !rect.height + || (rect.left < 0 && rect.right < 0) + || (rect.left > docWidth && rect.right > docWidth) + || (rect.top < 0 && rect.bottom < 0) + || (rect.top > docHeight && rect.bottom > docHeight); + } + + var element = window.jQuery(selector); + if (element && element.length) { + var clipRect = {bottom: null, height: null, left: null, right: null, top: null, width: null}; + + element.each(function (index, node) { + if (!jQuery(node).is(':visible')) { + return; + } + + var rect = jQuery(node).offset(); + rect.width = jQuery(node).outerWidth(); + rect.height = jQuery(node).outerHeight(); + rect.right = rect.left + rect.width; + rect.bottom = rect.top + rect.height; + + if (isInvalidBoundingRect(rect)) { + // element is not visible + return; + } + + if (null === clipRect.left || rect.left < clipRect.left) { + clipRect.left = rect.left; + } + if (null === clipRect.top || rect.top < clipRect.top) { + clipRect.top = rect.top; + } + if (null === clipRect.right || rect.right > clipRect.right) { + clipRect.right = rect.right; + } + if (null === clipRect.bottom || rect.bottom > clipRect.bottom) { + clipRect.bottom = rect.bottom; + } + }); + + clipRect.width = clipRect.right - clipRect.left; + clipRect.height = clipRect.bottom - clipRect.top; + + return clipRect; + } + }, selector); + + if (!result) { + console.log("Cannot find element " + selector); + return; + } + + if (result && result.__isCallError) { + throw new Error("Error while detecting element clipRect " + selector + ": " + result.message); + } + + if (null === result.left + || null === result.top + || null === result.bottom + || null === result.right + ) { + console.log("Element(s) " + selector + " found but none is visible"); + return; + } + + return await this.screenshotNoResize({ + clip: { + x: result.left, + y: result.top, + width: result.width, + height: result.height, + }, + }); +}; + +PAGE_METHODS_TO_PROXY.forEach(function (methodName) { + PageRenderer.prototype[methodName] = function (...args) { + if (methodName === 'goto') { + let url = args[0]; + if (url.indexOf("://") === -1 && url !== 'about:blank') { + url = this.baseUrl + url; + } + args[0] = url; + } + + if (methodName === 'goto' || methodName === 'reload') { + if (typeof args[1] === 'object') { + args[1].timeout = 0; + } else { + args[1] = { + timeout: 0, + }; + } + } + + let result; + if (methodName === 'screenshot') { + // change viewport to entire page before screenshot + result = this.resizeViewportToFullPage() + .then(() => { + return this.webpage[methodName](...args); + }); + } else if (methodName === 'screenshotNoResize') { + // we do not need to resize the viewport since we did it on top anyway + return this.webpage.screenshot(...args); + } else { + result = this.webpage[methodName](...args); + } + + if (result && result.then && AUTO_WAIT_METHODS[methodName]) { + result = result.then((value) => { + return this.waitForNetworkIdle().then(() => value); + }); + } + + return result; + }; +}); + +PageRenderer.prototype.waitForNetworkIdle = async function () { + await new Promise(resolve => setTimeout(resolve, AJAX_IDLE_THRESHOLD)); + + while (this.activeRequestCount > 0) { + await new Promise(resolve => setTimeout(resolve, AJAX_IDLE_THRESHOLD)); + } + + await this.waitForLazyImages(); + + // wait for any queued vue logic + await this.webpage.evaluate(function () { + if (window.Vue) { + return window.Vue.nextTick(function () { + // wait + }); + } + }); + + // if the visitor map is shown trigger a window resize, to ensure map always has the same height/width + await this.webpage.evaluate(function () { + if (window.jQuery && window.jQuery('.UserCountryMap_map').length) { + window.jQuery(window).trigger('resize'); + } + }); +}; + +PageRenderer.prototype.waitForLazyImages = async function () { + // remove loading attribute from images + const hasImages = await this.webpage.evaluate(function(){ + if (!window.jQuery) { + return false; // skip if no jquery is available + } + + var $ = window.jQuery; + + var images = $('img[loading]'); + if (images.length > 0) { + images.removeAttr('loading'); + return true; + } + return false; + }); + + if (hasImages) { + await this.webpage.waitForTimeout(200); // wait for the browser to request the images + await this.waitForNetworkIdle(); // wait till all requests are finished + } +}; + +PageRenderer.prototype.downloadUrl = async function (url) { + return await this.webpage.evaluate(function (url) { + var $ = window.jQuery; + + return $.ajax({ + type: "GET", + url: url, + async: false + }).responseText; + }, url); +}; + +PageRenderer.prototype._isUrlThatWeCareAbout = function (url) { + return -1 === url.indexOf('proxy/misc/user/favicon.png?r=') && -1 === url.indexOf('proxy/misc/user/logo.png?r='); +}; + +PageRenderer.prototype._logMessage = function (message) { + this.pageLogs.push(message); +}; + +PageRenderer.prototype.clearCookies = async function () { + // see https://github.com/GoogleChrome/puppeteer/issues/1632#issuecomment-353086292 + await this.webpage._client.send('Network.clearBrowserCookies'); + await this.webpage.waitForTimeout(250); +}; + +PageRenderer.prototype._setupWebpageEvents = function () { + this.webpage.on('error', (message, trace) => { + var msgStack = ['Webpage error: ' + message]; + if (trace && trace.length) { + msgStack.push('trace:'); + trace.forEach(function(t) { + msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function + '")' : '')); + }); + } + + this._logMessage(msgStack.join('\n')); + }); + + this.webpage.on('load', () => { + this.webpage.evaluate(function () { + var $ = window.jQuery; + if ($) { + jQuery('html').addClass('uiTest'); + $.fx.off = true; + } + }); + + this.webpage.addStyleTag({content: '* { caret-color: transparent !important; -webkit-transition: none !important; transition: none !important; -webkit-animation: none !important; animation: none !important; }'}); + }); + + this.webpage._client.on('Page.lifecycleEvent', (event) => { + this.lifeCycleEventEmitter.emit('lifecycleEvent', event); + }); + + const parsedPiwikUrl = parseUrl(config.piwikUrl); + + var piwikHost = parsedPiwikUrl.hostname, + piwikPort = parsedPiwikUrl.port; + + this.webpage.setRequestInterception(true); + this.webpage.on('request', (request) => { + ++this.activeRequestCount; + + var url = request.url(); + + // replaces the requested URL to the piwik URL w/ a port, if it does not have one. This allows us to run UI + // tests when Piwik is on a port, w/o having to have different UI screenshots. (This is one half of the + // solution, the other half is in config/environment/ui-test.php, where we remove all ports from Piwik URLs.) + if (piwikPort && piwikPort !== 0) { + const parsedRequestUrl = parseUrl(url); + + if (parsedRequestUrl.hostname === piwikHost && (!parsedRequestUrl.port || parseInt(parsedRequestUrl.port) === 0 || parseInt(parsedRequestUrl.port) === 80)) { + + parsedRequestUrl.port = piwikPort; + parsedRequestUrl.host = piwikHost + ':' + piwikPort; + + url = formatUrl(parsedRequestUrl); + + request.continue({ + url, + }); + + + if (VERBOSE) { + this._logMessage('Requesting resource (#' + request.id + 'URL:' + url + ')'); + } + + return; + } + } + + request.continue(); + + if (VERBOSE) { + this._logMessage('Requesting resource (#' + request.id + 'URL:' + url + ')'); + } + }); + + // TODO: self.aborted? + this.webpage.on('requestfailed', async (request) => { + --this.activeRequestCount; + + const failure = request.failure(); + const response = request.response(); + const errorMessage = failure ? failure.errorText : 'Unknown error'; + + if (!VERBOSE) { + this._logMessage('Unable to load resource (URL:' + request.url() + '): ' + errorMessage); + } + }); + + this.webpage.on('requestfinished', async (request) => { + --this.activeRequestCount; + + const response = request.response(); + + if (VERBOSE || (response.status() >= 400 && this._isUrlThatWeCareAbout(request.url()))) { + let bodyLength = 0; + let bodyContent = ''; + try { + const body = await response.buffer(); + bodyLength = body.length; + bodyContent = body.toString(); + } catch (e) { + } + const message = 'Response (size "' + bodyLength + '", status "' + response.status() + '"): ' + request.url() + "\n" + bodyContent.substring(0, 2000); + this._logMessage(message); + } + }); + + this.webpage.on('console', async (consoleMessage) => { + const args = await Promise.all(consoleMessage.args().map(arg => arg.executionContext().evaluate(arg => { + if (arg instanceof Error) { + return arg.stack || arg.message; + } + return arg; + }, arg))).catch((e) => { + console.log(`Could not print message: ${e.message}`); + console.log(consoleMessage.text()); + }); + const message = (args || []).join(' '); + this._logMessage(`Log: ${message}`); + }); + + this.webpage.on('dialog', (dialog) => { + this._logMessage(`Alert: ${dialog.message()}`); + }); +}; + +PageRenderer.prototype.getPageLogsString = function(indent) { + var result = ""; + if (this.pageLogs.length) { + result = "\n\n" + indent + "Rendering logs:\n"; + this.pageLogs.slice(0, 5).forEach(function (message) { + result += indent + " " + message.replace(/\n/g, "\n" + indent + " ") + "\n"; + }); + result = result.substring(0, result.length - 1); + } + return result; +}; + +PageRenderer.prototype.getWholeCurrentUrl = function () { + return this.webpage.evaluate(() => window.location.href); +}; + +PageRenderer.prototype.allowClipboard = async function () { + await this.browserContext.overridePermissions(await this.getWholeCurrentUrl(), ['clipboard-read', 'clipboard-write']); +}; + +exports.PageRenderer = PageRenderer; diff --git a/tests/lib/screenshot-testing/support/parse-cli-args.js b/tests/lib/screenshot-testing/support/parse-cli-args.js new file mode 100644 index 0000000000000000000000000000000000000000..b38bae401b91f4a97d329b3c9200833ea3409ac4 --- /dev/null +++ b/tests/lib/screenshot-testing/support/parse-cli-args.js @@ -0,0 +1,30 @@ +/*! + * Matomo - free/libre analytics platform + * + * PageRenderer class for screenshot tests. + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +exports.parse = function () { + var result = {tests: []}; + + var args = process.argv; + for (var i = 1; i < args.length; ++i) { + var arg = args[i]; + if (arg[0] === '-') { + var matches = arg.match(/-*([^=]+)(?:=(.*))?/), + key = matches[1], + value = matches[2]; + + result[key.toString()] = value || true; + } else if (arg) { + result.tests.push(arg); + } + } + + result.tests.shift(); + + return result; +}; \ No newline at end of file diff --git a/tests/lib/screenshot-testing/support/path.js b/tests/lib/screenshot-testing/support/path.js new file mode 100644 index 0000000000000000000000000000000000000000..9d1bdaf142e48b79c87c87ba4553a379e582ae81 --- /dev/null +++ b/tests/lib/screenshot-testing/support/path.js @@ -0,0 +1,43 @@ +/*! + * Matomo - free/libre analytics platform + * + * path related functions + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +exports.join = function () { + return Array.prototype.join.call(arguments, "/").replace(/[\\\/]{2,}/g, "/"); +}; + +exports.dirname = function (path) { + var lastSeparator = path.lastIndexOf("/"); + return lastSeparator == -1 ? path : path.substring(0, lastSeparator); +}; + +exports.basename = function (path) { + var lastSeparator = path.lastIndexOf("/"); + return lastSeparator == -1 ? path : path.substring(lastSeparator + 1); +}; + +exports.resolve = function (path) { + if (path.charAt(0) != '/') { + path = exports.join(__dirname, path); + } + + var path_split = path.split('/'), + result = []; + + for (var i = 0; i != path_split.length; ++i) { + if (path_split[i] == '.') { + continue; + } else if (path_split[i] == '..') { + result.pop(); + } else { + result.push(path_split[i]); + } + } + + return exports.join.apply(exports, result); +}; \ No newline at end of file diff --git a/tests/lib/screenshot-testing/support/sprintf.js b/tests/lib/screenshot-testing/support/sprintf.js new file mode 100644 index 0000000000000000000000000000000000000000..b7b1f03f348e28289043ecadc2e057925dcedaa3 --- /dev/null +++ b/tests/lib/screenshot-testing/support/sprintf.js @@ -0,0 +1,134 @@ +/*! sprintf.js | Copyright (c) 2007-2013 Alexandru Marasteanu | 3 clause BSD license */ + +(function(ctx) { + var sprintf = function() { + if (!sprintf.cache.hasOwnProperty(arguments[0])) { + sprintf.cache[arguments[0]] = sprintf.parse(arguments[0]); + } + return sprintf.format.call(null, sprintf.cache[arguments[0]], arguments); + }; + + sprintf.format = function(parse_tree, argv) { + var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length; + for (i = 0; i < tree_length; i++) { + node_type = get_type(parse_tree[i]); + if (node_type === 'string') { + output.push(parse_tree[i]); + } + else if (node_type === 'array') { + match = parse_tree[i]; // convenience purposes only + if (match[2]) { // keyword argument + arg = argv[cursor]; + for (k = 0; k < match[2].length; k++) { + if (!arg.hasOwnProperty(match[2][k])) { + throw(sprintf('[sprintf] property "%s" does not exist', match[2][k])); + } + arg = arg[match[2][k]]; + } + } + else if (match[1]) { // positional argument (explicit) + arg = argv[match[1]]; + } + else { // positional argument (implicit) + arg = argv[cursor++]; + } + + if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) { + throw(sprintf('[sprintf] expecting number but found %s', get_type(arg))); + } + switch (match[8]) { + case 'b': arg = arg.toString(2); break; + case 'c': arg = String.fromCharCode(arg); break; + case 'd': arg = parseInt(arg, 10); break; + case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break; + case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break; + case 'o': arg = arg.toString(8); break; + case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break; + case 'u': arg = arg >>> 0; break; + case 'x': arg = arg.toString(16); break; + case 'X': arg = arg.toString(16).toUpperCase(); break; + } + arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg); + pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' '; + pad_length = match[6] - String(arg).length; + pad = match[6] ? str_repeat(pad_character, pad_length) : ''; + output.push(match[5] ? arg + pad : pad + arg); + } + } + return output.join(''); + }; + + sprintf.cache = {}; + + sprintf.parse = function(fmt) { + var _fmt = fmt, match = [], parse_tree = [], arg_names = 0; + while (_fmt) { + if ((match = /^[^\x25]+/.exec(_fmt)) !== null) { + parse_tree.push(match[0]); + } + else if ((match = /^\x25{2}/.exec(_fmt)) !== null) { + parse_tree.push('%'); + } + else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) { + if (match[2]) { + arg_names |= 1; + var field_list = [], replacement_field = match[2], field_match = []; + if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { + field_list.push(field_match[1]); + while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') { + if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { + field_list.push(field_match[1]); + } + else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) { + field_list.push(field_match[1]); + } + else { + throw('[sprintf] huh?'); + } + } + } + else { + throw('[sprintf] huh?'); + } + match[2] = field_list; + } + else { + arg_names |= 2; + } + if (arg_names === 3) { + throw('[sprintf] mixing positional and named placeholders is not (yet) supported'); + } + parse_tree.push(match); + } + else { + throw('[sprintf] huh?'); + } + _fmt = _fmt.substring(match[0].length); + } + return parse_tree; + }; + + var vsprintf = function(fmt, argv, _argv) { + _argv = argv.slice(0); + _argv.splice(0, 0, fmt); + return sprintf.apply(null, _argv); + }; + + /** + * helpers + */ + function get_type(variable) { + return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase(); + } + + function str_repeat(input, multiplier) { + for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */} + return output.join(''); + } + + /** + * export to either browser or node.js + */ + ctx.sprintf = sprintf; + ctx.vsprintf = vsprintf; +})(typeof exports != "undefined" ? exports : window); diff --git a/tests/lib/screenshot-testing/support/test-environment.js b/tests/lib/screenshot-testing/support/test-environment.js new file mode 100644 index 0000000000000000000000000000000000000000..8dc93d640bf5fd43f8167cf6b2b612ff37ce8c2d --- /dev/null +++ b/tests/lib/screenshot-testing/support/test-environment.js @@ -0,0 +1,309 @@ +/*! + * Matomo - free/libre analytics platform + * + * Test environment overriding + * + * @link https://matomo.org + * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +var fs = require('fs'), + path = require('path'), + resolveUrl = require('url').resolve, + request = require('request-promise'), + testingEnvironmentOverridePath = path.join(PIWIK_INCLUDE_PATH, '/tmp/testingPathOverride.json'); + +var DEFAULT_UI_TEST_FIXTURE_NAME = "Piwik\\Tests\\Fixtures\\UITestFixture"; + +var TestingEnvironment = function () { + this.reload(); +}; + +TestingEnvironment.prototype.reload = function () { + for (var key in this) { + delete this[key]; + } + + this['useOverrideCss'] = true; + this['useOverrideJs'] = true; + this['loadRealTranslations'] = true; // UI tests should test w/ real translations, not translation keys + this['testUseMockAuth'] = true; + this['configOverride'] = {}; + this['optionsOverride'] = {}; + this['environmentVariables'] = {}; + + if (fs.existsSync(testingEnvironmentOverridePath)) { + var data = JSON.parse(fs.readFileSync(testingEnvironmentOverridePath)); + for (var key in data) { + this[key] = data[key]; + } + } +}; + +/** + * Overrides a config entry. + * + * You can use this method either to set one specific config value `overrideConfig(group, name, value)` + * or you can set a whole group of values `overrideConfig(group, valueObject)`. + */ +TestingEnvironment.prototype.overrideConfig = function (group, name, value) { + if (!name) { + return; + } + + if (!this['configOverride']) { + this['configOverride'] = {}; + } + + if ((typeof value) === 'undefined') { + this['configOverride'][group] = name; + return; + } + + if (!this['configOverride'][group]) { + this['configOverride'][group] = {}; + } + + this['configOverride'][group][name] = value; +}; + +TestingEnvironment.prototype.save = function () { + var copy = {}; + for (var key in this) { + copy[key] = this[key]; + } + + fs.writeFileSync(testingEnvironmentOverridePath, JSON.stringify(copy)); +}; + +TestingEnvironment.prototype.callApi = function (method, params) { + params.module = "API"; + params.method = method; + params.format = 'json'; + + return this._call(params); +}; + +TestingEnvironment.prototype.callController = function (method, params) { + var parts = method.split('.'); + + params.module = parts[0]; + params.action = parts[1]; + params.idSite = params.idSite || 1; + + return this._call(params); +}; + +TestingEnvironment.prototype._call = async function (params) { + let queryString = Object.keys(params).reduce(function (obj, name) { + if (params[name] instanceof Array) { + params[name].forEach(function(value, index) { + obj[name+'['+index+']'] = value; + }); + return obj; + } + obj[name] = params[name]; + return obj; + }, {}); + let response = await request({ + uri: resolveUrl(config.piwikUrl, '/tests/PHPUnit/proxy/index.php'), + qs: queryString, + }); + + if (response === '') { + return ''; + } + + response = response.replace(/\s*/g, ""); + + try { + response = JSON.parse(response); + } catch (e) { + throw new Error("Unable to parse JSON response: " + response + " for query " + JSON.stringify(queryString)); + } + + if (response.result === "error") { + throw new Error("API returned error: " + response.message + " for query " + JSON.stringify(queryString)); + } + + return response; +}; + +TestingEnvironment.prototype.executeConsoleCommand = function (command, args, callback) { + var consoleFile = path.join(PIWIK_INCLUDE_PATH, 'console'), + commandArgs = [consoleFile, command].concat(args), + child = require('child_process').spawn(config.php, commandArgs); + + var firstLine = true; + child.stdout.on("data", function (data) { + if (firstLine) { + data = " " + data; + firstLine = false; + } + + process.stdout.write(data.toString().replace(/\n/g, "\n ")); + }); + + child.stderr.on("data", function (data) { + if (firstLine) { + data = " " + data; + firstLine = false; + } + + process.stderr.write(data); + }); + + child.on("exit", callback); +}; + +TestingEnvironment.prototype.addPluginOnCmdLineToTestEnv = function () { + if (options.plugin) { + this.pluginsToLoad = [options.plugin]; + this.save(); + } +}; + +var droppedOnce = false; +TestingEnvironment.prototype.setupFixture = function (fixtureClass, done) { + console.log(" Setting up fixture " + fixtureClass + "..."); + + this.deleteAndSave(); + + var args = [ + fixtureClass || DEFAULT_UI_TEST_FIXTURE_NAME, + '--set-symlinks', + '--server-global=' + JSON.stringify(config.phpServer), + '-vvv', + ]; + + if (options['persist-fixture-data']) { + args.push('--persist-fixture-data'); + } + + if (options['drop'] + && !droppedOnce + ) { + args.push('--drop'); + droppedOnce = true; + } + + if (options['plugin']) { + args.push('--plugins=' + options['plugin']); + } + + if (options['matomo-domain']) { + args.push('--matomo-domain=' + options['matomo-domain']); + } + + if (options['enable-logging']) { + args.push('--enable-logging'); + } + + var self = this; + this.executeConsoleCommand('tests:setup-fixture', args, function (code) { + self.reload(); + self.addPluginOnCmdLineToTestEnv(); + + self.fixtureClass = fixtureClass; + self.save(); + + console.log(); + + if (code) { + done(new Error("Failed to setup fixture " + fixtureClass + " (error code = " + code + ")")); + } else { + done(); + } + }); +}; + +TestingEnvironment.prototype.readDbInfoFromConfig = function () { + let username = 'root'; + let password = ''; + + const pathConfigIni = path.join(PIWIK_INCLUDE_PATH, "/config/config.ini.php"); + const configFile = fs.readFileSync(pathConfigIni); + + if (configFile) { + let match; + + match = ('' + configFile).match(/password\s?=\s?"(.*)"/); + + if (match && match.length) { + password = match[1]; + } + + match = ('' + configFile).match(/username\s?=\s?"(.*)"/); + + if (match && match.length) { + username = match[1]; + } + } + + return { username, password }; +}; + +TestingEnvironment.prototype.readInstallationInfoFromLocalConfig = function () { + let inProgress = false; + let firstAccessed = null; + + const pathConfigIni = path.join(testEnvironment.configFileLocal); + const configFile = fs.readFileSync(pathConfigIni); + + if (configFile) { + let match; + + match = ('' + configFile).match(/installation_first_accessed\s?=\s?(\d+)/); + + if (match && match.length) { + firstAccessed = parseInt(match[1]); + } + + match = ('' + configFile).match(/installation_in_progress\s?=\s?(\d+)/); + + if (match && match.length) { + inProgress = !!match[1]; + } + } + + return { firstAccessed, inProgress }; +}; + +TestingEnvironment.prototype.appendToLocalConfig = function (content) { + const pathConfigIni = path.join(testEnvironment.configFileLocal); + + fs.appendFileSync(pathConfigIni, content); +}; + +TestingEnvironment.prototype.teardownFixture = function (fixtureClass, done) { + if (options['persist-fixture-data'] + || !fixtureClass + ) { + done(); + return; + } + + console.log(); + console.log(" Tearing down fixture " + fixtureClass + "..."); + + var args = [fixtureClass || DEFAULT_UI_TEST_FIXTURE_NAME, "--teardown", '--server-global=' + JSON.stringify(config.phpServer)]; + + if (options['matomo-domain']) { + args.push('--matomo-domain=' + options['matomo-domain']); + } + + this.executeConsoleCommand('tests:setup-fixture', args, function (code) { + if (code) { + done(new Error("Failed to teardown fixture " + fixtureClass + " (error code = " + code + ")")); + } else { + done(); + } + }) +}; + +TestingEnvironment.prototype.deleteAndSave = function () { + fs.writeFileSync(testingEnvironmentOverridePath, "{}"); + this.reload(); +}; + +exports.TestingEnvironment = new TestingEnvironment(); diff --git a/tests/resources/Config/common.config.ini.php b/tests/resources/Config/common.config.ini.php new file mode 100644 index 0000000000000000000000000000000000000000..15852485dc52a689353c67b976d2a854375b3e02 --- /dev/null +++ b/tests/resources/Config/common.config.ini.php @@ -0,0 +1,16 @@ +[Category] +key2 = valueCommon + +key3 = "${@piwik(crash))}" + +[GeneralSection] +password = passwordCommonShouldNotBeOverriden + +[TestOnlyInCommon] +value = commonValue + +[TestArray] +installed[] = plugin777 + +[Tracker] +commonConfigTracker = commonConfigTrackerValue \ No newline at end of file diff --git a/tests/resources/Config/config.ini.php b/tests/resources/Config/config.ini.php new file mode 100644 index 0000000000000000000000000000000000000000..6b0f68b5efb4efefd6546725492ea7ebc9b4ee8d --- /dev/null +++ b/tests/resources/Config/config.ini.php @@ -0,0 +1,11 @@ +[GeneralSection] +login="tes"t" +password=test + +[Category] +key1 = value_overwritten + +[TestArray] +installed[] = "plugin"1" +installed[] = plugin2 +installed[] = plugin3 \ No newline at end of file diff --git a/tests/resources/Config/config.written.ini.php b/tests/resources/Config/config.written.ini.php new file mode 100644 index 0000000000000000000000000000000000000000..c66c3c2d4396f94fc44918fc80774c7b3e09738f --- /dev/null +++ b/tests/resources/Config/config.written.ini.php @@ -0,0 +1,8 @@ +; DO NOT REMOVE THIS LINE +; file automatically generated or modified by Piwik; you can manually override the default values in global.ini.php by redefining them in this file. +[Category] +test = "&6^ geagea'''";;&" + +[Development] +disable_merged_assets = 0 + diff --git a/tests/resources/Config/global.ini.php b/tests/resources/Config/global.ini.php new file mode 100644 index 0000000000000000000000000000000000000000..87e1437453a311fb392d2b6c72b3c6ec596ad188 --- /dev/null +++ b/tests/resources/Config/global.ini.php @@ -0,0 +1,19 @@ +[Category] +key1 = value1 +key2 = value2 + +[CategoryOnlyInGlobalFile] +; test comment +key3 = "value3" +; test comment 4 +key4 = value4 + +[TestArray] +; test comment 2 +; with multiple lines +installed[] = plugin1 +installed[] = plugin4 + +[TestArrayOnlyInGlobalFile] +my_array[] = value1 +my_array[] = value2 diff --git a/tests/resources/DataTables-archived-different-formats.php b/tests/resources/DataTables-archived-different-formats.php new file mode 100644 index 0000000000000000000000000000000000000000..b151daedcb287abcd270efe03832dc096b08275e --- /dev/null +++ b/tests/resources/DataTables-archived-different-formats.php @@ -0,0 +1,15 @@ +_x(1)','','url','http','contains',0,1,5,0,0),(1,2,'{{_Vue.h.constructor`_x(4)`()}}','{{_Vue.h.constructor`_x(5)`()}}','url','http','contains',0,0,5,0,0),(1,3,'click event','','event_action','click','contains',0,0,0,0,0),(1,4,'category event','categorydesc','event_category','The_Category','exact',1,0,0,0,0),(1,5,'name event','eventdesc','event_name','','exact',0,0,0,0,0); +/*!40000 ALTER TABLE `goal` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `locks` +-- + +DROP TABLE IF EXISTS `locks`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `locks` ( + `key` varchar(70) NOT NULL, + `value` varchar(255) DEFAULT NULL, + `expiry_time` bigint(20) unsigned DEFAULT '9999999999', + PRIMARY KEY (`key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `locks` +-- + +LOCK TABLES `locks` WRITE; +/*!40000 ALTER TABLE `locks` DISABLE KEYS */; +/*!40000 ALTER TABLE `locks` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `log_action` +-- + +DROP TABLE IF EXISTS `log_action`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `log_action` ( + `idaction` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(4096) DEFAULT NULL, + `hash` int(10) unsigned NOT NULL, + `type` tinyint(3) unsigned DEFAULT NULL, + `url_prefix` tinyint(2) DEFAULT NULL, + PRIMARY KEY (`idaction`), + KEY `index_type_hash` (`type`,`hash`) +) ENGINE=InnoDB AUTO_INCREMENT=2763 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `log_action` +-- + +LOCK TABLES `log_action` WRITE; +/*!40000 ALTER TABLE `log_action` DISABLE KEYS */; +INSERT INTO `log_action` VALUES (1,'piwik.net/blog/category/meta/',1947374943,1,0),(2,'piwik.net/faq/',2947360427,1,0),(3,'piwik.net/blog/category/community/',1179708026,1,0),(4,'piwik.net/docs/manage-websites/',3773174655,1,0),(5,'piwik.net/',874327298,1,0),(6,'piwik.net/download/counter/',4237430186,1,0),(7,'piwik.net/translations/',3899766622,1,0),(8,'piwik.net/docs/',2882225287,1,0),(9,'piwik.net/docs/manage-users/',3945220999,1,0),(10,'piwik.net/newsletter/',1389745363,1,0),(11,'piwik.net/faq/how-to/',3600257593,1,0),(12,'piwik.net/intranet-analytics/',2551123794,1,0),(13,'piwik.net/blog/2012/08/survey-your-opinion-matters/',4023235163,1,0),(14,'piwik.net/faq/how-to-install/',2597354038,1,0),(15,'piwik.net/hosting/',412790707,1,0),(16,'http://piwik.net/19.pdf',1177993982,3,NULL),(17,'404/URL = http%3A%2F%2Fpiwik.net%2Fthis%2Fis%2Fnot%2Fthe%2Fpage%2Fi%2Fam%2Flooking%2Ffor%2F',383193325,4,NULL),(18,'piwik.net/this/is/not/the/page/i/am/looking/for/',3356202209,1,0),(19,'500/URL = http%3A%2F%2Fpiwik.net%2Fto-an-error',598201841,4,NULL),(20,'piwik.net/to-an-error',804039053,1,0),(21,'http://piwik.net/thing.js',2919028454,3,NULL),(22,'http://piwik.net/thing.css',1562070815,3,NULL),(23,'http://piwik.net/other.png',3355242778,3,NULL),(24,'301/URL = http%3A%2F%2Fpiwik.net%2Fmoved-permanently',4014058322,4,NULL),(25,'piwik.net/moved-permanently',3244710624,1,0),(26,'307/URL = http%3A%2F%2Fpiwik.net%2Ftemp-redirect',1819892892,4,NULL),(27,'piwik.net/temp-redirect',2682910026,1,0),(28,'incredible title!',1144878801,4,NULL),(29,'example.org/index.htm',1534659805,1,0),(30,'Electronics & Cameras',1293017751,7,NULL),(31,'PRODUCT name',3392118809,6,NULL),(32,'SKU2',2334713312,5,NULL),(33,'Piwik Forums',2188306076,4,NULL),(34,'forum.piwik.org/register.php?0,approve=9a94a02145599',1073745374,1,0),(35,'Another Product page with no category',1730519653,4,NULL),(36,'SKU VERY nice indeed',1120478230,5,NULL),(37,'Looking at Electronics & Cameras page with a page level custom variable',431506328,4,NULL),(38,'Liberate Web Analytics - Analytics - Piwik',3153705190,4,NULL),(39,'piwik.org/',4096245248,1,0),(40,'Hello Installing Piwik - Analytics - Piwik',2014003109,4,NULL),(41,'piwik.org/docs/installation/',2191591661,1,0),(42,'Download - Analytics - Piwik',3178398950,4,NULL),(43,'piwik.org/download/',1858806242,1,0),(44,'http://builds.piwik.org/latest.zip',3841444701,3,NULL),(45,'Log Analytics - Analytics - Piwik',1890614785,4,NULL),(46,'piwik.org/log-analytics/',1044692664,1,0),(47,'Changelog Archive - Analytics - Piwik',1681551775,4,NULL),(48,'piwik.org/changelog/',3979923182,1,0),(49,'Piwik 2.1 — Massive Performance and Reliability Improvements - Analytics - Piwik',2976298175,4,NULL),(50,'piwik.org/blog/2014/03/piwik-2-1-massive-performance-reliability-improvements/',4128692695,1,0),(51,'Integrate Piwik into your Rails Application - Analytics - Piwik',4007779458,4,NULL),(52,'piwik.org/blog/2012/10/integrate-piwik-into-your-rails-application/',1957008350,1,0),(53,'http://demo.piwik.org/',2425917240,2,NULL),(54,'What is Piwik? - Analytics - Piwik',1718080727,4,NULL),(55,'piwik.org/what-is-piwisk/',354201120,1,0),(56,'demo.piwik.org/Piwik Forums - Piwik › Web Analytics Reports',13061688,4,NULL),(57,'demo.piwik.org/index.php?module=CoreHome&action=index&date=yesterday&period=day&idSite=7',3479058429,1,0),(58,'Contact the Piwik team - Analytics - Piwik',1712960217,4,NULL),(59,'piwik.org/contact/',2261450562,1,0),(60,'included3.com/blog/category/meta/',1070118531,1,0),(61,'included4.com/blog/category/meta/',4053289515,1,1),(62,'included1.com/blog/category/meta/',2947453150,1,0),(63,'included2.com/blog/category/meta/',2588092045,1,1),(64,'notdatefiltered.com/blog/category/meta/',4003316938,1,1),(65,'%3Cscript%3E_x%287%29%3C%2Fscript%3E',510623417,4,NULL),(66,'example.org/%3Cscript%3E_x%286%29%3C%2Fscript%3E',3474479474,1,0),(67,'<script>_x(7)</script>',4057871163,4,NULL),(68,'example.org/',311321792,1,0),(69,'%7B%7B_Vue.h.constructor%60_x%2819%29%60%28%29%7D%7D',1005756668,4,NULL),(70,'example.org/%7B%7B_Vue.h.constructor%60_x%2818%29%60%28%29%7D%7D',3821462589,1,0),(71,'{{_Vue.h.constructor`_x(19)`()}}',896580712,4,NULL),(72,'example.org/{{_Vue.h.constructor`_x(18)`()}}',3216370631,1,0),(73,'example.org/index1.htm',3419132339,1,0),(74,'example.org/index2.htm',2355866467,1,0),(75,'example.org/index3.htm',2970321619,1,0),(76,'Ads',1183101120,4,NULL),(77,'example.org/page',739268480,1,1),(78,'http://www.example.org/page',4174317021,13,NULL),(79,'ImageAd',395817177,13,NULL),(80,'Unknown',1654365787,14,NULL),(81,'/path/ad.jpg',278776189,14,NULL),(82,'http://www.example.com',2046768222,15,NULL),(83,'/path/ad2.jpg',2317655271,14,NULL),(84,'submit',1060221763,16,NULL),(85,'Text Ad',2764082451,13,NULL),(86,'Click to download Piwik now',1462426291,14,NULL),(87,'http://piwik.org/download',1001595294,15,NULL),(88,'Click NOW',2686858351,14,NULL),(89,'http://piwik.org/',1682471134,15,NULL),(90,'click',3136733728,16,NULL),(91,'Video Ad',3527926751,13,NULL),(92,'movie.mov',3902709995,14,NULL),(93,'http://www.example.com/de/suche?q=foo',975711346,13,NULL),(94,'example.org/index.htm?parameter=Should display',2166859444,1,0),(95,'Second page view - should be registered as URL /',3544964275,4,NULL),(96,'example.org/',1864320163,1,0),(97,'https://outlinks.org/#!outlink-with-fragment-<script>',2512710907,2,NULL),(98,'http://piwik.org/path/again/latest.zip',28974788,3,NULL),(99,'http://outlinks.org/other_outlink#fragment&pk_campaign=Open%20partnership',4135304780,2,NULL),(100,'http://dev.piwik.org/svn',2559417213,2,NULL),(101,'Looking at homepage (again)...',3922357482,4,NULL),(102,'Checkout/Purchasing...',2307476306,4,NULL),(103,'example.org/store/purchase.htm',795443427,1,0),(104,'no User Id set but it should appear in email@example.com!',3105525695,4,NULL),(105,'example.org/no-user-id-set-but-should-appear-in-user-id-visit',2012240733,1,0),(106,'second page',3956242832,4,NULL),(107,'a new user id was set -> new visit',653048186,4,NULL),(108,'same user id was set -> this is the same unique user',120514991,4,NULL),(109,'example.org/home',1238166896,1,0),(110,'second pageview - by this user id',222803912,4,NULL),(111,'pageview - should not be tracked by our user id but in a new visit',883146388,4,NULL),(112,'sku-007-PRISM',2800843667,5,NULL),(113,'My secret spy tech',2154102303,6,NULL),(114,'Surveillance',3645535907,7,NULL),(115,'Page view by email@example.com',1432808194,4,NULL),(116,'A page view by new-user-id@one-weeklater',512858117,4,NULL),(117,'It's <script> pitch black...',2730309359,4,NULL),(118,'piwik.net/grue/lair',1915779448,1,0),(119,'Space Quest XII',1979381709,4,NULL),(120,'piwik.net/space/quest/iv',281715434,1,0),(121,'Bring on the party',1363050752,8,NULL),(122,'http://example.org/path/file0.zip',498656857,3,NULL),(123,'http://example-outlink.org/0.html',1829788391,2,NULL),(124,'piwik.net/space/quest/iv',281715434,10,0),(125,'Action0',622909529,11,NULL),(126,'Cat0',2356807046,10,NULL),(127,'Name0',3693573742,12,NULL),(128,'http://example.org/path/file1.zip',551079913,3,NULL),(129,'http://example-outlink.org/1.html',2790033730,2,NULL),(130,'Action1',1378347215,11,NULL),(131,'Cat1',4219286800,10,NULL),(132,'Name1',2871019256,12,NULL),(133,'http://example.org/path/file2.zip',1735963961,3,NULL),(134,'http://example-outlink.org/2.html',551091180,2,NULL),(135,'Action2',3408836981,11,NULL),(136,'Cat2',1651795114,10,NULL),(137,'Name2',841553730,12,NULL),(138,'http://example.org/path/file3.zip',1511562377,3,NULL),(139,'http://example-outlink.org/3.html',3951306825,2,NULL),(140,'Action3',3156838883,11,NULL),(141,'Cat3',359879740,10,NULL),(142,'Name3',1160652756,12,NULL),(143,'http://example.org/path/file4.zip',3896000665,3,NULL),(144,'http://example-outlink.org/4.html',4135655665,2,NULL),(145,'Action4',575478848,11,NULL),(146,'Cat4',2333589919,10,NULL),(147,'Name4',3679105655,12,NULL),(148,'http://example.org/path/file5.zip',3579341097,3,NULL),(149,'http://example-outlink.org/5.html',1037945684,2,NULL),(150,'Action5',1430924502,11,NULL),(151,'Cat5',4228968713,10,NULL),(152,'Name5',2890760929,12,NULL),(153,'http://example.org/path/file6.zip',2465731577,3,NULL),(154,'http://example-outlink.org/6.html',3142171130,2,NULL),(155,'Action6',3426975084,11,NULL),(156,'Cat6',1696178355,10,NULL),(157,'Name6',893703003,12,NULL),(158,'http://example.org/path/file7.zip',2945989193,3,NULL),(159,'http://example-outlink.org/7.html',1880451679,2,NULL),(160,'Action7',3141815802,11,NULL),(161,'Cat7',303992869,10,NULL),(162,'Name7',1111745485,12,NULL),(163,'http://example.org/path/file8.zip',768126360,3,NULL),(164,'http://example-outlink.org/8.html',2168707210,2,NULL),(165,'Action8',737890411,11,NULL),(166,'Cat8',2191625652,10,NULL),(167,'Name8',3539795548,12,NULL),(168,'It's pitch black...',3567705839,4,NULL),(169,'ABCD1234',3449405630,5,NULL),(170,'My Product',2887979505,6,NULL),(171,'My Category',1693347083,7,NULL),(172,'Category1',3980972843,7,NULL),(173,'Category2',1950450321,7,NULL),(174,'Category3',54964743,7,NULL),(176,'MyName',697513099,6,NULL),(177,'Custom SKU',1217344021,5,NULL),(178,'Category4',2636261284,7,NULL),(179,'Category7',69957150,7,NULL),(180,'title_0',2197029788,4,NULL),(181,'piwik.net/0/',1118245823,1,0),(182,'title_0 / title_0',2445487529,4,NULL),(183,'piwik.net/0/0',2940720687,1,0),(184,'title_0 / title_1',3871612223,4,NULL),(185,'piwik.net/0/1',3628132025,1,0),(186,'title_0 / title_2',2144160901,4,NULL),(187,'piwik.net/0/2',1095350019,1,0),(188,'title_0 / title_3',147487763,4,NULL),(189,'piwik.net/0/3',911116181,1,0),(190,'title_1',4126356234,4,NULL),(191,'piwik.net/1/',1539056382,1,0),(192,'title_1 / title_4',1461728880,4,NULL),(193,'piwik.net/1/4',2850584577,1,0),(194,'title_1 / title_5',539428582,4,NULL),(195,'piwik.net/1/5',3740223639,1,0),(196,'title_1 / title_6',3106821980,4,NULL),(197,'piwik.net/1/6',1206262061,1,0),(198,'title_1 / title_7',3458820042,4,NULL),(199,'piwik.net/1/7',820062651,1,0),(200,'title_2',1828348592,4,NULL),(201,'piwik.net/2/',1888579901,1,0),(202,'title_2 / title_8',3346275418,4,NULL),(203,'piwik.net/2/8',2719517299,1,0),(204,'title_2 / title_9',2960338124,4,NULL),(205,'piwik.net/2/9',3575626469,1,0),(206,'title_2 / title_10',2925570206,4,NULL),(207,'piwik.net/2/10',3971439716,1,0),(208,'title_2 / title_11',3647445000,4,NULL),(209,'piwik.net/2/11',2612030706,1,0),(210,'title_3',469586470,4,NULL),(211,'piwik.net/3/',1770668156,1,0),(212,'title_3 / title_12',3687548381,4,NULL),(213,'piwik.net/3/12',3120912941,1,0),(214,'title_3 / title_13',2899096907,4,NULL),(215,'piwik.net/3/13',3439487675,1,0),(216,'title_3 / title_14',849879272,4,NULL),(217,'piwik.net/3/14',1399258904,1,0),(218,'title_3 / title_15',1169100926,4,NULL),(219,'piwik.net/3/15',610389902,1,0),(220,'title_4',2241447813,4,NULL),(221,'piwik.net/4/',650892987,1,0),(222,'title_4 / title_16',2822678603,4,NULL),(223,'piwik.net/4/16',549430925,1,0),(224,'title_4 / title_17',3745093853,4,NULL),(225,'piwik.net/4/17',1471714843,1,0),(226,'title_4 / title_18',1334216012,4,NULL),(227,'piwik.net/4/18',3339160458,1,0),(228,'title_4 / title_19',948024794,4,NULL),(229,'piwik.net/4/19',2952837916,1,0),(230,'http://cloudsite5.com/download',3605450276,3,NULL),(231,'keyword',1519612219,8,NULL),(232,'http://cloudsite5.com/20/download',2960189854,3,NULL),(233,'keyword20',2445312547,8,NULL),(234,'http://cloudsite5.com/21/download',1605534368,3,NULL),(235,'keyword21',3871847093,8,NULL),(236,'http://cloudsite5.com/22/download',3028629923,3,NULL),(237,'keyword22',2144264975,8,NULL),(238,'http://cloudsite5.com/23/download',1531400861,3,NULL),(239,'keyword23',147444633,8,NULL),(240,'http://cloudsite6.com/download',2861034495,3,NULL),(241,'http://cloudsite6.com/24/download',3925938784,3,NULL),(242,'keyword24',2527938106,8,NULL),(243,'http://cloudsite6.com/25/download',96696670,3,NULL),(244,'keyword25',3786045100,8,NULL),(245,'http://cloudsite6.com/26/download',4009017949,3,NULL),(246,'keyword26',2023958294,8,NULL),(247,'http://cloudsite6.com/27/download',20359523,3,NULL),(248,'keyword27',262412160,8,NULL),(249,'http://cloudsite7.com/download',931662473,3,NULL),(250,'http://cloudsite7.com/28/download',2006661549,3,NULL),(251,'keyword28',2669349393,8,NULL),(252,'http://cloudsite7.com/29/download',2555990675,3,NULL),(253,'keyword29',3894164103,8,NULL),(254,'http://cloudsite7.com/30/download',2780997273,3,NULL),(255,'keyword30',2296099682,8,NULL),(256,'http://cloudsite7.com/31/download',1241566631,3,NULL),(257,'keyword31',4292641780,8,NULL),(258,'http://cloudsite8.com/download',1629273727,3,NULL),(259,'http://cloudsite8.com/32/download',1739933041,3,NULL),(260,'keyword32',1725289038,8,NULL),(261,'http://cloudsite8.com/33/download',2289512015,3,NULL),(262,'keyword33',299033304,8,NULL),(263,'http://cloudsite8.com/34/download',1789605174,3,NULL),(264,'keyword34',2411100027,8,NULL),(265,'http://cloudsite8.com/35/download',2238275080,3,NULL),(266,'keyword35',4172367853,8,NULL),(267,'http://cloudsite9.com/download',4229127945,3,NULL),(268,'http://cloudsite9.com/36/download',3925356104,3,NULL),(269,'keyword36',1639454295,8,NULL),(270,'http://cloudsite9.com/37/download',104482166,3,NULL),(271,'keyword37',381626049,8,NULL),(272,'http://cloudsite9.com/38/download',4147191547,3,NULL),(273,'keyword38',2248162128,8,NULL),(274,'http://cloudsite9.com/39/download',418608581,3,NULL),(275,'keyword39',4043770822,8,NULL),(276,'http://othersite10.com/',2036147644,2,NULL),(277,'http://othersite10.com/40/',2581161303,2,NULL),(278,'keyword40',3348768165,8,NULL),(279,'http://othersite10.com/41/',2160219158,2,NULL),(280,'keyword41',2963084595,8,NULL),(281,'http://othersite10.com/42/',2884569045,2,NULL),(282,'keyword42',697582729,8,NULL),(283,'http://othersite10.com/43/',3002349204,2,NULL),(284,'keyword43',1586721823,8,NULL),(285,'http://othersite11.com/',2986472985,2,NULL),(286,'http://othersite11.com/44/',3939415056,2,NULL),(287,'keyword44',3237470652,8,NULL),(288,'http://othersite11.com/45/',4090856785,2,NULL),(289,'keyword45',3086012714,8,NULL),(290,'http://othersite11.com/46/',3640186514,2,NULL),(291,'keyword46',788103312,8,NULL),(292,'http://othersite11.com/47/',3252938707,2,NULL),(293,'keyword47',1509863430,8,NULL),(294,'http://othersite12.com/',882214071,2,NULL),(295,'http://othersite12.com/48/',2146879449,2,NULL),(296,'keyword48',3376524695,8,NULL),(297,'http://othersite12.com/49/',1726871192,2,NULL),(298,'keyword49',3192298753,8,NULL),(299,'http://othersite12.com/50/',3068995558,2,NULL),(300,'keyword50',3733001444,8,NULL),(301,'http://othersite12.com/51/',2952140455,2,NULL),(302,'keyword51',2844140658,8,NULL),(303,'http://othersite13.com/',4291385106,2,NULL),(304,'http://othersite13.com/52/',2476757287,2,NULL),(305,'keyword52',814708168,8,NULL),(306,'http://othersite13.com/53/',2327535718,2,NULL),(307,'keyword53',1200112990,8,NULL),(308,'http://othersite13.com/54/',3321558689,2,NULL),(309,'keyword54',3656175869,8,NULL),(310,'http://othersite13.com/55/',3705784288,2,NULL),(311,'keyword55',2934693995,8,NULL),(312,'http://othersite14.com/',3805046698,2,NULL),(313,'http://othersite14.com/56/',2477652458,2,NULL),(314,'keyword56',937603537,8,NULL),(315,'http://othersite14.com/57/',2327234731,2,NULL),(316,'keyword57',1088782663,8,NULL),(317,'http://othersite14.com/58/',221172836,2,NULL),(318,'keyword58',3495599318,8,NULL),(319,'http://othersite14.com/59/',339076389,2,NULL),(320,'keyword59',2807934016,8,NULL),(321,'piwik.net/15/',2476755766,10,0),(322,'event action 1',1259123692,11,NULL),(323,'event category 3',3895681234,10,NULL),(324,'event name0',2794018642,12,NULL),(325,'piwik.net/15/60',2249075179,10,0),(326,'piwik.net/15/61',4043905405,10,0),(327,'piwik.net/15/62',1744849095,10,0),(328,'piwik.net/15/63',520583249,10,0),(329,'piwik.net/16/',3096254709,10,0),(330,'event action 2',3523600982,11,NULL),(331,'event category 4',1985475953,10,NULL),(332,'event name1',3515770820,12,NULL),(333,'piwik.net/16/64',2480292380,10,0),(334,'piwik.net/16/65',3838931594,10,0),(335,'piwik.net/16/66',2111316784,10,0),(336,'piwik.net/16/67',182391718,10,0),(337,'piwik.net/17/',2710972852,10,0),(338,'event action 3',2768425664,11,NULL),(339,'event category 5',22070759,10,NULL),(340,'event name2',1216820862,12,NULL),(341,'piwik.net/17/68',584870226,10,0),(342,'piwik.net/17/69',1440438724,10,0),(343,'piwik.net/17/70',891080737,10,0),(344,'piwik.net/17/71',1109123255,10,0),(345,'piwik.net/18/',638465403,10,0),(346,'event action 4',996558691,11,NULL),(347,'event category 0',1899639144,10,NULL),(348,'event name3',1065354984,12,NULL),(349,'piwik.net/18/72',2205262171,10,0),(350,'piwik.net/18/73',4101411277,10,0),(351,'piwik.net/18/74',1779565678,10,0),(352,'piwik.net/18/75',487929080,10,0),(353,'piwik.net/19/',1058341946,10,0),(354,'event action 5',1281456117,11,NULL),(355,'event category 1',104661502,10,NULL),(356,'event name4',2716111691,12,NULL),(357,'piwik.net/19/76',1017119271,10,0),(358,'piwik.net/19/77',1269248689,10,0),(359,'piwik.net/19/78',3675795232,10,0),(360,'piwik.net/19/79',2887720886,10,0),(361,'http://piwik.net/20/',724243841,13,NULL),(362,'content name 20',2978740294,13,NULL),(363,'content piece 20',3544586076,14,NULL),(364,'http://piwik.net/20/80',1071315042,13,NULL),(365,'http://piwik.net/20/81',1222494452,13,NULL),(366,'http://piwik.net/20/82',3520371022,13,NULL),(367,'http://piwik.net/20/83',2798889432,13,NULL),(368,'http://piwik.net/21/',842015936,13,NULL),(369,'content name 21',3331115216,13,NULL),(370,'content piece 21',2755733450,14,NULL),(371,'http://piwik.net/21/84',2148227870,13,NULL),(372,'http://piwik.net/21/85',4144786312,13,NULL),(373,'http://piwik.net/21/86',1845836338,13,NULL),(374,'http://piwik.net/21/87',419564196,13,NULL),(375,'http://piwik.net/22/',421361411,13,NULL),(376,'content name 22',1602591082,13,NULL),(377,'content piece 22',1028159088,14,NULL),(378,'http://piwik.net/22/88',2601040091,13,NULL),(379,'http://piwik.net/22/89',3960440909,13,NULL),(380,'http://piwik.net/22/90',2361917864,13,NULL),(381,'http://piwik.net/22/91',4224659774,13,NULL),(382,'http://piwik.net/23/',411202,13,NULL),(383,'content name 23',679651836,13,NULL),(384,'content piece 23',1246709478,14,NULL),(385,'http://piwik.net/23/92',3665430497,13,NULL),(386,'http://piwik.net/23/93',2910664567,13,NULL),(387,'http://piwik.net/23/94',857318100,13,NULL),(388,'http://piwik.net/23/95',1142854210,13,NULL),(389,'http://piwik.net/24/',1330106501,13,NULL),(390,'content name 24',3068542047,13,NULL),(391,'content piece 24',3559641925,14,NULL),(392,'http://piwik.net/24/96',1086389057,13,NULL),(393,'http://piwik.net/24/97',935840727,13,NULL),(394,'http://piwik.net/24/98',2809714246,13,NULL),(395,'http://piwik.net/24/99',3498043088,13,NULL),(396,'bought book',541323436,4,NULL),(397,'Books Cat #0',518484556,7,NULL),(398,'Book0',1678710204,6,NULL),(399,'id_book0',1263238024,5,NULL),(400,'Books Cat #1',1776304858,7,NULL),(401,'Book1',319300906,6,NULL),(402,'id_book1',1011632926,5,NULL),(403,'Books Cat #2',4041806688,7,NULL),(404,'Book2',2315351184,6,NULL),(405,'id_book2',2772769444,5,NULL),(406,'Books Cat #3',2280530934,7,NULL),(407,'Book3',4245046278,6,NULL),(408,'id_book3',3527551538,5,NULL),(409,'Books Cat #4',428521045,7,NULL),(410,'Book4',1667420581,6,NULL),(411,'id_book4',1277607825,5,NULL),(412,'Book5',342221107,6,NULL),(413,'id_book5',992055047,5,NULL),(414,'Book6',2372710537,6,NULL),(415,'id_book6',2720587453,5,NULL),(416,'Book7',4201349151,6,NULL),(417,'id_book7',3576688171,5,NULL),(418,'Book8',1792318862,6,NULL),(419,'id_book8',1167127482,5,NULL),(420,'Book9',500411672,6,NULL),(421,'id_book9',848806700,5,NULL),(422,'Book10',796073682,6,NULL),(423,'id_book10',250129929,5,NULL),(424,'Book11',1484009028,6,NULL),(425,'id_book11',2045746847,5,NULL),(426,'Book12',3246227454,6,NULL),(427,'id_book12',3773222693,5,NULL),(428,'Book13',3061469032,6,NULL),(429,'id_book13',2548170675,5,NULL),(430,'Book14',673110731,6,NULL),(431,'id_book14',159738384,5,NULL),(432,'Book15',1595533917,6,NULL),(433,'id_book15',2122472070,5,NULL),(434,'Book16',3322985447,6,NULL),(435,'id_book16',3884649276,5,NULL),(436,'Book17',2971110257,6,NULL),(437,'id_book17',2425109418,5,NULL),(438,'Book18',564696800,6,NULL),(439,'id_book18',3352123,5,NULL),(440,'Book19',1454351990,6,NULL),(441,'id_book19',1999902381,5,NULL),(442,'Book20',73288977,6,NULL),(443,'id_book20',633732554,5,NULL),(444,'Book21',1935244679,6,NULL),(445,'id_book21',1388498268,5,NULL),(446,'Book22',3931122749,6,NULL),(447,'id_book22',3419118822,5,NULL),(448,'Book23',2639731883,6,NULL),(449,'id_book23',3167530096,5,NULL),(450,'Book24',53709064,6,NULL),(451,'id_book24',581450195,5,NULL),(452,'piwik.net/page',1347302321,10,0),(453,'-1',808273962,11,NULL),(454,'-1',808273962,10,NULL),(455,'-1',808273962,12,NULL),(456,'event action 0',1007387514,11,NULL),(457,'event name 0',1004172543,12,NULL),(458,'event name 1',1289569385,12,NULL),(459,'event category 2',2671005764,10,NULL),(460,'event name 2',3587446227,12,NULL),(461,'event name 3',2731746629,12,NULL),(462,'event name 4',1018671334,12,NULL),(463,'event name 5',1269858416,12,NULL),(464,'event action 6',3580372559,11,NULL),(465,'event category 6',2556007517,10,NULL),(466,'event name 6',3535393226,12,NULL),(467,'event action 7',2725189337,11,NULL),(468,'event category 7',4015957195,10,NULL),(469,'event name 7',2780750172,12,NULL),(470,'event action 8',852495176,11,NULL),(471,'event category 8',2145499482,10,NULL),(472,'event name 8',889322701,12,NULL),(473,'event action 9',1171733470,11,NULL),(474,'event category 9',149326284,10,NULL),(475,'event name 9',1107741787,12,NULL),(476,'event action 10',1563196865,11,NULL),(477,'event category 10',2933407035,10,NULL),(478,'event name 10',3237600153,12,NULL),(479,'event action 11',707480919,11,NULL),(480,'event category 11',3655273901,10,NULL),(481,'event name 11',3086936847,12,NULL),(482,'event action 12',3005357293,11,NULL),(483,'event category 12',1087790103,10,NULL),(484,'event name 12',787987125,12,NULL),(485,'event action 13',3290770555,11,NULL),(486,'event category 13',936471681,10,NULL),(487,'event name 13',1508936227,12,NULL),(488,'event action 14',1514256856,11,NULL),(489,'event category 14',2847275298,10,NULL),(490,'event name 14',3348373376,12,NULL),(491,'event action 15',759597390,11,NULL),(492,'event category 15',3736258996,10,NULL),(493,'event name 15',2962435862,12,NULL),(494,'event action 16',3025131764,11,NULL),(495,'event category 16',1203476494,10,NULL),(496,'event name 16',697990828,12,NULL),(497,'event action 17',3276335202,11,NULL),(498,'event category 17',817670296,10,NULL),(499,'event name 17',1587367482,12,NULL),(500,'event action 18',1408759283,11,NULL),(501,'event category 18',2684597513,10,NULL),(502,'event name 18',3458356139,12,NULL),(503,'event action 19',619758949,11,NULL),(504,'event category 19',3607397791,10,NULL),(505,'event name 19',3106235197,12,NULL),(506,'page title 0',2772635148,4,NULL),(507,'somesite.com/0',299474142,1,0),(508,'page title 1',3527687834,4,NULL),(509,'somesite.com/1',1725869128,1,0),(510,'page title 2',1263365920,4,NULL),(511,'somesite.com/2',4292345330,1,0),(512,'page title 3',1011507126,4,NULL),(513,'somesite.com/3',2295385444,1,0),(514,'page title 4',2720975381,4,NULL),(515,'somesite.com/4',380917959,1,0),(516,'page title 5',3576298115,4,NULL),(517,'somesite.com/5',1639147601,1,0),(518,'page title 6',1277209401,4,NULL),(519,'somesite.com/6',4172954091,1,0),(520,'page title 7',992451503,4,NULL),(521,'somesite.com/7',2411530621,1,0),(522,'page title 8',2878899774,4,NULL),(523,'somesite.com/8',520230124,1,0),(524,'page title 9',3701454504,4,NULL),(525,'somesite.com/9',1745167482,1,0),(526,'page title 10',3839091013,4,NULL),(527,'somesite.com/10',2361051183,1,0),(528,'page title 11',2480198099,4,NULL),(529,'somesite.com/11',4223531193,1,0),(530,'page title 12',182288489,4,NULL),(531,'somesite.com/12',1656006915,1,0),(532,'page title 13',2111484159,4,NULL),(533,'somesite.com/13',364091797,1,0),(534,'page title 14',3820889436,4,NULL),(535,'somesite.com/14',2346126390,1,0),(536,'page title 15',2495157706,4,NULL),(537,'somesite.com/15',4241505440,1,0),(538,'page title 16',229655664,4,NULL),(539,'somesite.com/16',1708748058,1,0),(540,'page title 17',2058843366,4,NULL),(541,'somesite.com/17',316562828,1,0),(542,'page title 18',3926419831,4,NULL),(543,'somesite.com/18',2187411485,1,0),(544,'page title 19',2635028961,4,NULL),(545,'somesite.com/19',4117131403,1,0),(546,'page title 20',3489575558,4,NULL),(547,'somesite.com/20',2811730924,1,0),(548,'page title 21',3103359504,4,NULL),(549,'somesite.com/21',3499142010,1,0),(550,'page title 22',569430954,4,NULL),(551,'somesite.com/22',1234827968,1,0),(552,'page title 23',1459086140,4,NULL),(553,'somesite.com/23',1050593878,1,0),(554,'page title 24',3365107359,4,NULL),(555,'somesite.com/24',2700763125,1,0),(556,'page title 25',3214165513,4,NULL),(557,'somesite.com/25',3623710563,1,0),(558,'page title 26',647829427,4,NULL),(559,'somesite.com/26',1324629721,1,0),(560,'page title 27',1369057061,4,NULL),(561,'somesite.com/27',972230223,1,0),(562,'page title 28',3240442548,4,NULL),(563,'somesite.com/28',2840335326,1,0),(564,'page title 29',3055684130,4,NULL),(565,'somesite.com/29',3729466184,1,0),(566,'page title 30',3605365703,4,NULL),(567,'somesite.com/30',3196889773,1,0),(568,'page title 31',2715988817,4,NULL),(569,'somesite.com/31',3381369403,1,0),(570,'page title 32',954983147,4,NULL),(571,'somesite.com/32',1350749057,1,0),(572,'page title 33',1340920445,4,NULL),(573,'somesite.com/33',663091991,1,0),(574,'page title 34',3515369438,4,NULL),(575,'somesite.com/34',3118558900,1,0),(576,'page title 35',2794420040,4,NULL),(577,'somesite.com/35',3471203874,1,0),(578,'page title 36',1065756402,4,NULL),(579,'somesite.com/36',1475284888,1,0),(580,'page title 37',1216419428,4,NULL),(581,'somesite.com/37',552091406,1,0),(582,'page title 38',3627944949,4,NULL),(583,'somesite.com/38',2958500511,1,0),(584,'page title 39',2939763555,4,NULL),(585,'somesite.com/39',3343913481,1,0),(586,'page title 40',2577667328,4,NULL),(587,'somesite.com/40',4056759402,1,0),(588,'page title 41',4003669398,4,NULL),(589,'somesite.com/41',2261388540,1,0),(590,'page title 42',2007659564,4,NULL),(591,'somesite.com/42',532897094,1,0),(592,'page title 43',11355322,4,NULL),(593,'somesite.com/43',1757703632,1,0),(594,'page title 44',2664026393,4,NULL),(595,'somesite.com/44',4137744499,1,0),(596,'page title 45',3922649487,4,NULL),(597,'somesite.com/45',2175256805,1,0),(598,'page title 46',1892134965,4,NULL),(599,'somesite.com/46',414095711,1,0),(600,'page title 47',130056355,4,NULL),(601,'somesite.com/47',1873390025,1,0),(602,'page title 48',2541722930,4,NULL),(603,'somesite.com/48',4279678040,1,0),(604,'page title 49',3766005156,4,NULL),(605,'somesite.com/49',2282849486,1,0),(606,'page title 50',2160010305,4,NULL),(607,'somesite.com/50',3906342187,1,0),(608,'page title 51',4156036311,4,NULL),(609,'somesite.com/51',2681290173,1,0),(610,'page title 52',1857111405,4,NULL),(611,'somesite.com/52',114846727,1,0),(612,'page title 53',431388155,4,NULL),(613,'somesite.com/53',1910463633,1,0),(614,'page title 54',2278744152,4,NULL),(615,'somesite.com/54',4022061362,1,0),(616,'page title 55',4040544462,4,NULL),(617,'somesite.com/55',2562521508,1,0),(618,'page title 56',1776058740,4,NULL),(619,'somesite.com/56',28682270,1,0),(620,'page title 57',517714402,4,NULL),(621,'somesite.com/57',1991415944,1,0),(622,'page title 58',2388962419,4,NULL),(623,'somesite.com/58',3859645721,1,0),(624,'page title 59',4184055013,4,NULL),(625,'somesite.com/59',2433398159,1,0),(626,'page title 60',2878502786,4,NULL),(627,'somesite.com/60',3288030952,1,0),(628,'page title 61',3700770580,4,NULL),(629,'somesite.com/61',3036442238,1,0),(630,'page title 62',1167857326,4,NULL),(631,'somesite.com/62',771047364,1,0),(632,'page title 63',849028664,4,NULL),(633,'somesite.com/63',1525813074,1,0),(634,'page title 64',2902438811,4,NULL),(635,'somesite.com/64',3298204401,1,0),(636,'page title 65',3690496781,4,NULL),(637,'somesite.com/65',3012668007,1,0),(638,'page title 66',1123144375,4,NULL),(639,'somesite.com/66',714669021,1,0),(640,'page title 67',905372193,4,NULL),(641,'somesite.com/67',1570753355,1,0),(642,'page title 68',2773090224,4,NULL),(643,'somesite.com/68',3441481434,1,0),(644,'page title 69',3528380198,4,NULL),(645,'somesite.com/69',3123177036,1,0),(646,'page title 70',2995340995,4,NULL),(647,'somesite.com/70',3672141737,1,0),(648,'page title 71',3314447957,4,NULL),(649,'somesite.com/71',2917621567,1,0),(650,'page title 72',1552361455,4,NULL),(651,'somesite.com/72',888016517,1,0),(652,'page title 73',729814905,4,NULL),(653,'somesite.com/73',1139359251,1,0),(654,'page title 74',3051651802,4,NULL),(655,'somesite.com/74',3717049264,1,0),(656,'page title 75',3269702220,4,NULL),(657,'somesite.com/75',2861210406,1,0),(658,'page title 76',1542120438,4,NULL),(659,'somesite.com/76',864275100,1,0),(660,'page title 77',753783648,4,NULL),(661,'somesite.com/77',1149565450,1,0),(662,'page title 78',3159543537,4,NULL),(663,'somesite.com/78',3560695707,1,0),(664,'page title 79',3411410535,4,NULL),(665,'somesite.com/79',2738673421,1,0),(666,'page title 80',890329612,4,NULL),(667,'somesite.com/80',1568174950,1,0),(668,'page title 81',1108765338,4,NULL),(669,'somesite.com/81',712983536,1,0),(670,'page title 82',3676257056,4,NULL),(671,'somesite.com/82',3010859594,1,0),(672,'page title 83',2887257014,4,NULL),(673,'somesite.com/83',3295748828,1,0),(674,'page title 84',847027733,4,NULL),(675,'somesite.com/84',1511372671,1,0),(676,'page title 85',1165733507,4,NULL),(677,'somesite.com/85',756189161,1,0),(678,'page title 86',3698523961,4,NULL),(679,'somesite.com/86',3021723219,1,0),(680,'page title 87',2876624815,4,NULL),(681,'somesite.com/87',3273451205,1,0),(682,'page title 88',1003147838,4,NULL),(683,'somesite.com/88',1403255636,1,0),(684,'page title 89',1288561320,4,NULL),(685,'somesite.com/89',614779842,1,0),(686,'page title 90',738880333,4,NULL),(687,'somesite.com/90',1147355687,1,0),(688,'page title 91',1527602139,4,NULL),(689,'somesite.com/91',862220977,1,0),(690,'page title 92',3255044705,4,NULL),(691,'somesite.com/92',2859279115,1,0),(692,'page title 93',3036887799,4,NULL),(693,'somesite.com/93',3714716573,1,0),(694,'page title 94',728215380,4,NULL),(695,'somesite.com/94',1125025342,1,0),(696,'page title 95',1549836226,4,NULL),(697,'somesite.com/95',873051816,1,0),(698,'page title 96',3312045688,4,NULL),(699,'somesite.com/96',2902517522,1,0),(700,'page title 97',2993618670,4,NULL),(701,'somesite.com/97',3657947012,1,0),(702,'page title 98',584180607,4,NULL),(703,'somesite.com/98',1253624341,1,0),(704,'page title 99',1440142313,4,NULL),(705,'somesite.com/99',1035991683,1,0),(706,'page title 100',4069112287,4,NULL),(707,'somesite.com/100',1602640048,1,0),(708,'page title 101',2240710985,4,NULL),(709,'somesite.com/101',679569446,1,0),(710,'page title 102',478664947,4,NULL),(711,'somesite.com/102',2978494876,1,0),(712,'page title 103',1803610213,4,NULL),(713,'somesite.com/103',3331262730,1,0),(714,'page title 104',4125392326,4,NULL),(715,'somesite.com/104',1491836073,1,0),(716,'page title 105',2195934544,4,NULL),(717,'somesite.com/105',804039743,1,0),(718,'page title 106',468327658,4,NULL),(719,'somesite.com/106',3068525957,1,0),(720,'page title 107',1827482748,4,NULL),(721,'somesite.com/107',3252866323,1,0),(722,'page title 108',4233245165,4,NULL),(723,'somesite.com/108',1365102722,1,0),(724,'page title 109',2337603963,4,NULL),(725,'somesite.com/109',643489812,1,0),(726,'page title 110',3952248990,4,NULL),(727,'somesite.com/110',1184721393,1,0),(728,'page title 111',2627057672,4,NULL),(729,'somesite.com/111',832199015,1,0),(730,'page title 112',94169522,4,NULL),(731,'somesite.com/112',2828208349,1,0),(732,'page title 113',1922816292,4,NULL),(733,'somesite.com/113',3751032907,1,0),(734,'page title 114',3976154247,4,NULL),(735,'somesite.com/114',1106292200,1,0),(736,'page title 115',2616753169,4,NULL),(737,'somesite.com/115',922197374,1,0),(738,'page title 116',49360299,4,NULL),(739,'somesite.com/116',2952711364,1,0),(740,'page title 117',1979063613,4,NULL),(741,'somesite.com/117',3640261714,1,0),(742,'page title 118',3846766764,4,NULL),(743,'somesite.com/118',1212604867,1,0),(744,'page title 119',2454597690,4,NULL),(745,'somesite.com/119',1061278037,1,0),(746,'page title 120',3233799005,4,NULL),(747,'somesite.com/120',1840265778,1,0),(748,'page title 121',3082349515,4,NULL),(749,'somesite.com/121',448203428,1,0),(750,'page title 122',783399537,4,NULL),(751,'somesite.com/122',2210290462,1,0),(752,'page title 123',1505135335,4,NULL),(753,'somesite.com/123',4105792392,1,0),(754,'page title 124',3352436548,4,NULL),(755,'somesite.com/124',1792933419,1,0),(756,'page title 125',2966761426,4,NULL),(757,'somesite.com/125',500879037,1,0),(758,'page title 126',702316136,4,NULL),(759,'somesite.com/126',2228461319,1,0),(760,'page title 127',1591430910,4,NULL),(761,'somesite.com/127',4090802065,1,0),(762,'page title 128',3462681455,4,NULL),(763,'somesite.com/128',1668002304,1,0),(764,'page title 129',3110298617,4,NULL),(765,'somesite.com/129',342655638,1,0),(766,'page title 130',3651463708,4,NULL),(767,'somesite.com/130',1957366643,1,0),(768,'page title 131',2929973898,4,NULL),(769,'somesite.com/131',61619173,1,0),(770,'page title 132',933923632,4,NULL),(771,'somesite.com/132',2594531935,1,0),(772,'page title 133',1085127590,4,NULL),(773,'somesite.com/133',3986840265,1,0),(774,'page title 134',3737726469,4,NULL),(775,'somesite.com/134',1942409066,1,0),(776,'page title 135',2848857747,4,NULL),(777,'somesite.com/135',79822844,1,0),(778,'page title 136',818368297,4,NULL),(779,'somesite.com/136',2647174726,1,0),(780,'page title 137',1203797951,4,NULL),(781,'somesite.com/137',3939475152,1,0),(782,'page title 138',3615449646,4,NULL),(783,'somesite.com/138',2054193985,1,0),(784,'page title 139',2692240056,4,NULL),(785,'somesite.com/139',225948631,1,0),(786,'page title 140',2531622107,4,NULL),(787,'somesite.com/140',1005231540,1,0),(788,'page title 141',3789704269,4,NULL),(789,'somesite.com/141',1290644770,1,0),(790,'page title 142',2028674551,4,NULL),(791,'somesite.com/142',3588553880,1,0),(792,'page title 143',267136353,4,NULL),(793,'somesite.com/143',2732837902,1,0),(794,'page title 144',2441656514,4,NULL),(795,'somesite.com/144',1015503277,1,0),(796,'page title 145',3868166228,4,NULL),(797,'somesite.com/145',1266706747,1,0),(798,'page title 146',2139544046,4,NULL),(799,'somesite.com/146',3532208257,1,0),(800,'page title 147',142731640,4,NULL),(801,'somesite.com/147',2777548823,1,0),(802,'page title 148',2554262761,4,NULL),(803,'somesite.com/148',892409222,1,0),(804,'page title 149',4013540479,4,NULL),(805,'somesite.com/149',1110844688,1,0),(806,'page title 150',2415807898,4,NULL),(807,'somesite.com/150',586263797,1,0),(808,'page title 151',4177100044,4,NULL),(809,'somesite.com/151',1442225251,1,0),(810,'page title 152',1643130038,4,NULL),(811,'somesite.com/152',3439316441,1,0),(812,'page title 153',385293344,4,NULL),(813,'somesite.com/153',3153657167,1,0),(814,'page title 154',2291370371,4,NULL),(815,'somesite.com/154',631007468,1,0),(816,'page title 155',4287936789,4,NULL),(817,'somesite.com/155',1385912442,1,0),(818,'page title 156',1721624751,4,NULL),(819,'somesite.com/156',3415345600,1,0),(820,'page title 157',295360569,4,NULL),(821,'somesite.com/157',3163896150,1,0),(822,'page title 158',2166736296,4,NULL),(823,'somesite.com/158',740959431,1,0),(824,'page title 159',4129486142,4,NULL),(825,'somesite.com/159',1529680977,1,0),(826,'page title 160',2765299289,4,NULL),(827,'somesite.com/160',165478198,1,0),(828,'page title 161',3553898191,4,NULL),(829,'somesite.com/161',2128334752,1,0),(830,'page title 162',1256030069,4,NULL),(831,'somesite.com/162',3889339930,1,0),(832,'page title 163',1037717475,4,NULL),(833,'somesite.com/163',2429922956,1,0),(834,'page title 164',2747193920,4,NULL),(835,'somesite.com/164',246496047,1,0),(836,'page title 165',3568954070,4,NULL),(837,'somesite.com/165',2041973689,1,0),(838,'page title 166',1303427948,4,NULL),(839,'somesite.com/166',3770636803,1,0),(840,'page title 167',985107450,4,NULL),(841,'somesite.com/167',2545445525,1,0),(842,'page title 168',2852689515,4,NULL),(843,'somesite.com/168',117929732,1,0),(844,'page title 169',3708790525,4,NULL),(845,'somesite.com/169',1879066514,1,0),(846,'page title 170',3184013080,4,NULL),(847,'somesite.com/170',281529975,1,0),(848,'page title 171',3402571662,4,NULL),(849,'somesite.com/171',1740701409,1,0),(850,'page title 172',1405505076,4,NULL),(851,'somesite.com/172',4274630491,1,0),(852,'page title 173',616660642,4,NULL),(853,'somesite.com/173',2312019917,1,0),(854,'page title 174',3131435777,4,NULL),(855,'somesite.com/174',397019758,1,0),(856,'page title 175',3450002327,4,NULL),(857,'somesite.com/175',1621965560,1,0),(858,'page title 176',1420528173,4,NULL),(859,'somesite.com/176',4188302146,1,0),(860,'page title 177',598522555,4,NULL),(861,'somesite.com/177',2393070548,1,0),(862,'page title 178',3004409642,4,NULL),(863,'somesite.com/178',505169477,1,0),(864,'page title 179',3289683900,4,NULL),(865,'somesite.com/179',1763407571,1,0),(866,'page title 180',978334679,4,NULL),(867,'somesite.com/180',2539639480,1,0),(868,'page title 181',1297548097,4,NULL),(869,'somesite.com/181',3763921454,1,0),(870,'page title 182',3562951419,4,NULL),(871,'somesite.com/182',2035397524,1,0),(872,'page title 183',2740544109,4,NULL),(873,'somesite.com/183',240550658,1,0),(874,'page title 184',1027471310,4,NULL),(875,'somesite.com/184',2419201697,1,0),(876,'page title 185',1245366104,4,NULL),(877,'somesite.com/185',3879020087,1,0),(878,'page title 186',3543373538,4,NULL),(879,'somesite.com/186',2117891981,1,0),(880,'page title 187',2754913908,4,NULL),(881,'somesite.com/187',154879771,1,0),(882,'page title 188',881572837,4,NULL),(883,'somesite.com/188',2575587978,1,0),(884,'page title 189',1133284211,4,NULL),(885,'somesite.com/189',4001589788,1,0),(886,'page title 190',592118422,4,NULL),(887,'somesite.com/190',2386879481,1,0),(888,'page title 191',1414279680,4,NULL),(889,'somesite.com/191',4181971823,1,0),(890,'page title 192',3443876794,4,NULL),(891,'somesite.com/192',1615495893,1,0),(892,'page title 193',3124908844,4,NULL),(893,'somesite.com/193',390967875,1,0),(894,'page title 194',606520975,4,NULL),(895,'somesite.com/194',2301175776,1,0),(896,'page title 195',1394734617,4,NULL),(897,'somesite.com/195',4264433526,1,0),(898,'page title 196',3391661987,4,NULL),(899,'somesite.com/196',1730627276,1,0),(900,'page title 197',3174012725,4,NULL),(901,'somesite.com/197',270562906,1,0),(902,'page title 198',764447396,4,NULL),(903,'somesite.com/198',2157931467,1,0),(904,'page title 199',1519893042,4,NULL),(905,'somesite.com/199',4153957213,1,0),(906,'page title 200',4040099718,4,NULL),(907,'somesite.com/200',1572923113,1,0),(908,'page title 201',2278045456,4,NULL),(909,'somesite.com/201',717739647,1,0),(910,'page title 202',515991210,4,NULL),(911,'somesite.com/202',3016656837,1,0),(912,'page title 203',1774605884,4,NULL),(913,'somesite.com/203',3301554003,1,0),(914,'page title 204',4154639263,4,NULL),(915,'somesite.com/204',1521296112,1,0),(916,'page title 205',2158359305,4,NULL),(917,'somesite.com/205',766120550,1,0),(918,'page title 206',430744243,4,NULL),(919,'somesite.com/206',3030598620,1,0),(920,'page title 207',1856737829,4,NULL),(921,'somesite.com/207',3282334538,1,0),(922,'page title 208',4262760372,4,NULL),(923,'somesite.com/208',1394306779,1,0),(924,'page title 209',2299772706,4,NULL),(925,'somesite.com/209',605838925,1,0),(926,'page title 210',3922998983,4,NULL),(927,'somesite.com/210',1155258280,1,0),(928,'page title 211',2664629841,4,NULL),(929,'somesite.com/211',870115134,1,0),(930,'page title 212',131749867,4,NULL),(931,'somesite.com/212',2866132612,1,0),(932,'page title 213',1893558141,4,NULL),(933,'somesite.com/213',3721561618,1,0),(934,'page title 214',4005163742,4,NULL),(935,'somesite.com/214',1136006065,1,0),(936,'page title 215',2579415624,4,NULL),(937,'somesite.com/215',884024103,1,0),(938,'page title 216',12030962,4,NULL),(939,'somesite.com/216',2914546333,1,0),(940,'page title 217',2008064868,4,NULL),(941,'somesite.com/217',3669967371,1,0),(942,'page title 218',3876568821,4,NULL),(943,'somesite.com/218',1241538458,1,0),(944,'page title 219',2416479843,4,NULL),(945,'somesite.com/219',1023897356,1,0),(946,'page title 220',3271124228,4,NULL),(947,'somesite.com/220',1878426731,1,0),(948,'page title 221',3053344146,4,NULL),(949,'somesite.com/221',418493693,1,0),(950,'page title 222',754385960,4,NULL),(951,'somesite.com/222',2180572487,1,0),(952,'page title 223',1542468798,4,NULL),(953,'somesite.com/223',4143961553,1,0),(954,'page title 224',3314852125,4,NULL),(955,'somesite.com/224',1755005042,1,0),(956,'page title 225',2996015499,4,NULL),(957,'somesite.com/225',530346212,1,0),(958,'page title 226',731562033,4,NULL),(959,'somesite.com/226',2257920350,1,0),(960,'page title 227',1553854631,4,NULL),(961,'somesite.com/227',4052881864,1,0),(962,'page title 228',3424841014,4,NULL),(963,'somesite.com/228',1630342233,1,0),(964,'page title 229',3139820960,4,NULL),(965,'somesite.com/229',371866831,1,0),(966,'page title 230',3689043013,4,NULL),(967,'somesite.com/230',1995289898,1,0),(968,'page title 231',2900714707,4,NULL),(969,'somesite.com/231',32146876,1,0),(970,'page title 232',904672617,4,NULL),(971,'somesite.com/232',2565067782,1,0),(972,'page title 233',1122698751,4,NULL),(973,'somesite.com/233',4024755344,1,0),(974,'page title 234',3700396124,4,NULL),(975,'somesite.com/234',1904242995,1,0),(976,'page title 235',2877857994,4,NULL),(977,'somesite.com/235',109527461,1,0),(978,'page title 236',847376752,4,NULL),(979,'somesite.com/236',2676887583,1,0),(980,'page title 237',1166459366,4,NULL),(981,'somesite.com/237',3901300873,1,0),(982,'page title 238',3577338999,4,NULL),(983,'somesite.com/238',2016820504,1,0),(984,'page title 239',2722032865,4,NULL),(985,'somesite.com/239',254872974,1,0),(986,'page title 240',2493760130,4,NULL),(987,'somesite.com/240',967582701,1,0),(988,'page title 241',3819237908,4,NULL),(989,'somesite.com/241',1319834491,1,0),(990,'page title 242',2058199982,4,NULL),(991,'somesite.com/242',3617735361,1,0),(992,'page title 243',229282616,4,NULL),(993,'somesite.com/243',2695197271,1,0),(994,'page title 244',2479752859,4,NULL),(995,'somesite.com/244',1052895220,1,0),(996,'page title 245',3838391821,4,NULL),(997,'somesite.com/245',1237768034,1,0),(998,'page title 246',2109761463,4,NULL),(999,'somesite.com/246',3503261400,1,0),(1000,'page title 247',180836129,4,NULL),(1001,'somesite.com/247',2814948942,1,0),(1002,'page title 248',2591574704,4,NULL),(1003,'somesite.com/248',930589663,1,0),(1004,'page title 249',3984554534,4,NULL),(1005,'somesite.com/249',1081121609,1,0),(1006,'page title 250',2377708483,4,NULL),(1007,'somesite.com/250',548868780,1,0),(1008,'page title 251',4206871381,4,NULL),(1009,'somesite.com/251',1471160890,1,0),(1010,'page title 252',1672909551,4,NULL),(1011,'somesite.com/252',3468260224,1,0),(1012,'page title 253',347185785,4,NULL),(1013,'somesite.com/253',3116253974,1,0),(1014,'page title 254',2329229274,4,NULL),(1015,'somesite.com/254',668653237,1,0),(1016,'page title 255',4258400076,4,NULL),(1017,'somesite.com/255',1356719651,1,0),(1018,'page title 256',1692096246,4,NULL),(1019,'somesite.com/256',3386161049,1,0),(1020,'page title 257',333211232,4,NULL),(1021,'somesite.com/257',3201533711,1,0),(1022,'page title 258',2204335089,4,NULL),(1023,'somesite.com/258',778869406,1,0),(1024,'page title 259',4100213607,4,NULL),(1025,'somesite.com/259',1500228104,1,0),(1026,'page title 260',2794823680,4,NULL),(1027,'somesite.com/260',194658671,1,0),(1028,'page title 261',3516043414,4,NULL),(1029,'somesite.com/261',2090693113,1,0),(1030,'page title 262',1218167084,4,NULL),(1031,'somesite.com/262',3851690051,1,0),(1032,'page title 263',1067250106,4,NULL),(1033,'somesite.com/263',2459111637,1,0),(1034,'page title 264',2717410329,4,NULL),(1035,'somesite.com/264',217548150,1,0),(1036,'page title 265',3607057551,4,NULL),(1037,'somesite.com/265',2079372768,1,0),(1038,'page title 266',1341523253,4,NULL),(1039,'somesite.com/266',3808027738,1,0),(1040,'page title 267',955332003,4,NULL),(1041,'somesite.com/267',2516505804,1,0),(1042,'page title 268',2823694386,4,NULL),(1043,'somesite.com/268',88197469,1,0),(1044,'page title 269',3746109604,4,NULL),(1045,'somesite.com/269',1917254091,1,0),(1046,'page title 270',3213791553,4,NULL),(1047,'somesite.com/270',310472750,1,0),(1048,'page title 271',3364463063,4,NULL),(1049,'somesite.com/271',1703297208,1,0),(1050,'page title 272',1367404653,4,NULL),(1051,'somesite.com/272',4237234434,1,0),(1052,'page title 273',646430971,4,NULL),(1053,'somesite.com/273',2340954516,1,0),(1054,'page title 274',3101906264,4,NULL),(1055,'somesite.com/274',367834167,1,0),(1056,'page title 275',3487851982,4,NULL),(1057,'somesite.com/275',1659602081,1,0),(1058,'page title 276',1458386036,4,NULL),(1059,'somesite.com/276',4225946907,1,0),(1060,'page title 277',568984802,4,NULL),(1061,'somesite.com/277',2363876749,1,0),(1062,'page title 278',2975144307,4,NULL),(1063,'somesite.com/278',475723804,1,0),(1064,'page title 279',3327273445,4,NULL),(1065,'somesite.com/279',1801308298,1,0),(1066,'page title 280',941002126,4,NULL),(1067,'somesite.com/280',2501471457,1,0),(1068,'page title 281',1326562584,4,NULL),(1069,'somesite.com/281',3793640567,1,0),(1070,'page title 282',3591957666,4,NULL),(1071,'somesite.com/282',2065108429,1,0),(1072,'page title 283',2703219764,4,NULL),(1073,'somesite.com/283',202390875,1,0),(1074,'page title 284',1065044375,4,NULL),(1075,'somesite.com/284',2457118968,1,0),(1076,'page title 285',1216116993,4,NULL),(1077,'somesite.com/285',3849558126,1,0),(1078,'page title 286',3514116283,4,NULL),(1079,'somesite.com/286',2088421844,1,0),(1080,'page title 287',2792495149,4,NULL),(1081,'somesite.com/287',192805186,1,0),(1082,'page title 288',919406012,4,NULL),(1083,'somesite.com/288',2613241043,1,0),(1084,'page title 289',1103770922,4,NULL),(1085,'somesite.com/289',3972387909,1,0),(1086,'page title 290',554548431,4,NULL),(1087,'somesite.com/290',2348965280,1,0),(1088,'page title 291',1443531865,4,NULL),(1089,'somesite.com/291',4211436854,1,0),(1090,'page title 292',3473137123,4,NULL),(1091,'somesite.com/292',1644969100,1,0),(1092,'page title 293',3087330677,4,NULL),(1093,'somesite.com/293',353045530,1,0),(1094,'page title 294',643856598,4,NULL),(1095,'somesite.com/294',2339346873,1,0),(1096,'page title 295',1365723200,4,NULL),(1097,'somesite.com/295',4234717487,1,0),(1098,'page title 296',3362658810,4,NULL),(1099,'somesite.com/296',1700919445,1,0),(1100,'page title 297',3211340140,4,NULL),(1101,'somesite.com/297',308725763,1,0),(1102,'page title 298',802567421,4,NULL),(1103,'somesite.com/298',2195314066,1,0),(1104,'page title 299',1490093163,4,NULL),(1105,'somesite.com/299',4125025540,1,0),(1106,'page title 300',4044189105,4,NULL),(1107,'somesite.com/300',1543671006,1,0),(1108,'page title 301',2248826151,4,NULL),(1109,'somesite.com/301',721796168,1,0),(1110,'page title 302',520293533,4,NULL),(1111,'somesite.com/302',2987191794,1,0),(1112,'page title 303',1745107979,4,NULL),(1113,'somesite.com/303',3305889124,1,0),(1114,'page title 304',4133530024,4,NULL),(1115,'somesite.com/304',1534019783,1,0),(1116,'page title 305',2171050302,4,NULL),(1117,'somesite.com/305',745044049,1,0),(1118,'page title 306',409913476,4,NULL),(1119,'somesite.com/306',3043043819,1,0),(1120,'page title 307',1869215762,4,NULL),(1121,'somesite.com/307',3261471101,1,0),(1122,'page title 308',4292273539,4,NULL),(1123,'somesite.com/308',1389954284,1,0),(1124,'page title 309',2295452949,4,NULL),(1125,'somesite.com/309',635319418,1,0),(1126,'page title 310',3893779696,4,NULL),(1127,'somesite.com/310',1159314847,1,0),(1128,'page title 311',2668719206,4,NULL),(1129,'somesite.com/311',840862985,1,0),(1130,'page title 312',102251996,4,NULL),(1131,'somesite.com/312',2870467763,1,0),(1132,'page title 313',1897860426,4,NULL),(1133,'somesite.com/313',3692096549,1,0),(1134,'page title 314',4017854697,4,NULL),(1135,'somesite.com/314',1114929542,1,0),(1136,'page title 315',2558306431,4,NULL),(1137,'somesite.com/315',896747792,1,0),(1138,'page title 316',24508869,4,NULL),(1139,'somesite.com/316',2893682858,1,0),(1140,'page title 317',1987234131,4,NULL),(1141,'somesite.com/317',3682412604,1,0),(1142,'page title 318',3872249026,4,NULL),(1143,'somesite.com/318',1271018925,1,0),(1144,'page title 319',2445993044,4,NULL),(1145,'somesite.com/319',1019544891,1,0),(1146,'page title 320',3275427635,4,NULL),(1147,'somesite.com/320',1848962652,1,0),(1148,'page title 321',3023847333,4,NULL),(1149,'somesite.com/321',422829770,1,0),(1150,'page title 322',758476319,4,NULL),(1151,'somesite.com/322',2151321456,1,0),(1152,'page title 323',1513250441,4,NULL),(1153,'somesite.com/323',4148019174,1,0),(1154,'page title 324',3294022442,4,NULL),(1155,'somesite.com/324',1767451205,1,0),(1156,'page title 325',3008494524,4,NULL),(1157,'somesite.com/325',509483731,1,0),(1158,'page title 326',710453766,4,NULL),(1159,'somesite.com/326',2270645097,1,0),(1160,'page title 327',1566546576,4,NULL),(1161,'somesite.com/327',4031806463,1,0),(1162,'page title 328',3454043905,4,NULL),(1163,'somesite.com/328',1626302062,1,0),(1164,'page title 329',3135747991,4,NULL),(1165,'somesite.com/329',401102584,1,0),(1166,'page title 330',3659546226,4,NULL),(1167,'somesite.com/330',1999626013,1,0),(1168,'page title 331',2905018084,4,NULL),(1169,'somesite.com/331',2682763,1,0),(1170,'page title 332',875454302,4,NULL),(1171,'somesite.com/332',2569125425,1,0),(1172,'page title 333',1126789064,4,NULL),(1173,'somesite.com/333',3995504295,1,0),(1174,'page title 334',3712875115,4,NULL),(1175,'somesite.com/334',1883380484,1,0),(1176,'page title 335',2857028349,4,NULL),(1177,'somesite.com/335',121973650,1,0),(1178,'page title 336',860068679,4,NULL),(1179,'somesite.com/336',2655812136,1,0),(1180,'page title 337',1145351121,4,NULL),(1181,'somesite.com/337',3914025662,1,0),(1182,'page title 338',3573265984,4,NULL),(1183,'somesite.com/338',2046056239,1,0),(1184,'page title 339',2751235798,4,NULL),(1185,'somesite.com/339',250832825,1,0),(1186,'page title 340',2506205365,4,NULL),(1187,'somesite.com/340',946751962,1,0),(1188,'page title 341',3798374435,4,NULL),(1189,'somesite.com/341',1332312396,1,0),(1190,'page title 342',2070923673,4,NULL),(1191,'somesite.com/342',3596626166,1,0),(1192,'page title 343',208206095,4,NULL),(1193,'somesite.com/343',2707888224,1,0),(1194,'page title 344',2450287788,4,NULL),(1195,'somesite.com/344',1057197507,1,0),(1196,'page title 345',3842726970,4,NULL),(1197,'somesite.com/345',1208270165,1,0),(1198,'page title 346',2080509312,4,NULL),(1199,'somesite.com/346',3507350767,1,0),(1200,'page title 347',184892694,4,NULL),(1201,'somesite.com/347',2785729657,1,0),(1202,'page title 348',2612666503,4,NULL),(1203,'somesite.com/348',917881320,1,0),(1204,'page title 349',3971813393,4,NULL),(1205,'somesite.com/349',1102246270,1,0),(1206,'page title 350',2356845044,4,NULL),(1207,'somesite.com/350',561346715,1,0),(1208,'page title 351',4219316578,4,NULL),(1209,'somesite.com/351',1450330125,1,0),(1210,'page title 352',1651833048,4,NULL),(1211,'somesite.com/352',3480951223,1,0),(1212,'page title 353',359909454,4,NULL),(1213,'somesite.com/353',3095144737,1,0),(1214,'page title 354',2333564397,4,NULL),(1215,'somesite.com/354',639155330,1,0),(1216,'page title 355',4228935035,4,NULL),(1217,'somesite.com/355',1361021972,1,0),(1218,'page title 356',1696152769,4,NULL),(1219,'somesite.com/356',3356941742,1,0),(1220,'page title 357',303959127,4,NULL),(1221,'somesite.com/357',3205623096,1,0),(1222,'page title 358',2191593926,4,NULL),(1223,'somesite.com/358',799994025,1,0),(1224,'page title 359',4121305424,4,NULL),(1225,'somesite.com/359',1487519807,1,0),(1226,'page title 360',2807548471,4,NULL),(1227,'somesite.com/360',173550424,1,0),(1228,'page title 361',3494967969,4,NULL),(1229,'somesite.com/361',2103385038,1,0),(1230,'page title 362',1230613275,4,NULL),(1231,'somesite.com/362',3830860404,1,0),(1232,'page title 363',1046387597,4,NULL),(1233,'somesite.com/363',2471590626,1,0),(1234,'page title 364',2688159278,4,NULL),(1235,'somesite.com/364',221638465,1,0),(1236,'page title 365',3611115192,4,NULL),(1237,'somesite.com/365',2050154455,1,0),(1238,'page title 366',1312059138,4,NULL),(1239,'somesite.com/366',3812331117,1,0),(1240,'page title 367',959668116,4,NULL),(1241,'somesite.com/367',2487009019,1,0),(1242,'page title 368',2844541445,4,NULL),(1243,'somesite.com/368',75735914,1,0),(1244,'page title 369',3733680787,4,NULL),(1245,'somesite.com/369',1938068476,1,0),(1246,'page title 370',3192716150,4,NULL),(1247,'somesite.com/370',323164697,1,0),(1248,'page title 371',3377187808,4,NULL),(1249,'somesite.com/371',1682188943,1,0),(1250,'page title 372',1346542170,4,NULL),(1251,'somesite.com/372',4249713461,1,0),(1252,'page title 373',658877132,4,NULL),(1253,'somesite.com/373',2320124835,1,0),(1254,'page title 374',3105963887,4,NULL),(1255,'somesite.com/374',338615808,1,0),(1256,'page title 375',3458600953,4,NULL),(1257,'somesite.com/375',1663692438,1,0),(1258,'page title 376',1462722115,4,NULL),(1259,'somesite.com/376',4196450092,1,0),(1260,'page title 377',539520725,4,NULL),(1261,'somesite.com/377',2368180154,1,0),(1262,'page title 378',2962715460,4,NULL),(1263,'somesite.com/378',496538155,1,0),(1264,'page title 379',3348120530,4,NULL),(1265,'somesite.com/379',1788846781,1,0),(1266,'page title 380',970254265,4,NULL),(1267,'somesite.com/380',2497382102,1,0),(1268,'page title 381',1322506031,4,NULL),(1269,'somesite.com/381',3822859840,1,0),(1270,'page title 382',3621422741,4,NULL),(1271,'somesite.com/382',2060806138,1,0),(1272,'page title 383',2698884611,4,NULL),(1273,'somesite.com/383',231888748,1,0),(1274,'page title 384',1052320672,4,NULL),(1275,'somesite.com/384',2478228175,1,0),(1276,'page title 385',1237193526,4,NULL),(1277,'somesite.com/385',3836867161,1,0),(1278,'page title 386',3501671052,4,NULL),(1279,'somesite.com/386',2109252579,1,0),(1280,'page title 387',2813358618,4,NULL),(1281,'somesite.com/387',180327285,1,0),(1282,'page title 388',923758475,4,NULL),(1283,'somesite.com/388',2583727844,1,0),(1284,'page title 389',1074290461,4,NULL),(1285,'somesite.com/389',3976707698,1,0),(1286,'page title 390',550491896,4,NULL),(1287,'somesite.com/390',2378184599,1,0),(1288,'page title 391',1472783982,4,NULL),(1289,'somesite.com/391',4207347457,1,0),(1290,'page title 392',3468802004,4,NULL),(1291,'somesite.com/392',1674467003,1,0),(1292,'page title 393',3116795714,4,NULL),(1293,'somesite.com/393',348743213,1,0),(1294,'page title 394',664933089,4,NULL),(1295,'somesite.com/394',2326655886,1,0),(1296,'page title 395',1352999543,4,NULL),(1297,'somesite.com/395',4255826712,1,0),(1298,'page title 396',3383522253,4,NULL),(1299,'somesite.com/396',1688441506,1,0),(1300,'page title 397',3198894939,4,NULL),(1301,'somesite.com/397',329556532,1,0),(1302,'page title 398',773086922,4,NULL),(1303,'somesite.com/398',2199633829,1,0),(1304,'page title 399',1494445660,4,NULL),(1305,'somesite.com/399',4095512371,1,0),(1306,'page title 400',4097997620,4,NULL),(1307,'somesite.com/400',1498258011,1,0),(1308,'page title 401',2202356642,4,NULL),(1309,'somesite.com/401',776645325,1,0),(1310,'page title 402',441195032,4,NULL),(1311,'somesite.com/402',3074685815,1,0),(1312,'page title 403',1833642638,4,NULL),(1313,'somesite.com/403',3225734113,1,0),(1314,'page title 404',4079992621,4,NULL),(1315,'somesite.com/404',1579179586,1,0),(1316,'page title 405',2217250747,4,NULL),(1317,'somesite.com/405',690450132,1,0),(1318,'page title 406',488758785,4,NULL),(1319,'somesite.com/406',2955820910,1,0),(1320,'page title 407',1780936343,4,NULL),(1321,'somesite.com/407',3341357048,1,0),(1322,'page title 408',4204393222,4,NULL),(1323,'somesite.com/408',1469452905,1,0),(1324,'page title 409',2375992208,4,NULL),(1325,'somesite.com/409',546382591,1,0),(1326,'page title 410',3982051957,4,NULL),(1327,'somesite.com/410',1079421722,1,0),(1328,'page title 411',2589883107,4,NULL),(1329,'somesite.com/411',928095116,1,0),(1330,'page title 412',56044377,4,NULL),(1331,'somesite.com/412',2925054518,1,0),(1332,'page title 413',1951407055,4,NULL),(1333,'somesite.com/413',3646945952,1,0),(1334,'page title 414',3929312876,4,NULL),(1335,'somesite.com/414',1195077379,1,0),(1336,'page title 415',2637414138,4,NULL),(1337,'somesite.com/415',809262997,1,0),(1338,'page title 416',70971200,4,NULL),(1339,'somesite.com/416',2838826543,1,0),(1340,'page title 417',1933434838,4,NULL),(1341,'somesite.com/417',3727834809,1,0),(1342,'page title 418',3816997447,4,NULL),(1343,'somesite.com/418',1317872424,1,0),(1344,'page title 419',2491806417,4,NULL),(1345,'somesite.com/419',965350334,1,0),(1346,'page title 420',3329497526,4,NULL),(1347,'somesite.com/420',1803286745,1,0),(1348,'page title 421',2977114400,4,NULL),(1349,'somesite.com/421',477939791,1,0),(1350,'page title 422',679114906,4,NULL),(1351,'somesite.com/422',2239076853,1,0),(1352,'page title 423',1602045964,4,NULL),(1353,'somesite.com/423',4067600739,1,0),(1354,'page title 424',3239697839,4,NULL),(1355,'somesite.com/424',1813396672,1,0),(1356,'page title 425',3055480121,4,NULL),(1357,'somesite.com/425',454102102,1,0),(1358,'page title 426',790084739,4,NULL),(1359,'somesite.com/426',2182634988,1,0),(1360,'page title 427',1477479445,4,NULL),(1361,'somesite.com/427',4112477562,1,0),(1362,'page title 428',3366949252,4,NULL),(1363,'somesite.com/428',1705013483,1,0),(1364,'page title 429',3215499538,4,NULL),(1365,'somesite.com/429',312950909,1,0),(1366,'page title 430',3748604151,4,NULL),(1367,'somesite.com/430',1918945688,1,0),(1368,'page title 431',2825394273,4,NULL),(1369,'somesite.com/431',90700046,1,0),(1370,'page title 432',828459483,4,NULL),(1371,'somesite.com/432',2624497844,1,0),(1372,'page title 433',1181120845,4,NULL),(1373,'somesite.com/433',3949565986,1,0),(1374,'page title 434',3624070382,4,NULL),(1375,'somesite.com/434',1963789697,1,0),(1376,'page title 435',2936396920,4,NULL),(1377,'somesite.com/435',34225431,1,0),(1378,'page title 436',906792386,4,NULL),(1379,'somesite.com/436',2600692909,1,0),(1380,'page title 437',1091288404,4,NULL),(1381,'somesite.com/437',3959708731,1,0),(1382,'page title 438',3518275781,4,NULL),(1383,'somesite.com/438',2092646826,1,0),(1384,'page title 439',2796785747,4,NULL),(1385,'somesite.com/439',196899132,1,0),(1386,'page title 440',2418982448,4,NULL),(1387,'somesite.com/440',1025597279,1,0),(1388,'page title 441',3878260390,4,NULL),(1389,'somesite.com/441',1244032969,1,0),(1390,'page title 442',2116083484,4,NULL),(1391,'somesite.com/442',3543088755,1,0),(1392,'page title 443',153612170,4,NULL),(1393,'somesite.com/443',2754088677,1,0),(1394,'page title 444',2537781801,4,NULL),(1395,'somesite.com/444',978099014,1,0),(1396,'page title 445',3762571967,4,NULL),(1397,'somesite.com/445',1296804816,1,0),(1398,'page title 446',2035096325,4,NULL),(1399,'somesite.com/446',3561159274,1,0),(1400,'page title 447',239741843,4,NULL),(1401,'somesite.com/447',2739260156,1,0),(1402,'page title 448',2666870274,4,NULL),(1403,'somesite.com/448',872077165,1,0),(1404,'page title 449',3924952724,4,NULL),(1405,'somesite.com/449',1157490683,1,0),(1406,'page title 450',2301988721,4,NULL),(1407,'somesite.com/450',607809054,1,0),(1408,'page title 451',4264738791,4,NULL),(1409,'somesite.com/451',1396530824,1,0),(1410,'page title 452',1731980893,4,NULL),(1411,'somesite.com/452',3392409394,1,0),(1412,'page title 453',272424651,4,NULL),(1413,'somesite.com/453',3174252452,1,0),(1414,'page title 454',2388151144,4,NULL),(1415,'somesite.com/454',592947719,1,0),(1416,'page title 455',4183784446,4,NULL),(1417,'somesite.com/455',1414568593,1,0),(1418,'page title 456',1616259652,4,NULL),(1419,'somesite.com/456',3445213995,1,0),(1420,'page title 457',391191250,4,NULL),(1421,'somesite.com/457',3126787005,1,0),(1422,'page title 458',2280523587,4,NULL),(1423,'somesite.com/458',719447596,1,0),(1424,'page title 459',4041816021,4,NULL),(1425,'somesite.com/459',1575409338,1,0),(1426,'page title 460',2719538354,4,NULL),(1427,'somesite.com/460',253181405,1,0),(1428,'page title 461',3575639076,4,NULL),(1429,'somesite.com/461',2014317899,1,0),(1430,'page title 462',1276558750,4,NULL),(1431,'somesite.com/462',3776535793,1,0),(1432,'page title 463',991005960,4,NULL),(1433,'somesite.com/463',2518576231,1,0),(1434,'page title 464',2775914667,4,NULL),(1435,'somesite.com/464',142277060,1,0),(1436,'page title 465',3530696765,4,NULL),(1437,'somesite.com/465',2138949970,1,0),(1438,'page title 466',1266383239,4,NULL),(1439,'somesite.com/466',3866401000,1,0),(1440,'page title 467',1014778129,4,NULL),(1441,'somesite.com/467',2440276094,1,0),(1442,'page title 468',2898482304,4,NULL),(1443,'somesite.com/468',30193135,1,0),(1444,'page title 469',3687080982,4,NULL),(1445,'somesite.com/469',1993049465,1,0),(1446,'page title 470',3137596915,4,NULL),(1447,'somesite.com/470',369888412,1,0),(1448,'page title 471',3422870885,4,NULL),(1449,'somesite.com/471',1628126218,1,0),(1450,'page title 472',1426951391,4,NULL),(1451,'somesite.com/472',4160908720,1,0),(1452,'page title 473',571128905,4,NULL),(1453,'somesite.com/473',2399493414,1,0),(1454,'page title 474',3161336298,4,NULL),(1455,'somesite.com/474',291620997,1,0),(1456,'page title 475',3412662652,4,NULL),(1457,'somesite.com/475',1718024211,1,0),(1458,'page title 476',1382041798,4,NULL),(1459,'somesite.com/476',4285508009,1,0),(1460,'page title 477',627538000,4,NULL),(1461,'somesite.com/477',2288556351,1,0),(1462,'page title 478',3050857921,4,NULL),(1463,'somesite.com/478',416777390,1,0),(1464,'page title 479',3269416279,4,NULL),(1465,'somesite.com/479',1875948600,1,0),(1466,'page title 480',1016852796,4,NULL),(1467,'somesite.com/480',2442399827,1,0),(1468,'page title 481',1268564394,4,NULL),(1469,'somesite.com/481',3868401861,1,0),(1470,'page title 482',3533017104,4,NULL),(1471,'somesite.com/482',2140828031,1,0),(1472,'page title 483',2777849990,4,NULL),(1473,'somesite.com/483',144523753,1,0),(1474,'page title 484',1005991205,4,NULL),(1475,'somesite.com/484',2532955210,1,0),(1476,'page title 485',1290864051,4,NULL),(1477,'somesite.com/485',3791578332,1,0),(1478,'page title 486',3589821449,4,NULL),(1479,'somesite.com/486',2029499750,1,0),(1480,'page title 487',2734646431,4,NULL),(1481,'somesite.com/487',267421168,1,0),(1482,'page title 488',843086094,4,NULL),(1483,'somesite.com/488',2672793697,1,0),(1484,'page title 489',1162299800,4,NULL),(1485,'somesite.com/489',3897075959,1,0),(1486,'page title 490',629194877,4,NULL),(1487,'somesite.com/490',2291081490,1,0),(1488,'page title 491',1384640747,4,NULL),(1489,'somesite.com/491',4287107460,1,0),(1490,'page title 492',3415122257,4,NULL),(1491,'somesite.com/492',1719746622,1,0),(1492,'page title 493',3163132359,4,NULL),(1493,'somesite.com/493',294023336,1,0),(1494,'page title 494',585958500,4,NULL),(1495,'somesite.com/494',2414011659,1,0),(1496,'page title 495',1441412338,4,NULL),(1497,'somesite.com/495',4175811997,1,0),(1498,'page title 496',3437454664,4,NULL),(1499,'somesite.com/496',1642890279,1,0),(1500,'page title 497',3152303582,4,NULL),(1501,'somesite.com/497',384545969,1,0),(1502,'page title 498',727402575,4,NULL),(1503,'somesite.com/498',2253695264,1,0),(1504,'page title 499',1549564121,4,NULL),(1505,'somesite.com/499',4048787894,1,0),(1506,'page title 500',4118810883,4,NULL),(1507,'somesite.com/500',1485828204,1,0),(1508,'page title 501',2189894037,4,NULL),(1509,'somesite.com/501',797491450,1,0),(1510,'page title 502',462319663,4,NULL),(1511,'somesite.com/502',3061944640,1,0),(1512,'page title 503',1820934329,4,NULL),(1513,'somesite.com/503',3246825942,1,0),(1514,'page title 504',4075672858,4,NULL),(1515,'somesite.com/504',1608660085,1,0),(1516,'page title 505',2246763916,4,NULL),(1517,'somesite.com/505',686097635,1,0),(1518,'page title 506',484684854,4,NULL),(1519,'somesite.com/506',2985055577,1,0),(1520,'page title 507',1810138272,4,NULL),(1521,'somesite.com/507',3337315791,1,0),(1522,'page title 508',4217084209,4,NULL),(1523,'somesite.com/508',1448376414,1,0),(1524,'page title 509',2354882983,4,NULL),(1525,'somesite.com/509',559106248,1,0),(1526,'page title 510',3969589314,4,NULL),(1527,'somesite.com/510',1100267821,1,0),(1528,'page title 511',2610696404,4,NULL),(1529,'somesite.com/511',915665339,1,0),(1530,'page title 512',43336046,4,NULL),(1531,'somesite.com/512',2946146305,1,0),(1532,'page title 513',1972531704,4,NULL),(1533,'somesite.com/513',3634204823,1,0),(1534,'page title 514',3958826075,4,NULL),(1535,'somesite.com/514',1190724916,1,0),(1536,'page title 515',2633094349,4,NULL),(1537,'somesite.com/515',838743458,1,0),(1538,'page title 516',100173175,4,NULL),(1539,'somesite.com/516',2834785304,1,0),(1540,'page title 517',1929360865,4,NULL),(1541,'somesite.com/517',3757069454,1,0),(1542,'page title 518',3795888240,4,NULL),(1543,'somesite.com/518',1330596127,1,0),(1544,'page title 519',2504497382,4,NULL),(1545,'somesite.com/519',944273801,1,0),(1546,'page title 520',3350623105,4,NULL),(1547,'somesite.com/520',1790546670,1,0),(1548,'page title 521',2964407063,4,NULL),(1549,'somesite.com/521',499032696,1,0),(1550,'page title 522',699929261,4,NULL),(1551,'somesite.com/522',2226648002,1,0),(1552,'page title 523',1589584443,4,NULL),(1553,'somesite.com/523',4088447828,1,0),(1554,'page title 524',3235624856,4,NULL),(1555,'somesite.com/524',1842632439,1,0),(1556,'page title 525',3084683022,4,NULL),(1557,'somesite.com/525',450061921,1,0),(1558,'page title 526',785766068,4,NULL),(1559,'somesite.com/526',2212116443,1,0),(1560,'page title 527',1506993698,4,NULL),(1561,'somesite.com/527',4108126029,1,0),(1562,'page title 528',3379428275,4,NULL),(1563,'somesite.com/528',1684151004,1,0),(1564,'page title 529',3194669861,4,NULL),(1565,'somesite.com/529',325397066,1,0),(1566,'page title 530',3735896768,4,NULL),(1567,'somesite.com/530',1940038575,1,0),(1568,'page title 531',2846519894,4,NULL),(1569,'somesite.com/531',77959993,1,0),(1570,'page title 532',815997932,4,NULL),(1571,'somesite.com/532',2645344899,1,0),(1572,'page title 533',1201935226,4,NULL),(1573,'somesite.com/533',3937137173,1,0),(1574,'page title 534',3653273305,4,NULL),(1575,'somesite.com/534',1959749558,1,0),(1576,'page title 535',2932323919,4,NULL),(1577,'somesite.com/535',63461152,1,0),(1578,'page title 536',936306677,4,NULL),(1579,'somesite.com/536',2596341402,1,0),(1580,'page title 537',1086969699,4,NULL),(1581,'somesite.com/537',3989190156,1,0),(1582,'page title 538',3497446130,4,NULL),(1583,'somesite.com/538',2105093021,1,0),(1584,'page title 539',2809264740,4,NULL),(1585,'somesite.com/539',176036619,1,0),(1586,'page title 540',2448217095,4,NULL),(1587,'somesite.com/540',1021523304,1,0),(1588,'page title 541',3874219153,4,NULL),(1589,'somesite.com/541',1273234942,1,0),(1590,'page title 542',2145563947,4,NULL),(1591,'somesite.com/542',3538768964,1,0),(1592,'page title 543',149259709,4,NULL),(1593,'somesite.com/543',2783601874,1,0),(1594,'page title 544',2525040670,4,NULL),(1595,'somesite.com/544',999223665,1,0),(1596,'page title 545',3783663752,4,NULL),(1597,'somesite.com/545',1284096487,1,0),(1598,'page title 546',2022666546,4,NULL),(1599,'somesite.com/546',3581972573,1,0),(1600,'page title 547',260587940,4,NULL),(1601,'somesite.com/547',2726797515,1,0),(1602,'page title 548',2671205429,4,NULL),(1603,'somesite.com/548',842579290,1,0),(1604,'page title 549',3895487651,4,NULL),(1605,'somesite.com/549',1161792972,1,0),(1606,'page title 550',2297947462,4,NULL),(1607,'somesite.com/550',637010985,1,0),(1608,'page title 551',4293973456,4,NULL),(1609,'somesite.com/551',1392456895,1,0),(1610,'page title 552',1727628394,4,NULL),(1611,'somesite.com/552',3421922565,1,0),(1612,'page title 553',301905148,4,NULL),(1613,'somesite.com/553',3169932691,1,0),(1614,'page title 554',2409242975,4,NULL),(1615,'somesite.com/554',580239408,1,0),(1616,'page title 555',4171043273,4,NULL),(1617,'somesite.com/555',1435693222,1,0),(1618,'page title 556',1637105779,4,NULL),(1619,'somesite.com/556',3432751388,1,0),(1620,'page title 557',378761445,4,NULL),(1621,'somesite.com/557',3147600266,1,0),(1622,'page title 558',2251058548,4,NULL),(1623,'somesite.com/558',723749915,1,0),(1624,'page title 559',4046151138,4,NULL),(1625,'somesite.com/559',1545911437,1,0),(1626,'page title 560',2749019781,4,NULL),(1627,'somesite.com/560',248862698,1,0),(1628,'page title 561',3571287571,4,NULL),(1629,'somesite.com/561',2043832188,1,0),(1630,'page title 562',1305794473,4,NULL),(1631,'somesite.com/562',3772462790,1,0),(1632,'page title 563',986965823,4,NULL),(1633,'somesite.com/563',2547779152,1,0),(1634,'page title 564',2763485852,4,NULL),(1635,'somesite.com/564',163091443,1,0),(1636,'page title 565',3551543818,4,NULL),(1637,'somesite.com/565',2126488421,1,0),(1638,'page title 566',1253643184,4,NULL),(1639,'somesite.com/566',3887526623,1,0),(1640,'page title 567',1035871014,4,NULL),(1641,'somesite.com/567',2427568713,1,0),(1642,'page title 568',2902539959,4,NULL),(1643,'somesite.com/568',974808,1,0),(1644,'page title 569',3657829921,4,NULL),(1645,'somesite.com/569',1997139790,1,0),(1646,'page title 570',3133245380,4,NULL),(1647,'somesite.com/570',399402667,1,0),(1648,'page title 571',3452352338,4,NULL),(1649,'somesite.com/571',1623807549,1,0),(1650,'page title 572',1422911208,4,NULL),(1651,'somesite.com/572',4190111623,1,0),(1652,'page title 573',600364670,4,NULL),(1653,'somesite.com/573',2395420433,1,0),(1654,'page title 574',3182183389,4,NULL),(1655,'somesite.com/574',279159474,1,0),(1656,'page title 575',3400233803,4,NULL),(1657,'somesite.com/575',1738838564,1,0),(1658,'page title 576',1403134705,4,NULL),(1659,'somesite.com/576',4272800670,1,0),(1660,'page title 577',614797927,4,NULL),(1661,'somesite.com/577',2309681928,1,0),(1662,'page title 578',3021606902,4,NULL),(1663,'somesite.com/578',420867737,1,0),(1664,'page title 579',3273473888,4,NULL),(1665,'somesite.com/579',1846730255,1,0),(1666,'page title 580',1029282571,4,NULL),(1667,'somesite.com/580',2421586532,1,0),(1668,'page title 581',1247718301,4,NULL),(1669,'somesite.com/581',3880864498,1,0),(1670,'page title 582',3545758247,4,NULL),(1671,'somesite.com/582',2119703368,1,0),(1672,'page title 583',2756758193,4,NULL),(1673,'somesite.com/583',157232094,1,0),(1674,'page title 584',976510738,4,NULL),(1675,'somesite.com/584',2537275005,1,0),(1676,'page title 585',1295216516,4,NULL),(1677,'somesite.com/585',3762065131,1,0),(1678,'page title 586',3560586814,4,NULL),(1679,'somesite.com/586',2033573713,1,0),(1680,'page title 587',2738687656,4,NULL),(1681,'somesite.com/587',238219207,1,0),(1682,'page title 588',864162617,4,NULL),(1683,'somesite.com/588',2660102742,1,0),(1684,'page title 589',1149576111,4,NULL),(1685,'somesite.com/589',3918185152,1,0),(1686,'page title 590',608348746,4,NULL),(1687,'somesite.com/590',2303544101,1,0),(1688,'page title 591',1397070556,4,NULL),(1689,'somesite.com/591',4266294195,1,0),(1690,'page title 592',3394030438,4,NULL),(1691,'somesite.com/592',1732454921,1,0),(1692,'page title 593',3175873520,4,NULL),(1693,'somesite.com/593',272898719,1,0),(1694,'page title 594',590310995,4,NULL),(1695,'somesite.com/594',2384498492,1,0),(1696,'page title 595',1411931845,4,NULL),(1697,'somesite.com/595',4180131754,1,0),(1698,'page title 596',3441495935,4,NULL),(1699,'somesite.com/596',1613688336,1,0),(1700,'page title 597',3123068905,4,NULL),(1701,'somesite.com/597',388619910,1,0),(1702,'page title 598',714678904,4,NULL),(1703,'somesite.com/598',2274804503,1,0),(1704,'page title 599',1570640622,4,NULL),(1705,'somesite.com/599',4036096897,1,0),(1706,'page title 600',4156993370,4,NULL),(1707,'somesite.com/600',1523142197,1,0),(1708,'page title 601',2160173004,4,NULL),(1709,'somesite.com/601',768507555,1,0),(1710,'page title 602',432590454,4,NULL),(1711,'somesite.com/602',3032952601,1,0),(1712,'page title 603',1859124960,4,NULL),(1713,'somesite.com/603',3284148111,1,0),(1714,'page title 604',4037765955,4,NULL),(1715,'somesite.com/604',1571064364,1,0),(1716,'page title 605',2276219861,4,NULL),(1717,'somesite.com/605',715373242,1,0),(1718,'page title 606',514132591,4,NULL),(1719,'somesite.com/606',3014322944,1,0),(1720,'page title 607',1772239609,4,NULL),(1721,'somesite.com/607',3299728278,1,0),(1722,'page title 608',4179437416,4,NULL),(1723,'somesite.com/608',1410516487,1,0),(1724,'page title 609',2384074750,4,NULL),(1725,'somesite.com/609',588641937,1,0),(1726,'page title 610',4007501339,4,NULL),(1727,'somesite.com/610',1137868660,1,0),(1728,'page title 611',2581245581,4,NULL),(1729,'somesite.com/611',886394850,1,0),(1730,'page title 612',13893431,4,NULL),(1731,'somesite.com/612',2916884056,1,0),(1732,'page title 613',2010435489,4,NULL),(1733,'somesite.com/613',3671797454,1,0),(1734,'page title 614',3920648706,4,NULL),(1735,'somesite.com/614',1153416045,1,0),(1736,'page title 615',2662820500,4,NULL),(1737,'somesite.com/615',867732475,1,0),(1738,'page title 616',129907502,4,NULL),(1739,'somesite.com/616',2863782465,1,0),(1740,'page title 617',1891175352,4,NULL),(1741,'somesite.com/617',3719752407,1,0),(1742,'page title 618',3758495273,4,NULL),(1743,'somesite.com/618',1292498758,1,0),(1744,'page title 619',2533435071,4,NULL),(1745,'somesite.com/619',974047184,1,0),(1746,'page title 620',3320892888,4,NULL),(1747,'somesite.com/620',1761553591,1,0),(1748,'page title 621',3002596686,4,NULL),(1749,'somesite.com/621',536353825,1,0),(1750,'page title 622',738110708,4,NULL),(1751,'somesite.com/622',2263960987,1,0),(1752,'page title 623',1559862370,4,NULL),(1753,'somesite.com/623',4059462925,1,0),(1754,'page title 624',3265071553,4,NULL),(1755,'somesite.com/624',1871898798,1,0),(1756,'page title 625',3046783319,4,NULL),(1757,'somesite.com/625',412473400,1,0),(1758,'page title 626',747858157,4,NULL),(1759,'somesite.com/626',2174519682,1,0),(1760,'page title 627',1536448635,4,NULL),(1761,'somesite.com/627',4137400596,1,0),(1762,'page title 628',3408610794,4,NULL),(1763,'somesite.com/628',1713677445,1,0),(1764,'page title 629',3157030268,4,NULL),(1765,'somesite.com/629',287544339,1,0),(1766,'page title 630',3706453145,4,NULL),(1767,'somesite.com/630',1910775286,1,0),(1768,'page title 631',2884422671,4,NULL),(1769,'somesite.com/631',115551584,1,0),(1770,'page title 632',853908917,4,NULL),(1771,'somesite.com/632',2682944730,1,0),(1772,'page title 633',1172483363,4,NULL),(1773,'somesite.com/633',3907865676,1,0),(1774,'page title 634',3683006592,4,NULL),(1775,'somesite.com/634',1988745711,1,0),(1776,'page title 635',2894137366,4,NULL),(1777,'somesite.com/635',26143097,1,0),(1778,'page title 636',898128300,4,NULL),(1779,'somesite.com/636',2559031491,1,0),(1780,'page title 637',1116694842,4,NULL),(1781,'somesite.com/637',4018178133,1,0),(1782,'page title 638',3526390955,4,NULL),(1783,'somesite.com/638',2134873540,1,0),(1784,'page title 639',2771862589,4,NULL),(1785,'somesite.com/639',137930066,1,0),(1786,'page title 640',2477419102,4,NULL),(1787,'somesite.com/640',1051036465,1,0),(1788,'page title 641',3836566216,4,NULL),(1789,'somesite.com/641',1235401639,1,0),(1790,'page title 642',2107902834,4,NULL),(1791,'somesite.com/642',3500927517,1,0),(1792,'page title 643',178469860,4,NULL),(1793,'somesite.com/643',2813123211,1,0),(1794,'page title 644',2496114247,4,NULL),(1795,'somesite.com/644',969428776,1,0),(1796,'page title 645',3821051601,4,NULL),(1797,'somesite.com/645',1322221502,1,0),(1798,'page title 646',2060046187,4,NULL),(1799,'somesite.com/646',3620089348,1,0),(1800,'page title 647',231669757,4,NULL),(1801,'somesite.com/647',2697010834,1,0),(1802,'page title 648',2641486444,4,NULL),(1803,'somesite.com/648',813564675,1,0),(1804,'page title 649',3933655802,4,NULL),(1805,'somesite.com/649',1199125397,1,0),(1806,'page title 650',2326879007,4,NULL),(1807,'somesite.com/650',666810992,1,0),(1808,'page title 651',4256590729,4,NULL),(1809,'somesite.com/651',1354336998,1,0),(1810,'page title 652',1690253875,4,NULL),(1811,'somesite.com/652',3383810908,1,0),(1812,'page title 653',330828453,4,NULL),(1813,'somesite.com/653',3199724490,1,0),(1814,'page title 654',2380046086,4,NULL),(1815,'somesite.com/654',550731369,1,0),(1816,'page title 655',4208701328,4,NULL),(1817,'somesite.com/655',1473531647,1,0),(1818,'page title 656',1674772010,4,NULL),(1819,'somesite.com/656',3470597957,1,0),(1820,'page title 657',349556412,4,NULL),(1821,'somesite.com/657',3118084051,1,0),(1822,'page title 658',2221593389,4,NULL),(1823,'somesite.com/658',694497858,1,0),(1824,'page title 659',4084065211,4,NULL),(1825,'somesite.com/659',1583481556,1,0),(1826,'page title 660',2711357660,4,NULL),(1827,'somesite.com/660',211020211,1,0),(1828,'page title 661',3600496714,4,NULL),(1829,'somesite.com/661',2073352485,1,0),(1830,'page title 662',1334995440,4,NULL),(1831,'somesite.com/662',3801974943,1,0),(1832,'page title 663',949311846,4,NULL),(1833,'somesite.com/663',2509944841,1,0),(1834,'page title 664',2800864453,4,NULL),(1835,'somesite.com/664',201207210,1,0),(1836,'page title 665',3522624595,4,NULL),(1837,'somesite.com/665',2096700732,1,0),(1838,'page title 666',1224715753,4,NULL),(1839,'somesite.com/666',3857730694,1,0),(1840,'page title 667',1073257855,4,NULL),(1841,'somesite.com/667',2465692688,1,0),(1842,'page title 668',2940698862,4,NULL),(1843,'somesite.com/668',38297985,1,0),(1844,'page title 669',3628118136,4,NULL),(1845,'somesite.com/669',1968132375,1,0),(1846,'page title 670',3095869853,4,NULL),(1847,'somesite.com/670',361289970,1,0),(1848,'page title 671',3481274635,4,NULL),(1849,'somesite.com/671',1653598308,1,0),(1850,'page title 672',1451841713,4,NULL),(1851,'somesite.com/672',4219910622,1,0),(1852,'page title 673',562980903,4,NULL),(1853,'somesite.com/673',2357299528,1,0),(1854,'page title 674',3219848580,4,NULL),(1855,'somesite.com/674',317005035,1,0),(1856,'page title 675',3371027730,4,NULL),(1857,'somesite.com/675',1709321341,1,0),(1858,'page title 676',1373936808,4,NULL),(1859,'somesite.com/676',4243291591,1,0),(1860,'page title 677',652454974,4,NULL),(1861,'somesite.com/677',2347519313,1,0),(1862,'page title 678',3059528111,4,NULL),(1863,'somesite.com/678',458444992,1,0),(1864,'page title 679',3243999545,4,NULL),(1865,'somesite.com/679',1817469014,1,0),(1866,'page title 680',1059005778,4,NULL),(1867,'somesite.com/680',2450572349,1,0),(1868,'page title 681',1209537988,4,NULL),(1869,'somesite.com/681',3843552427,1,0),(1870,'page title 682',3507569790,4,NULL),(1871,'somesite.com/682',2082383121,1,0),(1872,'page title 683',2786489576,4,NULL),(1873,'somesite.com/683',186226055,1,0),(1874,'page title 684',947052875,4,NULL),(1875,'somesite.com/684',2507997220,1,0),(1876,'page title 685',1333121501,4,NULL),(1877,'somesite.com/685',3799658674,1,0),(1878,'page title 686',3598483559,4,NULL),(1879,'somesite.com/686',2071159048,1,0),(1880,'page title 687',2709238001,4,NULL),(1881,'somesite.com/687',208949662,1,0),(1882,'page title 688',834973024,4,NULL),(1883,'somesite.com/688',2630568975,1,0),(1884,'page title 689',1187225078,4,NULL),(1885,'somesite.com/689',3956047001,1,0),(1886,'page title 690',637801491,4,NULL),(1887,'somesite.com/690',2332816764,1,0),(1888,'page title 691',1359160453,4,NULL),(1889,'somesite.com/691',4228695530,1,0),(1890,'page title 692',3356128575,4,NULL),(1891,'somesite.com/692',1694864464,1,0),(1892,'page title 693',3205318057,4,NULL),(1893,'somesite.com/693',302163142,1,0),(1894,'page title 694',560582666,4,NULL),(1895,'somesite.com/694',2355507557,1,0),(1896,'page title 695',1450107036,4,NULL),(1897,'somesite.com/695',4217438707,1,0),(1898,'page title 696',3479679270,4,NULL),(1899,'somesite.com/696',1651003465,1,0),(1900,'page title 697',3093332400,4,NULL),(1901,'somesite.com/697',359620831,1,0),(1902,'page title 698',685743137,4,NULL),(1903,'somesite.com/698',2245033294,1,0),(1904,'page title 699',1608035511,4,NULL),(1905,'somesite.com/699',4074196440,1,0),(1906,'page title 700',4127507821,4,NULL),(1907,'somesite.com/700',1527456770,1,0),(1908,'page title 701',2164520443,4,NULL),(1909,'somesite.com/701',738989204,1,0),(1910,'page title 702',403350593,4,NULL),(1911,'somesite.com/702',3037021486,1,0),(1912,'page title 703',1863161047,4,NULL),(1913,'somesite.com/703',3254941112,1,0),(1914,'page title 704',4050190708,4,NULL),(1915,'somesite.com/704',1550245915,1,0),(1916,'page title 705',2255368674,4,NULL),(1917,'somesite.com/705',727830669,1,0),(1918,'page title 706',526868568,4,NULL),(1919,'somesite.com/706',2993193271,1,0),(1920,'page title 707',1751142606,4,NULL),(1921,'somesite.com/707',3312431521,1,0),(1922,'page title 708',4175383903,4,NULL),(1923,'somesite.com/708',1439738928,1,0),(1924,'page title 709',2413329865,4,NULL),(1925,'somesite.com/709',584555686,1,0),(1926,'page title 710',4011848748,4,NULL),(1927,'somesite.com/710',1108350275,1,0),(1928,'page title 711',2551760058,4,NULL),(1929,'somesite.com/711',890709461,1,0),(1930,'page title 712',17929472,4,NULL),(1931,'somesite.com/712',2887677039,1,0),(1932,'page title 713',1981195670,4,NULL),(1933,'somesite.com/713',3675866361,1,0),(1934,'page title 714',3899797557,4,NULL),(1935,'somesite.com/714',1165873498,1,0),(1936,'page title 715',2675245219,4,NULL),(1937,'somesite.com/715',846913996,1,0),(1938,'page title 716',108810521,4,NULL),(1939,'somesite.com/716',2876485750,1,0),(1940,'page title 717',1903911311,4,NULL),(1941,'somesite.com/717',3698622688,1,0),(1942,'page title 718',3787750430,4,NULL),(1943,'somesite.com/718',1288412529,1,0),(1944,'page title 719',2529381512,4,NULL),(1945,'somesite.com/719',1003269607,1,0),(1946,'page title 720',3291654127,4,NULL),(1947,'somesite.com/720',1765623424,1,0),(1948,'page title 721',3006633849,4,NULL),(1949,'somesite.com/721',507147798,1,0),(1950,'page title 722',708626115,4,NULL),(1951,'somesite.com/722',2268276652,1,0),(1952,'page title 723',1564210773,4,NULL),(1953,'somesite.com/723',4029945658,1,0),(1954,'page title 724',3277808630,4,NULL),(1955,'somesite.com/724',1850770073,1,0),(1956,'page title 725',3025687392,4,NULL),(1957,'somesite.com/725',425177615,1,0),(1958,'page title 726',760283866,4,NULL),(1959,'somesite.com/726',2153702325,1,0),(1960,'page title 727',1515598412,4,NULL),(1961,'somesite.com/727',4149859107,1,0),(1962,'page title 728',3404279773,4,NULL),(1963,'somesite.com/728',1743179442,1,0),(1964,'page title 729',3186499403,4,NULL),(1965,'somesite.com/729',283246116,1,0),(1966,'page title 730',3710490286,4,NULL),(1967,'somesite.com/730',1881569217,1,0),(1968,'page title 731',2855183928,4,NULL),(1969,'somesite.com/731',119621463,1,0),(1970,'page title 732',858257282,4,NULL),(1971,'somesite.com/732',2653427437,1,0),(1972,'page title 733',1142998804,4,NULL),(1973,'somesite.com/733',3912181371,1,0),(1974,'page title 734',3661910711,4,NULL),(1975,'somesite.com/734',2001449944,1,0),(1976,'page title 735',2906874401,4,NULL),(1977,'somesite.com/735',5014350,1,0),(1978,'page title 736',877278107,4,NULL),(1979,'somesite.com/736',2571490036,1,0),(1980,'page title 737',1129120525,4,NULL),(1981,'somesite.com/737',3997360738,1,0),(1982,'page title 738',3555860124,4,NULL),(1983,'somesite.com/738',2130575347,1,0),(1984,'page title 739',2767531530,4,NULL),(1985,'somesite.com/739',167432037,1,0),(1986,'page title 740',2456289385,4,NULL),(1987,'somesite.com/740',1063772422,1,0),(1988,'page title 741',3849269503,4,NULL),(1989,'somesite.com/741',1214304656,1,0),(1990,'page title 742',2087084357,4,NULL),(1991,'somesite.com/742',3513352234,1,0),(1992,'page title 743',190927315,4,NULL),(1993,'somesite.com/743',2792272060,1,0),(1994,'page title 744',2500183152,4,NULL),(1995,'somesite.com/744',940188959,1,0),(1996,'page title 745',3791844582,4,NULL),(1997,'somesite.com/745',1326257545,1,0),(1998,'page title 746',2064360796,4,NULL),(1999,'somesite.com/746',3590603827,1,0),(2000,'page title 747',202151370,4,NULL),(2001,'somesite.com/747',2701358245,1,0),(2002,'page title 748',2629011547,4,NULL),(2003,'somesite.com/748',834431284,1,0),(2004,'page title 749',3954489549,4,NULL),(2005,'somesite.com/749',1186683298,1,0),(2006,'page title 750',2339582248,4,NULL),(2007,'somesite.com/750',645713991,1,0),(2008,'page title 751',4235461054,4,NULL),(2009,'somesite.com/751',1367072977,1,0),(2010,'page title 752',1702711300,4,NULL),(2011,'somesite.com/752',3362959723,1,0),(2012,'page title 753',310010002,4,NULL),(2013,'somesite.com/753',3212149245,1,0),(2014,'page title 754',2350839089,4,NULL),(2015,'somesite.com/754',554767454,1,0),(2016,'page title 755',4212770215,4,NULL),(2017,'somesite.com/755',1444291784,1,0),(2018,'page title 756',1645253661,4,NULL),(2019,'somesite.com/756',3474945394,1,0),(2020,'page title 757',353870987,4,NULL),(2021,'somesite.com/757',3088598500,1,0),(2022,'page title 758',2242427162,4,NULL),(2023,'somesite.com/758',682055797,1,0),(2024,'page title 759',4071590284,4,NULL),(2025,'somesite.com/759',1604348131,1,0),(2026,'page title 760',2690540267,4,NULL),(2027,'somesite.com/760',223445892,1,0),(2028,'page title 761',3612955261,4,NULL),(2029,'somesite.com/761',2052502290,1,0),(2030,'page title 762',1313866695,4,NULL),(2031,'somesite.com/762',3814711976,1,0),(2032,'page title 763',962016081,4,NULL),(2033,'somesite.com/763',2488848958,1,0),(2034,'page title 764',2805180146,4,NULL),(2035,'somesite.com/764',171722653,1,0),(2036,'page title 765',3493107300,4,NULL),(2037,'somesite.com/765',2101049099,1,0),(2038,'page title 766',1228785630,4,NULL),(2039,'somesite.com/766',3828491953,1,0),(2040,'page title 767',1044051784,4,NULL),(2041,'somesite.com/767',2469729831,1,0),(2042,'page title 768',2928011993,4,NULL),(2043,'somesite.com/768',59378614,1,0),(2044,'page title 769',3649231439,4,NULL),(2045,'somesite.com/769',1955412768,1,0),(2046,'page title 770',3108328362,4,NULL),(2047,'somesite.com/770',340439749,1,0),(2048,'page title 771',3460457276,4,NULL),(2049,'somesite.com/771',1666024019,1,0),(2050,'page title 772',1464545926,4,NULL),(2051,'somesite.com/772',4198814697,1,0),(2052,'page title 773',541852176,4,NULL),(2053,'somesite.com/773',2370036607,1,0),(2054,'page title 774',3190331315,4,NULL),(2055,'somesite.com/774',321353436,1,0),(2056,'page title 775',3375343397,4,NULL),(2057,'somesite.com/775',1679836746,1,0),(2058,'page title 776',1344730783,4,NULL),(2059,'somesite.com/776',4247328752,1,0),(2060,'page title 777',656524809,4,NULL),(2061,'somesite.com/777',2318280550,1,0),(2062,'page title 778',3080641432,4,NULL),(2063,'somesite.com/778',445725431,1,0),(2064,'page title 779',3231312654,4,NULL),(2065,'somesite.com/779',1838549601,1,0),(2066,'page title 780',1054691173,4,NULL),(2067,'somesite.com/780',2480057866,1,0),(2068,'page title 781',1239056371,4,NULL),(2069,'somesite.com/781',3839205020,1,0),(2070,'page title 782',3503500873,4,NULL),(2071,'somesite.com/782',2111622950,1,0),(2072,'page title 783',2815696607,4,NULL),(2073,'somesite.com/783',182190000,1,0),(2074,'page title 784',967871356,4,NULL),(2075,'somesite.com/784',2495572499,1,0),(2076,'page title 785',1320664042,4,NULL),(2077,'somesite.com/785',3820509829,1,0),(2078,'page title 786',3619613264,4,NULL),(2079,'somesite.com/786',2058423103,1,0),(2080,'page title 787',2696534726,4,NULL),(2081,'somesite.com/787',230046633,1,0),(2082,'page title 788',805750615,4,NULL),(2083,'somesite.com/788',2634622520,1,0),(2084,'page title 789',1191311297,4,NULL),(2085,'somesite.com/789',3926791854,1,0),(2086,'page title 790',667319844,4,NULL),(2087,'somesite.com/790',2328469323,1,0),(2088,'page title 791',1354845874,4,NULL),(2089,'somesite.com/791',4258181085,1,0),(2090,'page title 792',3385335560,4,NULL),(2091,'somesite.com/792',1690828391,1,0),(2092,'page title 793',3201249182,4,NULL),(2093,'somesite.com/793',331402993,1,0),(2094,'page title 794',548125245,4,NULL),(2095,'somesite.com/794',2376358738,1,0),(2096,'page title 795',1470925483,4,NULL),(2097,'somesite.com/795',4205013956,1,0),(2098,'page title 796',3466976017,4,NULL),(2099,'somesite.com/796',1672100478,1,0),(2100,'page title 797',3114462087,4,NULL),(2101,'somesite.com/797',346884840,1,0),(2102,'page title 798',689829398,4,NULL),(2103,'somesite.com/798',2215778169,1,0),(2104,'page title 799',1578813056,4,NULL),(2105,'somesite.com/799',4078249967,1,0),(2106,'page title 800',4250436176,4,NULL),(2107,'somesite.com/800',1347904319,1,0),(2108,'page title 801',2321527494,4,NULL),(2109,'somesite.com/801',659575721,1,0),(2110,'page title 802',324461436,4,NULL),(2111,'somesite.com/802',3193504275,1,0),(2112,'page title 803',1683084266,4,NULL),(2113,'somesite.com/803',3378393733,1,0),(2114,'page title 804',4197795401,4,NULL),(2115,'somesite.com/804',1463461670,1,0),(2116,'page title 805',2368894687,4,NULL),(2117,'somesite.com/805',540907440,1,0),(2118,'page title 806',339421029,4,NULL),(2119,'somesite.com/806',3107243530,1,0),(2120,'page title 807',1664882675,4,NULL),(2121,'somesite.com/807',3459511964,1,0),(2122,'page title 808',4085451362,4,NULL),(2123,'somesite.com/808',1586293517,1,0),(2124,'page title 809',2223258356,4,NULL),(2125,'somesite.com/809',697031579,1,0),(2126,'page title 810',3829642001,4,NULL),(2127,'somesite.com/810',1229738622,1,0),(2128,'page title 811',2470740871,4,NULL),(2129,'somesite.com/811',1045127912,1,0),(2130,'page title 812',172872253,4,NULL),(2131,'somesite.com/812',2806133586,1,0),(2132,'page title 813',2102059691,4,NULL),(2133,'somesite.com/813',3494183876,1,0),(2134,'page title 814',3811473160,4,NULL),(2135,'somesite.com/814',1310824039,1,0),(2136,'page title 815',2485733278,4,NULL),(2137,'somesite.com/815',958834417,1,0),(2138,'page title 816',220206628,4,NULL),(2139,'somesite.com/816',2687498059,1,0),(2140,'page title 817',2049386162,4,NULL),(2141,'somesite.com/817',3609774045,1,0),(2142,'page title 818',3935845155,4,NULL),(2143,'somesite.com/818',1201134156,1,0),(2144,'page title 819',2644446133,4,NULL),(2145,'somesite.com/819',814803674,1,0),(2146,'page title 820',3480150226,4,NULL),(2147,'somesite.com/820',1650524605,1,0),(2148,'page title 821',3093942340,4,NULL),(2149,'somesite.com/821',359018795,1,0),(2150,'page title 822',559972862,4,NULL),(2151,'somesite.com/822',2356109457,1,0),(2152,'page title 823',1449636200,4,NULL),(2153,'somesite.com/823',4217917447,1,0),(2154,'page title 824',3355649227,4,NULL),(2155,'somesite.com/824',1695335844,1,0),(2156,'page title 825',3204715613,4,NULL),(2157,'somesite.com/825',302773554,1,0),(2158,'page title 826',638404071,4,NULL),(2159,'somesite.com/826',2332206216,1,0),(2160,'page title 827',1359639921,4,NULL),(2161,'somesite.com/827',4228224030,1,0),(2162,'page title 828',3249891552,4,NULL),(2163,'somesite.com/828',1824164239,1,0),(2164,'page title 829',3065141366,4,NULL),(2165,'somesite.com/829',465418521,1,0),(2166,'page title 830',3598045587,4,NULL),(2167,'somesite.com/830',2071605500,1,0),(2168,'page title 831',2708660485,4,NULL),(2169,'somesite.com/831',209518698,1,0),(2170,'page title 832',947630271,4,NULL),(2171,'somesite.com/832',2507428304,1,0),(2172,'page title 833',1333559337,4,NULL),(2173,'somesite.com/833',3799212358,1,0),(2174,'page title 834',3508016522,4,NULL),(2175,'somesite.com/834',2081944805,1,0),(2176,'page title 835',2787058972,4,NULL),(2177,'somesite.com/835',185648243,1,0),(2178,'page title 836',1058436262,4,NULL),(2179,'somesite.com/836',2451150281,1,0),(2180,'page title 837',1209091120,4,NULL),(2181,'somesite.com/837',3843990879,1,0),(2182,'page title 838',3635304865,4,NULL),(2183,'somesite.com/838',1973532878,1,0),(2184,'page title 839',2947115319,4,NULL),(2185,'somesite.com/839',44468312,1,0),(2186,'page title 840',2570340180,4,NULL),(2187,'somesite.com/840',876324411,1,0),(2188,'page title 841',3996350402,4,NULL),(2189,'somesite.com/841',1128044205,1,0),(2190,'page title 842',2000299640,4,NULL),(2191,'somesite.com/842',3660957463,1,0),(2192,'page title 843',4003566,4,NULL),(2193,'somesite.com/843',2905798529,1,0),(2194,'page title 844',2656666445,4,NULL),(2195,'somesite.com/844',861299234,1,0),(2196,'page title 845',3915297755,4,NULL),(2197,'somesite.com/845',1146180276,1,0),(2198,'page title 846',1884807777,4,NULL),(2199,'somesite.com/846',3713532686,1,0),(2200,'page title 847',122737399,4,NULL),(2201,'somesite.com/847',2858365848,1,0),(2202,'page title 848',2549075814,4,NULL),(2203,'somesite.com/848',987770377,1,0),(2204,'page title 849',3773366256,4,NULL),(2205,'somesite.com/849',1306992287,1,0),(2206,'page title 850',2150594069,4,NULL),(2207,'somesite.com/850',757110650,1,0),(2208,'page title 851',4146611843,4,NULL),(2209,'somesite.com/851',1512548332,1,0),(2210,'page title 852',1847662393,4,NULL),(2211,'somesite.com/852',3274634838,1,0),(2212,'page title 853',421930927,4,NULL),(2213,'somesite.com/853',3022636736,1,0),(2214,'page title 854',2269295116,4,NULL),(2215,'somesite.com/854',709710691,1,0),(2216,'page title 855',4031087258,4,NULL),(2217,'somesite.com/855',1565156341,1,0),(2218,'page title 856',1766642464,4,NULL),(2219,'somesite.com/856',3292738127,1,0),(2220,'page title 857',508289974,4,NULL),(2221,'somesite.com/857',3007578841,1,0),(2222,'page title 858',2398420519,4,NULL),(2223,'somesite.com/858',603660104,1,0),(2224,'page title 859',4193504945,4,NULL),(2225,'somesite.com/859',1425813470,1,0),(2226,'page title 860',2869044694,4,NULL),(2227,'somesite.com/860',101565625,1,0),(2228,'page title 861',3691320640,4,NULL),(2229,'somesite.com/861',1896543279,1,0),(2230,'page title 862',1158431994,4,NULL),(2231,'somesite.com/862',3892553109,1,0),(2232,'page title 863',839611500,4,NULL),(2233,'somesite.com/863',2667877635,1,0),(2234,'page title 864',2893013455,4,NULL),(2235,'somesite.com/864',23068832,1,0),(2236,'page title 865',3681079641,4,NULL),(2237,'somesite.com/865',1986474038,1,0),(2238,'page title 866',1113686243,4,NULL),(2239,'somesite.com/866',4016988556,1,0),(2240,'page title 867',895922293,4,NULL),(2241,'somesite.com/867',2557038874,1,0),(2242,'page title 868',2782506468,4,NULL),(2243,'somesite.com/868',148262027,1,0),(2244,'page title 869',3537804658,4,NULL),(2245,'somesite.com/869',2144435229,1,0),(2246,'page title 870',2987988119,4,NULL),(2247,'somesite.com/870',521598456,1,0),(2248,'page title 871',3307086849,4,NULL),(2249,'somesite.com/871',1745995118,1,0),(2250,'page title 872',1545041339,4,NULL),(2251,'somesite.com/872',4044920020,1,0),(2252,'page title 873',722486573,4,NULL),(2253,'somesite.com/873',2250220610,1,0),(2254,'page title 874',3044331662,4,NULL),(2255,'somesite.com/874',410726881,1,0),(2256,'page title 875',3262373912,4,NULL),(2257,'somesite.com/875',1870397815,1,0),(2258,'page title 876',1534767522,4,NULL),(2259,'somesite.com/876',4134883533,1,0),(2260,'page title 877',746422580,4,NULL),(2261,'somesite.com/877',2171756635,1,0),(2262,'page title 878',3166870693,4,NULL),(2263,'somesite.com/878',298679754,1,0),(2264,'page title 879',3418729523,4,NULL),(2265,'somesite.com/879',1724534108,1,0),(2266,'page title 880',897648728,4,NULL),(2267,'somesite.com/880',2559502647,1,0),(2268,'page title 881',1116092622,4,NULL),(2269,'somesite.com/881',4018788769,1,0),(2270,'page title 882',3683608948,4,NULL),(2271,'somesite.com/882',1988134939,1,0),(2272,'page title 883',2894617058,4,NULL),(2273,'somesite.com/883',25671821,1,0),(2274,'page title 884',854379585,4,NULL),(2275,'somesite.com/884',2682465582,1,0),(2276,'page title 885',1173093591,4,NULL),(2277,'somesite.com/885',3907263928,1,0),(2278,'page title 886',3705843053,4,NULL),(2279,'somesite.com/886',1911376898,1,0),(2280,'page title 887',2883952123,4,NULL),(2281,'somesite.com/887',116030612,1,0),(2282,'page title 888',995786858,4,NULL),(2283,'somesite.com/888',2522177797,1,0),(2284,'page title 889',1281208572,4,NULL),(2285,'somesite.com/889',3780268435,1,0),(2286,'page title 890',748304665,4,NULL),(2287,'somesite.com/890',2174081142,1,0),(2288,'page title 891',1537018255,4,NULL),(2289,'somesite.com/891',4136823008,1,0),(2290,'page title 892',3264501813,4,NULL),(2291,'somesite.com/892',1872476506,1,0),(2292,'page title 893',3046336675,4,NULL),(2293,'somesite.com/893',412912076,1,0),(2294,'page title 894',737672448,4,NULL),(2295,'somesite.com/894',2264407151,1,0),(2296,'page title 895',1559285142,4,NULL),(2297,'somesite.com/895',4060032249,1,0),(2298,'page title 896',3321469996,4,NULL),(2299,'somesite.com/896',1760984387,1,0),(2300,'page title 897',3003034810,4,NULL),(2301,'somesite.com/897',535907797,1,0),(2302,'page title 898',574730539,4,NULL),(2303,'somesite.com/898',2404274244,1,0),(2304,'page title 899',1430684093,4,NULL),(2305,'somesite.com/899',4165558482,1,0),(2306,'page title 900',4238010471,4,NULL),(2307,'somesite.com/900',1368721672,1,0),(2308,'page title 901',2342377713,4,NULL),(2309,'somesite.com/901',647117214,1,0),(2310,'page title 902',311724363,4,NULL),(2311,'somesite.com/902',3214632996,1,0),(2312,'page title 903',1704180189,4,NULL),(2313,'somesite.com/903',3365689522,1,0),(2314,'page title 904',4227279998,4,NULL),(2315,'somesite.com/904',1459146001,1,0),(2316,'page title 905',2364546280,4,NULL),(2317,'somesite.com/905',570424711,1,0),(2318,'page title 906',368659794,4,NULL),(2319,'somesite.com/906',3103173693,1,0),(2320,'page title 907',1660845508,4,NULL),(2321,'somesite.com/907',3488717995,1,0),(2322,'page title 908',4064370773,4,NULL),(2323,'somesite.com/908',1598980410,1,0),(2324,'page title 909',2235977923,4,NULL),(2325,'somesite.com/909',675918252,1,0),(2326,'page title 910',3850492198,4,NULL),(2327,'somesite.com/910',1217280073,1,0),(2328,'page title 911',2458315184,4,NULL),(2329,'somesite.com/911',1065945311,1,0),(2330,'page title 912',193968138,4,NULL),(2331,'somesite.com/912',2793429349,1,0),(2332,'page title 913',2089322652,4,NULL),(2333,'somesite.com/913',3515312627,1,0),(2334,'page title 914',3807124799,4,NULL),(2335,'somesite.com/914',1340341328,1,0),(2336,'page title 915',2515217833,4,NULL),(2337,'somesite.com/915',954518726,1,0),(2338,'page title 916',216169491,4,NULL),(2339,'somesite.com/916',2716704124,1,0),(2340,'page title 917',2078624901,4,NULL),(2341,'somesite.com/917',3605704170,1,0),(2342,'page title 918',3948564756,4,NULL),(2343,'somesite.com/918',1180020859,1,0),(2344,'page title 919',2623365506,4,NULL),(2345,'somesite.com/919',827490541,1,0),(2346,'page title 920',3467414245,4,NULL),(2347,'somesite.com/920',1671654282,1,0),(2348,'page title 921',3115039347,4,NULL),(2349,'somesite.com/921',346315548,1,0),(2350,'page title 922',547548105,4,NULL),(2351,'somesite.com/922',2376927910,1,0),(2352,'page title 923',1470487391,4,NULL),(2353,'somesite.com/923',4205460016,1,0),(2354,'page title 924',3384889084,4,NULL),(2355,'somesite.com/924',1691266963,1,0),(2356,'page title 925',3200679530,4,NULL),(2357,'somesite.com/925',331980549,1,0),(2358,'page title 926',667889616,4,NULL),(2359,'somesite.com/926',2327891647,1,0),(2360,'page title 927',1355292486,4,NULL),(2361,'somesite.com/927',4257742377,1,0),(2362,'page title 928',3229024983,4,NULL),(2363,'somesite.com/928',1836639160,1,0),(2364,'page title 929',3077583425,4,NULL),(2365,'somesite.com/929',444584750,1,0),(2366,'page title 930',3619142564,4,NULL),(2367,'somesite.com/930',2058902219,1,0),(2368,'page title 931',2695924530,4,NULL),(2369,'somesite.com/931',230648413,1,0),(2370,'page title 932',968481416,4,NULL),(2371,'somesite.com/932',2494970855,1,0),(2372,'page title 933',1321134622,4,NULL),(2373,'somesite.com/933',3820030833,1,0),(2374,'page title 934',3503980477,4,NULL),(2375,'somesite.com/934',2111151826,1,0),(2376,'page title 935',2816298795,4,NULL),(2377,'somesite.com/935',181579332,1,0),(2378,'page title 936',1054088849,4,NULL),(2379,'somesite.com/936',2480668670,1,0),(2380,'page title 937',1238576647,4,NULL),(2381,'somesite.com/937',3839676264,1,0),(2382,'page title 938',3647746966,4,NULL),(2383,'somesite.com/938',1952699129,1,0),(2384,'page title 939',2926248704,4,NULL),(2385,'somesite.com/939',56943215,1,0),(2386,'page title 940',2566270307,4,NULL),(2387,'somesite.com/940',905563148,1,0),(2388,'page title 941',4025556469,4,NULL),(2389,'somesite.com/941',1124007066,1,0),(2390,'page title 942',1995983951,4,NULL),(2391,'somesite.com/942',3690442016,1,0),(2392,'page title 943',33520857,4,NULL),(2393,'somesite.com/943',2901450166,1,0),(2394,'page title 944',2677795194,4,NULL),(2395,'somesite.com/944',848562197,1,0),(2396,'page title 945',3902593516,4,NULL),(2397,'somesite.com/945',1167276163,1,0),(2398,'page title 946',1905625174,4,NULL),(2399,'somesite.com/946',3701107001,1,0),(2400,'page title 947',110278848,4,NULL),(2401,'somesite.com/947',2879216047,1,0),(2402,'page title 948',2519573841,4,NULL),(2403,'somesite.com/948',992101438,1,0),(2404,'page title 949',3777664455,4,NULL),(2405,'somesite.com/949',1277523112,1,0),(2406,'page title 950',2179800098,4,NULL),(2407,'somesite.com/950',753073485,1,0),(2408,'page title 951',4142542004,4,NULL),(2409,'somesite.com/951',1541787099,1,0),(2410,'page title 952',1877179662,4,NULL),(2411,'somesite.com/952',3270286433,1,0),(2412,'page title 953',417615256,4,NULL),(2413,'somesite.com/953',3052121335,1,0),(2414,'page title 954',2256590907,4,NULL),(2415,'somesite.com/954',730806612,1,0),(2416,'page title 955',4052215981,4,NULL),(2417,'somesite.com/955',1552419266,1,0),(2418,'page title 956',1754183959,4,NULL),(2419,'somesite.com/956',3313588344,1,0),(2420,'page title 957',529107329,4,NULL),(2421,'somesite.com/957',2995153134,1,0),(2422,'page title 958',2402718736,4,NULL),(2423,'somesite.com/958',574190975,1,0),(2424,'page title 959',4164002950,4,NULL),(2425,'somesite.com/959',1430144489,1,0),(2426,'page title 960',2864730081,4,NULL),(2427,'somesite.com/960',131051150,1,0),(2428,'page title 961',3720839031,4,NULL),(2429,'somesite.com/961',1892195864,1,0),(2430,'page title 962',1154363085,4,NULL),(2431,'somesite.com/962',3921792930,1,0),(2432,'page title 963',868818523,4,NULL),(2433,'somesite.com/963',2663841588,1,0),(2434,'page title 964',2913831928,4,NULL),(2435,'somesite.com/964',10644119,1,0),(2436,'page title 965',3668622190,4,NULL),(2437,'somesite.com/965',2007325185,1,0),(2438,'page title 966',1134815956,4,NULL),(2439,'somesite.com/966',4004252603,1,0),(2440,'page title 967',883219010,4,NULL),(2441,'somesite.com/967',2578135853,1,0),(2442,'page title 968',2753284051,4,NULL),(2443,'somesite.com/968',152315580,1,0),(2444,'page title 969',3541890885,4,NULL),(2445,'somesite.com/969',2115180074,1,0),(2446,'page title 970',3017506464,4,NULL),(2447,'somesite.com/970',517251023,1,0),(2448,'page title 971',3302772278,4,NULL),(2449,'somesite.com/971',1775480665,1,0),(2450,'page title 972',1574248332,4,NULL),(2451,'somesite.com/972',4040883939,1,0),(2452,'page title 973',718417690,4,NULL),(2453,'somesite.com/973',2279460469,1,0),(2454,'page title 974',3031874233,4,NULL),(2455,'somesite.com/974',431578070,1,0),(2456,'page title 975',3283192367,4,NULL),(2457,'somesite.com/975',1857973056,1,0),(2458,'page title 976',1522064277,4,NULL),(2459,'somesite.com/976',4155980538,1,0),(2460,'page title 977',767552259,4,NULL),(2461,'somesite.com/977',2159020652,1,0),(2462,'page title 978',3170956946,4,NULL),(2463,'somesite.com/978',269424637,1,0),(2464,'page title 979',3389507076,4,NULL),(2465,'somesite.com/979',1728587627,1,0),(2466,'page title 980',876831343,4,NULL),(2467,'somesite.com/980',2571928320,1,0),(2468,'page title 981',1128551161,4,NULL),(2469,'somesite.com/981',3997938582,1,0),(2470,'page title 982',3662480195,4,NULL),(2471,'somesite.com/982',2000871980,1,0),(2472,'page title 983',2907321301,4,NULL),(2473,'somesite.com/983',4575930,1,0),(2474,'page title 984',858695286,4,NULL),(2475,'somesite.com/984',2652981017,1,0),(2476,'page title 985',1143576288,4,NULL),(2477,'somesite.com/985',3911612303,1,0),(2478,'page title 986',3709912922,4,NULL),(2479,'somesite.com/986',1882138165,1,0),(2480,'page title 987',2854746060,4,NULL),(2481,'somesite.com/987',120067747,1,0),(2482,'page title 988',983099997,4,NULL),(2483,'somesite.com/988',2543258418,1,0),(2484,'page title 989',1302321867,4,NULL),(2485,'somesite.com/989',3767548836,1,0),(2486,'page title 990',760763182,4,NULL),(2487,'somesite.com/990',2153230913,1,0),(2488,'page title 991',1516200888,4,NULL),(2489,'somesite.com/991',4149248727,1,0),(2490,'page title 992',3277206018,4,NULL),(2491,'somesite.com/992',1851380589,1,0),(2492,'page title 993',3025207956,4,NULL),(2493,'somesite.com/993',425649147,1,0),(2494,'page title 994',708155191,4,NULL),(2495,'somesite.com/994',2268755544,1,0),(2496,'page title 995',1563600801,4,NULL),(2497,'somesite.com/995',4030547662,1,0),(2498,'page title 996',3292263963,4,NULL),(2499,'somesite.com/996',1765021556,1,0),(2500,'page title 997',3007104653,4,NULL),(2501,'somesite.com/997',506669026,1,0),(2502,'page title 998',595843868,4,NULL),(2503,'somesite.com/998',2391554675,1,0),(2504,'page title 999',1417997194,4,NULL),(2505,'somesite.com/999',4186639077,1,0),(2506,'title',724990059,4,NULL),(2507,'example.org/dir1/sub/dir/page0.html',4280972079,1,0),(2508,'example.org/dir1/sub/dir/page1.html',880189578,1,0),(2509,'example.org/dir1/sub/dir/page2.html',3001209380,1,0),(2510,'example.org/dir2/sub/dir/page0.html',1350778597,1,0),(2511,'example.org/dir2/sub/dir/page1.html',2615143744,1,0),(2512,'example.org/dir2/sub/dir/page2.html',491495406,1,0),(2513,'example.org/dir3/sub/dir/page0.html',904136099,1,0),(2514,'example.org/dir3/sub/dir/page1.html',4273526278,1,0),(2515,'example.org/dir3/sub/dir/page2.html',2016191656,1,0),(2516,'example.org/sub/dir/dir1/page1.html',3603645533,1,0),(2517,'example.org/page1.html',3437571119,1,0),(2518,'incredible title! <>,;',1860209326,4,NULL),(2519,'example.org/%C3%A9%C3%A9%C3%A9%22%27...%20%3Cthis%20is%20cool%3E!',1193348053,1,0),(2520,'example.org/dir/file.php?foo=bar&foo2=bar',17574595,1,0),(2521,'incredible parent title! <>,; / subtitle <>,;',3094395163,4,NULL),(2522,'example.org/dir/file.php?foo=bar&foo2=bar2',414785837,1,0),(2523,'example.org/dir/file.php?foo=bar&foo2=bar2',414785837,10,0),(2524,'Action',1080068516,11,NULL),(2525,'Category',4282022807,10,NULL),(2526,'Name',4262580536,12,NULL),(2527,'example.org/dir2/file.php?foo=bar&foo2=bar',4208685532,1,0),(2528,'example.org/dir2/sub/0/file.php',2413243064,1,0),(2529,'check <> / @one@ / two',2985492745,4,NULL),(2530,'example.org/dir/subdir/',4244660318,1,0),(2531,'check <> / @one@',805684987,4,NULL),(2532,'example.org/dir/subdir',1844663315,1,0),(2533,'I am URL zero!',132254949,4,NULL),(2534,'example.org/0',3144364599,1,0),(2535,'http://incredible.title/',1775608834,4,NULL),(2536,'example.org/foo/bar.html',2157780386,1,0),(2537,'https://incredible.title/',3876383232,4,NULL),(2538,'http://www.incredible.title/',3870610064,4,NULL),(2539,'example.org/foo/bar2.html',500872119,1,3),(2540,'https://www.incredible.title/',1816357536,4,NULL),(2541,'incredible.title/',4089061515,4,NULL),(2542,'example.org/foo/bar3.html',3599130642,1,1),(2543,'Valid URL, although strange looking',2793053701,4,NULL),(2544,'my.url/ꟽ碌㒧䊶亄ﶆⅅขκもኸόσशμεޖृ',3450234784,1,1),(2545,'Emoji here: %F0%9F%98%8E',3927781631,4,NULL),(2546,'make.wordpress.org/?emoji=😎l¶m=test',2626192961,1,2),(2547,'example.org/foo/bar4.html',3414380714,1,2),(2548,'title%3A"test"+AND+body%3A"test"+AND+spaceCategory%3AALL+AND+startIndex%3A0+AND+pageSize%3A10',2559843311,8,NULL),(2549,'Page A - index.html',4017794234,4,NULL),(2550,'example.org/page_A/index.html',418583798,1,0),(2551,'Page B',4238685638,4,NULL),(2552,'example.org/page_B',715391956,1,0),(2553,'Page A - X',277496351,4,NULL),(2554,'example.org/page_A/X',1215182344,1,0),(2555,'Page C',2342651216,4,NULL),(2556,'example.org/page_C',1570976578,1,0),(2557,'example.org/page_C',1570976578,10,0),(2558,'click_action',2564417073,11,NULL),(2559,'category',105650625,10,NULL),(2560,'name',1579384326,12,NULL),(2561,'Page A - Z',4270072627,4,NULL),(2562,'example.org/page_A/Z',2791331620,1,0),(2563,'Page D',365334771,4,NULL),(2564,'example.org/page_D',3284641505,1,0),(2565,'press_action',108904081,11,NULL),(2566,'Page A - Y',1737323145,4,NULL),(2567,'example.org/page_A/Y',1063847582,1,0),(2568,'example.org/page_A/index.html',418583798,10,0),(2569,'example.org/page_A/Z',2791331620,10,0),(2570,'Thank you mate',55735842,4,NULL),(2571,'This is tracked in a new visit.',1336273794,4,NULL),(2572,'example.org/index.htm',1534659805,10,0),(2573,'The_Category',2927768844,10,NULL),(2574,'the_category',1338346658,10,NULL),(2575,'other_action',1992996490,11,NULL),(2576,'other_category',1113286956,10,NULL),(2577,'<the_'"name>',2057542899,12,NULL),(2578,'first page',2558164490,4,NULL),(2579,'example.org/index.html',1849628059,1,0),(2580,'Hello world',2346098258,4,NULL),(2581,'Bonjour le monde',2689005786,4,NULL),(2582,'Hallo welt',4028283723,4,NULL),(2583,'¡hola mundo',3102527256,4,NULL),(2584,'Dia duit ar domhan',3871675988,4,NULL),(2585,'привет мир',291625740,4,NULL),(2586,'hallÃ¥ världen',496478747,4,NULL),(2587,'halló heimur',822038737,4,NULL),(2588,'העל×� וועלט',2676049256,4,NULL),(2589,'Mutant Registration',3817874800,4,NULL),(2590,'mutantregistration.com/act.html',541148317,1,0),(2591,'Fighting Back',2647795280,4,NULL),(2592,'asteroidm.com',379425059,1,0),(2593,'mutantrights.org',3307660899,1,0),(2594,'page title - page/one.html',1688924687,4,NULL),(2595,'example.org/page/one.html',1492145941,1,0),(2596,'page title - sub/dir/page2.html',3429705115,4,NULL),(2597,'example.org/sub/dir/page2.html',2387644694,1,1),(2598,'page title - the/third_page.html?foo=bar',1412513554,4,NULL),(2599,'example.org/the/third_page.html?foo=bar',447967138,1,2),(2600,'page title - the/third_page.html?foo=baz#anchor1',4217383539,4,NULL),(2601,'example.org/the/third_page.html?foo=baz',342419344,1,1),(2602,'page title - the/third_page.html?foo=baz#anchor2',1651080137,4,NULL),(2603,'page title - page3.html',354336631,4,NULL),(2604,'example.org/page3.html',2167246116,1,2),(2605,'page title - page/one.html?pk_campaign=TestCampaign&pk_kwd=TestKeyword',235840147,4,NULL),(2606,'mykwd',3751068998,8,NULL),(2607,'anotherkwd',1115842701,8,NULL),(2608,'http://www.anothersite.com/to/outlink/page.html',3057337152,2,NULL),(2609,'example.org/page/search.html',2400141537,10,2),(2610,'event name',980043187,11,NULL),(2611,'Music',210963790,10,NULL),(2612,'Song name here',1067817416,12,NULL),(2613,'http://example.org/downloads/33.tar.gz',3533325199,3,NULL),(2614,'https://example.org/downloads/35.tar.gz',1450312282,3,NULL),(2615,'http://anothersite.com/to/outlink/page2.html',2207524753,2,NULL),(2616,'thirdkwd',2213519705,8,NULL),(2617,'http://anothersite.com/to/another/outlink.html',3218879990,2,NULL),(2618,'https://example.org/downloads/43.tar.gz',4101793300,3,NULL),(2619,'Hello',4157704578,4,NULL),(2620,'example.org/category/Page1',1754591722,1,0),(2621,'example.org/category/Page2',4053639248,1,0),(2622,'example.org/category/Page3',2258276550,1,0),(2623,'example.org/category/Page4',419300709,1,0),(2624,'example.org/category.htm',185733291,1,0),(2625,'example.org/page.htm',2743979042,1,0),(2626,'example.org/contact.htm',1779433592,1,0),(2627,'Site Search results',2673886791,4,NULL),(2628,'example.org/index.htm?random=param&mykwd[]=Search 2%FC&test&cats= Search Kategory &search_count=INCORRECT!',414945971,1,0),(2629,'Page title is always UTF-8',2199234623,4,NULL),(2630,'example.org/page/index.htm?whatever=%EC%E5%F8%EA%EE%E2%FB%E5',1299538431,1,0),(2631,'Site Search',1598971867,4,NULL),(2632,'example.org/page/index.htm?q=%EC%E5%F8%EA%EE%E2%FB%E5',3210439705,1,0),(2633,'example.org/page/index.htm?q=non unicode keyword %EC%E5%F8%EA%EE%E2%FB%E5',27377601,1,0),(2634,'example.org/exit-page',352370078,1,0),(2635,'example.org/index.htm?random=param&mykwd=a+keyword&test&cats= Search Kategory &search_count=INCORRECT!',2257666501,1,0),(2636,'example.org/index.htm?q=Search 1',1976239843,1,0),(2637,'Im just a page',3557774319,4,NULL),(2638,'This is a pageview, not a Search - IS_FOLLOWING_SEARCH ONCE',1969021723,4,NULL),(2639,'example.org/index.htm?random=PAGEVIEW, NOT SEARCH&mykwd=&IS_FOLLOWING_SEARCH ONCE',2186755168,1,0),(2640,'example.org/index.htm?random=PAGEVIEW, NOT SEARCH&mykwd=&IS_FOLLOWING_SEARCH ONCE',2186755168,10,0),(2641,'Event ACTION',2277263228,11,NULL),(2642,'Event CAT',2828793496,10,NULL),(2643,'Event NAME',1134734295,12,NULL),(2644,'Site Search results - URL Fragment',3142317499,4,NULL),(2645,'example.org/index.htm?standard=query&but=also',1651763428,1,0),(2646,'example.org/index.htm?hello=world',4139714826,1,0),(2647,'example.org/index.htm?random=param&mykwd[]=Search 2&test&cats= Search Category &search_count=INCORRECT!',2382066183,1,0),(2648,'example.org/index.htm?random=param&myKwd=Search 1&test&cats=+Search+Category+ &search_count=0',2562030071,1,0),(2649,'SHOULD be a PageView, NOT a search',3467247025,8,NULL),(2650,'Keyword - Tracking API',685449429,8,NULL),(2651,'example.org/hello?THIS IS A SITE SEARCH TRACKING API, NOT PAGEVIEW!',1797750816,10,0),(2652,'No Result Keyword!',1738963788,8,NULL),(2653,'example.org/index.htm?q=Final%20t%FCte%20Keyword%20Searched%20for%20now&search_count=10',3725462317,1,0),(2654,'example.org/index.htm?random=param&mykwd=Search 2&test&cats= Search Category &search_count=10',3704958200,1,0),(2655,'IsPageView',189010920,4,NULL),(2656,'example.org/index.htm?q=Search 1&IsPageView=1',1632284239,1,0),(2657,'This is a pageview, not a Search',10260443,4,NULL),(2658,'example.org/index.htm?random=PAGEVIEW, NOT SEARCH&gcat=Cat not but not keyword, so this is not search',3375149975,1,0),(2659,'SHOULD be a Search with no result!',2450034781,8,NULL),(2660,'You can use Piwik in: አማርኛ, العربية, БеларуÑ�каÑ�, БългарÑ�ки, Català, ÄŒesky, Dansk, Deutsch, Ελληνικά, English, Español, Eesti keel, Euskara, Ù�ارسی, Suomi, Français, Galego, עברית, Magyar, Bahasa Indonesia, Ã�slenska, Italiano, 日本語, ქáƒ�რთული, 한국어, Lietuvių, LatvieÅ¡u, Norsk (bokmÃ¥l), Nederlands, Norsk (nynorsk), Polski, Português brasileiro, Português, Română, РуÑ�Ñ�кий, Slovensky%',1217918248,8,NULL),(2661,'test not a keyword',1335798207,8,NULL),(2662,'Pageview: %2C%20%C3%8Dslenska%2C%20Italiano%2C%20%E6%97%A5%E6%9C%AC%E8%AA%9E%2C%20%E1%83%A5%E1%83%90%E1%83%A0%E1%83%97%E1%83%A3%E1%83%9A%E1%83%98%2C%20%ED%95%9C%EA%B5%AD%EC%96%B4%2C%20Lietuvi%C5%B3%2C%20Latvie%C5%A1u%2C%20Norsk%20(bokm%C3%A5l)%2C%20Nederlands%2C%20Norsk%20(nynorsk)%2C%20Polski%2C%20Portugu%C3%AAs%20brasileiro%2C%20Portugu%C3%AAs%2C%20Rom%C3%A2n%C4%83%2C%20%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%2C%20Slovensky%2C%20Sloven%C5%A1%C4%8Dina%2C%20Shqip%2C%20Srpski%2C%20Svenska%2C%20%E0%B0%A4%E0%B1%86%E0%B0%B2%E0%B1%81%E0%B0%97%E0%B1%81%2C%20%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B9%84%E0%B8%97%E0%B8%A2%2C%20T%C3%BCrk%C3%A7e%2C%20%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D1%81%D1%8C%D0%BA%D0%B0%2C%20%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%2C%20%E7%B9%81%E9%AB%94%E4%B8%AD%E6%96%87.',2758106352,4,NULL),(2663,'example.org/index.htm?%2C%20%C3%8Dslenska%2C%20Italiano%2C%20%E6%97%A5%E6%9C%AC%E8%AA%9E%2C%20%E1%83%A5%E1%83%90%E1%83%A0%E1%83%97%E1%83%A3%E1%83%9A%E1%83%98%2C%20%ED%95%9C%EA%B5%AD%EC%96%B4%2C%20Lietuvi%C5%B3%2C%20Latvie%C5%A1u%2C%20Norsk%20(bokm%C3%A5l)%2C%20Nederlands%2C%20Norsk%20(nynorsk)%2C%20Polski%2C%20Portugu%C3%AAs%20brasileiro%2C%20Portugu%C3%AAs%2C%20Rom%C3%A2n%C4%83%2C%20%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%2C%20Slovensky%2C%20Sloven%C5%A1%C4%8Dina%2C%20Shqip%2C%20Srpski%2C%20Svenska%2C%20%E0%B0%A4%E0%B1%86%E0%B0%B2%E0%B1%81%E0%B0%97%E0%B1%81%2C%20%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B9%84%E0%B8%97%E0%B8%A2%2C%20T%C3%BCrk%C3%A7e%2C%20%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D1%81%D1%8C%D0%BA%D0%B0%2C%20%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%2C%20%E7%B9%81%E9%AB%94%E4%B8%AD%E6%96%87.',2450026295,1,0),(2664,'page title',3083024553,4,NULL),(2665,'helios.org/alpha',1460292552,1,0),(2666,'taura.org/',3228782669,1,0),(2667,'helios.org/beta',1832940786,1,0),(2668,'virgon.org/',3493141510,1,0),(2669,'Welcome!',893564114,4,NULL),(2670,'example.org/webradio',67471158,1,0),(2671,'example.org/webradio',67471158,10,0),(2672,'play',1586093754,11,NULL),(2673,'La fiancée de l'eau',398027086,12,NULL),(2674,'play25%',1921865360,11,NULL),(2675,'play50%',179680336,11,NULL),(2676,'play75%',1950782587,11,NULL),(2677,'playEnd',2074598876,11,NULL),(2678,'rating',3632866850,11,NULL),(2679,'This is an event without a URL',1845506781,11,NULL),(2680,'CategoryTriggersGoal here',564689046,10,NULL),(2681,'Movie Theater',1878536751,4,NULL),(2682,'example.org/movies',3205806893,1,0),(2683,'example.org/movies',3205806893,10,0),(2684,'playTrailer',842605073,11,NULL),(2685,'Movie',3701464427,10,NULL),(2686,'Princess Mononoke (ã‚‚ã�®ã�®ã�‘å§«)',3938954492,12,NULL),(2687,'Ponyo (å´–ã�®ä¸Šã�®ãƒ�ニョ)',3315242356,12,NULL),(2688,'Spirited Away (å�ƒã�¨å�ƒå°‹ã�®ç¥žéš ã�—)',3882696171,12,NULL),(2689,'clickBuyNow',2112501088,11,NULL),(2690,'playStart',144241729,11,NULL),(2691,'Search',3009207953,11,NULL),(2692,'Search query here',1169547291,12,NULL),(2693,'example.org/finishedMovie',568731177,10,0),(2694,'event action Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---> SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED <---',1610209906,11,NULL),(2695,'event category Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---> SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED <---',1585630724,10,NULL),(2696,'event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---> SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED <---',1927716653,12,NULL),(2697,'Purchase',2556539757,11,NULL),(2698,'example.com/piwik/',495800732,10,0),(2699,'Another Product page',2762154566,4,NULL),(2700,'Another Product page with multiple categories',2455792814,4,NULL),(2701,'Multiple Category 1',2211087351,7,NULL),(2702,'Multiple Category 2',449040973,7,NULL),(2703,'Multiple Category 4',4087379832,7,NULL),(2704,'Multiple Category 5',2225555438,7,NULL),(2705,'Looking at Electronics & Cameras page again',455028029,4,NULL),(2706,'Looking at product page',4129471415,4,NULL),(2707,'SKU VERY nice indeed REMOVED',367200080,5,NULL),(2708,'PRODUCT name REMOVED',4044478673,6,NULL),(2709,'Electronics & Cameras REMOVED',1501700406,7,NULL),(2710,'SKU WILL BE DELETED',424923689,5,NULL),(2711,'BLABLA DELETED',2394080273,6,NULL),(2712,'ANOTHER SKU HERE',2645960565,5,NULL),(2713,'PRODUCT name BIS',3161819960,6,NULL),(2714,'Canon SLR',236963668,6,NULL),(2715,'Canon SLR NOT!',983614355,6,NULL),(2716,'Electronics & Cameras NOT!',3526573912,7,NULL),(2717,'SKU IN ABANDONED CART ONE',1756315920,5,NULL),(2718,'PRODUCT ONE LEFT in cart',2748284124,6,NULL),(2719,'View product left in cart',1224108826,4,NULL),(2720,'PRODUCT THREE LEFT in cart',2619533438,6,NULL),(2721,'Category TWO LEFT in cart',3335615286,7,NULL),(2722,'second category',440552096,7,NULL),(2723,'PRODUCT TWO LEFT in cart',4279515972,6,NULL),(2724,'SKU IN ABANDONED CART TWO',50941319,5,NULL),(2725,'TRIPOD SKU',2414828951,5,NULL),(2726,'TRIPOD - bought day after',1598135417,6,NULL),(2727,'Tools',725348723,7,NULL),(2728,'one page visit',4119577012,4,NULL),(2729,'example-site2.com/index.htm',2341820495,1,0),(2730,'incredible title 0',475017556,4,NULL),(2731,'example.org/my/dir/page2?foo=bar&baz=bar',3823703087,1,0),(2732,'not an incredible title',2430528760,4,NULL),(2733,'so-so page title',4178640504,4,NULL),(2734,'incredible title 2',4066267256,4,NULL),(2735,'example.org/my/dir/page1?foo=bar&baz=bar',2960347051,1,0),(2736,'incredible title 1',1800864194,4,NULL),(2737,'example.org/my/dir/page0?foo=bar&baz=bar',936740072,1,0),(2738,'example.org/my/dir/page3?foo=bar&baz=bar',1682956140,1,0),(2739,'first page view',4193553937,4,NULL),(2740,'example.org/products',3470703501,1,0),(2741,'second visitor/two days later/a new visit',426359445,4,NULL),(2742,'second visitor/two days later/second page view😀💩😀💩',256090126,4,NULL),(2743,'example.org/thankyou',413296515,1,0),(2744,'Checkout / Purchasing...',2267680233,4,NULL),(2745,'Website 2 page view',2343634205,4,NULL),(2746,'example2.com/home#notIgnoredFragment',4170029227,1,0),(2747,'example2alias.org/home#notIgnoredFragment',2609537886,1,0),(2748,'incredible title! (Page URL contains a HTML entity)',3665745033,4,NULL),(2749,'example.org/this%20is%20cool!?filter=<script>alert(1);</script>{"place":{"place":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5"}}',3486596824,1,0),(2750,'Homepage',844281784,4,NULL),(2751,'example.org/homepage',3057660985,1,0),(2752,'Profile page',3245446482,4,NULL),(2753,'example.org/user/profile',1233960192,1,0),(2754,'Profile page for user *_)%',1888519132,4,NULL),(2755,'Concurrent page views',988707392,4,NULL),(2756,'http://test.com',1964057917,2,NULL),(2757,'incredible 🚜',2478895001,4,NULL),(2758,'example.org/foo/🙙.html',1629801655,1,0),(2759,'sku 🛸',1933861750,5,NULL),(2760,'name 🛩',1357304706,6,NULL),(2761,'category 🛤',3799650063,7,NULL),(2762,'site.com/',3489028057,1,0); +/*!40000 ALTER TABLE `log_action` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `log_conversion` +-- + +DROP TABLE IF EXISTS `log_conversion`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `log_conversion` ( + `idvisit` bigint(10) unsigned NOT NULL, + `idsite` int(10) unsigned NOT NULL, + `idvisitor` binary(8) NOT NULL, + `server_time` datetime NOT NULL, + `idaction_url` int(10) unsigned DEFAULT NULL, + `idlink_va` bigint(10) unsigned DEFAULT NULL, + `idgoal` int(10) NOT NULL, + `buster` int(10) unsigned NOT NULL, + `idorder` varchar(100) DEFAULT NULL, + `items` smallint(5) unsigned DEFAULT NULL, + `url` varchar(4096) NOT NULL, + `revenue` float DEFAULT NULL, + `revenue_shipping` double DEFAULT NULL, + `revenue_subtotal` double DEFAULT NULL, + `revenue_tax` double DEFAULT NULL, + `revenue_discount` double DEFAULT NULL, + `pageviews_before` smallint(5) unsigned DEFAULT NULL, + `visitor_returning` tinyint(1) DEFAULT NULL, + `visitor_seconds_since_first` int(11) unsigned DEFAULT NULL, + `visitor_seconds_since_order` int(11) unsigned DEFAULT NULL, + `visitor_count_visits` int(11) unsigned NOT NULL DEFAULT '0', + `referer_keyword` varchar(255) DEFAULT NULL, + `referer_name` varchar(255) DEFAULT NULL, + `referer_type` tinyint(1) unsigned DEFAULT NULL, + `config_browser_name` varchar(40) DEFAULT NULL, + `config_client_type` tinyint(1) DEFAULT NULL, + `config_device_brand` varchar(100) CHARACTER SET utf8 DEFAULT NULL, + `config_device_model` varchar(100) CHARACTER SET utf8 DEFAULT NULL, + `config_device_type` tinyint(100) DEFAULT NULL, + `location_city` varchar(255) DEFAULT NULL, + `location_country` char(3) DEFAULT NULL, + `location_latitude` decimal(9,6) DEFAULT NULL, + `location_longitude` decimal(9,6) DEFAULT NULL, + `location_region` char(3) DEFAULT NULL, + `custom_dimension_1` varchar(255) DEFAULT NULL, + `custom_dimension_2` varchar(255) DEFAULT NULL, + `custom_dimension_3` varchar(255) DEFAULT NULL, + `custom_dimension_4` varchar(255) DEFAULT NULL, + `custom_dimension_5` varchar(255) DEFAULT NULL, + `custom_var_k1` varchar(200) DEFAULT NULL, + `custom_var_v1` varchar(200) DEFAULT NULL, + `custom_var_k2` varchar(200) DEFAULT NULL, + `custom_var_v2` varchar(200) DEFAULT NULL, + `custom_var_k3` varchar(200) DEFAULT NULL, + `custom_var_v3` varchar(200) DEFAULT NULL, + `custom_var_k4` varchar(200) DEFAULT NULL, + `custom_var_v4` varchar(200) DEFAULT NULL, + `custom_var_k5` varchar(200) DEFAULT NULL, + `custom_var_v5` varchar(200) DEFAULT NULL, + PRIMARY KEY (`idvisit`,`idgoal`,`buster`), + UNIQUE KEY `unique_idsite_idorder` (`idsite`,`idorder`), + KEY `index_idsite_datetime` (`idsite`,`server_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `log_conversion` +-- + +LOCK TABLES `log_conversion` WRITE; +/*!40000 ALTER TABLE `log_conversion` DISABLE KEYS */; +INSERT INTO `log_conversion` VALUES (1,1,_binary 'ê‚�ÿ³Ef\×','2012-08-09 08:10:38',1,1,1,0,NULL,NULL,'http://piwik.net/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1,1,_binary 'ê‚�ÿ³Ef\×','2012-08-09 08:10:38',1,1,2,0,NULL,NULL,'http://piwik.net/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,1,_binary 'Ì�\Ä\÷c&\î','2012-08-09 08:11:30',2,2,1,0,NULL,NULL,'http://piwik.net/faq/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'AN',1,'HT','Vision',1,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,1,_binary 'Ì�\Ä\÷c&\î','2012-08-09 08:11:30',2,2,2,0,NULL,NULL,'http://piwik.net/faq/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'AN',1,'HT','Vision',1,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(3,1,_binary 't¤\ë\0q`\Òÿ','2012-08-09 08:11:56',3,3,1,0,NULL,NULL,'http://piwik.net/blog/category/community/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'EP',1,'','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(3,1,_binary 't¤\ë\0q`\Òÿ','2012-08-09 08:11:56',3,3,2,0,NULL,NULL,'http://piwik.net/blog/category/community/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'EP',1,'','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(4,1,_binary '\â\Z™d¸–À','2012-08-09 08:12:03',4,4,1,0,NULL,NULL,'http://piwik.net/docs/manage-websites/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(4,1,_binary '\â\Z™d¸–À','2012-08-09 08:12:03',4,4,2,0,NULL,NULL,'http://piwik.net/docs/manage-websites/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,1,_binary 'CA¶\Ð;L!','2012-08-09 13:48:07',5,5,1,0,NULL,NULL,'http://piwik.net/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,1,_binary 'CA¶\Ð;L!','2012-08-09 13:48:07',5,5,2,0,NULL,NULL,'http://piwik.net/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(6,1,_binary '„¶ :!¤‰·','2012-08-09 13:48:20',6,6,1,0,NULL,NULL,'http://piwik.net/download/counter/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'EP',1,'','generic desktop',0,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(6,1,_binary '„¶ :!¤‰·','2012-08-09 13:48:20',6,6,2,0,NULL,NULL,'http://piwik.net/download/counter/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'EP',1,'','generic desktop',0,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(7,1,_binary 'Cecw>£S¬','2012-08-09 13:49:48',7,7,1,0,NULL,NULL,'http://piwik.net/translations/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'CH',1,'','generic desktop',0,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(7,1,_binary 'Cecw>£S¬','2012-08-09 13:49:48',7,7,2,0,NULL,NULL,'http://piwik.net/translations/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'CH',1,'','generic desktop',0,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(8,1,_binary 'yE�£\óù','2012-08-09 20:56:45',8,8,1,0,NULL,NULL,'http://piwik.net/docs/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(8,1,_binary 'yE�£\óù','2012-08-09 20:56:45',8,8,2,0,NULL,NULL,'http://piwik.net/docs/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(9,1,_binary 'jÏ¿´$¯R','2012-08-09 21:00:42',9,9,1,0,NULL,NULL,'http://piwik.net/docs/manage-users/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'CH',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(9,1,_binary 'jÏ¿´$¯R','2012-08-09 21:00:42',9,9,2,0,NULL,NULL,'http://piwik.net/docs/manage-users/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'CH',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(10,1,_binary 'UR,�¶\Ó\á','2012-08-10 18:03:40',10,10,1,0,NULL,NULL,'http://piwik.net/newsletter/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(10,1,_binary 'UR,�¶\Ó\á','2012-08-10 18:03:40',10,10,2,0,NULL,NULL,'http://piwik.net/newsletter/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(11,1,_binary 'š\ô3F\ÝZ»','2012-08-10 19:59:50',11,11,1,0,NULL,NULL,'http://piwik.net/faq/how-to/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(11,1,_binary 'š\ô3F\ÝZ»','2012-08-10 19:59:50',11,11,2,0,NULL,NULL,'http://piwik.net/faq/how-to/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(12,1,_binary '›€„-3^\æ§','2012-08-10 20:01:17',2,12,1,0,NULL,NULL,'http://piwik.net/faq/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'EP',1,'','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(12,1,_binary '›€„-3^\æ§','2012-08-10 20:01:17',2,12,2,0,NULL,NULL,'http://piwik.net/faq/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'EP',1,'','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(13,1,_binary ' |…£Kß¡f','2012-08-10 20:21:03',4,13,1,0,NULL,NULL,'http://piwik.net/docs/manage-websites/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,NULL,'br',-10.000000,-55.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(13,1,_binary ' |…£Kß¡f','2012-08-10 20:21:03',4,13,2,0,NULL,NULL,'http://piwik.net/docs/manage-websites/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,NULL,'br',-10.000000,-55.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(14,1,_binary 'ÀaŠk7w½','2012-08-10 20:21:28',12,14,1,0,NULL,NULL,'http://piwik.net/intranet-analytics/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'EP',1,'','generic desktop',0,NULL,'br',-10.000000,-55.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(14,1,_binary 'ÀaŠk7w½','2012-08-10 20:21:28',12,14,2,0,NULL,NULL,'http://piwik.net/intranet-analytics/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'EP',1,'','generic desktop',0,NULL,'br',-10.000000,-55.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(15,1,_binary '¶x¾\ìŒY ','2012-08-10 20:22:08',13,15,1,0,NULL,NULL,'http://piwik.net/blog/2012/08/survey-your-opinion-matters/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'CH',1,'','generic desktop',0,NULL,'br',-10.000000,-55.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(15,1,_binary '¶x¾\ìŒY ','2012-08-10 20:22:08',13,15,2,0,NULL,NULL,'http://piwik.net/blog/2012/08/survey-your-opinion-matters/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'CH',1,'','generic desktop',0,NULL,'br',-10.000000,-55.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(16,1,_binary '\n¼a�(`\ö\Ü','2012-08-11 13:49:46',14,16,1,0,NULL,NULL,'http://piwik.net/faq/how-to-install/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'EP',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(16,1,_binary '\n¼a�(`\ö\Ü','2012-08-11 13:49:46',14,16,2,0,NULL,NULL,'http://piwik.net/faq/how-to-install/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'EP',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(17,1,_binary 'ǡڧp¨\ä:','2012-08-11 15:31:05',15,17,1,0,NULL,NULL,'http://piwik.net/hosting/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'CH',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(17,1,_binary 'ǡڧp¨\ä:','2012-08-11 15:31:05',15,17,2,0,NULL,NULL,'http://piwik.net/hosting/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'CH',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(19,1,_binary 'ª uü’P»','2012-08-11 16:10:38',1,19,1,0,NULL,NULL,'http://piwik.net/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(19,1,_binary 'ª uü’P»','2012-08-11 16:10:38',1,19,2,0,NULL,NULL,'http://piwik.net/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(20,1,_binary 'δ\ð�h\Èr-','2012-08-11 16:11:30',18,20,1,0,NULL,NULL,'http://piwik.net/this/is/not/the/page/i/am/looking/for/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'AN',1,'HT','Vision',1,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(20,1,_binary 'δ\ð�h\Èr-','2012-08-11 16:11:30',18,20,2,0,NULL,NULL,'http://piwik.net/this/is/not/the/page/i/am/looking/for/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'AN',1,'HT','Vision',1,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(21,1,_binary '¸\ô�›¸\ÖΪ','2012-08-11 17:48:07',20,21,1,0,NULL,NULL,'http://piwik.net/to-an-error',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(21,1,_binary '¸\ô�›¸\ÖΪ','2012-08-11 17:48:07',20,21,2,0,NULL,NULL,'http://piwik.net/to-an-error',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(22,1,_binary '‘jt\éGœ¨','2012-08-11 17:48:08',5,22,1,0,NULL,NULL,'http://piwik.net/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,'Bot','Googlebot/2.1 (+http://www.googlebot.com/bot.html)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(22,1,_binary '‘jt\éGœ¨','2012-08-11 17:48:08',5,22,2,0,NULL,NULL,'http://piwik.net/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,'Bot','Googlebot/2.1 (+http://www.googlebot.com/bot.html)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(24,1,_binary '\ã‡\Þj?\ãn\õ','2012-08-11 19:12:40',25,26,1,0,NULL,NULL,'http://piwik.net/moved-permanently',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(24,1,_binary '\ã‡\Þj?\ãn\õ','2012-08-11 19:12:40',25,26,2,0,NULL,NULL,'http://piwik.net/moved-permanently',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(25,1,_binary '1†F x�Ÿ','2012-08-11 20:15:41',1,28,1,0,NULL,NULL,'http://piwik.net/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(25,1,_binary '1†F x�Ÿ','2012-08-11 20:15:41',1,28,2,0,NULL,NULL,'http://piwik.net/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(26,1,_binary '\\0c´~«c•','2012-08-11 20:15:51',1,29,1,0,NULL,NULL,'http://piwik.net/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,'Seoul','kr',37.600000,126.980000,'11',NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(26,1,_binary '\\0c´~«c•','2012-08-11 20:15:51',1,29,2,0,NULL,NULL,'http://piwik.net/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,'Seoul','kr',37.600000,126.980000,'11',NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(27,1,_binary '\ä\0+ \ò\Â\Ýp','2012-08-15 07:18:38',29,30,1,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'piwik.org',3,'IE',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','NewLoggedOut'),(27,1,_binary '\ä\0+ \ò\Â\Ýp','2012-08-15 07:18:38',29,30,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'piwik.org',3,'IE',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','NewLoggedOut'),(28,1,_binary '�y�5À\òº','2012-08-15 04:30:13',34,31,1,0,NULL,NULL,'http://forum.piwik.org/register.php?0,approve=9a94a02145599',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'sn110w.snt110.mail.live.com',3,'CH',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Forum status','Anonymous',NULL,NULL,NULL,NULL),(28,1,_binary '�y�5À\òº','2012-08-15 04:30:13',34,31,2,0,NULL,NULL,'http://forum.piwik.org/register.php?0,approve=9a94a02145599',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'sn110w.snt110.mail.live.com',3,'CH',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Forum status','Anonymous',NULL,NULL,NULL,NULL),(31,1,_binary '\àX}f\à#','2014-03-12 00:34:15',39,34,1,0,NULL,NULL,'http://piwik.org/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'musicforeveryoneradio.be',3,'CH',1,'','generic desktop',0,'Maaseik','be',51.100000,5.800000,'VLG',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(31,1,_binary '\àX}f\à#','2014-03-12 00:34:15',39,34,2,0,NULL,NULL,'http://piwik.org/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'musicforeveryoneradio.be',3,'CH',1,'','generic desktop',0,'Maaseik','be',51.100000,5.800000,'VLG',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(32,1,_binary '\ðwÞ‡úV','2014-03-13 00:32:23',39,35,1,0,NULL,NULL,'http://piwik.org/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'FF',1,'','generic desktop',0,'Moscow','ru',55.750000,37.620000,'MOW',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(32,1,_binary '\ðwÞ‡úV','2014-03-13 00:32:23',39,35,2,0,NULL,NULL,'http://piwik.org/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'FF',1,'','generic desktop',0,'Moscow','ru',55.750000,37.620000,'MOW',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(33,1,_binary '‹”.\ó±tg','2014-03-13 00:32:24',41,36,1,0,NULL,NULL,'http://piwik.org/docs/installation/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'CH',1,'','generic desktop',0,'Esentepe','tr',40.980000,40.420000,'53',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(33,1,_binary '‹”.\ó±tg','2014-03-13 00:32:24',41,36,2,0,NULL,NULL,'http://piwik.org/docs/installation/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'CH',1,'','generic desktop',0,'Esentepe','tr',40.980000,40.420000,'53',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(34,1,_binary '\Ö\ðܶiI¸k','2014-03-13 00:33:11',46,39,1,0,NULL,NULL,'http://piwik.org/log-analytics/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'forum.golem.de',3,'FF',1,'','generic desktop',0,'Mainz','de',50.000000,8.270000,'RP',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(34,1,_binary '\Ö\ðܶiI¸k','2014-03-13 00:33:11',46,39,2,0,NULL,NULL,'http://piwik.org/log-analytics/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'forum.golem.de',3,'FF',1,'','generic desktop',0,'Mainz','de',50.000000,8.270000,'RP',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(35,1,_binary '\à\ë5\Äú\âª\n','2014-03-13 00:33:27',48,40,1,0,NULL,NULL,'http://piwik.org/changelog/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'trends.builtwith.com',3,'IE',1,'','generic desktop',0,'Lake Forest','us',33.650000,-117.680000,'CA',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(35,1,_binary '\à\ë5\Äú\âª\n','2014-03-13 00:33:27',48,40,2,0,NULL,NULL,'http://piwik.org/changelog/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'trends.builtwith.com',3,'IE',1,'','generic desktop',0,'Lake Forest','us',33.650000,-117.680000,'CA',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(36,1,_binary 'ü–å–½L]T','2014-03-13 00:33:33',50,41,1,0,NULL,NULL,'http://piwik.org/blog/2014/03/piwik-2-1-massive-performance-reliability-improvements/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'berndjung.com',3,'FM',1,'','generic smartphone',1,'Weilerswist','de',50.770000,6.830000,'NW',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(36,1,_binary 'ü–å–½L]T','2014-03-13 00:33:33',50,41,2,0,NULL,NULL,'http://piwik.org/blog/2014/03/piwik-2-1-massive-performance-reliability-improvements/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'berndjung.com',3,'FM',1,'','generic smartphone',1,'Weilerswist','de',50.770000,6.830000,'NW',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(37,1,_binary 'L\îµÝ·o','2014-03-13 00:33:50',46,42,1,0,NULL,NULL,'https://piwik.org/log-analytics/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'SF',1,'AP','generic desktop',0,'Nihon\'odori','jp',35.450000,139.650000,'14',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(37,1,_binary 'L\îµÝ·o','2014-03-13 00:33:50',46,42,2,0,NULL,NULL,'https://piwik.org/log-analytics/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'SF',1,'AP','generic desktop',0,'Nihon\'odori','jp',35.450000,139.650000,'14',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(38,1,_binary '=œ­?„\Âr','2014-03-13 00:33:55',52,43,1,0,NULL,NULL,'http://piwik.org/blog/2012/10/integrate-piwik-into-your-rails-application/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'CH',1,'AP','generic desktop',0,'San Francisco','us',37.790000,-122.410000,'CA',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(38,1,_binary '=œ­?„\Âr','2014-03-13 00:33:55',52,43,2,0,NULL,NULL,'http://piwik.org/blog/2012/10/integrate-piwik-into-your-rails-application/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'CH',1,'AP','generic desktop',0,'San Francisco','us',37.790000,-122.410000,'CA',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(39,1,_binary '�Ø’t¨\Âm�','2014-03-13 00:33:59',39,44,1,0,NULL,NULL,'http://piwik.org/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'SF',1,'AP','generic desktop',0,NULL,'us',38.000000,-97.000000,NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(39,1,_binary '�Ø’t¨\Âm�','2014-03-13 00:33:59',39,44,2,0,NULL,NULL,'http://piwik.org/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'SF',1,'AP','generic desktop',0,NULL,'us',38.000000,-97.000000,NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(41,1,_binary '\Ø3–\ñ¤Â¬','2014-03-13 00:34:42',57,47,1,0,NULL,NULL,'http://demo.piwik.org/index.php?module=CoreHome&action=index&date=yesterday&period=day&idSite=7',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'CH',1,'','generic desktop',0,NULL,'de',51.000000,9.000000,NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org','Demo language','English',NULL,NULL,NULL,NULL,NULL,NULL),(41,1,_binary '\Ø3–\ñ¤Â¬','2014-03-13 00:34:42',57,47,2,0,NULL,NULL,'http://demo.piwik.org/index.php?module=CoreHome&action=index&date=yesterday&period=day&idSite=7',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'CH',1,'','generic desktop',0,NULL,'de',51.000000,9.000000,NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org','Demo language','English',NULL,NULL,NULL,NULL,NULL,NULL),(42,1,_binary 'Ù‹S\×ü\õ ‚','2014-03-13 00:34:53',39,49,1,0,NULL,NULL,'http://piwik.org/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'blog.comperiosearch.com',3,'CH',1,'','generic desktop',0,'Raleigh','us',35.770000,-78.640000,'NC',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(42,1,_binary 'Ù‹S\×ü\õ ‚','2014-03-13 00:34:53',39,49,2,0,NULL,NULL,'http://piwik.org/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'blog.comperiosearch.com',3,'CH',1,'','generic desktop',0,'Raleigh','us',35.770000,-78.640000,'NC',NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(57,1,_binary '6œ¥‚[[\Ø','2012-09-30 08:10:38',1,70,1,0,NULL,NULL,'http://piwik.net/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(57,1,_binary '6œ¥‚[[\Ø','2012-09-30 08:10:38',1,70,2,0,NULL,NULL,'http://piwik.net/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(58,1,_binary '(g³<��œ\Ú','2012-08-10 08:10:38',60,80,1,0,NULL,NULL,'http://included3.com/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(58,1,_binary '(g³<��œ\Ú','2012-08-10 08:10:38',60,80,2,0,NULL,NULL,'http://included3.com/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(59,1,_binary '\ïV‰¨zYi^','2012-08-09 08:10:39',61,81,1,0,NULL,NULL,'http://www.included4.com/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(59,1,_binary '\ïV‰¨zYi^','2012-08-09 08:10:39',61,81,2,0,NULL,NULL,'http://www.included4.com/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(60,1,_binary 'l\Õ\Ó\Ý(�!’','2012-08-10 08:10:38',62,82,1,0,NULL,NULL,'http://included1.com/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,'Singapore','sg',1.370000,103.800000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(60,1,_binary 'l\Õ\Ó\Ý(�!’','2012-08-10 08:10:38',62,82,2,0,NULL,NULL,'http://included1.com/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,'Singapore','sg',1.370000,103.800000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(61,1,_binary '\Õ\Ç`®�ž\ï','2012-08-09 08:10:39',63,83,1,0,NULL,NULL,'http://www.included2.com/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,'Singapore','sg',1.370000,103.800000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(61,1,_binary '\Õ\Ç`®�ž\ï','2012-08-09 08:10:39',63,83,2,0,NULL,NULL,'http://www.included2.com/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,'Singapore','sg',1.370000,103.800000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(62,1,_binary ' P­`µla','2012-08-19 08:10:38',64,84,1,0,NULL,NULL,'http://www.notdatefiltered.com/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,'Singapore','sg',1.370000,103.800000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(62,1,_binary ' P­`µla','2012-08-19 08:10:38',64,84,2,0,NULL,NULL,'http://www.notdatefiltered.com/blog/category/meta/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'RM',1,'AP','generic desktop',0,'Singapore','sg',1.370000,103.800000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(63,1,_binary 'Ž\0!M¬š\á\Ë','2012-01-16 00:00:00',66,85,1,0,NULL,NULL,'http://example.org/%3Cscript%3E_x%286%29%3C%2Fscript%3E',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'referrer.com',3,'FF',1,'','generic desktop',0,'<script>_x(15)</script>','<',40.890000,-73.950000,'<','<script>_x(10)</script>',NULL,NULL,NULL,NULL,'','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(63,1,_binary 'Ž\0!M¬š\á\Ë','2012-01-16 00:00:00',66,85,2,0,NULL,NULL,'http://example.org/%3Cscript%3E_x%286%29%3C%2Fscript%3E',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'referrer.com',3,'FF',1,'','generic desktop',0,'<script>_x(15)</script>','<',40.890000,-73.950000,'<','<script>_x(10)</script>',NULL,NULL,NULL,NULL,'','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(64,1,_binary 'Ž\0!M¬š\á\Ë','2012-01-16 12:22:33',68,86,1,0,NULL,NULL,'http://example.org/',5,NULL,NULL,NULL,NULL,1,1,44553,NULL,2,'','Google',2,'FF',1,'','generic desktop',0,'<script>_x(15)</script>','<',40.890000,-73.950000,'<',NULL,NULL,NULL,NULL,NULL,'','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(64,1,_binary 'Ž\0!M¬š\á\Ë','2012-01-16 12:22:33',68,86,2,0,NULL,NULL,'http://example.org/',5,NULL,NULL,NULL,NULL,1,1,44553,NULL,2,'','Google',2,'FF',1,'','generic desktop',0,'<script>_x(15)</script>','<',40.890000,-73.950000,'<',NULL,NULL,NULL,NULL,NULL,'','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(65,1,_binary '2}ÿ˜¼j5¼','2012-01-17 00:00:00',70,87,1,0,NULL,NULL,'http://example.org/%7B%7B_Vue.h.constructor%60_x%2818%29%60%28%29%7D%7D',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'referrer.com',3,'FF',1,'','generic desktop',0,'{{_Vue.h.constructor`_x(27)`()}}','{{_',40.890000,-73.950000,'{{_','{{_Vue.h.constructor`_x(22)`()}}',NULL,NULL,NULL,NULL,'{{_Vue.h.constructor`_x(23)`()}}','{{_Vue.h.constructor`_x(24)`()}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(65,1,_binary '2}ÿ˜¼j5¼','2012-01-17 00:00:00',70,87,2,0,NULL,NULL,'http://example.org/%7B%7B_Vue.h.constructor%60_x%2818%29%60%28%29%7D%7D',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'referrer.com',3,'FF',1,'','generic desktop',0,'{{_Vue.h.constructor`_x(27)`()}}','{{_',40.890000,-73.950000,'{{_','{{_Vue.h.constructor`_x(22)`()}}',NULL,NULL,NULL,NULL,'{{_Vue.h.constructor`_x(23)`()}}','{{_Vue.h.constructor`_x(24)`()}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(66,1,_binary '2}ÿ˜¼j5¼','2012-01-17 12:22:33',72,88,1,0,NULL,NULL,'http://example.org/{{_Vue.h.constructor`_x(18)`()}}',5,NULL,NULL,NULL,NULL,1,1,44553,NULL,2,'{{_vue.h.constructor`_x(21)`()}}','Google',2,'FF',1,'','generic desktop',0,'{{_Vue.h.constructor`_x(27)`()}}','{{_',40.890000,-73.950000,'{{_',NULL,NULL,NULL,NULL,NULL,'{{_Vue.h.constructor`_x(23)`()}}','{{_Vue.h.constructor`_x(24)`()}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(66,1,_binary '2}ÿ˜¼j5¼','2012-01-17 12:22:33',72,88,2,0,NULL,NULL,'http://example.org/{{_Vue.h.constructor`_x(18)`()}}',5,NULL,NULL,NULL,NULL,1,1,44553,NULL,2,'{{_vue.h.constructor`_x(21)`()}}','Google',2,'FF',1,'','generic desktop',0,'{{_Vue.h.constructor`_x(27)`()}}','{{_',40.890000,-73.950000,'{{_',NULL,NULL,NULL,NULL,NULL,'{{_Vue.h.constructor`_x(23)`()}}','{{_Vue.h.constructor`_x(24)`()}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(75,1,_binary '\0cl\ß','2015-03-03 06:00:00',509,688,1,0,NULL,NULL,'http://somesite.com/1',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(293,1,_binary 'cwú³¨>\ß','2015-03-03 06:00:00',509,688,2,0,NULL,NULL,'http://somesite.com/1',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(294,1,_binary '\ß OhE ‰','2015-03-04 06:00:00',507,1387,1,0,NULL,NULL,'http://somesite.com/0',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(294,1,_binary '\ß OhE ‰','2015-03-04 06:00:00',507,1387,2,0,NULL,NULL,'http://somesite.com/0',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(295,1,_binary 'ù5pšê›¶–','2012-01-10 15:22:33',2507,2387,1,0,NULL,NULL,'http://example.org/dir1/sub/dir/page0.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(295,1,_binary 'ù5pšê›¶–','2012-01-10 15:22:33',2507,2387,2,0,NULL,NULL,'http://example.org/dir1/sub/dir/page0.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(296,1,_binary '\Ö$%\Î\êº/P','2012-01-10 16:22:33',2507,2390,1,0,NULL,NULL,'http://example.org/dir1/sub/dir/page0.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(296,1,_binary '\Ö$%\Î\êº/P','2012-01-10 16:22:33',2507,2390,2,0,NULL,NULL,'http://example.org/dir1/sub/dir/page0.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(297,1,_binary 'E‚�³lg\Ð','2012-01-10 18:22:33',2510,2393,1,0,NULL,NULL,'http://example.org/dir2/sub/dir/page0.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(297,1,_binary 'E‚�³lg\Ð','2012-01-10 18:22:33',2510,2393,2,0,NULL,NULL,'http://example.org/dir2/sub/dir/page0.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(298,1,_binary 'yeé©�LX\ð','2012-01-10 19:22:33',2510,2396,1,0,NULL,NULL,'http://example.org/dir2/sub/dir/page0.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(298,1,_binary 'yeé©�LX\ð','2012-01-10 19:22:33',2510,2396,2,0,NULL,NULL,'http://example.org/dir2/sub/dir/page0.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(299,1,_binary 'o/\å\Ï\ë}϶','2012-01-10 21:22:33',2513,2399,1,0,NULL,NULL,'http://example.org/dir3/sub/dir/page0.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(299,1,_binary 'o/\å\Ï\ë}϶','2012-01-10 21:22:33',2513,2399,2,0,NULL,NULL,'http://example.org/dir3/sub/dir/page0.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(300,1,_binary '2\"U¼\ã*\êù','2012-01-10 22:22:33',2513,2402,1,0,NULL,NULL,'http://example.org/dir3/sub/dir/page0.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(300,1,_binary '2\"U¼\ã*\êù','2012-01-10 22:22:33',2513,2402,2,0,NULL,NULL,'http://example.org/dir3/sub/dir/page0.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(301,1,_binary '\Ö‹\êÕ¬�™','2012-01-12 11:22:33',2536,2416,1,0,NULL,NULL,'http://example.org/foo/bar.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'piwik','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(301,1,_binary '\Ö‹\êÕ¬�™','2012-01-12 11:22:33',2536,2416,2,0,NULL,NULL,'http://example.org/foo/bar.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'piwik','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(303,1,_binary 'j¤ù™|•\"&','2012-01-14 11:22:33',94,2425,1,0,NULL,NULL,'http://example.org/index.htm?parameter=Should display',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'referrer.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(303,1,_binary 'j¤ù™|•\"&','2012-01-14 11:22:33',94,2425,2,0,NULL,NULL,'http://example.org/index.htm?parameter=Should display',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'referrer.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(304,1,_binary 'j¤ù™|•\"&','2012-01-14 12:22:33',103,2432,1,0,NULL,NULL,'http://example.org/store/purchase.htm',5,NULL,NULL,NULL,NULL,1,1,3600,NULL,2,'purchase','Yahoo!',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(304,1,_binary 'j¤ù™|•\"&','2012-01-14 12:22:33',103,2432,2,0,NULL,NULL,'http://example.org/store/purchase.htm',5,NULL,NULL,NULL,NULL,1,1,3600,NULL,2,'purchase','Yahoo!',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(305,1,_binary '¨\ë„\ÜPŒ€','2012-01-15 00:06:00',2550,2433,1,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(305,1,_binary '¨\ë„\ÜPŒ€','2012-01-15 00:06:00',2550,2433,2,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(306,1,_binary '\ök\Ã\ò \Zy','2012-01-15 01:36:00',2550,2438,1,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,1,1001427,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(306,1,_binary '\ök\Ã\ò \Zy','2012-01-15 01:36:00',2550,2438,2,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,1,1001427,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(307,1,_binary '¡;|Zb\÷-\ê','2012-01-15 03:00:00',2550,2442,1,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,1,1006647,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(307,1,_binary '¡;|Zb\÷-\ê','2012-01-15 03:00:00',2550,2442,2,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,1,1006647,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(308,1,_binary '9\÷.9a\á‹N','2012-01-15 04:12:00',2550,2444,1,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(308,1,_binary '9\÷.9a\á‹N','2012-01-15 04:12:00',2550,2444,2,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(309,1,_binary '_7V®‹Lκ','2012-01-16 05:54:00',2550,2451,1,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(309,1,_binary '_7V®‹Lκ','2012-01-16 05:54:00',2550,2451,2,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(310,1,_binary '(†BzW\çº','2012-01-16 07:48:00',2550,2460,1,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'jp',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(310,1,_binary '(†BzW\çº','2012-01-16 07:48:00',2550,2460,2,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'jp',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(311,1,_binary '5 ÀŠÁ[¸','2012-01-17 09:00:00',2550,2462,1,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'us',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(311,1,_binary '5 ÀŠÁ[¸','2012-01-17 09:00:00',2550,2462,2,0,NULL,NULL,'http://example.org/page_A/index.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'us',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(312,1,_binary '\õŒûœ\å\Ë','2012-01-16 00:29:42',29,2466,1,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(312,1,_binary '\õŒûœ\å\Ë','2012-01-16 00:48:18',NULL,NULL,1,2526674898,NULL,NULL,'http://example.org/index.htm',656,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(312,1,_binary '\õŒûœ\å\Ë','2012-01-16 00:29:42',29,2466,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(313,1,_binary '\õŒûœ\å\Ë','2012-01-16 00:53:42',29,2467,1,3026675222,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,1440,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(313,1,_binary '\õŒûœ\å\Ë','2012-01-16 00:53:42',29,2467,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,1440,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(313,1,_binary '\õŒûœ\å\Ë','2012-01-16 00:29:42',2572,2468,3,0,NULL,NULL,'http://example.org/index.htm',0,NULL,NULL,NULL,NULL,1,1,1440,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(313,1,_binary '\õŒûœ\å\Ë','2012-01-16 00:29:42',2572,2468,4,0,NULL,NULL,'http://example.org/index.htm',0,NULL,NULL,NULL,NULL,1,1,1440,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(313,1,_binary '\õŒûœ\å\Ë','2012-01-16 00:35:42',2572,2470,5,0,NULL,NULL,'http://example.org/index.htm',0,NULL,NULL,NULL,NULL,1,1,1440,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(314,1,_binary '»\ò¥2N','2012-01-17 00:29:42',NULL,NULL,1,3526760182,NULL,NULL,'',42.26,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'piwik kwd','ga campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(314,1,_binary '»\ò¥2N','2012-01-17 00:11:42',29,2471,1,3826759102,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'piwik kwd','ga campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(314,1,_binary '»\ò¥2N','2012-01-17 00:11:42',29,2471,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'piwik kwd','ga campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(315,1,_binary '–ý\Ú\ÊÚ�\É','2012-01-17 01:29:42',NULL,NULL,1,1326763782,NULL,NULL,'http://example.org/index.htm',42,NULL,NULL,NULL,NULL,0,0,0,NULL,1,'example.org','credited to goal please',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(316,1,_binary '–ý\Ú\ÊÚ�\É','2012-01-17 01:35:42',NULL,NULL,1,3926764142,NULL,NULL,'http://example.org/index.html',24,NULL,NULL,NULL,NULL,0,1,360,NULL,2,'example.org','credited to another goal',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(317,1,_binary '•I\â„™\í','2012-01-17 03:11:42',2579,2472,1,3326769902,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'whatever','ga campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(317,1,_binary '•I\â„™\í','2012-01-17 03:11:42',2579,2472,2,0,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'whatever','ga campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(318,1,_binary '•I\â„™\í','2012-01-17 04:11:42',2579,2473,1,1926773502,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,3600,NULL,2,'thing1.com','ga campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(318,1,_binary '•I\â„™\í','2012-01-17 04:11:42',2579,2473,2,0,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,3600,NULL,2,'thing1.com','ga campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(319,1,_binary '•I\â„™\í','2012-01-17 05:11:42',2579,2474,1,3226777102,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,7200,NULL,3,'(adwords) www.adwords-publisher-website.org','adwords campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(319,1,_binary '•I\â„™\í','2012-01-17 05:11:42',2579,2474,2,0,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,7200,NULL,3,'(adwords) www.adwords-publisher-website.org','adwords campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(320,1,_binary '•I\â„™\í','2012-01-17 06:11:42',2579,2475,1,3926780702,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,4,'nintendo consoles second hand','adwords campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(320,1,_binary '•I\â„™\í','2012-01-17 06:11:42',2579,2475,2,0,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,4,'nintendo consoles second hand','adwords campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(321,1,_binary '•I\â„™\í','2012-01-17 07:11:42',2579,2476,1,2626784302,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,14400,NULL,5,'(adwords) example.com','adwords (text_image)',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(321,1,_binary '•I\â„™\í','2012-01-17 07:11:42',2579,2476,2,0,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,14400,NULL,5,'(adwords) example.com','adwords (text_image)',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(322,1,_binary '•I\â„™\í','2012-01-17 08:11:42',2579,2477,1,2826787902,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,6,'(adwords) www.example.com','adwords (text)',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(322,1,_binary '•I\â„™\í','2012-01-17 08:11:42',2579,2477,2,0,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,6,'(adwords) www.example.com','adwords (text)',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(323,1,_binary '•I\â„™\í','2012-01-17 10:17:42',2579,2479,1,1526795462,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,2,1,25200,NULL,7,'piwik kwd','ga campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(323,1,_binary '•I\â„™\í','2012-01-17 10:11:42',2579,2478,1,2726795102,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,25200,NULL,7,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(323,1,_binary '•I\â„™\í','2012-01-17 10:11:42',2579,2478,2,0,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,25200,NULL,7,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(324,1,_binary '•I\â„™\í','2012-01-17 10:23:42',2579,2480,1,1526795822,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,3,1,25920,NULL,8,NULL,'myreferrerwebsite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(324,1,_binary '•I\â„™\í','2012-01-17 10:23:42',2579,2480,2,0,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,3,1,25920,NULL,8,NULL,'myreferrerwebsite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(325,1,_binary '•I\â„™\í','2012-01-17 11:11:42',2579,2481,1,1326798702,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,28800,NULL,9,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(325,1,_binary '•I\â„™\í','2012-01-17 11:11:42',2579,2481,2,0,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,1,1,28800,NULL,9,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(326,1,_binary '•I\â„™\í','2012-01-17 11:17:42',2579,2482,1,1826799062,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,2,1,29160,NULL,10,NULL,'myotherreferrerwebsite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(326,1,_binary '•I\â„™\í','2012-01-17 11:23:42',2579,2483,1,3126799422,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,2,1,29160,NULL,10,NULL,'myotherreferrerwebsite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(326,1,_binary '•I\â„™\í','2012-01-17 11:17:42',2579,2482,2,0,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,2,1,29160,NULL,10,NULL,'myotherreferrerwebsite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(327,1,_binary '•I\â„™\í','2012-01-17 11:29:42',2579,2484,1,3126799782,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,3,1,29880,NULL,11,NULL,'mutantregistration.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(327,1,_binary '•I\â„™\í','2012-01-17 11:29:42',2579,2484,2,0,NULL,NULL,'http://example.org/index.html',5,NULL,NULL,NULL,NULL,3,1,29880,NULL,11,NULL,'mutantregistration.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(328,1,_binary '»\ò¥2N','2012-01-17 00:11:42',2590,2485,1,2126759102,NULL,NULL,'http://mutantregistration.com/act.html',5,NULL,NULL,NULL,NULL,2,1,0,NULL,2,'','gifted search',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(328,1,_binary '»\ò¥2N','2012-01-17 00:11:42',2590,2485,2,0,NULL,NULL,'http://mutantregistration.com/act.html',5,NULL,NULL,NULL,NULL,2,1,0,NULL,2,'','gifted search',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(329,1,_binary '»\ò¥2N','2012-01-17 00:11:42',NULL,NULL,0,2763437669,'vg25gedefg',0,'',17.4,NULL,NULL,NULL,NULL,1,2,0,0,2,'','gifted search',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(330,1,_binary '–ý\Ú\ÊÚ�\É','2012-01-17 01:11:42',2592,2486,1,2026762702,NULL,NULL,'http://asteroidm.com',5,NULL,NULL,NULL,NULL,1,1,NULL,NULL,3,'am i a mutant?','recruiting drive',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(330,1,_binary '–ý\Ú\ÊÚ�\É','2012-01-17 01:11:42',2592,2486,2,0,NULL,NULL,'http://asteroidm.com',5,NULL,NULL,NULL,NULL,1,1,NULL,NULL,3,'am i a mutant?','recruiting drive',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(331,1,_binary '–ý\Ú\ÊÚ�\É','2012-01-17 01:11:42',NULL,NULL,0,2795487290,'32452435zdfg',0,'',22.9,NULL,NULL,NULL,NULL,0,2,NULL,0,3,'am i a mutant?','recruiting drive',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(332,1,_binary '!\ðª}‹hG³','2012-01-17 02:11:42',NULL,NULL,0,2018204246,'fsg5her35h',0,'',5.33,NULL,NULL,NULL,NULL,1,0,0,0,1,'some keyword','ga campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(332,1,_binary '!\ðª}‹hG³','2012-01-17 02:11:42',2593,2487,1,2026766302,NULL,NULL,'http://mutantrights.org',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'some keyword','ga campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(332,1,_binary '!\ðª}‹hG³','2012-01-17 02:11:42',2593,2487,2,0,NULL,NULL,'http://mutantrights.org',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'some keyword','ga campaign',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 11:46:33',2595,2492,1,1126887193,NULL,NULL,'http://example.org/page/one.html',5,NULL,NULL,NULL,NULL,5,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 12:22:33',2601,2501,1,1526889353,NULL,NULL,'http://www.example.org/the/third_page.html?foo=baz',5,NULL,NULL,NULL,NULL,14,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 11:28:33',2597,2489,1,1726886113,NULL,NULL,'http://www.example.org/sub/dir/page2.html',5,NULL,NULL,NULL,NULL,2,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 11:58:33',2595,2495,1,1726887913,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,8,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 11:58:34',2595,2496,1,1726887914,NULL,NULL,'http://example.org/page/one.html',5,NULL,NULL,NULL,NULL,9,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 12:34:33',2604,2503,1,1726890073,NULL,NULL,'https://example.org/page3.html',5,NULL,NULL,NULL,NULL,16,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 11:40:33',2599,2491,1,2226886833,NULL,NULL,'https://example.org/the/third_page.html?foo=bar',5,NULL,NULL,NULL,NULL,4,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 11:34:33',2595,2490,1,2426886473,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,3,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 12:04:34',2601,2498,1,2426888274,NULL,NULL,'https://example.org/the/third_page.html?foo=baz',5,NULL,NULL,NULL,NULL,11,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 11:22:33',2595,2488,1,2726885753,NULL,NULL,'http://example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 12:10:33',2595,2499,1,2826888633,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,12,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 11:52:33',2599,2493,1,2926887553,NULL,NULL,'http://www.example.org/the/third_page.html?foo=bar',5,NULL,NULL,NULL,NULL,6,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 11:52:34',2599,2494,1,3126887554,NULL,NULL,'https://example.org/the/third_page.html?foo=bar',5,NULL,NULL,NULL,NULL,7,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 12:28:33',2595,2502,1,3226889713,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,15,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 12:04:33',2601,2497,1,3326888273,NULL,NULL,'http://www.example.org/the/third_page.html?foo=baz',5,NULL,NULL,NULL,NULL,10,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 12:16:33',2595,2500,1,3326888993,NULL,NULL,'http://example.org/page/one.html',5,NULL,NULL,NULL,NULL,13,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 11:22:33',2595,2488,2,0,NULL,NULL,'http://example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(334,1,_binary '\Ñ\×ÚŽ\Ä\à\çd','2012-01-18 11:28:33',2599,2505,1,1226886113,NULL,NULL,'http://www.example.org/the/third_page.html?foo=bar',5,NULL,NULL,NULL,NULL,2,0,0,NULL,1,NULL,'www.external.com.vn',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(334,1,_binary '\Ñ\×ÚŽ\Ä\à\çd','2012-01-18 11:34:33',2595,2506,1,1226886473,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,3,0,0,NULL,1,NULL,'www.external.com.vn',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(334,1,_binary '\Ñ\×ÚŽ\Ä\à\çd','2012-01-18 11:40:33',2601,2507,1,2126886833,NULL,NULL,'https://example.org/the/third_page.html?foo=baz',5,NULL,NULL,NULL,NULL,4,0,0,NULL,1,NULL,'www.external.com.vn',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(334,1,_binary '\Ñ\×ÚŽ\Ä\à\çd','2012-01-18 11:22:33',2597,2504,1,2926885753,NULL,NULL,'http://example.org/sub/dir/page2.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.external.com.vn',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(334,1,_binary '\Ñ\×ÚŽ\Ä\à\çd','2012-01-18 11:22:33',2597,2504,2,0,NULL,NULL,'http://example.org/sub/dir/page2.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.external.com.vn',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(335,1,_binary 'O—Ü¢HÁ…‡','2012-01-18 11:28:33',2595,2508,1,1326886113,NULL,NULL,'http://example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.external.com.vn',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(335,1,_binary 'O—Ü¢HÁ…‡','2012-01-18 11:34:33',2597,2509,1,3026886473,NULL,NULL,'http://www.example.org/sub/dir/page2.html',5,NULL,NULL,NULL,NULL,2,0,0,NULL,1,NULL,'www.external.com.vn',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(335,1,_binary 'O—Ü¢HÁ…‡','2012-01-18 11:40:33',2595,2510,1,3526886833,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,3,0,0,NULL,1,NULL,'www.external.com.vn',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(335,1,_binary 'O—Ü¢HÁ…‡','2012-01-18 11:28:33',2595,2508,2,0,NULL,NULL,'http://example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.external.com.vn',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(336,1,_binary ';\ã\×f\Æ\î\rƒ','2012-01-18 11:22:33',2595,2511,1,1226885753,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'testkeyword','testcampaign',6,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(336,1,_binary ';\ã\×f\Æ\î\rƒ','2012-01-18 11:22:33',2595,2511,2,0,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'testkeyword','testcampaign',6,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(337,1,_binary '9Š\Æ1=\"¯¾','2012-01-18 11:22:33',2595,2512,1,1926885753,NULL,NULL,'http://example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(337,1,_binary '9Š\Æ1=\"¯¾','2012-01-18 11:22:33',2595,2512,2,0,NULL,NULL,'http://example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(338,1,_binary '\á\îù[8Š\ñ\á','2012-01-18 11:49:33',2595,2521,1,1026887373,NULL,NULL,'http://www.example.org/page/one.html',5,NULL,NULL,NULL,NULL,4,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(338,1,_binary '\á\îù[8Š\ñ\á','2012-01-18 11:55:33',2595,2523,1,1226887733,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,5,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(338,1,_binary '\á\îù[8Š\ñ\á','2012-01-18 11:28:33',2595,2514,1,2426886113,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(338,1,_binary '\á\îù[8Š\ñ\á','2012-01-18 11:37:33',2595,2516,1,3326886653,NULL,NULL,'http://example.org/page/one.html',5,NULL,NULL,NULL,NULL,2,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(338,1,_binary '\á\îù[8Š\ñ\á','2012-01-18 11:43:33',2595,2518,1,3926887013,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,3,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(338,1,_binary '\á\îù[8Š\ñ\á','2012-01-18 11:28:33',2595,2514,2,0,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(339,1,_binary '“¬? ¼\ákp','2012-01-26 11:40:33',2595,2531,1,2027578033,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,3,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(339,1,_binary '“¬? ¼\ákp','2012-01-26 11:28:33',2595,2526,1,2427577313,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(339,1,_binary '“¬? ¼\ákp','2012-01-26 11:34:33',2595,2529,1,3327577673,NULL,NULL,'http://www.example.org/page/one.html',5,NULL,NULL,NULL,NULL,2,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(339,1,_binary '“¬? ¼\ákp','2012-01-26 11:28:33',2595,2526,2,0,NULL,NULL,'https://example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(340,1,_binary 'b¿8\àe\"�œ','2012-01-18 11:22:33',2595,2533,1,2926885753,NULL,NULL,'http://www.example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(340,1,_binary 'b¿8\àe\"�œ','2012-01-18 11:22:33',2595,2533,2,0,NULL,NULL,'http://www.example.org/page/one.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:42',29,2543,1,1326936162,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,10,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:37',2623,2538,1,1826936157,NULL,NULL,'http://example.org/category/Page4',5,NULL,NULL,NULL,NULL,5,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:39',2623,2540,1,2226936159,NULL,NULL,'http://example.org/category/Page4',5,NULL,NULL,NULL,NULL,7,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:35',2622,2536,1,2626936155,NULL,NULL,'http://example.org/category/Page3',5,NULL,NULL,NULL,NULL,3,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:40',2624,2541,1,2626936160,NULL,NULL,'http://example.org/category.htm',5,NULL,NULL,NULL,NULL,8,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:44',2625,2545,1,2726936164,NULL,NULL,'http://example.org/page.htm',5,NULL,NULL,NULL,NULL,12,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:45',2626,2546,1,2826936165,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,13,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:34',2621,2535,1,3226936154,NULL,NULL,'http://example.org/category/Page2',5,NULL,NULL,NULL,NULL,2,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:36',2622,2537,1,3226936156,NULL,NULL,'http://example.org/category/Page3',5,NULL,NULL,NULL,NULL,4,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:33',2620,2534,1,3626936153,NULL,NULL,'http://example.org/category/Page1',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:38',2623,2539,1,3626936158,NULL,NULL,'http://example.org/category/Page4',5,NULL,NULL,NULL,NULL,6,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:41',2625,2542,1,3626936161,NULL,NULL,'http://example.org/page.htm',5,NULL,NULL,NULL,NULL,9,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:43',2625,2544,1,3726936163,NULL,NULL,'http://example.org/page.htm',5,NULL,NULL,NULL,NULL,11,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:33',2620,2534,2,0,NULL,NULL,'http://example.org/category/Page1',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'hello world','Bing',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(342,1,_binary 'JN[ýŠ','2012-01-19 02:22:33',2626,2547,1,3126939753,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,1,1,3600,NULL,2,'salut','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(342,1,_binary 'JN[ýŠ','2012-01-19 02:22:33',2626,2547,2,0,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,1,1,3600,NULL,2,'salut','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(343,1,_binary 'JN[ýŠ','2012-01-19 03:22:33',2626,2548,1,2026943353,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,1,1,7200,NULL,3,'kia ora','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(343,1,_binary 'JN[ýŠ','2012-01-19 03:22:33',2626,2548,2,0,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,1,1,7200,NULL,3,'kia ora','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(344,1,_binary 'JN[ýŠ','2012-01-19 04:22:33',2626,2549,1,1526946953,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,4,'kia ora','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(344,1,_binary 'JN[ýŠ','2012-01-19 04:22:33',2626,2549,2,0,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,4,'kia ora','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(345,1,_binary 'JN[ýŠ','2012-01-19 05:22:33',2626,2550,1,1626950553,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,1,1,14400,NULL,5,'kia ora','Yahoo!',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(345,1,_binary 'JN[ýŠ','2012-01-19 05:22:33',2626,2550,2,0,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,1,1,14400,NULL,5,'kia ora','Yahoo!',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(346,1,_binary 'JN[ýŠ','2012-01-19 06:22:33',2626,2551,1,2226954153,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,6,'kia ora','Yahoo! Images',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(346,1,_binary 'JN[ýŠ','2012-01-19 06:22:33',2626,2551,2,0,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,6,'kia ora','Yahoo! Images',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(347,1,_binary 'JN[ýŠ','2012-01-19 07:22:33',2626,2552,1,3826957753,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,1,1,21600,NULL,7,'kia ora','Bing Images',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(347,1,_binary 'JN[ýŠ','2012-01-19 07:22:33',2626,2552,2,0,NULL,NULL,'http://example.org/contact.htm',5,NULL,NULL,NULL,NULL,1,1,21600,NULL,7,'kia ora','Bing Images',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(348,1,_binary '\ñX\Ìyœc','2012-01-20 11:46:33',2632,2555,1,2727059993,NULL,NULL,'http://example.org/page/index.htm?q=%EC%E5%F8%EA%EE%E2%FB%E5',5,NULL,NULL,NULL,NULL,3,0,0,NULL,1,NULL,'anothersite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(348,1,_binary '>\Ümn\óú\r','2012-01-20 11:40:33',2628,2553,1,2827059633,NULL,NULL,'http://example.org/index.htm?random=param&mykwd[]=Search 2%FC&test&cats= Search Kategory &search_count=INCORRECT!',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'anothersite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(348,1,_binary '\ñX\Ìyœc','2012-01-20 11:52:33',2633,2556,1,3227060353,NULL,NULL,'http://example.org/page/index.htm?q=non unicode keyword %EC%E5%F8%EA%EE%E2%FB%E5',5,NULL,NULL,NULL,NULL,4,0,0,NULL,1,NULL,'anothersite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(348,1,_binary '\ñX\Ìyœc','2012-01-20 11:52:34',2634,2557,1,3427060354,NULL,NULL,'http://example.org/exit-page',5,NULL,NULL,NULL,NULL,5,0,0,NULL,1,NULL,'anothersite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(348,1,_binary '\ñX\Ìyœc','2012-01-20 11:40:34',2630,2554,1,3727059634,NULL,NULL,'http://example.org/page/index.htm?whatever=%EC%E5%F8%EA%EE%E2%FB%E5',5,NULL,NULL,NULL,NULL,2,0,0,NULL,1,NULL,'anothersite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(348,1,_binary '>\Ümn\óú\r','2012-01-20 11:40:33',2628,2553,2,0,NULL,NULL,'http://example.org/index.htm?random=param&mykwd[]=Search 2%FC&test&cats= Search Kategory &search_count=INCORRECT!',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'anothersite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(349,1,_binary '�°\õR\Óq΢','2012-01-20 12:22:38',2635,2558,1,2227062158,NULL,NULL,'http://example.org/index.htm?random=param&mykwd=a+keyword&test&cats= Search Kategory &search_count=INCORRECT!',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'anothersite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(349,1,_binary '�°\õR\Óq΢','2012-01-20 12:22:38',2635,2558,2,0,NULL,NULL,'http://example.org/index.htm?random=param&mykwd=a+keyword&test&cats= Search Kategory &search_count=INCORRECT!',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'anothersite.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(350,1,_binary '\Ö/B\\ȹp^','2012-01-21 00:11:42',29,2559,1,3627104702,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'','',1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(350,1,_binary '\Ö/B\\ȹp^','2012-01-21 00:11:42',29,2559,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'','',1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(350,1,_binary '\Ö/B\\ȹp^','2012-01-21 00:29:42',NULL,NULL,3,0,NULL,NULL,'http://example.org/index.htm',42.26,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'','',1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(351,1,_binary '\0r#�‚èr','2012-01-22 11:41:45',2648,2568,1,1127232505,NULL,NULL,'http://example.org/index.htm?random=param&myKwd=Search 1&test&cats=+Search+Category+ &search_count=0',5,NULL,NULL,NULL,NULL,8,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(351,1,_binary '\0r#�‚èr','2012-01-22 11:35:45',29,2561,1,1227232145,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,2,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(351,1,_binary '\0r#�‚èr','2012-01-22 11:38:45',2646,2566,1,1527232325,NULL,NULL,'http://example.org/index.htm?hello=world',5,NULL,NULL,NULL,NULL,6,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(351,1,_binary '\0r#�‚èr','2012-01-22 11:36:21',2639,2562,1,1827232181,NULL,NULL,'http://example.org/index.htm?random=PAGEVIEW, NOT SEARCH&mykwd=&IS_FOLLOWING_SEARCH ONCE',5,NULL,NULL,NULL,NULL,3,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(351,1,_binary '\0r#�‚èr','2012-01-22 11:38:09',29,2565,1,2127232289,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,5,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(351,1,_binary '\0r#�‚èr','2012-01-22 11:37:33',2645,2564,1,2827232253,NULL,NULL,'http://example.org/index.htm?standard=query&but=also',5,NULL,NULL,NULL,NULL,4,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(351,1,_binary '\0r#�‚èr','2012-01-22 11:43:33',2639,2569,1,3527232613,NULL,NULL,'http://example.org/index.htm?random=PAGEVIEW, NOT SEARCH&mykwd=&IS_FOLLOWING_SEARCH ONCE',5,NULL,NULL,NULL,NULL,9,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(351,1,_binary '\0r#�‚èr','2012-01-22 11:34:33',2636,2560,1,3827232073,NULL,NULL,'http://example.org/index.htm?q=Search 1',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(351,1,_binary '\0r#�‚èr','2012-01-22 11:40:33',2647,2567,1,3827232433,NULL,NULL,'http://example.org/index.htm?random=param&mykwd[]=Search 2&test&cats= Search Category &search_count=INCORRECT!',5,NULL,NULL,NULL,NULL,7,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(351,1,_binary '\0r#�‚èr','2012-01-22 11:34:33',2636,2560,2,0,NULL,NULL,'http://example.org/index.htm?q=Search 1',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(352,1,_binary '+¥šøŠ{','2012-01-23 11:22:33',2665,2587,1,2727317753,NULL,NULL,'http://helios.org/alpha',5,NULL,NULL,NULL,NULL,2,1,87156,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(352,1,_binary '\0r#�‚èr','2012-01-23 11:52:33',2653,2575,1,3627319553,NULL,NULL,'http://example.org/index.htm?q=Final%20t%FCte%20Keyword%20Searched%20for%20now&search_count=10',5,NULL,NULL,NULL,NULL,1,1,87156,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(352,1,_binary '\0r#�‚èr','2012-01-23 11:52:33',2653,2575,2,0,NULL,NULL,'http://example.org/index.htm?q=Final%20t%FCte%20Keyword%20Searched%20for%20now&search_count=10',5,NULL,NULL,NULL,NULL,1,1,87156,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(353,1,_binary 'Ÿ\ÌÛ’()µ','2012-01-22 13:38:45',2646,2577,1,1927239525,NULL,NULL,'http://example.org/index.htm?hello=world',5,NULL,NULL,NULL,NULL,2,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(353,1,_binary 'Ÿ\ÌÛ’()µ','2012-01-22 13:38:09',29,2576,1,3027239489,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(353,1,_binary 'Ÿ\ÌÛ’()µ','2012-01-22 13:40:33',2654,2578,1,3927239633,NULL,NULL,'http://example.org/index.htm?random=param&mykwd=Search 2&test&cats= Search Category &search_count=10',5,NULL,NULL,NULL,NULL,3,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(353,1,_binary 'Ÿ\ÌÛ’()µ','2012-01-22 13:38:09',29,2576,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(357,1,_binary 'Ö¤\n�¶\ð(6','2012-01-23 13:22:33',2667,2589,1,2527324953,NULL,NULL,'http://helios.org/beta',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(357,1,_binary 'Ö¤\n�¶\ð(6','2012-01-23 13:22:33',2667,2589,2,0,NULL,NULL,'http://helios.org/beta',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(360,1,_binary '”û\Ê>Œg\Ö','2012-01-24 11:52:33',2682,2603,1,1627405953,NULL,NULL,'http://example.org/movies',5,NULL,NULL,NULL,NULL,2,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(360,1,_binary '”û\Ê>Œg\Ö','2012-01-24 11:22:33',2670,2592,1,3027404153,NULL,NULL,'http://example.org/webradio',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(360,1,_binary '”û\Ê>Œg\Ö','2012-01-24 11:22:33',2670,2592,2,0,NULL,NULL,'http://example.org/webradio',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(360,1,_binary '”û\Ê>Œg\Ö','2012-01-24 11:58:33',2683,2607,3,0,NULL,NULL,'http://example.org/movies',0,NULL,NULL,NULL,NULL,2,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(365,1,_binary '`-\Ô1Ü® +','2012-01-24 12:22:33',2682,2626,1,2327407753,NULL,NULL,'http://example.org/movies',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(365,1,_binary '`-\Ô1Ü® +','2012-01-24 12:22:33',2682,2626,2,0,NULL,NULL,'http://example.org/movies',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(365,1,_binary '`-\Ô1Ü® +','2012-01-24 12:28:33',2683,2630,3,0,NULL,NULL,'http://example.org/movies',0,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(370,1,_binary '†\Ø\àiAJN','2012-01-25 12:22:33',2682,2649,1,2327494153,NULL,NULL,'http://example.org/movies',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(370,1,_binary '†\Ø\àiAJN','2012-01-25 12:22:33',2682,2649,2,0,NULL,NULL,'http://example.org/movies',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(370,1,_binary '†\Ø\àiAJN','2012-01-25 12:28:33',2683,2653,3,0,NULL,NULL,'http://example.org/movies',0,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(375,1,_binary '·^\ò$f','2012-01-25 00:17:42',29,2666,1,1027450662,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,2,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ValueIsZero','0','VisitorType','NewLoggedOut'),(375,1,_binary '·^\ò$f','2012-01-25 00:23:43',29,2668,1,2627451023,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,4,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ValueIsZero','0','VisitorType','NewLoggedOut'),(375,1,_binary '·^\ò$f','2012-01-25 00:23:42',29,2667,1,3027451022,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,3,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ValueIsZero','0','VisitorType','NewLoggedOut'),(375,1,_binary '·^\ò$f','2012-01-25 00:11:42',29,2665,1,3427450302,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ValueIsZero','0','VisitorType','NewLoggedOut'),(375,1,_binary '·^\ò$f','2012-01-25 00:11:42',29,2665,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ValueIsZero','0','VisitorType','NewLoggedOut'),(376,1,_binary '·^\ò$f','2012-01-25 02:53:42',NULL,NULL,-1,0,NULL,4,'',2510.11,NULL,NULL,NULL,NULL,NULL,1,5760,0,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(376,1,_binary '·^\ò$f','2012-01-25 02:17:42',NULL,NULL,0,2178987445,'1037nsjusu4s3894',2,'',2000,100,1500,400,NULL,3,1,5760,0,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(376,1,_binary '·^\ò$f','2012-01-25 02:11:42',NULL,NULL,0,4182698309,'937nsjusu 3894',8,'',1111.11,0.11,1000,111,666,3,1,5760,0,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(376,1,_binary '·^\ò$f','2012-01-25 02:44:42',29,2673,1,1027459482,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,5,1,5760,0,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(376,1,_binary '·^\ò$f','2012-01-25 01:59:42',29,2671,1,1127456782,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,3,1,5760,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ValueIsZero','0','VisitorType','NewLoggedOut'),(376,1,_binary '·^\ò$f','2012-01-25 01:47:42',29,2669,1,1727456062,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,5760,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ValueIsZero','0','VisitorType','NewLoggedOut'),(376,1,_binary '·^\ò$f','2012-01-25 02:47:42',29,2674,1,1927459662,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,6,1,5760,0,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(376,1,_binary '·^\ò$f','2012-01-25 01:53:42',29,2670,1,2827456422,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,2,1,5760,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ValueIsZero','0','VisitorType','NewLoggedOut'),(376,1,_binary '·^\ò$f','2012-01-25 02:41:42',29,2672,1,3127459302,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,4,1,5760,0,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(376,1,_binary '·^\ò$f','2012-01-25 01:47:42',29,2669,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,5760,NULL,2,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ValueIsZero','0','VisitorType','NewLoggedOut'),(377,1,_binary '·^\ò$f','2012-01-25 07:53:42',NULL,NULL,-1,0,NULL,4,'',2510.11,NULL,NULL,NULL,NULL,NULL,1,27000,21240,3,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(377,1,_binary '·^\ò$f','2012-01-25 07:47:42',29,2677,1,1927477662,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,3,1,27000,21240,3,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(377,1,_binary '·^\ò$f','2012-01-25 07:44:42',29,2676,1,2327477482,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,2,1,27000,21240,3,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(377,1,_binary '·^\ò$f','2012-01-25 07:41:42',29,2675,1,3627477302,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,27000,21240,3,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(377,1,_binary '·^\ò$f','2012-01-25 07:41:42',29,2675,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,27000,21240,3,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(378,1,_binary '·^\ò$f','2012-01-26 02:53:42',NULL,NULL,-1,0,NULL,4,'',2510.11,NULL,NULL,NULL,NULL,NULL,2,95040,0,4,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(378,1,_binary '·^\ò$f','2012-01-26 02:47:42',29,2680,1,2927546062,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,3,2,95040,0,4,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(378,1,_binary '·^\ò$f','2012-01-26 02:41:42',29,2678,1,3627545702,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,2,95040,0,4,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(378,1,_binary '·^\ò$f','2012-01-26 02:44:42',29,2679,1,3627545882,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,2,2,95040,0,4,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(378,1,_binary '·^\ò$f','2012-01-26 02:41:42',29,2678,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,2,95040,0,4,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(379,1,_binary '·^\ò$f','2012-01-26 06:59:42',NULL,NULL,0,4055980325,'777',0,'',10000,NULL,NULL,NULL,NULL,0,2,110520,0,5,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(379,1,_binary '·^\ò$f','2012-01-26 06:53:42',NULL,NULL,0,4209029756,'666',2,'',240,20,200,20,20,0,2,110520,0,5,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(381,2,_binary '’¹+ߤ�x\ì','2012-01-26 07:05:42',NULL,NULL,0,4055980325,'777',2,'',250,NULL,NULL,NULL,NULL,0,2,0,0,1,NULL,NULL,1,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(382,1,_binary 'i2Jµ\à¶','2012-02-01 11:22:33',2731,2682,1,3228095353,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(382,1,_binary 'i2Jµ\à¶','2012-02-01 11:22:34',NULL,NULL,1,3228095354,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(382,1,_binary 'i2Jµ\à¶','2012-02-01 11:22:33',2731,2682,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(383,1,_binary 'i2Jµ\à¶','2012-02-01 14:22:33',2731,2683,1,1328106153,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(383,1,_binary 'i2Jµ\à¶','2012-02-01 14:22:33',2731,2683,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(384,1,_binary 'i2Jµ\à¶','2012-02-01 16:22:33',2731,2684,1,1228113353,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Gemini',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(384,1,_binary 'i2Jµ\à¶','2012-02-01 16:22:33',2731,2684,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Gemini',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(386,1,_binary '¹\õ\çü‘xÁ_','2012-02-02 11:22:33',2735,2686,1,1328181753,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(386,1,_binary '¹\õ\çü‘xÁ_','2012-02-02 11:22:34',NULL,NULL,1,3228181754,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(386,1,_binary '¹\õ\çü‘xÁ_','2012-02-02 11:22:33',2735,2686,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(387,1,_binary '¹\õ\çü‘xÁ_','2012-02-02 14:22:33',2735,2687,1,3428192553,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(387,1,_binary '¹\õ\çü‘xÁ_','2012-02-02 14:22:33',2735,2687,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(388,1,_binary '¹\õ\çü‘xÁ_','2012-02-02 16:22:33',2735,2688,1,1028199753,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Claude',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(388,1,_binary '¹\õ\çü‘xÁ_','2012-02-02 16:22:33',2735,2688,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Claude',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(390,1,_binary '\í鉸À·Tj','2012-02-03 11:22:34',NULL,NULL,1,2228268154,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(390,1,_binary '\í鉸À·Tj','2012-02-03 11:22:33',2737,2690,1,2728268153,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(390,1,_binary '\í鉸À·Tj','2012-02-03 11:22:33',2737,2690,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(391,1,_binary '\í鉸À·Tj','2012-02-03 14:22:33',2737,2691,1,2228278953,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(391,1,_binary '\í鉸À·Tj','2012-02-03 14:22:33',2737,2691,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(392,1,_binary '\í鉸À·Tj','2012-02-03 16:22:33',2737,2692,1,1028286153,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(392,1,_binary '\í鉸À·Tj','2012-02-03 16:22:33',2737,2692,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(394,1,_binary '9R\0\"–>','2012-02-04 11:22:33',2738,2694,1,3128354553,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(394,1,_binary '9R\0\"–>','2012-02-04 11:22:34',NULL,NULL,1,3328354554,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(394,1,_binary '9R\0\"–>','2012-02-04 11:22:33',2738,2694,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(395,1,_binary '9R\0\"–>','2012-02-04 14:22:33',2738,2695,1,1028365353,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(395,1,_binary '9R\0\"–>','2012-02-04 14:22:33',2738,2695,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(396,1,_binary '9R\0\"–>','2012-02-04 16:22:33',2738,2696,1,2628372553,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(396,1,_binary '9R\0\"–>','2012-02-04 16:22:33',2738,2696,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(398,1,_binary '¦\Í\Û|\ñž`›','2012-02-05 11:22:34',NULL,NULL,1,1128440954,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(398,1,_binary '¦\Í\Û|\ñž`›','2012-02-05 11:22:33',2731,2698,1,2528440953,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(398,1,_binary '¦\Í\Û|\ñž`›','2012-02-05 11:22:33',2731,2698,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(399,1,_binary '¦\Í\Û|\ñž`›','2012-02-05 14:22:33',2731,2699,1,3728451753,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(399,1,_binary '¦\Í\Û|\ñž`›','2012-02-05 14:22:33',2731,2699,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(400,1,_binary '¦\Í\Û|\ñž`›','2012-02-05 16:22:33',2731,2700,1,3128458953,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(400,1,_binary '¦\Í\Û|\ñž`›','2012-02-05 16:22:33',2731,2700,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(402,1,_binary '¤\Ú:»ùR','2012-02-06 11:22:33',2735,2702,1,1428527353,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(402,1,_binary '¤\Ú:»ùR','2012-02-06 11:22:34',NULL,NULL,1,3228527354,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(402,1,_binary '¤\Ú:»ùR','2012-02-06 11:22:33',2735,2702,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(403,1,_binary '¤\Ú:»ùR','2012-02-06 14:22:33',2735,2703,1,2628538153,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(403,1,_binary '¤\Ú:»ùR','2012-02-06 14:22:33',2735,2703,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(404,1,_binary '¤\Ú:»ùR','2012-02-06 16:22:33',2735,2704,1,3528545353,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(404,1,_binary '¤\Ú:»ùR','2012-02-06 16:22:33',2735,2704,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(406,1,_binary '¤ï¶¬žrK','2012-02-07 11:22:33',2737,2706,1,2328613753,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(406,1,_binary '¤ï¶¬žrK','2012-02-07 11:22:34',NULL,NULL,1,3828613754,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(406,1,_binary '¤ï¶¬žrK','2012-02-07 11:22:33',2737,2706,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(407,1,_binary '¤ï¶¬žrK','2012-02-07 14:22:33',2737,2707,1,2428624553,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(407,1,_binary '¤ï¶¬žrK','2012-02-07 14:22:33',2737,2707,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(408,1,_binary '¤ï¶¬žrK','2012-02-07 16:22:33',2737,2708,1,1728631753,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(408,1,_binary '¤ï¶¬žrK','2012-02-07 16:22:33',2737,2708,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(410,1,_binary 'Vs!ù\ÏÁ','2012-02-08 11:22:34',NULL,NULL,1,1528700154,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(410,1,_binary 'Vs!ù\ÏÁ','2012-02-08 11:22:33',2738,2710,1,3828700153,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(410,1,_binary 'Vs!ù\ÏÁ','2012-02-08 11:22:33',2738,2710,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(411,1,_binary 'Vs!ù\ÏÁ','2012-02-08 14:22:33',2738,2711,1,3028710953,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(411,1,_binary 'Vs!ù\ÏÁ','2012-02-08 14:22:33',2738,2711,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(412,1,_binary 'Vs!ù\ÏÁ','2012-02-08 16:22:33',2738,2712,1,3428718153,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Le Chat',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(412,1,_binary 'Vs!ù\ÏÁ','2012-02-08 16:22:33',2738,2712,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Le Chat',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(414,1,_binary '#s9Ò­ü\r','2012-02-09 11:22:33',2731,2714,1,3528786553,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(414,1,_binary '#s9Ò­ü\r','2012-02-09 11:22:34',NULL,NULL,1,3628786554,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(414,1,_binary '#s9Ò­ü\r','2012-02-09 11:22:33',2731,2714,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(415,1,_binary '#s9Ò­ü\r','2012-02-09 14:22:33',2731,2715,1,1428797353,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(415,1,_binary '#s9Ò­ü\r','2012-02-09 14:22:33',2731,2715,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(416,1,_binary '#s9Ò­ü\r','2012-02-09 16:22:33',2731,2716,1,2428804553,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Gemini',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(416,1,_binary '#s9Ò­ü\r','2012-02-09 16:22:33',2731,2716,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Gemini',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(418,1,_binary '»©\äm\ê%\Ç','2012-02-10 11:22:33',2735,2718,1,1228872953,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(418,1,_binary '»©\äm\ê%\Ç','2012-02-10 11:22:34',NULL,NULL,1,3728872954,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(418,1,_binary '»©\äm\ê%\Ç','2012-02-10 11:22:33',2735,2718,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(419,1,_binary '»©\äm\ê%\Ç','2012-02-10 14:22:33',2735,2719,1,1428883753,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(419,1,_binary '»©\äm\ê%\Ç','2012-02-10 14:22:33',2735,2719,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(420,1,_binary '»©\äm\ê%\Ç','2012-02-10 16:22:33',2735,2720,1,3128890953,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Claude',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(420,1,_binary '»©\äm\ê%\Ç','2012-02-10 16:22:33',2735,2720,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Claude',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(422,1,_binary 'zˆ\ð^¹ã¯Š','2012-02-11 11:22:33',2737,2722,1,1628959353,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(422,1,_binary 'zˆ\ð^¹ã¯Š','2012-02-11 11:22:34',NULL,NULL,1,3828959354,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(422,1,_binary 'zˆ\ð^¹ã¯Š','2012-02-11 11:22:33',2737,2722,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(423,1,_binary 'zˆ\ð^¹ã¯Š','2012-02-11 14:22:33',2737,2723,1,3428970153,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(423,1,_binary 'zˆ\ð^¹ã¯Š','2012-02-11 14:22:33',2737,2723,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(424,1,_binary 'zˆ\ð^¹ã¯Š','2012-02-11 16:22:33',2737,2724,1,2028977353,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(424,1,_binary 'zˆ\ð^¹ã¯Š','2012-02-11 16:22:33',2737,2724,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(426,1,_binary 'ù-µ\Ô\n“µ+','2012-02-12 11:22:33',2738,2726,1,1729045753,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(426,1,_binary 'ù-µ\Ô\n“µ+','2012-02-12 11:22:34',NULL,NULL,1,3029045754,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(426,1,_binary 'ù-µ\Ô\n“µ+','2012-02-12 11:22:33',2738,2726,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(427,1,_binary 'ù-µ\Ô\n“µ+','2012-02-12 14:22:33',2738,2727,1,3329056553,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(427,1,_binary 'ù-µ\Ô\n“µ+','2012-02-12 14:22:33',2738,2727,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(428,1,_binary 'ù-µ\Ô\n“µ+','2012-02-12 16:22:33',2738,2728,1,2829063753,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(428,1,_binary 'ù-µ\Ô\n“µ+','2012-02-12 16:22:33',2738,2728,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(430,1,_binary '&rQ5\Ñ\íc','2012-02-13 11:22:34',NULL,NULL,1,1629132154,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(430,1,_binary '&rQ5\Ñ\íc','2012-02-13 11:22:33',2731,2730,1,3829132153,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(430,1,_binary '&rQ5\Ñ\íc','2012-02-13 11:22:33',2731,2730,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(431,1,_binary '&rQ5\Ñ\íc','2012-02-13 14:22:33',2731,2731,1,1029142953,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(431,1,_binary '&rQ5\Ñ\íc','2012-02-13 14:22:33',2731,2731,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(432,1,_binary '&rQ5\Ñ\íc','2012-02-13 16:22:33',2731,2732,1,1929150153,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(432,1,_binary '&rQ5\Ñ\íc','2012-02-13 16:22:33',2731,2732,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(434,1,_binary 'œ=S°“v‘','2012-02-14 11:22:34',NULL,NULL,1,1829218554,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(434,1,_binary 'œ=S°“v‘','2012-02-14 11:22:33',2735,2734,1,3729218553,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(434,1,_binary 'œ=S°“v‘','2012-02-14 11:22:33',2735,2734,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(435,1,_binary 'œ=S°“v‘','2012-02-14 14:22:33',2735,2735,1,2329229353,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(435,1,_binary 'œ=S°“v‘','2012-02-14 14:22:33',2735,2735,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(436,1,_binary 'œ=S°“v‘','2012-02-14 16:22:33',2735,2736,1,1529236553,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(436,1,_binary 'œ=S°“v‘','2012-02-14 16:22:33',2735,2736,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(438,1,_binary '¦\r“ɦ&a�','2012-02-15 11:22:33',2737,2738,1,2529304953,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(438,1,_binary '¦\r“ɦ&a�','2012-02-15 11:22:34',NULL,NULL,1,3529304954,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(438,1,_binary '¦\r“ɦ&a�','2012-02-15 11:22:33',2737,2738,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(439,1,_binary '¦\r“ɦ&a�','2012-02-15 14:22:33',2737,2739,1,1629315753,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(439,1,_binary '¦\r“ɦ&a�','2012-02-15 14:22:33',2737,2739,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(440,1,_binary '¦\r“ɦ&a�','2012-02-15 16:22:33',2737,2740,1,2729322953,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(440,1,_binary '¦\r“ɦ&a�','2012-02-15 16:22:33',2737,2740,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(442,1,_binary '\á\ÆM¯y\å\å','2012-02-16 11:22:34',NULL,NULL,1,1129391354,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(442,1,_binary '\á\ÆM¯y\å\å','2012-02-16 11:22:33',2738,2742,1,3629391353,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(442,1,_binary '\á\ÆM¯y\å\å','2012-02-16 11:22:33',2738,2742,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(443,1,_binary '\á\ÆM¯y\å\å','2012-02-16 14:22:33',2738,2743,1,2229402153,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(443,1,_binary '\á\ÆM¯y\å\å','2012-02-16 14:22:33',2738,2743,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(444,1,_binary '\á\ÆM¯y\å\å','2012-02-16 16:22:33',2738,2744,1,1529409353,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Le Chat',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(444,1,_binary '\á\ÆM¯y\å\å','2012-02-16 16:22:33',2738,2744,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Le Chat',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(446,1,_binary '\ã[\\/0f¶','2012-02-17 11:22:34',NULL,NULL,1,2729477754,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(446,1,_binary '\ã[\\/0f¶','2012-02-17 11:22:33',2731,2746,1,3329477753,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(446,1,_binary '\ã[\\/0f¶','2012-02-17 11:22:33',2731,2746,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(447,1,_binary '\ã[\\/0f¶','2012-02-17 14:22:33',2731,2747,1,3329488553,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(447,1,_binary '\ã[\\/0f¶','2012-02-17 14:22:33',2731,2747,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(448,1,_binary '\ã[\\/0f¶','2012-02-17 16:22:33',2731,2748,1,1229495753,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Gemini',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(448,1,_binary '\ã[\\/0f¶','2012-02-17 16:22:33',2731,2748,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Gemini',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(450,1,_binary 'º?�\ÍDK\Ûx','2012-02-18 11:22:34',NULL,NULL,1,1429564154,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(450,1,_binary 'º?�\ÍDK\Ûx','2012-02-18 11:22:33',2735,2750,1,2329564153,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(450,1,_binary 'º?�\ÍDK\Ûx','2012-02-18 11:22:33',2735,2750,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(451,1,_binary 'º?�\ÍDK\Ûx','2012-02-18 14:22:33',2735,2751,1,1529574953,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(451,1,_binary 'º?�\ÍDK\Ûx','2012-02-18 14:22:33',2735,2751,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(452,1,_binary 'º?�\ÍDK\Ûx','2012-02-18 16:22:33',2735,2752,1,2629582153,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Claude',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(452,1,_binary 'º?�\ÍDK\Ûx','2012-02-18 16:22:33',2735,2752,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Claude',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(454,1,_binary '\ôV{\ÕMF)C','2012-02-19 11:22:33',2737,2754,1,3529650553,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(454,1,_binary '\ôV{\ÕMF)C','2012-02-19 11:22:34',NULL,NULL,1,3529650554,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(454,1,_binary '\ôV{\ÕMF)C','2012-02-19 11:22:33',2737,2754,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(455,1,_binary '\ôV{\ÕMF)C','2012-02-19 14:22:33',2737,2755,1,1629661353,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(455,1,_binary '\ôV{\ÕMF)C','2012-02-19 14:22:33',2737,2755,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(456,1,_binary '\ôV{\ÕMF)C','2012-02-19 16:22:33',2737,2756,1,1329668553,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(456,1,_binary '\ôV{\ÕMF)C','2012-02-19 16:22:33',2737,2756,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(458,1,_binary 'ùʨƒdq\ï','2012-02-20 11:22:33',2738,2758,1,1129736953,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(458,1,_binary 'ùʨƒdq\ï','2012-02-20 11:22:34',NULL,NULL,1,3829736954,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(458,1,_binary 'ùʨƒdq\ï','2012-02-20 11:22:33',2738,2758,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(459,1,_binary 'ùʨƒdq\ï','2012-02-20 14:22:33',2738,2759,1,1729747753,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(459,1,_binary 'ùʨƒdq\ï','2012-02-20 14:22:33',2738,2759,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(460,1,_binary 'ùʨƒdq\ï','2012-02-20 16:22:33',2738,2760,1,3429754953,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(460,1,_binary 'ùʨƒdq\ï','2012-02-20 16:22:33',2738,2760,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(462,1,_binary 'u:\ëÒ‰8u','2012-02-21 11:22:33',2731,2762,1,1629823353,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(462,1,_binary 'u:\ëÒ‰8u','2012-02-21 11:22:34',NULL,NULL,1,1729823354,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(462,1,_binary 'u:\ëÒ‰8u','2012-02-21 11:22:33',2731,2762,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(463,1,_binary 'u:\ëÒ‰8u','2012-02-21 14:22:33',2731,2763,1,1629834153,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(463,1,_binary 'u:\ëÒ‰8u','2012-02-21 14:22:33',2731,2763,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(464,1,_binary 'u:\ëÒ‰8u','2012-02-21 16:22:33',2731,2764,1,2529841353,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(464,1,_binary 'u:\ëÒ‰8u','2012-02-21 16:22:33',2731,2764,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(466,1,_binary 'ý§’s—\Ý\Ë_','2012-02-22 11:22:33',2735,2766,1,1629909753,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(466,1,_binary 'ý§’s—\Ý\Ë_','2012-02-22 11:22:34',NULL,NULL,1,2629909754,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(466,1,_binary 'ý§’s—\Ý\Ë_','2012-02-22 11:22:33',2735,2766,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(467,1,_binary 'ý§’s—\Ý\Ë_','2012-02-22 14:22:33',2735,2767,1,2929920553,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(467,1,_binary 'ý§’s—\Ý\Ë_','2012-02-22 14:22:33',2735,2767,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(468,1,_binary 'ý§’s—\Ý\Ë_','2012-02-22 16:22:33',2735,2768,1,1029927753,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(468,1,_binary 'ý§’s—\Ý\Ë_','2012-02-22 16:22:33',2735,2768,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(470,1,_binary '=3ŒP\ß t','2012-02-23 11:22:34',NULL,NULL,1,1529996154,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(470,1,_binary '=3ŒP\ß t','2012-02-23 11:22:33',2737,2770,1,3729996153,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(470,1,_binary '=3ŒP\ß t','2012-02-23 11:22:33',2737,2770,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(471,1,_binary '=3ŒP\ß t','2012-02-23 14:22:33',2737,2771,1,3830006953,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(471,1,_binary '=3ŒP\ß t','2012-02-23 14:22:33',2737,2771,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(472,1,_binary '=3ŒP\ß t','2012-02-23 16:22:33',2737,2772,1,2630014153,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(472,1,_binary '=3ŒP\ß t','2012-02-23 16:22:33',2737,2772,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(474,1,_binary 'Œ~f5\â·R4','2012-02-24 11:22:34',NULL,NULL,1,1230082554,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(474,1,_binary 'Œ~f5\â·R4','2012-02-24 11:22:33',2738,2774,1,2330082553,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(474,1,_binary 'Œ~f5\â·R4','2012-02-24 11:22:33',2738,2774,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(475,1,_binary 'Œ~f5\â·R4','2012-02-24 14:22:33',2738,2775,1,2330093353,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(475,1,_binary 'Œ~f5\â·R4','2012-02-24 14:22:33',2738,2775,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(476,1,_binary 'Œ~f5\â·R4','2012-02-24 16:22:33',2738,2776,1,3830100553,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Le Chat',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(476,1,_binary 'Œ~f5\â·R4','2012-02-24 16:22:33',2738,2776,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Le Chat',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(478,1,_binary '\É\УޱŒ','2012-02-25 11:22:33',2731,2778,1,2130168953,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(478,1,_binary '\É\УޱŒ','2012-02-25 11:22:34',NULL,NULL,1,3230168954,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(478,1,_binary '\É\УޱŒ','2012-02-25 11:22:33',2731,2778,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(479,1,_binary '\É\УޱŒ','2012-02-25 14:22:33',2731,2779,1,3430179753,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(479,1,_binary '\É\УޱŒ','2012-02-25 14:22:33',2731,2779,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(480,1,_binary '\É\УޱŒ','2012-02-25 16:22:33',2731,2780,1,2530186953,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Gemini',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(480,1,_binary '\É\УޱŒ','2012-02-25 16:22:33',2731,2780,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Gemini',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(482,1,_binary 'ø>K\Z\ð#\ì<','2012-02-26 11:22:34',NULL,NULL,1,1630255354,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(482,1,_binary 'ø>K\Z\ð#\ì<','2012-02-26 11:22:33',2735,2782,1,2930255353,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(482,1,_binary 'ø>K\Z\ð#\ì<','2012-02-26 11:22:33',2735,2782,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(483,1,_binary 'ø>K\Z\ð#\ì<','2012-02-26 14:22:33',2735,2783,1,1330266153,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(483,1,_binary 'ø>K\Z\ð#\ì<','2012-02-26 14:22:33',2735,2783,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(484,1,_binary 'ø>K\Z\ð#\ì<','2012-02-26 16:22:33',2735,2784,1,3730273353,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Claude',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(484,1,_binary 'ø>K\Z\ð#\ì<','2012-02-26 16:22:33',2735,2784,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Claude',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(486,1,_binary 'M›:Ô˜1d','2012-02-27 11:22:33',2737,2786,1,1430341753,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(486,1,_binary 'M›:Ô˜1d','2012-02-27 11:22:34',NULL,NULL,1,2830341754,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(486,1,_binary 'M›:Ô˜1d','2012-02-27 11:22:33',2737,2786,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer4.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(487,1,_binary 'M›:Ô˜1d','2012-02-27 14:22:33',2737,2787,1,3530352553,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(487,1,_binary 'M›:Ô˜1d','2012-02-27 14:22:33',2737,2787,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(488,1,_binary 'M›:Ô˜1d','2012-02-27 16:22:33',2737,2788,1,1230359753,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(488,1,_binary 'M›:Ô˜1d','2012-02-27 16:22:33',2737,2788,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(490,1,_binary 'F}\á<9\Ê','2012-02-28 11:22:34',NULL,NULL,1,2330428154,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(490,1,_binary 'F}\á<9\Ê','2012-02-28 11:22:33',2738,2790,1,2530428153,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(490,1,_binary 'F}\á<9\Ê','2012-02-28 11:22:33',2738,2790,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer3.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(491,1,_binary 'F}\á<9\Ê','2012-02-28 14:22:33',2738,2791,1,2030438953,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(491,1,_binary 'F}\á<9\Ê','2012-02-28 14:22:33',2738,2791,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(492,1,_binary 'F}\á<9\Ê','2012-02-28 16:22:33',2738,2792,1,2830446153,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(492,1,_binary 'F}\á<9\Ê','2012-02-28 16:22:33',2738,2792,2,0,NULL,NULL,'http://example.org/my/dir/page3?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','Perplexity',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(494,1,_binary 'y\÷\")Vÿ6','2012-02-29 11:22:34',NULL,NULL,1,1930514554,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(494,1,_binary 'y\÷\")Vÿ6','2012-02-29 11:22:33',2731,2794,1,3230514553,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(494,1,_binary 'y\÷\")Vÿ6','2012-02-29 11:22:33',2731,2794,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer2.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(495,1,_binary 'y\÷\")Vÿ6','2012-02-29 14:22:33',2731,2795,1,3930525353,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(495,1,_binary 'y\÷\")Vÿ6','2012-02-29 14:22:33',2731,2795,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'justice )(&^#%$ not \'\" corruption!','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(496,1,_binary 'y\÷\")Vÿ6','2012-02-29 16:22:33',2731,2796,1,1230532553,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(496,1,_binary 'y\÷\")Vÿ6','2012-02-29 16:22:33',2731,2796,2,0,NULL,NULL,'http://example.org/my/dir/page2?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(498,1,_binary '\É\æž9�\Ç','2012-03-01 11:22:33',2735,2798,1,2130600953,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(498,1,_binary '\É\æž9�\Ç','2012-03-01 11:22:34',NULL,NULL,1,3830600954,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(498,1,_binary '\É\æž9�\Ç','2012-03-01 11:22:33',2735,2798,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer1.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(499,1,_binary '\É\æž9�\Ç','2012-03-01 14:22:33',2735,2799,1,1130611753,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(499,1,_binary '\É\æž9�\Ç','2012-03-01 14:22:33',2735,2799,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'peace \",\" not war','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(500,1,_binary '\É\æž9�\Ç','2012-03-01 16:22:33',2735,2800,1,1030618953,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(500,1,_binary '\É\æž9�\Ç','2012-03-01 16:22:33',2735,2800,2,0,NULL,NULL,'http://example.org/my/dir/page1?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(502,1,_binary ' V*[º\"\×)','2012-03-02 11:22:34',NULL,NULL,1,1530687354,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(502,1,_binary ' V*[º\"\×)','2012-03-02 11:22:33',2737,2802,1,2130687353,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(502,1,_binary ' V*[º\"\×)','2012-03-02 11:22:33',2737,2802,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'www.referrer0.com',3,'FF',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(503,1,_binary ' V*[º\"\×)','2012-03-02 14:22:33',2737,2803,1,1730698153,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(503,1,_binary ' V*[º\"\×)','2012-03-02 14:22:33',2737,2803,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,10800,NULL,2,'free > proprietary','Google',2,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(504,1,_binary ' V*[º\"\×)','2012-03-02 16:22:33',2737,2804,1,2930705353,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(504,1,_binary ' V*[º\"\×)','2012-03-02 16:22:33',2737,2804,2,0,NULL,NULL,'http://example.org/my/dir/page0?foo=bar&baz=bar',5,NULL,NULL,NULL,NULL,1,1,18000,NULL,3,'','ChatGPT',8,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(506,1,_binary 'Ÿ1\î=¿y[\Í','2010-01-03 23:55:00',29,2806,1,1762562900,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'referrer.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(506,1,_binary 'Ÿ1\î=¿y[\Í','2010-01-03 23:55:00',29,2806,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'referrer.com',3,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(508,1,_binary '\öm³�,\n\Ê\Þ','2012-01-27 12:22:33',2740,2808,1,2827666953,NULL,NULL,'http://example.org/products',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'OP',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(508,1,_binary '\öm³�,\n\Ê\Þ','2012-01-27 12:22:33',2740,2808,2,0,NULL,NULL,'http://example.org/products',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'OP',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(509,1,_binary '\öm³�,\n\Ê\Þ','2012-01-29 11:22:33',29,2809,1,3927836153,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,169200,NULL,2,'referrer.com','goal-matching-url-parameter',6,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(509,1,_binary '\öm³�,\n\Ê\Þ','2012-01-29 11:22:33',29,2809,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,169200,NULL,2,'referrer.com','goal-matching-url-parameter',6,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(510,1,_binary '\öm³�,\n\Ê\Þ','2012-01-29 11:28:33',2743,2810,1,3427836513,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,169560,NULL,3,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(510,1,_binary '\öm³�,\n\Ê\Þ','2012-01-29 11:37:33',2743,2813,1,3927837053,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,169560,NULL,3,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(510,1,_binary '\öm³�,\n\Ê\Þ','2012-01-29 11:28:33',2743,2810,2,0,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,169560,NULL,3,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(511,1,_binary '\öm³�,\n\Ê\Þ','2012-01-30 11:22:33',29,2814,1,1427922553,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,255600,NULL,4,'referrer.com','goal-matching-url-parameter',6,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(511,1,_binary '\öm³�,\n\Ê\Þ','2012-01-30 11:22:33',29,2814,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,255600,NULL,4,'referrer.com','goal-matching-url-parameter',6,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(512,1,_binary '\öm³�,\n\Ê\Þ','2012-01-30 11:37:33',2743,2818,1,1727923453,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,255960,NULL,5,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(512,1,_binary '\öm³�,\n\Ê\Þ','2012-01-30 11:28:33',2743,2815,1,3527922913,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,255960,NULL,5,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(512,1,_binary '\öm³�,\n\Ê\Þ','2012-01-30 11:28:33',2743,2815,2,0,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,255960,NULL,5,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(513,1,_binary '\öm³�,\n\Ê\Þ','2012-01-31 11:22:33',29,2819,1,1528008953,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,342000,NULL,6,'referrer.com','goal-matching-url-parameter',6,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(513,1,_binary '\öm³�,\n\Ê\Þ','2012-01-31 11:22:33',29,2819,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,342000,NULL,6,'referrer.com','goal-matching-url-parameter',6,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(514,1,_binary '\öm³�,\n\Ê\Þ','2012-01-31 11:28:33',2743,2820,1,1928009313,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,342360,NULL,7,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(514,1,_binary '\öm³�,\n\Ê\Þ','2012-01-31 11:37:33',2743,2823,1,2528009853,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,342360,NULL,7,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(514,1,_binary '\öm³�,\n\Ê\Þ','2012-01-31 11:28:33',2743,2820,2,0,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,342360,NULL,7,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(515,1,_binary '\öm³�,\n\Ê\Þ','2012-02-01 11:28:33',2743,2825,1,1228095713,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,428400,NULL,8,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(515,1,_binary '\öm³�,\n\Ê\Þ','2012-02-01 11:22:33',29,2824,1,1928095353,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,428400,NULL,8,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(515,1,_binary '\öm³�,\n\Ê\Þ','2012-02-01 11:37:33',2743,2828,1,3628096253,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,3,1,428400,NULL,8,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(515,1,_binary '\öm³�,\n\Ê\Þ','2012-02-01 11:22:33',29,2824,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,428400,NULL,8,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(516,1,_binary '\öm³�,\n\Ê\Þ','2012-02-02 11:28:33',2743,2830,1,1228182113,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,514800,NULL,9,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(516,1,_binary '\öm³�,\n\Ê\Þ','2012-02-02 11:22:33',29,2829,1,2728181753,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,514800,NULL,9,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(516,1,_binary '\öm³�,\n\Ê\Þ','2012-02-02 11:37:33',2743,2833,1,3128182653,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,3,1,514800,NULL,9,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(516,1,_binary '\öm³�,\n\Ê\Þ','2012-02-02 11:22:33',29,2829,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,514800,NULL,9,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(517,1,_binary '\öm³�,\n\Ê\Þ','2012-02-03 11:22:33',29,2834,1,1028268153,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,601200,NULL,10,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(517,1,_binary '\öm³�,\n\Ê\Þ','2012-02-03 11:28:33',2743,2835,1,1128268513,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,601200,NULL,10,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(517,1,_binary '\öm³�,\n\Ê\Þ','2012-02-03 11:37:33',2743,2838,1,2928269053,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,3,1,601200,NULL,10,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(517,1,_binary '\öm³�,\n\Ê\Þ','2012-02-03 11:22:33',29,2834,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,601200,NULL,10,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(518,1,_binary '\öm³�,\n\Ê\Þ','2012-02-04 11:28:33',2743,2840,1,2228354913,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,687600,NULL,11,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(518,1,_binary '\öm³�,\n\Ê\Þ','2012-02-04 11:37:33',2743,2843,1,2728355453,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,3,1,687600,NULL,11,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(518,1,_binary '\öm³�,\n\Ê\Þ','2012-02-04 11:22:33',29,2839,1,2828354553,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,687600,NULL,11,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(518,1,_binary '\öm³�,\n\Ê\Þ','2012-02-04 11:22:33',29,2839,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,687600,NULL,11,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(519,1,_binary '\öm³�,\n\Ê\Þ','2012-02-05 11:22:33',29,2844,1,3528440953,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,774000,NULL,12,'referrer.com','goal-matching-url-parameter',6,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(519,1,_binary '\öm³�,\n\Ê\Þ','2012-02-05 11:22:33',29,2844,2,0,NULL,NULL,'http://example.org/index.htm',5,NULL,NULL,NULL,NULL,1,1,774000,NULL,12,'referrer.com','goal-matching-url-parameter',6,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(520,1,_binary '\öm³�,\n\Ê\Þ','2012-02-05 11:37:33',2743,2848,1,1928441853,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,774360,NULL,13,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(520,1,_binary '\öm³�,\n\Ê\Þ','2012-02-05 11:28:33',2743,2845,1,2828441313,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,774360,NULL,13,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(520,1,_binary '\öm³�,\n\Ê\Þ','2012-02-05 11:28:33',2743,2845,2,0,NULL,NULL,'http://example.org/thankyou',5,NULL,NULL,NULL,NULL,2,1,774360,NULL,13,NULL,'referrer.com',3,'UNK',NULL,'','',NULL,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(522,1,_binary 'µ\\‚\ÑH�x%','2012-01-29 11:40:33',NULL,NULL,1,1027837233,NULL,NULL,'http://example.org/this%20is%20cool!?filter=<script>alert(1);</script>{"place":{"place":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5"}}',42,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'UNK',NULL,'','',NULL,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(522,1,_binary 'µ\\‚\ÑH�x%','2012-01-29 11:22:33',2749,2852,1,1527836153,NULL,NULL,'http://example.org/this%20is%20cool!?filter=<script>alert(1);</script>{"place":{"place":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5"}}',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'UNK',NULL,'','',NULL,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(522,1,_binary 'µ\\‚\ÑH�x%','2012-01-29 11:22:33',2749,2852,2,0,NULL,NULL,'http://example.org/this%20is%20cool!?filter=<script>alert(1);</script>{"place":{"place":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5"}}',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,'Google',2,'UNK',NULL,'','',NULL,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(523,1,_binary 'µ\\‚\ÑH�x%','2012-01-29 13:22:33',2749,2853,1,1427843353,NULL,NULL,'http://example.org/this%20is%20cool!?filter=<script>alert(1);</script>{"place":{"place":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5"}}',5,NULL,NULL,NULL,NULL,1,1,7200,NULL,2,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'UNK',NULL,'','',NULL,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(523,1,_binary 'µ\\‚\ÑH�x%','2012-01-29 13:22:33',2749,2853,2,0,NULL,NULL,'http://example.org/this%20is%20cool!?filter=<script>alert(1);</script>{"place":{"place":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5"}}',5,NULL,NULL,NULL,NULL,1,1,7200,NULL,2,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'UNK',NULL,'','',NULL,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(524,1,_binary 'L\à$\åEŠ','2012-01-30 11:34:34',2753,2856,1,1027923274,NULL,NULL,'http://example.org/user/profile',5,NULL,NULL,NULL,NULL,3,0,0,NULL,1,'piwik','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','LoggedIn','VisitorType','LoggedOut','Value will be VERY long and truncated','abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrst',NULL,NULL,NULL,NULL),(524,1,_binary 'L\à$\åEŠ','2012-01-30 11:34:36',2753,2857,1,1127923276,NULL,NULL,'http://example.org/user/profile',5,NULL,NULL,NULL,NULL,4,0,0,NULL,1,'piwik','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','LoggedIn','SET WITH EMPTY VALUE','','Value will be VERY long and truncated','abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrst',NULL,NULL,NULL,NULL),(524,1,_binary 'L\à$\åEŠ','2012-01-30 11:34:33',2753,2855,1,1427923273,NULL,NULL,'http://example.org/user/profile',5,NULL,NULL,NULL,NULL,2,0,0,NULL,1,'piwik','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','LoggedIn','VisitorType','LoggedOut',NULL,NULL,NULL,NULL,NULL,NULL),(524,1,_binary 'L\à$\åEŠ','2012-01-30 11:28:33',2751,2854,1,1527922913,NULL,NULL,'http://example.org/homepage',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'piwik','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','LoggedOut',NULL,NULL,NULL,NULL,NULL,NULL),(524,1,_binary 'L\à$\åEŠ','2012-01-30 11:34:35',NULL,NULL,1,2227923275,NULL,NULL,'http://example.org/user/profile',5,NULL,NULL,NULL,NULL,3,0,0,NULL,1,'piwik','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','LoggedIn','SET WITH EMPTY VALUE','','Value will be VERY long and truncated','abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrst',NULL,NULL,NULL,NULL),(524,1,_binary 'L\à$\åEŠ','2012-01-30 11:28:33',2751,2854,2,0,NULL,NULL,'http://example.org/homepage',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'piwik','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','LoggedOut',NULL,NULL,NULL,NULL,NULL,NULL),(525,1,_binary 'a\è\Ì-Qþ¢m','2012-01-30 12:28:33',2751,2858,1,2227926513,NULL,NULL,'http://example.org/homepage',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'campaign keyword - right...','campaign name - yeah!',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','LoggedOut','Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz','abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz',NULL,NULL,NULL,NULL,NULL,NULL),(525,1,_binary 'a\è\Ì-Qþ¢m','2012-01-30 12:22:33',NULL,NULL,1,3527926153,NULL,NULL,'http://example.org/homepage',1000,NULL,NULL,NULL,NULL,0,0,0,NULL,1,'campaign keyword - right...','campaign name - yeah!',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','LoggedOut','Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz','abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz',NULL,NULL,NULL,NULL,NULL,NULL),(525,1,_binary 'a\è\Ì-Qþ¢m','2012-01-30 12:28:33',2751,2858,2,0,NULL,NULL,'http://example.org/homepage',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'campaign keyword - right...','campaign name - yeah!',6,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','LoggedOut','Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz','abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz',NULL,NULL,NULL,NULL,NULL,NULL),(527,1,_binary '»†\ö–©Ÿ','2012-01-31 01:11:42',NULL,NULL,-1,0,NULL,1,'',100,NULL,NULL,NULL,NULL,NULL,0,0,NULL,1,'😡','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(527,1,_binary '»†\ö–©Ÿ','2012-01-31 01:11:42',2758,2860,1,2327972302,NULL,NULL,'http://example.org/foo/🙙.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'😡','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(527,1,_binary '»†\ö–©Ÿ','2012-01-31 01:11:42',2758,2860,2,0,NULL,NULL,'http://example.org/foo/🙙.html',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,'😡','Google',2,'FF',1,'','generic desktop',0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(528,1,_binary '0\ïj—\ö>¼','2013-04-07 10:00:00',2762,2861,1,1565328800,NULL,NULL,'http://site.com/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(528,1,_binary '0\ïj—\ö>¼','2013-04-07 10:00:00',2762,2861,2,0,NULL,NULL,'http://site.com/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(529,1,_binary '\ro?R.�ú2','2013-04-06 11:00:00',2762,2862,1,1365246000,NULL,NULL,'http://site.com/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(529,1,_binary '\ro?R.�ú2','2013-04-06 11:00:00',2762,2862,2,0,NULL,NULL,'http://site.com/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(530,1,_binary '\Í�<\÷\Î •','2013-04-05 12:00:00',2762,2863,1,2865163200,NULL,NULL,'http://site.com/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(530,1,_binary '\Í�<\÷\Î •','2013-04-05 12:00:00',2762,2863,2,0,NULL,NULL,'http://site.com/',5,NULL,NULL,NULL,NULL,1,0,0,NULL,1,NULL,NULL,1,'IE',1,'','generic desktop',0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +/*!40000 ALTER TABLE `log_conversion` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `log_conversion_item` +-- + +DROP TABLE IF EXISTS `log_conversion_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `log_conversion_item` ( + `idsite` int(10) unsigned NOT NULL, + `idvisitor` binary(8) NOT NULL, + `server_time` datetime NOT NULL, + `idvisit` bigint(10) unsigned NOT NULL, + `idorder` varchar(100) NOT NULL, + `idaction_sku` int(10) unsigned NOT NULL, + `idaction_name` int(10) unsigned NOT NULL, + `idaction_category` int(10) unsigned NOT NULL, + `idaction_category2` int(10) unsigned NOT NULL, + `idaction_category3` int(10) unsigned NOT NULL, + `idaction_category4` int(10) unsigned NOT NULL, + `idaction_category5` int(10) unsigned NOT NULL, + `price` double NOT NULL, + `quantity` int(10) unsigned NOT NULL, + `deleted` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`idvisit`,`idorder`,`idaction_sku`), + KEY `index_idsite_servertime` (`idsite`,`server_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `log_conversion_item` +-- + +LOCK TABLES `log_conversion_item` WRITE; +/*!40000 ALTER TABLE `log_conversion_item` DISABLE KEYS */; +INSERT INTO `log_conversion_item` VALUES (1,_binary 'ɭ祡²\í','2012-01-03 16:40:33',83,'0',112,113,114,0,0,0,0,10000000000,1,0),(1,_binary '©·ºpx;a~','2012-01-08 12:49:34',90,'1001',169,170,171,0,0,0,0,100,1,0),(1,_binary 'ªh\Ç\\Jw\È','2012-01-14 12:49:34',102,'1007',169,170,171,0,0,0,0,100,1,0),(1,_binary 'ù \ZAqU6','2012-01-08 12:49:35',108,'2001',169,170,171,0,0,0,0,100,1,0),(1,_binary '\é0(½Áª\Íû','2012-01-08 12:49:36',112,'3001',169,170,171,0,0,0,0,100,1,0),(1,_binary 'Öœ}\ó/¹','2012-01-08 12:49:37',120,'4001',169,170,171,0,0,0,0,100,1,0),(1,_binary '¸\Ã~3\Þý\å','2012-01-11 12:49:34',125,'1004',169,170,171,0,0,0,0,100,1,0),(1,_binary '�ŒšVJ†Be','2012-01-11 12:49:36',137,'3004',169,170,171,0,0,0,0,100,1,0),(1,_binary '·^\ò$f','2012-01-25 02:53:42',376,'0',36,2720,30,0,0,0,0,10,1,0),(1,_binary '·^\ò$f','2012-01-25 02:53:42',376,'0',2717,2718,0,0,0,0,0,500.11,1,0),(1,_binary '·^\ò$f','2012-01-25 02:53:42',376,'0',2724,2723,2721,2722,0,0,0,1000,2,0),(1,_binary '·^\ò$f','2012-01-25 02:17:42',376,'1037nsjusu4s3894',32,2714,30,0,0,0,0,1500,1,0),(1,_binary '·^\ò$f','2012-01-25 02:17:42',376,'1037nsjusu4s3894',36,31,0,0,0,0,0,11.22,1,0),(1,_binary '·^\ò$f','2012-01-25 02:11:42',376,'937nsjusu 3894',36,31,2701,2702,30,2703,2704,500,2,0),(1,_binary '·^\ò$f','2012-01-25 02:11:42',376,'937nsjusu 3894',2707,2708,2709,0,0,0,0,300,1,1),(1,_binary '·^\ò$f','2012-01-25 02:11:42',376,'937nsjusu 3894',2710,2711,0,0,0,0,0,5000000,20,1),(1,_binary '·^\ò$f','2012-01-25 02:11:42',376,'937nsjusu 3894',2712,2713,0,0,0,0,0,100,6,0),(1,_binary '·^\ò$f','2012-01-25 07:53:42',377,'0',36,2720,30,0,0,0,0,10,1,0),(1,_binary '·^\ò$f','2012-01-25 07:53:42',377,'0',2717,2718,0,0,0,0,0,500.11,1,0),(1,_binary '·^\ò$f','2012-01-25 07:53:42',377,'0',2724,2723,2721,2722,0,0,0,1000,2,0),(1,_binary '·^\ò$f','2012-01-26 02:53:42',378,'0',36,2720,30,0,0,0,0,10,1,0),(1,_binary '·^\ò$f','2012-01-26 02:53:42',378,'0',2717,2718,0,0,0,0,0,500.11,1,0),(1,_binary '·^\ò$f','2012-01-26 02:53:42',378,'0',2724,2723,2721,2722,0,0,0,1000,2,0),(1,_binary '·^\ò$f','2012-01-26 06:53:42',379,'666',2725,2726,2727,0,0,0,0,100,2,0),(2,_binary '’¹+ߤ�x\ì','2012-01-26 07:05:42',381,'777',2725,2726,2727,0,0,0,0,100,2,0),(1,_binary '»†\ö–©Ÿ','2012-01-31 01:11:42',527,'0',2759,2760,2761,0,0,0,0,95,1,0); +/*!40000 ALTER TABLE `log_conversion_item` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `log_link_visit_action` +-- + +DROP TABLE IF EXISTS `log_link_visit_action`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `log_link_visit_action` ( + `idlink_va` bigint(10) unsigned NOT NULL AUTO_INCREMENT, + `idsite` int(10) unsigned NOT NULL, + `idvisitor` binary(8) NOT NULL, + `idvisit` bigint(10) unsigned NOT NULL, + `idaction_url_ref` int(10) unsigned DEFAULT '0', + `idaction_name_ref` int(10) unsigned DEFAULT NULL, + `custom_float` double DEFAULT NULL, + `pageview_position` mediumint(8) unsigned DEFAULT NULL, + `server_time` datetime NOT NULL, + `idpageview` char(6) DEFAULT NULL, + `idaction_name` int(10) unsigned DEFAULT NULL, + `idaction_url` int(10) unsigned DEFAULT NULL, + `search_cat` varchar(200) DEFAULT NULL, + `search_count` int(10) unsigned DEFAULT NULL, + `time_spent_ref_action` int(10) unsigned DEFAULT NULL, + `idaction_product_cat` int(10) unsigned DEFAULT NULL, + `idaction_product_cat2` int(10) unsigned DEFAULT NULL, + `idaction_product_cat3` int(10) unsigned DEFAULT NULL, + `idaction_product_cat4` int(10) unsigned DEFAULT NULL, + `idaction_product_cat5` int(10) unsigned DEFAULT NULL, + `idaction_product_name` int(10) unsigned DEFAULT NULL, + `product_price` double DEFAULT NULL, + `idaction_product_sku` int(10) unsigned DEFAULT NULL, + `idaction_event_action` int(10) unsigned DEFAULT NULL, + `idaction_event_category` int(10) unsigned DEFAULT NULL, + `idaction_content_interaction` int(10) unsigned DEFAULT NULL, + `idaction_content_name` int(10) unsigned DEFAULT NULL, + `idaction_content_piece` int(10) unsigned DEFAULT NULL, + `idaction_content_target` int(10) unsigned DEFAULT NULL, + `time_dom_completion` mediumint(10) unsigned DEFAULT NULL, + `time_dom_processing` mediumint(10) unsigned DEFAULT NULL, + `time_network` mediumint(10) unsigned DEFAULT NULL, + `time_on_load` mediumint(10) unsigned DEFAULT NULL, + `time_server` mediumint(10) unsigned DEFAULT NULL, + `time_transfer` mediumint(10) unsigned DEFAULT NULL, + `bandwidth` bigint(15) unsigned DEFAULT NULL, + `time_spent` int(10) unsigned DEFAULT NULL, + `custom_dimension_1` varchar(255) DEFAULT NULL, + `custom_dimension_2` varchar(255) DEFAULT NULL, + `custom_dimension_3` varchar(255) DEFAULT NULL, + `custom_dimension_4` varchar(255) DEFAULT NULL, + `custom_dimension_5` varchar(255) DEFAULT NULL, + `custom_var_k1` varchar(200) DEFAULT NULL, + `custom_var_v1` varchar(200) DEFAULT NULL, + `custom_var_k2` varchar(200) DEFAULT NULL, + `custom_var_v2` varchar(200) DEFAULT NULL, + `custom_var_k3` varchar(200) DEFAULT NULL, + `custom_var_v3` varchar(200) DEFAULT NULL, + `custom_var_k4` varchar(200) DEFAULT NULL, + `custom_var_v4` varchar(200) DEFAULT NULL, + `custom_var_k5` varchar(200) DEFAULT NULL, + `custom_var_v5` varchar(200) DEFAULT NULL, + PRIMARY KEY (`idlink_va`), + KEY `index_idvisit` (`idvisit`), + KEY `index_idsite_servertime` (`idsite`,`server_time`) +) ENGINE=InnoDB AUTO_INCREMENT=2864 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `log_link_visit_action` +-- + +LOCK TABLES `log_link_visit_action` WRITE; +/*!40000 ALTER TABLE `log_link_visit_action` DISABLE KEYS */; +INSERT INTO `log_link_visit_action` VALUES (1,1,_binary 'ê‚�ÿ³Ef\×',1,0,0,NULL,1,'2012-08-09 08:10:38','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,1,_binary 'Ì�\Ä\÷c&\î',2,0,0,NULL,1,'2012-08-09 08:11:30','',0,2,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(3,1,_binary 't¤\ë\0q`\Òÿ',3,0,0,NULL,1,'2012-08-09 08:11:56','',0,3,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(4,1,_binary '\â\Z™d¸–À',4,0,0,NULL,1,'2012-08-09 08:12:03','',0,4,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,1,_binary 'CA¶\Ð;L!',5,0,0,NULL,1,'2012-08-09 13:48:07','',0,5,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(6,1,_binary '„¶ :!¤‰·',6,0,0,NULL,1,'2012-08-09 13:48:20','',0,6,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(7,1,_binary 'Cecw>£S¬',7,0,0,NULL,1,'2012-08-09 13:49:48','',0,7,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(8,1,_binary 'yE�£\óù',8,0,0,NULL,1,'2012-08-09 20:56:45','',0,8,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(9,1,_binary 'jÏ¿´$¯R',9,0,0,NULL,1,'2012-08-09 21:00:42','',0,9,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(10,1,_binary 'UR,�¶\Ó\á',10,0,0,NULL,1,'2012-08-10 18:03:40','',0,10,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(11,1,_binary 'š\ô3F\ÝZ»',11,0,0,NULL,1,'2012-08-10 19:59:50','',0,11,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(12,1,_binary '›€„-3^\æ§',12,0,0,NULL,1,'2012-08-10 20:01:17','',0,2,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(13,1,_binary ' |…£Kß¡f',13,0,0,NULL,1,'2012-08-10 20:21:03','',0,4,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(14,1,_binary 'ÀaŠk7w½',14,0,0,NULL,1,'2012-08-10 20:21:28','',0,12,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(15,1,_binary '¶x¾\ìŒY ',15,0,0,NULL,1,'2012-08-10 20:22:08','',0,13,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(16,1,_binary '\n¼a�(`\ö\Ü',16,0,0,NULL,1,'2012-08-11 13:49:46','',0,14,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(17,1,_binary 'ǡڧp¨\ä:',17,0,0,NULL,1,'2012-08-11 15:31:05','',0,15,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(18,1,_binary '‹¨¯>Ù†I',18,0,0,NULL,NULL,'2012-08-11 17:46:03','',NULL,16,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4324023,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(19,1,_binary 'ª uü’P»',19,0,0,NULL,1,'2012-08-11 16:10:38','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(20,1,_binary 'δ\ð�h\Èr-',20,0,0,NULL,1,'2012-08-11 16:11:30','',17,18,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','404',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(21,1,_binary '¸\ô�›¸\ÖΪ',21,0,0,NULL,1,'2012-08-11 17:48:07','',19,20,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','500',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(22,1,_binary '‘jt\éGœ¨',22,0,0,NULL,1,'2012-08-11 17:48:08','',0,5,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(23,1,_binary '¿ºH)\'¬‚\Ä',23,0,0,NULL,NULL,'2012-08-11 18:10:38','',NULL,21,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(24,1,_binary '¿ºH)\'¬‚\Ä',23,0,0,NULL,NULL,'2012-08-11 18:11:39','',NULL,22,NULL,NULL,61,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(25,1,_binary '¿ºH)\'¬‚\Ä',23,0,0,NULL,NULL,'2012-08-11 18:12:40','',NULL,23,NULL,NULL,61,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(26,1,_binary '\ã‡\Þj?\ãn\õ',24,0,0,NULL,1,'2012-08-11 19:12:40','',24,25,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','301',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(27,1,_binary '\ã‡\Þj?\ãn\õ',24,25,24,NULL,2,'2012-08-11 19:15:40','',26,27,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','307',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(28,1,_binary '1†F x�Ÿ',25,0,0,NULL,1,'2012-08-11 20:15:41','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(29,1,_binary '\\0c´~«c•',26,0,0,NULL,1,'2012-08-11 20:15:51','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(30,1,_binary '\ä\0+ \ò\Â\Ýp',27,0,0,NULL,1,'2012-08-15 07:18:38','',28,29,NULL,NULL,0,30,NULL,NULL,NULL,NULL,31,NULL,32,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(31,1,_binary '�y�5À\òº',28,0,0,NULL,1,'2012-08-15 04:30:13','',33,34,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(32,2,_binary '\ä\0+ \ò\Â\Ýp',29,0,0,NULL,1,'2012-08-15 04:18:38','',35,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,31,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(33,3,_binary '\ä\0+ \ò\Â\Ýp',30,0,0,NULL,1,'2012-08-15 04:18:38','',37,29,NULL,NULL,0,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(34,1,_binary '\àX}f\à#',31,0,0,NULL,1,'2014-03-12 00:34:15','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,155,255,26,90,58,155,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(35,1,_binary '\ðwÞ‡úV',32,0,0,NULL,1,'2014-03-13 00:32:23','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','403',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(36,1,_binary '‹”.\ó±tg',33,0,0,NULL,1,'2014-03-13 00:32:24','',40,41,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,345,13,0,121,244,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(37,1,_binary '\ðwÞ‡úV',32,39,38,NULL,2,'2014-03-13 00:32:25','',42,43,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','500',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(38,1,_binary '\ðwÞ‡úV',32,43,42,NULL,2,'2014-03-13 00:32:32','',NULL,44,NULL,NULL,7,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(39,1,_binary '\Ö\ðܶiI¸k',34,0,0,NULL,1,'2014-03-13 00:33:11','',45,46,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,200,341,0,110,355,99,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(40,1,_binary '\à\ë5\Äú\âª\n',35,0,0,NULL,1,'2014-03-13 00:33:27','',47,48,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(41,1,_binary 'ü–å–½L]T',36,0,0,NULL,1,'2014-03-13 00:33:33','',49,50,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,255,312,10,0,96,232,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(42,1,_binary 'L\îµÝ·o',37,0,0,NULL,1,'2014-03-13 00:33:50','',45,46,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','404',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(43,1,_binary '=œ­?„\Âr',38,0,0,NULL,1,'2014-03-13 00:33:55','',51,52,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(44,1,_binary '�Ø’t¨\Âm�',39,0,0,NULL,1,'2014-03-13 00:33:59','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(45,1,_binary '\àX}f\à#',40,0,0,NULL,NULL,'2014-03-13 00:34:21','',NULL,53,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(46,1,_binary '�Ø’t¨\Âm�',39,39,38,NULL,2,'2014-03-13 00:34:31','',54,55,NULL,NULL,32,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','501',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(47,1,_binary '\Ø3–\ñ¤Â¬',41,0,0,NULL,1,'2014-03-13 00:34:42','',56,57,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(48,1,_binary '\à\ë5\Äú\âª\n',35,48,47,NULL,2,'2014-03-13 00:34:46','',58,59,NULL,NULL,79,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(49,1,_binary 'Ù‹S\×ü\õ ‚',42,0,0,NULL,1,'2014-03-13 00:34:53','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,545,399,41,45,58,366,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(50,3,_binary '\ä\0+ \ò\Â\Ýp',43,0,0,NULL,1,'2012-08-15 07:18:38','',28,29,NULL,NULL,0,30,NULL,NULL,NULL,NULL,31,NULL,32,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(51,3,_binary '�y�5À\òº',44,0,0,NULL,1,'2012-08-15 04:30:13','',33,34,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(52,3,_binary '\ä\0+ \ò\Â\Ýp',30,29,37,NULL,2,'2012-08-15 04:18:38','',35,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,31,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(53,3,_binary '\ä\0+ \ò\Â\Ýp',30,29,35,NULL,3,'2012-08-15 04:18:38','',37,29,NULL,NULL,0,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(54,3,_binary '\àX}f\à#',45,0,0,NULL,1,'2014-03-12 00:34:15','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,155,255,26,90,58,155,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(55,3,_binary '\ðwÞ‡úV',46,0,0,NULL,1,'2014-03-13 00:32:23','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','403',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(56,3,_binary '‹”.\ó±tg',47,0,0,NULL,1,'2014-03-13 00:32:24','',40,41,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,345,13,0,121,244,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(57,3,_binary '\ðwÞ‡úV',46,39,38,NULL,2,'2014-03-13 00:32:25','',42,43,NULL,NULL,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','500',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(58,3,_binary '\ðwÞ‡úV',46,43,42,NULL,2,'2014-03-13 00:32:32','',NULL,44,NULL,NULL,7,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(59,3,_binary '\Ö\ðܶiI¸k',48,0,0,NULL,1,'2014-03-13 00:33:11','',45,46,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,200,341,0,110,355,99,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(60,3,_binary '\à\ë5\Äú\âª\n',49,0,0,NULL,1,'2014-03-13 00:33:27','',47,48,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(61,3,_binary 'ü–å–½L]T',50,0,0,NULL,1,'2014-03-13 00:33:33','',49,50,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,255,312,10,0,96,232,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(62,3,_binary 'L\îµÝ·o',51,0,0,NULL,1,'2014-03-13 00:33:50','',45,46,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','404',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(63,3,_binary '=œ­?„\Âr',52,0,0,NULL,1,'2014-03-13 00:33:55','',51,52,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(64,3,_binary '�Ø’t¨\Âm�',53,0,0,NULL,1,'2014-03-13 00:33:59','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(65,3,_binary '\àX}f\à#',54,0,0,NULL,NULL,'2014-03-13 00:34:21','',NULL,53,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(66,3,_binary '�Ø’t¨\Âm�',53,39,38,NULL,2,'2014-03-13 00:34:31','',54,55,NULL,NULL,32,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','501',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(67,3,_binary '\Ø3–\ñ¤Â¬',55,0,0,NULL,1,'2014-03-13 00:34:42','',56,57,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(68,3,_binary '\à\ë5\Äú\âª\n',49,48,47,NULL,2,'2014-03-13 00:34:46','',58,59,NULL,NULL,79,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(69,3,_binary 'Ù‹S\×ü\õ ‚',56,0,0,NULL,1,'2014-03-13 00:34:53','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,545,399,41,45,58,366,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(70,1,_binary '6œ¥‚[[\Ø',57,0,0,NULL,1,'2012-09-30 08:10:38','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,123,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(71,1,_binary '6œ¥‚[[\Ø',57,1,0,NULL,2,'2012-09-30 08:11:30','',0,2,NULL,NULL,52,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,234,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(72,1,_binary '6œ¥‚[[\Ø',57,2,0,NULL,3,'2012-09-30 08:11:56','',0,3,NULL,NULL,26,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1324,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(73,1,_binary '6œ¥‚[[\Ø',57,3,0,NULL,4,'2012-09-30 08:12:03','',0,4,NULL,NULL,7,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,543,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(74,1,_binary '6œ¥‚[[\Ø',57,4,0,NULL,5,'2012-09-30 08:10:40','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(75,1,_binary '6œ¥‚[[\Ø',57,1,0,NULL,6,'2012-09-30 08:11:30','',0,2,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,294,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(76,1,_binary '6œ¥‚[[\Ø',57,2,0,NULL,7,'2012-09-30 08:11:56','',0,3,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,624,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(77,1,_binary '6œ¥‚[[\Ø',57,3,0,NULL,8,'2012-09-30 08:12:04','',0,4,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,343,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(78,1,_binary '6œ¥‚[[\Ø',57,4,0,NULL,9,'2012-09-30 08:10:41','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,23,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(79,1,_binary '6œ¥‚[[\Ø',57,1,0,NULL,10,'2012-09-30 08:11:30','',0,2,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,237,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(80,1,_binary '(g³<��œ\Ú',58,0,0,NULL,1,'2012-08-10 08:10:38','',0,60,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(81,1,_binary '\ïV‰¨zYi^',59,0,0,NULL,1,'2012-08-09 08:10:39','',0,61,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(82,1,_binary 'l\Õ\Ó\Ý(�!’',60,0,0,NULL,1,'2012-08-10 08:10:38','',0,62,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(83,1,_binary '\Õ\Ç`®�ž\ï',61,0,0,NULL,1,'2012-08-09 08:10:39','',0,63,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(84,1,_binary ' P­`µla',62,0,0,NULL,1,'2012-08-19 08:10:38','',0,64,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(85,1,_binary 'Ž\0!M¬š\á\Ë',63,0,0,NULL,1,'2012-01-16 00:00:00','504160',65,66,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(86,1,_binary 'Ž\0!M¬š\á\Ë',64,0,0,NULL,1,'2012-01-16 12:22:33','bba57e',67,68,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(87,1,_binary '2}ÿ˜¼j5¼',65,0,0,NULL,1,'2012-01-17 00:00:00','c46369',69,70,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(88,1,_binary '2}ÿ˜¼j5¼',66,0,0,NULL,1,'2012-01-17 12:22:33','7991d0',71,72,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(89,2,_binary '_–q\Íþ�O',67,0,0,NULL,1,'2012-08-11 07:07:33','be2bc6',28,73,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(90,2,_binary '_–q\Íþ�O',68,0,0,NULL,1,'2012-08-11 10:07:33','fd4034',28,73,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(91,2,_binary '_–q\Íþ�O',69,0,0,NULL,1,'2012-08-11 10:37:33','2e453d',28,74,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(92,2,_binary '_–q\Íþ�O',70,0,0,NULL,1,'2012-08-11 11:07:33','29760f',28,75,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(93,2,_binary 'ý*\õ.',71,0,0,NULL,1,'2025-08-08 12:16:42','14c01b',28,73,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(94,2,_binary '\Å\ó¢”6¿\Ë',72,0,0,NULL,1,'2025-08-08 15:16:42','206c76',28,73,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(95,2,_binary '\Å\ó¢”6¿\Ë',73,0,0,NULL,1,'2025-08-08 15:46:42','2eb3cc',28,74,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(96,2,_binary '\Å\ó¢”6¿\Ë',74,0,0,NULL,1,'2025-08-08 16:16:42','fae805',28,75,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(97,1,_binary '\0cl£S¬',7,7,0,NULL,2,'2012-08-09 13:49:48','',0,7,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(150,1,_binary 'yE�£\óù',8,8,0,NULL,2,'2012-08-09 20:56:45','',0,8,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(151,1,_binary 'jÏ¿´$¯R',9,9,0,NULL,2,'2012-08-09 21:00:42','',0,9,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(152,1,_binary 'UR,�¶\Ó\á',10,10,0,NULL,2,'2012-08-10 18:03:40','',0,10,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(153,1,_binary 'š\ô3F\ÝZ»',11,11,0,NULL,2,'2012-08-10 19:59:50','',0,11,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(154,1,_binary '›€„-3^\æ§',12,2,0,NULL,2,'2012-08-10 20:01:17','',0,2,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(155,1,_binary ' |…£Kß¡f',13,4,0,NULL,2,'2012-08-10 20:21:03','',0,4,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(156,1,_binary 'ÀaŠk7w½',14,12,0,NULL,2,'2012-08-10 20:21:28','',0,12,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(157,1,_binary '¶x¾\ìŒY ',15,13,0,NULL,2,'2012-08-10 20:22:08','',0,13,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(158,1,_binary '\n¼a�(`\ö\Ü',16,14,0,NULL,2,'2012-08-11 13:49:46','',0,14,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(159,1,_binary 'ǡڧp¨\ä:',17,15,0,NULL,2,'2012-08-11 15:31:05','',0,15,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(160,1,_binary '‹¨¯>Ù†I',18,0,0,NULL,NULL,'2012-08-11 17:46:03','',NULL,16,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4324023,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(161,1,_binary 'ª uü’P»',19,1,0,NULL,2,'2012-08-11 16:10:38','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(162,1,_binary 'δ\ð�h\Èr-',20,18,17,NULL,2,'2012-08-11 16:11:30','',17,18,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','404',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(163,1,_binary '¸\ô�›¸\ÖΪ',21,20,19,NULL,2,'2012-08-11 17:48:07','',19,20,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','500',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(164,1,_binary '‘jt\éGœ¨',22,5,0,NULL,2,'2012-08-11 17:48:08','',0,5,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(165,1,_binary '¿ºH)\'¬‚\Ä',23,0,0,NULL,NULL,'2012-08-11 18:10:38','',NULL,21,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(166,1,_binary '¿ºH)\'¬‚\Ä',23,0,0,NULL,NULL,'2012-08-11 18:11:39','',NULL,22,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(167,1,_binary '¿ºH)\'¬‚\Ä',23,0,0,NULL,NULL,'2012-08-11 18:12:40','',NULL,23,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(168,1,_binary '\ã‡\Þj?\ãn\õ',24,27,26,NULL,3,'2012-08-11 19:12:40','',24,25,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','301',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(169,1,_binary '\ã‡\Þj?\ãn\õ',24,25,24,NULL,4,'2012-08-11 19:15:40','',26,27,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','307',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(170,1,_binary '1†F x�Ÿ',25,1,0,NULL,2,'2012-08-11 20:15:41','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(171,1,_binary '\\0c´~«c•',26,1,0,NULL,2,'2012-08-11 20:15:51','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(172,1,_binary '\ä\0+ \ò\Â\Ýp',27,29,28,NULL,2,'2012-08-15 07:18:38','',28,29,NULL,NULL,0,30,NULL,NULL,NULL,NULL,31,NULL,32,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(173,1,_binary '�y�5À\òº',28,34,33,NULL,2,'2012-08-15 04:30:13','',33,34,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(174,2,_binary '\ä\0+ \ò\Â\Ýp',29,29,35,NULL,2,'2012-08-15 04:18:38','',35,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,31,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(175,3,_binary '\ä\0+ \ò\Â\Ýp',30,29,37,NULL,4,'2012-08-15 04:18:38','',37,29,NULL,NULL,0,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(176,1,_binary '\àX}f\à#',31,39,38,NULL,2,'2014-03-12 00:34:15','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,155,255,26,90,58,155,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(177,1,_binary '\ðwÞ‡úV',32,43,42,NULL,3,'2014-03-13 00:32:23','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','403',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(178,1,_binary '‹”.\ó±tg',33,41,40,NULL,2,'2014-03-13 00:32:24','',40,41,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,345,13,0,121,244,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(179,1,_binary '\ðwÞ‡úV',32,39,38,NULL,4,'2014-03-13 00:32:25','',42,43,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','500',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(180,1,_binary '\ðwÞ‡úV',32,43,42,NULL,4,'2014-03-13 00:32:32','',NULL,44,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(181,1,_binary '\Ö\ðܶiI¸k',34,46,45,NULL,2,'2014-03-13 00:33:11','',45,46,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,200,341,0,110,355,99,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(182,1,_binary '\à\ë5\Äú\âª\n',35,59,58,NULL,3,'2014-03-13 00:33:27','',47,48,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(183,1,_binary 'ü–å–½L]T',36,50,49,NULL,2,'2014-03-13 00:33:33','',49,50,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,255,312,10,0,96,232,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(184,1,_binary 'L\îµÝ·o',37,46,45,NULL,2,'2014-03-13 00:33:50','',45,46,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','404',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(185,1,_binary '=œ­?„\Âr',38,52,51,NULL,2,'2014-03-13 00:33:55','',51,52,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(186,1,_binary '�Ø’t¨\Âm�',39,55,54,NULL,3,'2014-03-13 00:33:59','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(187,1,_binary '\àX}f\à#',40,0,0,NULL,NULL,'2014-03-13 00:34:21','',NULL,53,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(188,1,_binary '�Ø’t¨\Âm�',39,39,38,NULL,4,'2014-03-13 00:34:31','',54,55,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','501',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(189,1,_binary '\Ø3–\ñ¤Â¬',41,57,56,NULL,2,'2014-03-13 00:34:42','',56,57,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(190,1,_binary '\à\ë5\Äú\âª\n',35,48,47,NULL,4,'2014-03-13 00:34:46','',58,59,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(191,1,_binary 'Ù‹S\×ü\õ ‚',42,39,38,NULL,2,'2014-03-13 00:34:53','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,545,399,41,45,58,366,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(192,3,_binary '\ä\0+ \ò\Â\Ýp',43,29,28,NULL,2,'2012-08-15 07:18:38','',28,29,NULL,NULL,0,30,NULL,NULL,NULL,NULL,31,NULL,32,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(193,3,_binary '�y�5À\òº',44,34,33,NULL,2,'2012-08-15 04:30:13','',33,34,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(194,3,_binary '\ä\0+ \ò\Â\Ýp',30,29,37,NULL,5,'2012-08-15 04:18:38','',35,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,31,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(195,3,_binary '\ä\0+ \ò\Â\Ýp',30,29,35,NULL,6,'2012-08-15 04:18:38','',37,29,NULL,NULL,0,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(196,3,_binary '\àX}f\à#',45,39,38,NULL,2,'2014-03-12 00:34:15','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,155,255,26,90,58,155,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(197,3,_binary '\ðwÞ‡úV',46,43,42,NULL,3,'2014-03-13 00:32:23','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','403',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(198,3,_binary '‹”.\ó±tg',47,41,40,NULL,2,'2014-03-13 00:32:24','',40,41,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,345,13,0,121,244,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(199,3,_binary '\ðwÞ‡úV',46,39,38,NULL,4,'2014-03-13 00:32:25','',42,43,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','500',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(200,3,_binary '\ðwÞ‡úV',46,43,42,NULL,4,'2014-03-13 00:32:32','',NULL,44,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(201,3,_binary '\Ö\ðܶiI¸k',48,46,45,NULL,2,'2014-03-13 00:33:11','',45,46,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,200,341,0,110,355,99,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(202,3,_binary '\à\ë5\Äú\âª\n',49,59,58,NULL,3,'2014-03-13 00:33:27','',47,48,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(203,3,_binary 'ü–å–½L]T',50,50,49,NULL,2,'2014-03-13 00:33:33','',49,50,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,255,312,10,0,96,232,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(204,3,_binary 'L\îµÝ·o',51,46,45,NULL,2,'2014-03-13 00:33:50','',45,46,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','404',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(205,3,_binary '=œ­?„\Âr',52,52,51,NULL,2,'2014-03-13 00:33:55','',51,52,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(206,3,_binary '�Ø’t¨\Âm�',53,55,54,NULL,3,'2014-03-13 00:33:59','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(207,3,_binary '\àX}f\à#',54,0,0,NULL,NULL,'2014-03-13 00:34:21','',NULL,53,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(208,3,_binary '�Ø’t¨\Âm�',53,39,38,NULL,4,'2014-03-13 00:34:31','',54,55,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','501',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(209,3,_binary '\Ø3–\ñ¤Â¬',55,57,56,NULL,2,'2014-03-13 00:34:42','',56,57,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(210,3,_binary '\à\ë5\Äú\âª\n',49,48,47,NULL,4,'2014-03-13 00:34:46','',58,59,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(211,3,_binary 'Ù‹S\×ü\õ ‚',56,39,38,NULL,2,'2014-03-13 00:34:53','',38,39,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,545,399,41,45,58,366,43,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(212,1,_binary '6œ¥‚[[\Ø',57,2,0,NULL,11,'2012-09-30 08:10:38','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,123,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(213,1,_binary '6œ¥‚[[\Ø',57,1,0,NULL,12,'2012-09-30 08:11:30','',0,2,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,234,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(214,1,_binary '6œ¥‚[[\Ø',57,2,0,NULL,13,'2012-09-30 08:11:56','',0,3,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1324,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(215,1,_binary '6œ¥‚[[\Ø',57,3,0,NULL,14,'2012-09-30 08:12:03','',0,4,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,543,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(216,1,_binary '6œ¥‚[[\Ø',57,4,0,NULL,15,'2012-09-30 08:10:40','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(217,1,_binary '6œ¥‚[[\Ø',57,1,0,NULL,16,'2012-09-30 08:11:30','',0,2,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,294,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(218,1,_binary '6œ¥‚[[\Ø',57,2,0,NULL,17,'2012-09-30 08:11:56','',0,3,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,624,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(219,1,_binary '6œ¥‚[[\Ø',57,3,0,NULL,18,'2012-09-30 08:12:04','',0,4,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,343,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(220,1,_binary '6œ¥‚[[\Ø',57,4,0,NULL,19,'2012-09-30 08:10:41','',0,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,23,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(221,1,_binary '6œ¥‚[[\Ø',57,1,0,NULL,20,'2012-09-30 08:11:30','',0,2,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,237,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(222,1,_binary '(g³<��œ\Ú',58,60,0,NULL,2,'2012-08-10 08:10:38','',0,60,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(223,1,_binary '\ïV‰¨zYi^',59,61,0,NULL,2,'2012-08-09 08:10:39','',0,61,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(224,1,_binary 'l\Õ\Ó\Ý(�!’',60,62,0,NULL,2,'2012-08-10 08:10:38','',0,62,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(225,1,_binary '\Õ\Ç`®�ž\ï',61,63,0,NULL,2,'2012-08-09 08:10:39','',0,63,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(226,1,_binary ' P­`µla',62,64,0,NULL,2,'2012-08-19 08:10:38','',0,64,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3574,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(227,1,_binary '©·ºpx;a~',87,0,0,NULL,1,'2012-01-07 11:22:34','d41c39',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 0',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 0'),(228,1,_binary '©·ºpx;a~',88,0,0,NULL,1,'2012-01-07 12:22:34','8bb0ed',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(229,1,_binary '©·ºpx;a~',88,120,119,NULL,2,'2012-01-07 12:28:34','8bb0ed',121,NULL,'CAT',0,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(230,1,_binary '©·ºpx;a~',88,NULL,121,NULL,3,'2012-01-07 12:40:34','8bb0ed',0,120,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(231,1,_binary '©·ºpx;a~',88,120,121,NULL,3,'2012-01-07 12:43:34','8bb0ed',NULL,122,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(232,1,_binary '©·ºpx;a~',88,120,121,NULL,3,'2012-01-07 12:46:34','8bb0ed',NULL,123,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(233,1,_binary '©·ºpx;a~',88,120,121,345.678,3,'2012-01-07 12:49:34','8bb0ed',127,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,125,126,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(234,1,_binary '©·ºpx;a~',89,0,0,NULL,1,'2012-01-08 11:22:34','6ec92b',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 1',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 1'),(235,1,_binary '©·ºpx;a~',90,0,0,NULL,1,'2012-01-08 12:22:34','315e33',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(236,1,_binary '©·ºpx;a~',90,120,119,NULL,2,'2012-01-08 12:40:34','315e33',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(237,1,_binary '©·ºpx;a~',90,120,119,NULL,2,'2012-01-08 12:43:34','315e33',NULL,128,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(238,1,_binary '©·ºpx;a~',90,120,119,NULL,2,'2012-01-08 12:46:34','315e33',NULL,129,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(239,1,_binary '©·ºpx;a~',90,120,119,346.678,2,'2012-01-08 12:49:34','315e33',132,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,130,131,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(240,1,_binary '¸\Ã~3\Þý\å',91,0,0,NULL,1,'2012-01-09 11:22:34','d0c871',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 2',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 2'),(241,1,_binary '¸\Ã~3\Þý\å',92,0,0,NULL,1,'2012-01-09 12:22:34','eda76d',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(242,1,_binary '¸\Ã~3\Þý\å',92,120,119,NULL,2,'2012-01-09 12:28:34','eda76d',121,NULL,'CAT',12,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(243,1,_binary '¸\Ã~3\Þý\å',92,NULL,121,NULL,3,'2012-01-09 12:40:34','eda76d',0,120,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(244,1,_binary '¸\Ã~3\Þý\å',92,120,121,NULL,3,'2012-01-09 12:43:34','eda76d',NULL,133,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(245,1,_binary '¸\Ã~3\Þý\å',92,120,121,NULL,3,'2012-01-09 12:46:34','eda76d',NULL,134,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(246,1,_binary '¸\Ã~3\Þý\å',92,120,121,347.678,3,'2012-01-09 12:49:34','eda76d',137,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,135,136,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(247,1,_binary '¸\Ã~3\Þý\å',93,0,0,NULL,1,'2012-01-10 11:22:34','c3ece2',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 3',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 3'),(248,1,_binary '¸\Ã~3\Þý\å',94,0,0,NULL,1,'2012-01-10 12:22:34','be67e0',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(249,1,_binary '¸\Ã~3\Þý\å',94,120,119,NULL,2,'2012-01-10 12:40:34','be67e0',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(250,1,_binary '¸\Ã~3\Þý\å',94,120,119,NULL,2,'2012-01-10 12:43:34','be67e0',NULL,138,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(251,1,_binary '¸\Ã~3\Þý\å',94,120,119,NULL,2,'2012-01-10 12:46:34','be67e0',NULL,139,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(252,1,_binary '¸\Ã~3\Þý\å',94,120,119,348.678,2,'2012-01-10 12:49:34','be67e0',142,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,140,141,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(253,1,_binary 'û©Ø�d\ó\â\Ù',95,0,0,NULL,1,'2012-01-11 11:22:34','09ea49',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 4',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 4'),(254,1,_binary 'û©Ø�d\ó\â\Ù',96,0,0,NULL,1,'2012-01-11 12:22:34','f462b1',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(255,1,_binary 'û©Ø�d\ó\â\Ù',96,120,119,NULL,2,'2012-01-11 12:28:34','f462b1',121,NULL,'CAT',24,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(256,1,_binary 'û©Ø�d\ó\â\Ù',96,NULL,121,NULL,3,'2012-01-11 12:40:34','f462b1',0,120,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(257,1,_binary 'û©Ø�d\ó\â\Ù',96,120,121,NULL,3,'2012-01-11 12:43:34','f462b1',NULL,143,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(258,1,_binary 'û©Ø�d\ó\â\Ù',96,120,121,NULL,3,'2012-01-11 12:46:34','f462b1',NULL,144,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(259,1,_binary 'û©Ø�d\ó\â\Ù',96,120,121,349.678,3,'2012-01-11 12:49:34','f462b1',147,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,145,146,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(260,1,_binary 'û©Ø�d\ó\â\Ù',97,0,0,NULL,1,'2012-01-12 11:22:34','184e2c',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 5',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 5'),(261,1,_binary 'û©Ø�d\ó\â\Ù',98,0,0,NULL,1,'2012-01-12 12:22:34','75ca79',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(262,1,_binary 'û©Ø�d\ó\â\Ù',98,120,119,NULL,2,'2012-01-12 12:40:34','75ca79',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(263,1,_binary 'û©Ø�d\ó\â\Ù',98,120,119,NULL,2,'2012-01-12 12:43:34','75ca79',NULL,148,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(264,1,_binary 'û©Ø�d\ó\â\Ù',98,120,119,NULL,2,'2012-01-12 12:46:34','75ca79',NULL,149,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(265,1,_binary 'û©Ø�d\ó\â\Ù',98,120,119,350.678,2,'2012-01-12 12:49:34','75ca79',152,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,150,151,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(266,1,_binary 'ªh\Ç\\Jw\È',99,0,0,NULL,1,'2012-01-13 11:22:34','262150',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 6',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 6'),(267,1,_binary 'ªh\Ç\\Jw\È',100,0,0,NULL,1,'2012-01-13 12:22:34','af6cd4',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(268,1,_binary 'ªh\Ç\\Jw\È',100,120,119,NULL,2,'2012-01-13 12:28:34','af6cd4',121,NULL,'CAT',36,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(269,1,_binary 'ªh\Ç\\Jw\È',100,NULL,121,NULL,3,'2012-01-13 12:40:34','af6cd4',0,120,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(270,1,_binary 'ªh\Ç\\Jw\È',100,120,121,NULL,3,'2012-01-13 12:43:34','af6cd4',NULL,153,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(271,1,_binary 'ªh\Ç\\Jw\È',100,120,121,NULL,3,'2012-01-13 12:46:34','af6cd4',NULL,154,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(272,1,_binary 'ªh\Ç\\Jw\È',100,120,121,351.678,3,'2012-01-13 12:49:34','af6cd4',157,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,155,156,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(273,1,_binary 'ªh\Ç\\Jw\È',101,0,0,NULL,1,'2012-01-14 11:22:34','aff6c3',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 7',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 7'),(274,1,_binary 'ªh\Ç\\Jw\È',102,0,0,NULL,1,'2012-01-14 12:22:34','6d2ff3',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(275,1,_binary 'ªh\Ç\\Jw\È',102,120,119,NULL,2,'2012-01-14 12:40:34','6d2ff3',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(276,1,_binary 'ªh\Ç\\Jw\È',102,120,119,NULL,2,'2012-01-14 12:43:34','6d2ff3',NULL,158,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(277,1,_binary 'ªh\Ç\\Jw\È',102,120,119,NULL,2,'2012-01-14 12:46:34','6d2ff3',NULL,159,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(278,1,_binary 'ªh\Ç\\Jw\È',102,120,119,352.678,2,'2012-01-14 12:49:34','6d2ff3',162,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,160,161,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(279,1,_binary 'þ\Ó3’ӤС',103,0,0,NULL,1,'2012-01-15 11:22:34','fd157d',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 8',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 8'),(280,1,_binary 'þ\Ó3’ӤС',104,0,0,NULL,1,'2012-01-15 12:22:34','6747b9',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(281,1,_binary 'þ\Ó3’ӤС',104,120,119,NULL,2,'2012-01-15 12:28:34','6747b9',121,NULL,'CAT',48,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(282,1,_binary 'þ\Ó3’ӤС',104,NULL,121,NULL,3,'2012-01-15 12:40:34','6747b9',0,120,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(283,1,_binary 'þ\Ó3’ӤС',104,120,121,NULL,3,'2012-01-15 12:43:34','6747b9',NULL,163,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(284,1,_binary 'þ\Ó3’ӤС',104,120,121,NULL,3,'2012-01-15 12:46:34','6747b9',NULL,164,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(285,1,_binary 'þ\Ó3’ӤС',104,120,121,353.678,3,'2012-01-15 12:49:34','6747b9',167,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,165,166,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(286,1,_binary 'ù \ZAqU6',105,0,0,NULL,1,'2012-01-07 11:22:35','ae0a87',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 0',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 0'),(287,1,_binary 'ù \ZAqU6',106,0,0,NULL,1,'2012-01-07 12:22:35','a2f2d6',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(288,1,_binary 'ù \ZAqU6',106,120,119,NULL,2,'2012-01-07 12:28:35','a2f2d6',121,NULL,'CAT',0,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(289,1,_binary 'ù \ZAqU6',106,NULL,121,NULL,3,'2012-01-07 12:40:35','a2f2d6',0,120,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(290,1,_binary 'ù \ZAqU6',106,120,121,NULL,3,'2012-01-07 12:43:35','a2f2d6',NULL,122,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(291,1,_binary 'ù \ZAqU6',106,120,121,NULL,3,'2012-01-07 12:46:35','a2f2d6',NULL,123,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(292,1,_binary 'ù \ZAqU6',106,120,121,345.678,3,'2012-01-07 12:49:35','a2f2d6',127,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,125,126,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(293,1,_binary 'ù \ZAqU6',107,0,0,NULL,1,'2012-01-08 11:22:35','3ae390',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 1',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 1'),(294,1,_binary 'ù \ZAqU6',108,0,0,NULL,1,'2012-01-08 12:22:35','f176be',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(295,1,_binary 'ù \ZAqU6',108,120,119,NULL,2,'2012-01-08 12:40:35','f176be',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(296,1,_binary 'ù \ZAqU6',108,120,119,NULL,2,'2012-01-08 12:43:35','f176be',NULL,128,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(297,1,_binary 'ù \ZAqU6',108,120,119,NULL,2,'2012-01-08 12:46:35','f176be',NULL,129,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(298,1,_binary 'ù \ZAqU6',108,120,119,346.678,2,'2012-01-08 12:49:35','f176be',132,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,130,131,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(299,1,_binary '\é0(½Áª\Íû',109,0,0,NULL,1,'2012-01-07 11:22:36','cfe717',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 0',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 0'),(300,1,_binary '\é0(½Áª\Íû',110,0,0,NULL,1,'2012-01-07 12:22:36','70e0e0',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(301,1,_binary '\é0(½Áª\Íû',110,120,119,NULL,2,'2012-01-07 12:28:36','70e0e0',121,NULL,'CAT',0,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(302,1,_binary '\é0(½Áª\Íû',110,NULL,121,NULL,3,'2012-01-07 12:40:36','70e0e0',0,120,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(303,1,_binary '\é0(½Áª\Íû',110,120,121,NULL,3,'2012-01-07 12:43:36','70e0e0',NULL,122,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(304,1,_binary '\é0(½Áª\Íû',110,120,121,NULL,3,'2012-01-07 12:46:36','70e0e0',NULL,123,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(305,1,_binary '\é0(½Áª\Íû',110,120,121,345.678,3,'2012-01-07 12:49:36','70e0e0',127,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,125,126,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(306,1,_binary '\é0(½Áª\Íû',111,0,0,NULL,1,'2012-01-08 11:22:36','864f6f',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 1',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 1'),(307,1,_binary '\é0(½Áª\Íû',112,0,0,NULL,1,'2012-01-08 12:22:36','4ea489',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(308,1,_binary '\é0(½Áª\Íû',112,120,119,NULL,2,'2012-01-08 12:40:36','4ea489',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(309,1,_binary '\é0(½Áª\Íû',112,120,119,NULL,2,'2012-01-08 12:43:36','4ea489',NULL,128,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(310,1,_binary '\é0(½Áª\Íû',112,120,119,NULL,2,'2012-01-08 12:46:36','4ea489',NULL,129,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(311,1,_binary '\é0(½Áª\Íû',112,120,119,346.678,2,'2012-01-08 12:49:36','4ea489',132,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,130,131,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(312,1,_binary '�ŒšVJ†Be',113,0,0,NULL,1,'2012-01-09 11:22:36','3779d2',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 2',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 2'),(313,1,_binary '�ŒšVJ†Be',114,0,0,NULL,1,'2012-01-09 12:22:36','25df89',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(314,1,_binary '�ŒšVJ†Be',114,120,119,NULL,2,'2012-01-09 12:28:36','25df89',121,NULL,'CAT',12,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(315,1,_binary '�ŒšVJ†Be',114,NULL,121,NULL,3,'2012-01-09 12:40:36','25df89',0,120,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(316,1,_binary '�ŒšVJ†Be',114,120,121,NULL,3,'2012-01-09 12:43:36','25df89',NULL,133,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(317,1,_binary '�ŒšVJ†Be',114,120,121,NULL,3,'2012-01-09 12:46:36','25df89',NULL,134,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(318,1,_binary '�ŒšVJ†Be',114,120,121,347.678,3,'2012-01-09 12:49:36','25df89',137,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,135,136,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(319,1,_binary '�ŒšVJ†Be',115,0,0,NULL,1,'2012-01-10 11:22:36','36a89f',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 3',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 3'),(320,1,_binary '�ŒšVJ†Be',116,0,0,NULL,1,'2012-01-10 12:22:36','012c40',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(321,1,_binary '�ŒšVJ†Be',116,120,119,NULL,2,'2012-01-10 12:40:36','012c40',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(322,1,_binary '�ŒšVJ†Be',116,120,119,NULL,2,'2012-01-10 12:43:36','012c40',NULL,138,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(323,1,_binary '�ŒšVJ†Be',116,120,119,NULL,2,'2012-01-10 12:46:36','012c40',NULL,139,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(324,1,_binary '�ŒšVJ†Be',116,120,119,348.678,2,'2012-01-10 12:49:36','012c40',142,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,140,141,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(325,1,_binary 'Öœ}\ó/¹',117,0,0,NULL,1,'2012-01-07 11:22:37','6bcb4a',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 0',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 0'),(326,1,_binary 'Öœ}\ó/¹',118,0,0,NULL,1,'2012-01-07 12:22:37','9acd0f',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(327,1,_binary 'Öœ}\ó/¹',118,120,119,NULL,2,'2012-01-07 12:28:37','9acd0f',121,NULL,'CAT',0,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(328,1,_binary 'Öœ}\ó/¹',118,NULL,121,NULL,3,'2012-01-07 12:40:37','9acd0f',0,120,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(329,1,_binary 'Öœ}\ó/¹',118,120,121,NULL,3,'2012-01-07 12:43:37','9acd0f',NULL,122,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(330,1,_binary 'Öœ}\ó/¹',118,120,121,NULL,3,'2012-01-07 12:46:37','9acd0f',NULL,123,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(331,1,_binary 'Öœ}\ó/¹',118,120,121,345.678,3,'2012-01-07 12:49:37','9acd0f',127,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,125,126,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(332,1,_binary 'Öœ}\ó/¹',119,0,0,NULL,1,'2012-01-08 11:22:37','9220bd',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 1',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 1'),(333,1,_binary 'Öœ}\ó/¹',120,0,0,NULL,1,'2012-01-08 12:22:37','b584d0',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(334,1,_binary 'Öœ}\ó/¹',120,120,119,NULL,2,'2012-01-08 12:40:37','b584d0',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(335,1,_binary 'Öœ}\ó/¹',120,120,119,NULL,2,'2012-01-08 12:43:37','b584d0',NULL,128,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(336,1,_binary 'Öœ}\ó/¹',120,120,119,NULL,2,'2012-01-08 12:46:37','b584d0',NULL,129,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(337,1,_binary 'Öœ}\ó/¹',120,120,119,346.678,2,'2012-01-08 12:49:37','b584d0',132,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,130,131,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(338,1,_binary '\æKÄ�p ]i',121,0,0,NULL,1,'2012-01-27 11:22:33','612f7c',168,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(339,1,_binary '©·ºpx;a~',89,118,117,NULL,2,'2012-01-08 11:22:34','90dca2',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 0',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 0'),(340,1,_binary '©·ºpx;a~',90,120,119,NULL,3,'2012-01-08 12:22:34','a592ac',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary '©·ºpx;a~',90,120,119,NULL,4,'2012-01-08 12:28:34','a592ac',121,NULL,'CAT',0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(342,1,_binary '©·ºpx;a~',90,NULL,121,NULL,5,'2012-01-08 12:40:34','a592ac',0,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(343,1,_binary '©·ºpx;a~',90,120,121,NULL,5,'2012-01-08 12:43:34','a592ac',NULL,122,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(344,1,_binary '©·ºpx;a~',90,120,121,NULL,5,'2012-01-08 12:46:34','a592ac',NULL,123,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(345,1,_binary '©·ºpx;a~',90,120,121,345.678,5,'2012-01-08 12:49:34','a592ac',127,124,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,125,126,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(346,1,_binary '©·ºpx;a~',122,0,0,NULL,1,'2012-01-09 11:22:34','ac25d0',117,118,NULL,NULL,0,172,173,174,172,NULL,176,17.4,177,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 1',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 1'),(347,1,_binary '©·ºpx;a~',123,0,0,NULL,1,'2012-01-09 12:22:34','c58009',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(348,1,_binary '©·ºpx;a~',123,120,119,NULL,2,'2012-01-09 12:40:34','c58009',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(349,1,_binary '©·ºpx;a~',123,120,119,NULL,2,'2012-01-09 12:43:34','c58009',NULL,128,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(350,1,_binary '©·ºpx;a~',123,120,119,NULL,2,'2012-01-09 12:46:34','c58009',NULL,129,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(351,1,_binary '©·ºpx;a~',123,120,119,346.678,2,'2012-01-09 12:49:34','c58009',132,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,130,131,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(352,1,_binary '¸\Ã~3\Þý\å',93,118,117,NULL,2,'2012-01-10 11:22:34','3944a8',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 2',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 2'),(353,1,_binary '¸\Ã~3\Þý\å',94,120,119,NULL,3,'2012-01-10 12:22:34','18db0c',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(354,1,_binary '¸\Ã~3\Þý\å',94,120,119,NULL,4,'2012-01-10 12:28:34','18db0c',121,NULL,'CAT',12,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(355,1,_binary '¸\Ã~3\Þý\å',94,NULL,121,NULL,5,'2012-01-10 12:40:34','18db0c',0,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(356,1,_binary '¸\Ã~3\Þý\å',94,120,121,NULL,5,'2012-01-10 12:43:34','18db0c',NULL,133,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(357,1,_binary '¸\Ã~3\Þý\å',94,120,121,NULL,5,'2012-01-10 12:46:34','18db0c',NULL,134,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(358,1,_binary '¸\Ã~3\Þý\å',94,120,121,347.678,5,'2012-01-10 12:49:34','18db0c',137,124,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,135,136,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(359,1,_binary '¸\Ã~3\Þý\å',124,0,0,NULL,1,'2012-01-11 11:22:34','fc2ddb',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 3',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 3'),(360,1,_binary '¸\Ã~3\Þý\å',125,0,0,NULL,1,'2012-01-11 12:22:34','228e03',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(361,1,_binary '¸\Ã~3\Þý\å',125,120,119,NULL,2,'2012-01-11 12:40:34','228e03',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(362,1,_binary '¸\Ã~3\Þý\å',125,120,119,NULL,2,'2012-01-11 12:43:34','228e03',NULL,138,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(363,1,_binary '¸\Ã~3\Þý\å',125,120,119,NULL,2,'2012-01-11 12:46:34','228e03',NULL,139,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(364,1,_binary '¸\Ã~3\Þý\å',125,120,119,348.678,2,'2012-01-11 12:49:34','228e03',142,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,140,141,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(365,1,_binary 'û©Ø�d\ó\â\Ù',97,118,117,NULL,2,'2012-01-12 11:22:34','467100',117,118,NULL,NULL,0,172,173,174,178,NULL,176,17.4,177,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 4',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 4'),(366,1,_binary 'û©Ø�d\ó\â\Ù',98,120,119,NULL,3,'2012-01-12 12:22:34','68fd70',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(367,1,_binary 'û©Ø�d\ó\â\Ù',98,120,119,NULL,4,'2012-01-12 12:28:34','68fd70',121,NULL,'CAT',24,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(368,1,_binary 'û©Ø�d\ó\â\Ù',98,NULL,121,NULL,5,'2012-01-12 12:40:34','68fd70',0,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(369,1,_binary 'û©Ø�d\ó\â\Ù',98,120,121,NULL,5,'2012-01-12 12:43:34','68fd70',NULL,143,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(370,1,_binary 'û©Ø�d\ó\â\Ù',98,120,121,NULL,5,'2012-01-12 12:46:34','68fd70',NULL,144,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(371,1,_binary 'û©Ø�d\ó\â\Ù',98,120,121,349.678,5,'2012-01-12 12:49:34','68fd70',147,124,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,145,146,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(372,1,_binary 'û©Ø�d\ó\â\Ù',126,0,0,NULL,1,'2012-01-13 11:22:34','7b6265',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 5',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 5'),(373,1,_binary 'û©Ø�d\ó\â\Ù',127,0,0,NULL,1,'2012-01-13 12:22:34','751aa9',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(374,1,_binary 'û©Ø�d\ó\â\Ù',127,120,119,NULL,2,'2012-01-13 12:40:34','751aa9',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(375,1,_binary 'û©Ø�d\ó\â\Ù',127,120,119,NULL,2,'2012-01-13 12:43:34','751aa9',NULL,148,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(376,1,_binary 'û©Ø�d\ó\â\Ù',127,120,119,NULL,2,'2012-01-13 12:46:34','751aa9',NULL,149,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(377,1,_binary 'û©Ø�d\ó\â\Ù',127,120,119,350.678,2,'2012-01-13 12:49:34','751aa9',152,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,150,151,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(378,1,_binary 'ªh\Ç\\Jw\È',101,118,117,NULL,2,'2012-01-14 11:22:34','d5490b',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 6',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 6'),(379,1,_binary 'ªh\Ç\\Jw\È',102,120,119,NULL,3,'2012-01-14 12:22:34','7a391d',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(380,1,_binary 'ªh\Ç\\Jw\È',102,120,119,NULL,4,'2012-01-14 12:28:34','7a391d',121,NULL,'CAT',36,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(381,1,_binary 'ªh\Ç\\Jw\È',102,NULL,121,NULL,5,'2012-01-14 12:40:34','7a391d',0,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(382,1,_binary 'ªh\Ç\\Jw\È',102,120,121,NULL,5,'2012-01-14 12:43:34','7a391d',NULL,153,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(383,1,_binary 'ªh\Ç\\Jw\È',102,120,121,NULL,5,'2012-01-14 12:46:34','7a391d',NULL,154,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(384,1,_binary 'ªh\Ç\\Jw\È',102,120,121,351.678,5,'2012-01-14 12:49:34','7a391d',157,124,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,155,156,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(385,1,_binary 'ªh\Ç\\Jw\È',128,0,0,NULL,1,'2012-01-15 11:22:34','38d278',117,118,NULL,NULL,0,172,173,174,179,NULL,176,17.4,177,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 7',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 7'),(386,1,_binary 'ªh\Ç\\Jw\È',129,0,0,NULL,1,'2012-01-15 12:22:34','9d05ff',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(387,1,_binary 'ªh\Ç\\Jw\È',129,120,119,NULL,2,'2012-01-15 12:40:34','9d05ff',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(388,1,_binary 'ªh\Ç\\Jw\È',129,120,119,NULL,2,'2012-01-15 12:43:34','9d05ff',NULL,158,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(389,1,_binary 'ªh\Ç\\Jw\È',129,120,119,NULL,2,'2012-01-15 12:46:34','9d05ff',NULL,159,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(390,1,_binary 'ªh\Ç\\Jw\È',129,120,119,352.678,2,'2012-01-15 12:49:34','9d05ff',162,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,160,161,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(391,1,_binary 'þ\Ó3’ӤС',130,0,0,NULL,1,'2012-01-16 11:22:34','4febb9',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 8',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 8'),(392,1,_binary 'þ\Ó3’ӤС',131,0,0,NULL,1,'2012-01-16 12:22:34','2b900d',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(393,1,_binary 'þ\Ó3’ӤС',131,120,119,NULL,2,'2012-01-16 12:28:34','2b900d',121,NULL,'CAT',48,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(394,1,_binary 'þ\Ó3’ӤС',131,NULL,121,NULL,3,'2012-01-16 12:40:34','2b900d',0,120,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(395,1,_binary 'þ\Ó3’ӤС',131,120,121,NULL,3,'2012-01-16 12:43:34','2b900d',NULL,163,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(396,1,_binary 'þ\Ó3’ӤС',131,120,121,NULL,3,'2012-01-16 12:46:34','2b900d',NULL,164,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(397,1,_binary 'þ\Ó3’ӤС',131,120,121,353.678,3,'2012-01-16 12:49:34','2b900d',167,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,165,166,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(398,1,_binary 'ù \ZAqU6',107,118,117,NULL,2,'2012-01-08 11:22:35','25df8e',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 0',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 0'),(399,1,_binary 'ù \ZAqU6',108,120,119,NULL,3,'2012-01-08 12:22:35','7cc5b5',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(400,1,_binary 'ù \ZAqU6',108,120,119,NULL,4,'2012-01-08 12:28:35','7cc5b5',121,NULL,'CAT',0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(401,1,_binary 'ù \ZAqU6',108,NULL,121,NULL,5,'2012-01-08 12:40:35','7cc5b5',0,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(402,1,_binary 'ù \ZAqU6',108,120,121,NULL,5,'2012-01-08 12:43:35','7cc5b5',NULL,122,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(403,1,_binary 'ù \ZAqU6',108,120,121,NULL,5,'2012-01-08 12:46:35','7cc5b5',NULL,123,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(404,1,_binary 'ù \ZAqU6',108,120,121,345.678,5,'2012-01-08 12:49:35','7cc5b5',127,124,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,125,126,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(405,1,_binary 'ù \ZAqU6',132,0,0,NULL,1,'2012-01-09 11:22:35','5de299',117,118,NULL,NULL,0,172,173,174,172,NULL,176,17.4,177,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 1',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 1'),(406,1,_binary 'ù \ZAqU6',133,0,0,NULL,1,'2012-01-09 12:22:35','29b2a6',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(407,1,_binary 'ù \ZAqU6',133,120,119,NULL,2,'2012-01-09 12:40:35','29b2a6',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(408,1,_binary 'ù \ZAqU6',133,120,119,NULL,2,'2012-01-09 12:43:35','29b2a6',NULL,128,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(409,1,_binary 'ù \ZAqU6',133,120,119,NULL,2,'2012-01-09 12:46:35','29b2a6',NULL,129,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(410,1,_binary 'ù \ZAqU6',133,120,119,346.678,2,'2012-01-09 12:49:35','29b2a6',132,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,130,131,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(411,1,_binary '\é0(½Áª\Íû',111,118,117,NULL,2,'2012-01-08 11:22:36','09f8e1',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 0',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 0'),(412,1,_binary '\é0(½Áª\Íû',112,120,119,NULL,3,'2012-01-08 12:22:36','8be873',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(413,1,_binary '\é0(½Áª\Íû',112,120,119,NULL,4,'2012-01-08 12:28:36','8be873',121,NULL,'CAT',0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(414,1,_binary '\é0(½Áª\Íû',112,NULL,121,NULL,5,'2012-01-08 12:40:36','8be873',0,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(415,1,_binary '\é0(½Áª\Íû',112,120,121,NULL,5,'2012-01-08 12:43:36','8be873',NULL,122,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(416,1,_binary '\é0(½Áª\Íû',112,120,121,NULL,5,'2012-01-08 12:46:36','8be873',NULL,123,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(417,1,_binary '\é0(½Áª\Íû',112,120,121,345.678,5,'2012-01-08 12:49:36','8be873',127,124,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,125,126,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(418,1,_binary '\é0(½Áª\Íû',134,0,0,NULL,1,'2012-01-09 11:22:36','3c0234',117,118,NULL,NULL,0,172,173,174,172,NULL,176,17.4,177,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 1',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 1'),(419,1,_binary '\é0(½Áª\Íû',135,0,0,NULL,1,'2012-01-09 12:22:36','c929e0',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(420,1,_binary '\é0(½Áª\Íû',135,120,119,NULL,2,'2012-01-09 12:40:36','c929e0',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(421,1,_binary '\é0(½Áª\Íû',135,120,119,NULL,2,'2012-01-09 12:43:36','c929e0',NULL,128,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(422,1,_binary '\é0(½Áª\Íû',135,120,119,NULL,2,'2012-01-09 12:46:36','c929e0',NULL,129,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(423,1,_binary '\é0(½Áª\Íû',135,120,119,346.678,2,'2012-01-09 12:49:36','c929e0',132,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,130,131,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(424,1,_binary '�ŒšVJ†Be',115,118,117,NULL,2,'2012-01-10 11:22:36','4ad6f7',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 2',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 2'),(425,1,_binary '�ŒšVJ†Be',116,120,119,NULL,3,'2012-01-10 12:22:36','8db894',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(426,1,_binary '�ŒšVJ†Be',116,120,119,NULL,4,'2012-01-10 12:28:36','8db894',121,NULL,'CAT',12,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(427,1,_binary '�ŒšVJ†Be',116,NULL,121,NULL,5,'2012-01-10 12:40:36','8db894',0,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(428,1,_binary '�ŒšVJ†Be',116,120,121,NULL,5,'2012-01-10 12:43:36','8db894',NULL,133,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(429,1,_binary '�ŒšVJ†Be',116,120,121,NULL,5,'2012-01-10 12:46:36','8db894',NULL,134,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(430,1,_binary '�ŒšVJ†Be',116,120,121,347.678,5,'2012-01-10 12:49:36','8db894',137,124,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,135,136,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(431,1,_binary '�ŒšVJ†Be',136,0,0,NULL,1,'2012-01-11 11:22:36','ba1890',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 3',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 3'),(432,1,_binary '�ŒšVJ†Be',137,0,0,NULL,1,'2012-01-11 12:22:36','914b99',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(433,1,_binary '�ŒšVJ†Be',137,120,119,NULL,2,'2012-01-11 12:40:36','914b99',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(434,1,_binary '�ŒšVJ†Be',137,120,119,NULL,2,'2012-01-11 12:43:36','914b99',NULL,138,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(435,1,_binary '�ŒšVJ†Be',137,120,119,NULL,2,'2012-01-11 12:46:36','914b99',NULL,139,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(436,1,_binary '�ŒšVJ†Be',137,120,119,348.678,2,'2012-01-11 12:49:36','914b99',142,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,140,141,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(437,1,_binary 'Öœ}\ó/¹',119,118,117,NULL,2,'2012-01-08 11:22:37','9e86af',117,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 0',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 0'),(438,1,_binary 'Öœ}\ó/¹',120,120,119,NULL,3,'2012-01-08 12:22:37','970e29',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(439,1,_binary 'Öœ}\ó/¹',120,120,119,NULL,4,'2012-01-08 12:28:37','970e29',121,NULL,'CAT',0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(440,1,_binary 'Öœ}\ó/¹',120,NULL,121,NULL,5,'2012-01-08 12:40:37','970e29',0,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(441,1,_binary 'Öœ}\ó/¹',120,120,121,NULL,5,'2012-01-08 12:43:37','970e29',NULL,122,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(442,1,_binary 'Öœ}\ó/¹',120,120,121,NULL,5,'2012-01-08 12:46:37','970e29',NULL,123,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(443,1,_binary 'Öœ}\ó/¹',120,120,121,345.678,5,'2012-01-08 12:49:37','970e29',127,124,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,125,126,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(444,1,_binary 'Öœ}\ó/¹',138,0,0,NULL,1,'2012-01-09 11:22:37','a73130',117,118,NULL,NULL,0,172,173,174,172,NULL,176,17.4,177,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 2 PAGE name','Cvar2 PAGE value is 1',NULL,NULL,NULL,NULL,'Cvar 5 PAGE name','Cvar5 PAGE value is 1'),(445,1,_binary 'Öœ}\ó/¹',139,0,0,NULL,1,'2012-01-09 12:22:37','1f4c12',119,120,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(446,1,_binary 'Öœ}\ó/¹',139,120,119,NULL,2,'2012-01-09 12:40:37','1f4c12',0,120,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(447,1,_binary 'Öœ}\ó/¹',139,120,119,NULL,2,'2012-01-09 12:43:37','1f4c12',NULL,128,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(448,1,_binary 'Öœ}\ó/¹',139,120,119,NULL,2,'2012-01-09 12:46:37','1f4c12',NULL,129,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(449,1,_binary 'Öœ}\ó/¹',139,120,119,346.678,2,'2012-01-09 12:49:37','1f4c12',132,124,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,130,131,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(450,1,_binary '\æKÄ�p ]i',140,0,0,NULL,1,'2012-01-28 11:22:33','4b67b2',168,118,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(451,1,_binary 'œb£Ä�›',141,0,0,NULL,1,'2012-01-09 01:22:33','40838e',180,181,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(452,1,_binary 'œb£Ä�›',142,0,0,NULL,1,'2012-01-09 02:22:33','01993f',182,183,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0',NULL,NULL,NULL,NULL,'name','thing0','rating','1','tweeted','y','liked','yes',NULL,NULL),(453,1,_binary 'œb£Ä�›',143,0,0,NULL,1,'2012-01-09 03:22:33','5c620c',184,185,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,NULL,NULL,NULL,'name','thing1','rating','2','tweeted','n','liked','y',NULL,NULL),(454,1,_binary 'œb£Ä�›',144,0,0,NULL,1,'2012-01-09 04:22:33','f4f483',186,187,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2',NULL,NULL,NULL,NULL,'name','thing2','rating','3','tweeted','m','liked','y',NULL,NULL),(455,1,_binary 'œb£Ä�›',145,0,0,NULL,1,'2012-01-09 05:22:33','142dee',188,189,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'3',NULL,NULL,NULL,NULL,'name','thing3','rating','4','tweeted','n','liked','no',NULL,NULL),(456,1,_binary '³Ú§{L©U',146,0,0,NULL,1,'2012-01-09 01:22:33','1c0a37',190,191,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(457,1,_binary '³Ú§{L©U',147,0,0,NULL,1,'2012-01-09 02:22:33','20cb5d',192,193,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'5',NULL,NULL,NULL,NULL,'name','thing4','rating','5','tweeted','y','liked','y',NULL,NULL),(458,1,_binary '³Ú§{L©U',148,0,0,NULL,1,'2012-01-09 03:22:33','aff8e4',194,195,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'6',NULL,NULL,NULL,NULL,'name','thing5','rating','6','tweeted','n','liked','y',NULL,NULL),(459,1,_binary '³Ú§{L©U',149,0,0,NULL,1,'2012-01-09 04:22:33','f2ec51',196,197,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'7',NULL,NULL,NULL,NULL,'name','thing6','rating','7','tweeted','y','liked','y',NULL,NULL),(460,1,_binary '³Ú§{L©U',150,0,0,NULL,1,'2012-01-09 05:22:33','0607e4',198,199,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'8',NULL,NULL,NULL,NULL,'name','thing7','rating','8','tweeted','n','liked','y',NULL,NULL),(461,1,_binary '¡ˆ\î\Ém¹',151,0,0,NULL,1,'2012-01-09 01:22:33','0ee39c',200,201,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(462,1,_binary '¡ˆ\î\Ém¹',152,0,0,NULL,1,'2012-01-09 02:22:33','3ff1a5',202,203,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'10',NULL,NULL,NULL,NULL,'name','thing8','rating','9','tweeted','y','liked','y',NULL,NULL),(463,1,_binary '¡ˆ\î\Ém¹',153,0,0,NULL,1,'2012-01-09 03:22:33','85dfac',204,205,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'11',NULL,NULL,NULL,NULL,'name','thing9','rating','10','tweeted','n','liked','y',NULL,NULL),(464,1,_binary '¡ˆ\î\Ém¹',154,0,0,NULL,1,'2012-01-09 04:22:33','a595bb',206,207,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'12',NULL,NULL,NULL,NULL,'name','thing10','rating','1','tweeted','y','liked','y',NULL,NULL),(465,1,_binary '¡ˆ\î\Ém¹',155,0,0,NULL,1,'2012-01-09 05:22:33','bf7956',208,209,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'13',NULL,NULL,NULL,NULL,'name','thing11','rating','2','tweeted','n','liked','y',NULL,NULL),(466,1,_binary ' „”F\Ó85',156,0,0,NULL,1,'2012-01-09 01:22:33','1e474f',210,211,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(467,1,_binary ' „”F\Ó85',157,0,0,NULL,1,'2012-01-09 02:22:33','338d8c',212,213,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'15',NULL,NULL,NULL,NULL,'name','thing12','rating','3','tweeted','y','liked','y',NULL,NULL),(468,1,_binary ' „”F\Ó85',158,0,0,NULL,1,'2012-01-09 03:22:33','cf6d23',214,215,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'16',NULL,NULL,NULL,NULL,'name','thing13','rating','4','tweeted','n','liked','y',NULL,NULL),(469,1,_binary ' „”F\Ó85',159,0,0,NULL,1,'2012-01-09 04:22:33','cb9d99',216,217,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'17',NULL,NULL,NULL,NULL,'name','thing14','rating','5','tweeted','y','liked','y',NULL,NULL),(470,1,_binary ' „”F\Ó85',160,0,0,NULL,1,'2012-01-09 05:22:33','4e2c0c',218,219,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'18',NULL,NULL,NULL,NULL,'name','thing15','rating','6','tweeted','n','liked','y',NULL,NULL),(471,1,_binary '\æ\î\ö­\ò\å\õ',161,0,0,NULL,1,'2012-01-09 01:22:33','0e10c1',220,221,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(472,1,_binary '\æ\î\ö­\ò\å\õ',162,0,0,NULL,1,'2012-01-09 02:22:33','0a5e8c',222,223,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'20',NULL,NULL,NULL,NULL,'name','thing16','rating','7','tweeted','m','liked','y',NULL,NULL),(473,1,_binary '\æ\î\ö­\ò\å\õ',163,0,0,NULL,1,'2012-01-09 03:22:33','e69077',224,225,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'21',NULL,NULL,NULL,NULL,'name','thing17','rating','8','tweeted','n','liked','y',NULL,NULL),(474,1,_binary '\æ\î\ö­\ò\å\õ',164,0,0,NULL,1,'2012-01-09 04:22:33','5ee4cb',226,227,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'22',NULL,NULL,NULL,NULL,'name','thing18','rating','9','tweeted','m','liked','no',NULL,NULL),(475,1,_binary '\æ\î\ö­\ò\å\õ',165,0,0,NULL,1,'2012-01-09 05:22:33','a1c6b5',228,229,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'23',NULL,NULL,NULL,NULL,'name','thing19','rating','20','tweeted','n','liked','n',NULL,NULL),(476,1,_binary '}&�¸Ý€r',166,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,230,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(477,1,_binary '}&�¸Ý€r',166,0,0,NULL,1,'2012-01-09 01:22:33','a1c6b5',231,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(478,1,_binary '}&�¸Ý€r',167,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,232,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0',NULL,NULL,NULL,NULL,'size','1024',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(479,1,_binary '}&�¸Ý€r',167,0,0,NULL,1,'2012-01-09 02:22:33','a1c6b5',233,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(480,1,_binary '}&�¸Ý€r',168,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,234,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,NULL,NULL,NULL,'size','1024',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(481,1,_binary '}&�¸Ý€r',168,0,0,NULL,1,'2012-01-09 03:22:33','a1c6b5',235,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(482,1,_binary '}&�¸Ý€r',169,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,236,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2',NULL,NULL,NULL,NULL,'size','1024',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(483,1,_binary '}&�¸Ý€r',169,0,0,NULL,1,'2012-01-09 04:22:33','a1c6b5',237,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(484,1,_binary '}&�¸Ý€r',170,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,238,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'3',NULL,NULL,NULL,NULL,'size','2048',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(485,1,_binary '}&�¸Ý€r',170,0,0,NULL,1,'2012-01-09 05:22:33','a1c6b5',239,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(486,1,_binary '1*F\ÜR~ú',171,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,240,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(487,1,_binary '1*F\ÜR~ú',171,0,0,NULL,1,'2012-01-09 01:22:33','a1c6b5',231,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(488,1,_binary '1*F\ÜR~ú',172,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,241,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'5',NULL,NULL,NULL,NULL,'size','2048',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(489,1,_binary '1*F\ÜR~ú',172,0,0,NULL,1,'2012-01-09 02:22:33','a1c6b5',242,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(490,1,_binary '1*F\ÜR~ú',173,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,243,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'6',NULL,NULL,NULL,NULL,'size','3072',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(491,1,_binary '1*F\ÜR~ú',173,0,0,NULL,1,'2012-01-09 03:22:33','a1c6b5',244,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(492,1,_binary '1*F\ÜR~ú',174,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,245,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'7',NULL,NULL,NULL,NULL,'size','3072',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(493,1,_binary '1*F\ÜR~ú',174,0,0,NULL,1,'2012-01-09 04:22:33','a1c6b5',246,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(494,1,_binary '1*F\ÜR~ú',175,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,247,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'8',NULL,NULL,NULL,NULL,'size','3072',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(495,1,_binary '1*F\ÜR~ú',175,0,0,NULL,1,'2012-01-09 05:22:33','a1c6b5',248,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(496,1,_binary '{\Þ\ì\É|øù¹',176,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,249,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(497,1,_binary '{\Þ\ì\É|øù¹',176,0,0,NULL,1,'2012-01-09 01:22:33','a1c6b5',231,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(498,1,_binary '{\Þ\ì\É|øù¹',177,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,250,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'10',NULL,NULL,NULL,NULL,'size','3072',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(499,1,_binary '{\Þ\ì\É|øù¹',177,0,0,NULL,1,'2012-01-09 02:22:33','a1c6b5',251,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(500,1,_binary '{\Þ\ì\É|øù¹',178,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,252,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'11',NULL,NULL,NULL,NULL,'size','4096',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(501,1,_binary '{\Þ\ì\É|øù¹',178,0,0,NULL,1,'2012-01-09 03:22:33','a1c6b5',253,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(502,1,_binary '{\Þ\ì\É|øù¹',179,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,254,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'12',NULL,NULL,NULL,NULL,'size','4096',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(503,1,_binary '{\Þ\ì\É|øù¹',179,0,0,NULL,1,'2012-01-09 04:22:33','a1c6b5',255,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(504,1,_binary '{\Þ\ì\É|øù¹',180,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,256,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'13',NULL,NULL,NULL,NULL,'size','4096',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(505,1,_binary '{\Þ\ì\É|øù¹',180,0,0,NULL,1,'2012-01-09 05:22:33','a1c6b5',257,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(506,1,_binary '¡L•[\ÚW+�',181,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,258,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(507,1,_binary '¡L•[\ÚW+�',181,0,0,NULL,1,'2012-01-09 01:22:33','a1c6b5',231,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(508,1,_binary '¡L•[\ÚW+�',182,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,259,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'15',NULL,NULL,NULL,NULL,'size','512',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(509,1,_binary '¡L•[\ÚW+�',182,0,0,NULL,1,'2012-01-09 02:22:33','a1c6b5',260,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(510,1,_binary '¡L•[\ÚW+�',183,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,261,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'16',NULL,NULL,NULL,NULL,'size','512',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(511,1,_binary '¡L•[\ÚW+�',183,0,0,NULL,1,'2012-01-09 03:22:33','a1c6b5',262,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(512,1,_binary '¡L•[\ÚW+�',184,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,263,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'17',NULL,NULL,NULL,NULL,'size','256',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(513,1,_binary '¡L•[\ÚW+�',184,0,0,NULL,1,'2012-01-09 04:22:33','a1c6b5',264,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(514,1,_binary '¡L•[\ÚW+�',185,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,265,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'18',NULL,NULL,NULL,NULL,'size','128',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(515,1,_binary '¡L•[\ÚW+�',185,0,0,NULL,1,'2012-01-09 05:22:33','a1c6b5',266,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(516,1,_binary '†\ò„4!1ú',186,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,267,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(517,1,_binary '†\ò„4!1ú',186,0,0,NULL,1,'2012-01-09 01:22:33','a1c6b5',231,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(518,1,_binary '†\ò„4!1ú',187,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,268,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'20',NULL,NULL,NULL,NULL,'size','64',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(519,1,_binary '†\ò„4!1ú',187,0,0,NULL,1,'2012-01-09 02:22:33','a1c6b5',269,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(520,1,_binary '†\ò„4!1ú',188,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,270,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'21',NULL,NULL,NULL,NULL,'size','32',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(521,1,_binary '†\ò„4!1ú',188,0,0,NULL,1,'2012-01-09 03:22:33','a1c6b5',271,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(522,1,_binary '†\ò„4!1ú',189,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,272,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'22',NULL,NULL,NULL,NULL,'size','48',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(523,1,_binary '†\ò„4!1ú',189,0,0,NULL,1,'2012-01-09 04:22:33','a1c6b5',273,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(524,1,_binary '†\ò„4!1ú',190,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,274,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'23',NULL,NULL,NULL,NULL,'size','48',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(525,1,_binary '†\ò„4!1ú',190,0,0,NULL,1,'2012-01-09 05:22:33','a1c6b5',275,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(526,1,_binary 'Љڗ¹\äG',191,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,276,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(527,1,_binary 'Љڗ¹\äG',191,0,0,NULL,1,'2012-01-09 01:22:33','a1c6b5',231,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(528,1,_binary 'Љڗ¹\äG',192,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,277,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(529,1,_binary 'Љڗ¹\äG',192,0,0,NULL,1,'2012-01-09 02:22:33','a1c6b5',278,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(530,1,_binary 'Љڗ¹\äG',193,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,279,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(531,1,_binary 'Љڗ¹\äG',193,0,0,NULL,1,'2012-01-09 03:22:33','a1c6b5',280,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(532,1,_binary 'Љڗ¹\äG',194,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,281,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(533,1,_binary 'Љڗ¹\äG',194,0,0,NULL,1,'2012-01-09 04:22:33','a1c6b5',282,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(534,1,_binary 'Љڗ¹\äG',195,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,283,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'3',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(535,1,_binary 'Љڗ¹\äG',195,0,0,NULL,1,'2012-01-09 05:22:33','a1c6b5',284,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(536,1,_binary '=\\¿\íH\Î#\Ò',196,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,285,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(537,1,_binary '=\\¿\íH\Î#\Ò',196,0,0,NULL,1,'2012-01-09 01:22:33','a1c6b5',231,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(538,1,_binary '=\\¿\íH\Î#\Ò',197,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,286,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'5',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(539,1,_binary '=\\¿\íH\Î#\Ò',197,0,0,NULL,1,'2012-01-09 02:22:33','a1c6b5',287,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(540,1,_binary '=\\¿\íH\Î#\Ò',198,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,288,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'6',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(541,1,_binary '=\\¿\íH\Î#\Ò',198,0,0,NULL,1,'2012-01-09 03:22:33','a1c6b5',289,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(542,1,_binary '=\\¿\íH\Î#\Ò',199,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,290,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'7',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(543,1,_binary '=\\¿\íH\Î#\Ò',199,0,0,NULL,1,'2012-01-09 04:22:33','a1c6b5',291,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(544,1,_binary '=\\¿\íH\Î#\Ò',200,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,292,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'8',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(545,1,_binary '=\\¿\íH\Î#\Ò',200,0,0,NULL,1,'2012-01-09 05:22:33','a1c6b5',293,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(546,1,_binary '\ä^\Ô4\0^',201,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,294,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(547,1,_binary '\ä^\Ô4\0^',201,0,0,NULL,1,'2012-01-09 01:22:33','a1c6b5',231,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(548,1,_binary '\ä^\Ô4\0^',202,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,295,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'10',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(549,1,_binary '\ä^\Ô4\0^',202,0,0,NULL,1,'2012-01-09 02:22:33','a1c6b5',296,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(550,1,_binary '\ä^\Ô4\0^',203,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,297,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'11',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(551,1,_binary '\ä^\Ô4\0^',203,0,0,NULL,1,'2012-01-09 03:22:33','a1c6b5',298,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(552,1,_binary '\ä^\Ô4\0^',204,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,299,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'12',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(553,1,_binary '\ä^\Ô4\0^',204,0,0,NULL,1,'2012-01-09 04:22:33','a1c6b5',300,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(554,1,_binary '\ä^\Ô4\0^',205,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,301,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'13',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(555,1,_binary '\ä^\Ô4\0^',205,0,0,NULL,1,'2012-01-09 05:22:33','a1c6b5',302,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(556,1,_binary '\Öú+\ë0$‘',206,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,303,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(557,1,_binary '\Öú+\ë0$‘',206,0,0,NULL,1,'2012-01-09 01:22:33','a1c6b5',231,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(558,1,_binary '\Öú+\ë0$‘',207,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,304,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'15',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(559,1,_binary '\Öú+\ë0$‘',207,0,0,NULL,1,'2012-01-09 02:22:33','a1c6b5',305,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(560,1,_binary '\Öú+\ë0$‘',208,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,306,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'16',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(561,1,_binary '\Öú+\ë0$‘',208,0,0,NULL,1,'2012-01-09 03:22:33','a1c6b5',307,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(562,1,_binary '\Öú+\ë0$‘',209,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,308,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'17',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(563,1,_binary '\Öú+\ë0$‘',209,0,0,NULL,1,'2012-01-09 04:22:33','a1c6b5',309,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(564,1,_binary '\Öú+\ë0$‘',210,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,310,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'18',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(565,1,_binary '\Öú+\ë0$‘',210,0,0,NULL,1,'2012-01-09 05:22:33','a1c6b5',311,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(566,1,_binary '¾ˆ\nq\Ã',211,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,312,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(567,1,_binary '¾ˆ\nq\Ã',211,0,0,NULL,1,'2012-01-09 01:22:33','a1c6b5',231,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(568,1,_binary '¾ˆ\nq\Ã',212,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,313,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'20',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(569,1,_binary '¾ˆ\nq\Ã',212,0,0,NULL,1,'2012-01-09 02:22:33','a1c6b5',314,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(570,1,_binary '¾ˆ\nq\Ã',213,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,315,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'21',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(571,1,_binary '¾ˆ\nq\Ã',213,0,0,NULL,1,'2012-01-09 03:22:33','a1c6b5',316,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(572,1,_binary '¾ˆ\nq\Ã',214,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,317,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'22',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(573,1,_binary '¾ˆ\nq\Ã',214,0,0,NULL,1,'2012-01-09 04:22:33','a1c6b5',318,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(574,1,_binary '¾ˆ\nq\Ã',215,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,319,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'23',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(575,1,_binary '¾ˆ\nq\Ã',215,0,0,NULL,1,'2012-01-09 05:22:33','a1c6b5',320,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(576,1,_binary ']⢢> ;\î',216,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',324,321,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,322,323,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(577,1,_binary ']⢢> ;\î',217,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',324,325,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,322,323,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(578,1,_binary ']⢢> ;\î',218,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',324,326,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,322,323,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(579,1,_binary ']⢢> ;\î',219,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',324,327,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,322,323,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(580,1,_binary ']⢢> ;\î',220,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',324,328,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,322,323,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'3',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(581,1,_binary '»â®´\â[+\0',221,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',332,329,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,330,331,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(582,1,_binary '»â®´\â[+\0',222,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',332,333,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,330,331,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'5',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(583,1,_binary '»â®´\â[+\0',223,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',332,334,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,330,331,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'6',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(584,1,_binary '»â®´\â[+\0',224,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',332,335,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,330,331,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'7',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(585,1,_binary '»â®´\â[+\0',225,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',332,336,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,330,331,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'8',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(586,1,_binary '\Ô~i­ `\ôˆ',226,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',340,337,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,338,339,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(587,1,_binary '\Ô~i­ `\ôˆ',227,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',340,341,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,338,339,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'10',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(588,1,_binary '\Ô~i­ `\ôˆ',228,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',340,342,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,338,339,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'11',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(589,1,_binary '\Ô~i­ `\ôˆ',229,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',340,343,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,338,339,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'12',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(590,1,_binary '\Ô~i­ `\ôˆ',230,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',340,344,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,338,339,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'13',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(591,1,_binary 'T„�B(\èJ½',231,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',348,345,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,346,347,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(592,1,_binary 'T„�B(\èJ½',232,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',348,349,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,346,347,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'15',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(593,1,_binary 'T„�B(\èJ½',233,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',348,350,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,346,347,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'16',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(594,1,_binary 'T„�B(\èJ½',234,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',348,351,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,346,347,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'17',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(595,1,_binary 'T„�B(\èJ½',235,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',348,352,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,346,347,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'18',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(596,1,_binary '•»0ÿ\ì$;',236,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',356,353,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,354,355,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(597,1,_binary '•»0ÿ\ì$;',237,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',356,357,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,354,355,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'20',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(598,1,_binary '•»0ÿ\ì$;',238,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',356,358,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,354,355,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'21',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(599,1,_binary '•»0ÿ\ì$;',239,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',356,359,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,354,355,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'22',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(600,1,_binary '•»0ÿ\ì$;',240,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',356,360,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,354,355,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'23',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(601,1,_binary 'eqB\0\í:´',241,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,361,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,362,363,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(602,1,_binary 'eqB\0\í:´',241,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,361,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,362,363,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(603,1,_binary 'eqB\0\í:´',242,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,364,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,362,363,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(604,1,_binary 'eqB\0\í:´',242,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,364,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,362,363,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(605,1,_binary 'eqB\0\í:´',243,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,365,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,362,363,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(606,1,_binary 'eqB\0\í:´',243,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,365,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,362,363,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(607,1,_binary 'eqB\0\í:´',244,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,366,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,362,363,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(608,1,_binary 'eqB\0\í:´',244,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,366,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,362,363,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(609,1,_binary 'eqB\0\í:´',245,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,367,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,362,363,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'3',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(610,1,_binary 'eqB\0\í:´',245,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,367,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,362,363,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(611,1,_binary '3𞊯D',246,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,368,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,369,370,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(612,1,_binary '3𞊯D',247,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,371,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,369,370,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'5',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(613,1,_binary '3𞊯D',248,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,372,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,369,370,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'6',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(614,1,_binary '3𞊯D',249,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,373,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,369,370,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'7',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(615,1,_binary '3𞊯D',250,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,374,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,369,370,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'8',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(616,1,_binary '\í.<’\Ê\÷·',251,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,375,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,376,377,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(617,1,_binary '\í.<’\Ê\÷·',251,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,375,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,376,377,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(618,1,_binary '\í.<’\Ê\÷·',252,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,378,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,376,377,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'10',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(619,1,_binary '\í.<’\Ê\÷·',252,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,378,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,376,377,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(620,1,_binary '\í.<’\Ê\÷·',253,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,379,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,376,377,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'11',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(621,1,_binary '\í.<’\Ê\÷·',253,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,379,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,376,377,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(622,1,_binary '\í.<’\Ê\÷·',254,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,380,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,376,377,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'12',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(623,1,_binary '\í.<’\Ê\÷·',254,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,380,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,376,377,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(624,1,_binary '\í.<’\Ê\÷·',255,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,381,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,376,377,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'13',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(625,1,_binary '\í.<’\Ê\÷·',255,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,381,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,376,377,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(626,1,_binary '{\Ð\å\Ä袠',256,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,382,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,383,384,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(627,1,_binary '{\Ð\å\Ä袠',257,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,385,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,383,384,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'15',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(628,1,_binary '{\Ð\å\Ä袠',258,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,386,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,383,384,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'16',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(629,1,_binary '{\Ð\å\Ä袠',259,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,387,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,383,384,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'17',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(630,1,_binary '{\Ð\å\Ä袠',260,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,388,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,383,384,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'18',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(631,1,_binary 'rzbRG’\ï',261,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,389,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,390,391,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(632,1,_binary 'rzbRG’\ï',261,0,0,NULL,NULL,'2012-01-09 01:22:33','a1c6b5',NULL,389,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,390,391,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(633,1,_binary 'rzbRG’\ï',262,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,392,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,390,391,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'20',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(634,1,_binary 'rzbRG’\ï',262,0,0,NULL,NULL,'2012-01-09 02:22:33','a1c6b5',NULL,392,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,390,391,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(635,1,_binary 'rzbRG’\ï',263,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,393,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,390,391,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'21',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(636,1,_binary 'rzbRG’\ï',263,0,0,NULL,NULL,'2012-01-09 03:22:33','a1c6b5',NULL,393,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,390,391,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(637,1,_binary 'rzbRG’\ï',264,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,394,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,390,391,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'22',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(638,1,_binary 'rzbRG’\ï',264,0,0,NULL,NULL,'2012-01-09 04:22:33','a1c6b5',NULL,394,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,390,391,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(639,1,_binary 'rzbRG’\ï',265,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,395,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,390,391,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'23',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(640,1,_binary 'rzbRG’\ï',265,0,0,NULL,NULL,'2012-01-09 05:22:33','a1c6b5',NULL,395,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,90,390,391,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(641,1,_binary 'IoŠÿ¸¨›',266,0,0,NULL,1,'2010-01-04 01:22:33','70dd9b',396,0,NULL,NULL,0,397,NULL,NULL,NULL,NULL,398,7.5,399,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(642,1,_binary '£Ž\ÍM\"€ ',267,0,0,NULL,1,'2010-01-04 01:22:33','70246f',396,0,NULL,NULL,0,400,NULL,NULL,NULL,NULL,401,7.5,402,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(643,1,_binary 'eÞ«UŸ‡\ó;',268,0,0,NULL,1,'2010-01-04 01:22:33','6f6f4a',396,0,NULL,NULL,0,403,NULL,NULL,NULL,NULL,404,7.5,405,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(644,1,_binary '/\ä2µ\0}^ ',269,0,0,NULL,1,'2010-01-04 01:22:33','c51040',396,0,NULL,NULL,0,406,NULL,NULL,NULL,NULL,407,7.5,408,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(645,1,_binary 'Ò‘\\p,¾\æ\'',270,0,0,NULL,1,'2010-01-04 01:22:33','1d1eaa',396,0,NULL,NULL,0,409,NULL,NULL,NULL,NULL,410,7.5,411,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(646,1,_binary 'AFŠ­ºˆe',271,0,0,NULL,1,'2010-01-04 01:22:33','2d1087',396,0,NULL,NULL,0,397,NULL,NULL,NULL,NULL,412,7.5,413,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(647,1,_binary 'r¾Duÿ ±:',272,0,0,NULL,1,'2010-01-04 01:22:33','920ee1',396,0,NULL,NULL,0,400,NULL,NULL,NULL,NULL,414,7.5,415,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(648,1,_binary '—ƒ\ôv¡\Ý',273,0,0,NULL,1,'2010-01-04 01:22:33','305a1b',396,0,NULL,NULL,0,403,NULL,NULL,NULL,NULL,416,7.5,417,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(649,1,_binary '\Ø\ÛQûf‹‘@',274,0,0,NULL,1,'2010-01-04 01:22:33','698196',396,0,NULL,NULL,0,406,NULL,NULL,NULL,NULL,418,7.5,419,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(650,1,_binary '\ë„ý©7™',275,0,0,NULL,1,'2010-01-04 01:22:33','6b5b88',396,0,NULL,NULL,0,409,NULL,NULL,NULL,NULL,420,7.5,421,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(651,1,_binary '\\\Â4p\Ö',276,0,0,NULL,1,'2010-01-04 01:22:33','6ff1fc',396,0,NULL,NULL,0,397,NULL,NULL,NULL,NULL,422,7.5,423,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(652,1,_binary '7\Ü\Í]¡¾',277,0,0,NULL,1,'2010-01-04 01:22:33','dcf3b5',396,0,NULL,NULL,0,400,NULL,NULL,NULL,NULL,424,7.5,425,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(653,1,_binary '\ñ­(Ŧ]f…',278,0,0,NULL,1,'2010-01-04 01:22:33','b3f2a2',396,0,NULL,NULL,0,403,NULL,NULL,NULL,NULL,426,7.5,427,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(654,1,_binary 'œ–}!±\ç%�',279,0,0,NULL,1,'2010-01-04 01:22:33','d17224',396,0,NULL,NULL,0,406,NULL,NULL,NULL,NULL,428,7.5,429,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(655,1,_binary '\ô Æš·\ó†',280,0,0,NULL,1,'2010-01-04 01:22:33','423102',396,0,NULL,NULL,0,409,NULL,NULL,NULL,NULL,430,7.5,431,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(656,1,_binary 'KÒ¢Aû\×',281,0,0,NULL,1,'2010-01-04 01:22:33','70b2f8',396,0,NULL,NULL,0,397,NULL,NULL,NULL,NULL,432,7.5,433,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(657,1,_binary '\'b\å%�º”',282,0,0,NULL,1,'2010-01-04 01:22:33','fdcd46',396,0,NULL,NULL,0,400,NULL,NULL,NULL,NULL,434,7.5,435,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(658,1,_binary '˜\÷\ás7uc',283,0,0,NULL,1,'2010-01-04 01:22:33','913578',396,0,NULL,NULL,0,403,NULL,NULL,NULL,NULL,436,7.5,437,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(659,1,_binary '\Ûȵ9}1e\0',284,0,0,NULL,1,'2010-01-04 01:22:33','9a509c',396,0,NULL,NULL,0,406,NULL,NULL,NULL,NULL,438,7.5,439,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(660,1,_binary 'w\ë£ÿA\Ío',285,0,0,NULL,1,'2010-01-04 01:22:33','7fd384',396,0,NULL,NULL,0,409,NULL,NULL,NULL,NULL,440,7.5,441,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(661,1,_binary '¹~»t\'´a\å',286,0,0,NULL,1,'2010-01-04 01:22:33','ccac96',396,0,NULL,NULL,0,397,NULL,NULL,NULL,NULL,442,7.5,443,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(662,1,_binary 'PŸ¡X}y ',287,0,0,NULL,1,'2010-01-04 01:22:33','058dfd',396,0,NULL,NULL,0,400,NULL,NULL,NULL,NULL,444,7.5,445,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(663,1,_binary '–\ÙS¬\õ\Ö',288,0,0,NULL,1,'2010-01-04 01:22:33','efd020',396,0,NULL,NULL,0,403,NULL,NULL,NULL,NULL,446,7.5,447,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(664,1,_binary '�\á}ú§³\Õ\'',289,0,0,NULL,1,'2010-01-04 01:22:33','014a5e',396,0,NULL,NULL,0,406,NULL,NULL,NULL,NULL,448,7.5,449,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(665,1,_binary '´x^+”ˆ²',290,0,0,NULL,1,'2010-01-04 01:22:33','ae4454',396,0,NULL,NULL,0,409,NULL,NULL,NULL,NULL,450,7.5,451,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(666,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',455,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,453,454,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(667,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',457,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,456,347,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(668,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',458,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,322,355,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(669,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',460,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,330,459,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(670,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',461,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,338,323,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(671,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',462,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,346,331,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(672,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',463,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,354,339,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(673,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',466,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,464,465,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(674,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',469,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,467,468,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(675,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',472,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,470,471,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(676,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',475,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,473,474,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(677,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',478,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,476,477,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(678,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',481,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,479,480,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(679,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',484,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,482,483,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(680,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',487,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,485,486,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(681,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',490,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,488,489,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(682,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',493,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,491,492,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(683,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',496,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,494,495,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(684,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',499,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,497,498,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(685,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',502,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,500,501,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(686,1,_binary '�ÃŽúž\öû\Ú',291,0,0,NULL,NULL,'2015-02-03 00:00:00','',505,452,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,503,504,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(687,1,_binary 'û\Ú@F�\é:^',292,0,0,NULL,1,'2015-03-03 06:00:00','0cda62',506,507,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(688,1,_binary 'cwú³¨>\ß',293,0,0,NULL,1,'2015-03-03 06:00:00','3b74bd',508,509,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(689,1,_binary 'p“핱¥\ðc',293,509,508,NULL,2,'2015-03-03 06:00:00','4e2353',510,511,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(690,1,_binary '\0\í\Í\Ü À',293,511,510,NULL,3,'2015-03-03 06:00:00','2e729d',512,513,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(691,1,_binary 'Jp„G\'\\',293,513,512,NULL,4,'2015-03-03 06:00:00','1b8bc4',514,515,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(692,1,_binary 'Û´nƒA\Ô\0\Å',293,515,514,NULL,5,'2015-03-03 06:00:00','df3485',516,517,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(693,1,_binary '—9Q&ø†�—',293,517,516,NULL,6,'2015-03-03 06:00:00','abc76f',518,519,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(694,1,_binary '¯z2~\Ð',293,563,562,NULL,29,'2015-03-03 06:00:00','906f13',564,565,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(717,1,_binary 'Isˤ°Bý',293,565,564,NULL,30,'2015-03-03 06:00:00','809629',566,567,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(718,1,_binary '\Ì\Í\Ð\ïJ((',293,567,566,NULL,31,'2015-03-03 06:00:00','4fd807',568,569,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(719,1,_binary '*^tY_',293,569,568,NULL,32,'2015-03-03 06:00:00','c81e2e',570,571,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(720,1,_binary 'Nb.\ݧS',293,571,570,NULL,33,'2015-03-03 06:00:00','b5f4ad',572,573,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(721,1,_binary '\"ý\r}«Õ‰\æ',293,573,572,NULL,34,'2015-03-03 06:00:00','9f9017',574,575,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(722,1,_binary 'ÿ™+ª4\0',293,575,574,NULL,35,'2015-03-03 06:00:00','a28e1e',576,577,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(723,1,_binary '$\óž#ƒPù/',293,577,576,NULL,36,'2015-03-03 06:00:00','aebdc2',578,579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(724,1,_binary '¸.½ƒ\çÀ}',293,579,578,NULL,37,'2015-03-03 06:00:00','41d400',580,581,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(725,1,_binary '¯2Öœ6\ã\nŒ',293,581,580,NULL,38,'2015-03-03 06:00:00','74daf3',582,583,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(726,1,_binary '~¾\ñmÒ§5x',293,583,582,NULL,39,'2015-03-03 06:00:00','4d637b',584,585,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(727,1,_binary '\îwú8\Ð}\÷þ',293,585,584,NULL,40,'2015-03-03 06:00:00','db5770',586,587,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(728,1,_binary 'Ä™4\í\ð‚N',293,587,586,NULL,41,'2015-03-03 06:00:00','9f7fca',588,589,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(729,1,_binary '’|úG¡Z[',293,589,588,NULL,42,'2015-03-03 06:00:00','05fc78',590,591,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(730,1,_binary '†ƒ»S@]q7',293,591,590,NULL,43,'2015-03-03 06:00:00','851624',592,593,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(731,1,_binary 'eaº\ëV¾g',293,593,592,NULL,44,'2015-03-03 06:00:00','84dbad',594,595,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(732,1,_binary 'zªI\è³\Þ\Ý',293,595,594,NULL,45,'2015-03-03 06:00:00','2be1ac',596,597,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(733,1,_binary '|o!~ý&',293,597,596,NULL,46,'2015-03-03 06:00:00','f7716a',598,599,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(734,1,_binary '0œ>#\r\÷±',293,599,598,NULL,47,'2015-03-03 06:00:00','8e8783',600,601,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(735,1,_binary '%HL$Mÿe',293,601,600,NULL,48,'2015-03-03 06:00:00','594d47',602,603,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(736,1,_binary '\0\Ü6ª†\õ',293,603,602,NULL,49,'2015-03-03 06:00:00','6ffd64',604,605,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(737,1,_binary '°\Å\Ô1! ',293,605,604,NULL,50,'2015-03-03 06:00:00','112d18',606,607,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(738,1,_binary '\è|\ä³\é\ç\Û\Ä',293,607,606,NULL,51,'2015-03-03 06:00:00','98bf8d',608,609,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(739,1,_binary 'tS\å›Ì»\ä]',293,609,608,NULL,52,'2015-03-03 06:00:00','868d86',610,611,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(740,1,_binary '³Ÿ\0G2…\Ç',293,611,610,NULL,53,'2015-03-03 06:00:00','75a0f1',612,613,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(741,1,_binary '°*\Ú8\n_œ',293,613,612,NULL,54,'2015-03-03 06:00:00','b83e4c',614,615,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(742,1,_binary '†—�\ã�‚3',293,615,614,NULL,55,'2015-03-03 06:00:00','1f2ad1',616,617,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(743,1,_binary 'œÎŽššø \Ú',293,617,616,NULL,56,'2015-03-03 06:00:00','e25275',618,619,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(744,1,_binary '¦8�\Õ%ˆV\ë',293,619,618,NULL,57,'2015-03-03 06:00:00','2a2603',620,621,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(745,1,_binary '#\ïÊœ\ö•\Þc',293,621,620,NULL,58,'2015-03-03 06:00:00','1db719',622,623,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(746,1,_binary 'iÿ‹8',293,703,702,NULL,99,'2015-03-03 06:00:00','3eae97',704,705,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(787,1,_binary 'G\ÇN!^@\ç‚',293,705,704,NULL,100,'2015-03-03 06:00:00','50ae60',706,707,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(788,1,_binary '*f³Ê‘\ZÞ“',293,707,706,NULL,101,'2015-03-03 06:00:00','85b7d6',708,709,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(789,1,_binary '¹\ÎT\Ò\ï*C\ã',293,709,708,NULL,102,'2015-03-03 06:00:00','5a1f77',710,711,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(790,1,_binary '¼žŒÌšˆ',293,711,710,NULL,103,'2015-03-03 06:00:00','6f9c77',712,713,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(791,1,_binary 'I\Û\Z^Z\Â$',293,713,712,NULL,104,'2015-03-03 06:00:00','8d3ebc',714,715,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(792,1,_binary '\ó\ÛÊ bP±\Æ',293,715,714,NULL,105,'2015-03-03 06:00:00','ed4945',716,717,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(793,1,_binary '\Égª§\r\Û\í',293,717,716,NULL,106,'2015-03-03 06:00:00','e4d41a',718,719,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(794,1,_binary '\ðq\ó\ÎwÁ\íW',293,719,718,NULL,107,'2015-03-03 06:00:00','01d262',720,721,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(795,1,_binary 'Wšf¶¤j1',293,721,720,NULL,108,'2015-03-03 06:00:00','b04a91',722,723,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(796,1,_binary 'I)I\ÚW+�C',293,723,722,NULL,109,'2015-03-03 06:00:00','39d93a',724,725,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(797,1,_binary '?\÷ý|c',293,725,724,NULL,110,'2015-03-03 06:00:00','1ac9f7',726,727,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(798,1,_binary 'S4\èw\îÿ\Ñ/',293,727,726,NULL,111,'2015-03-03 06:00:00','879001',728,729,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(799,1,_binary '±½Ä°›¬\î',293,729,728,NULL,112,'2015-03-03 06:00:00','1f3059',730,731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(800,1,_binary '#VE\Þ?\ö\á\ö',293,731,730,NULL,113,'2015-03-03 06:00:00','57a1de',732,733,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(801,1,_binary 'î·ƒ·zx€<',293,733,732,NULL,114,'2015-03-03 06:00:00','e4f013',734,735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(802,1,_binary '\ì\Ìn\Ì[U\ô',293,735,734,NULL,115,'2015-03-03 06:00:00','1e7510',736,737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(803,1,_binary 'w(f0´0º;',293,737,736,NULL,116,'2015-03-03 06:00:00','b7ae72',738,739,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(804,1,_binary '$\å�\ôsþ',293,739,738,NULL,117,'2015-03-03 06:00:00','050616',740,741,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(805,1,_binary '}\Ú/¾\Ø\r)>',293,741,740,NULL,118,'2015-03-03 06:00:00','d2a1fa',742,743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(806,1,_binary '\ïÿQýŽy',293,743,742,NULL,119,'2015-03-03 06:00:00','f042c6',744,745,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(807,1,_binary ')¨Hϲ6',293,745,744,NULL,120,'2015-03-03 06:00:00','52e27b',746,747,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(808,1,_binary '�Ç´�=gqF',293,747,746,NULL,121,'2015-03-03 06:00:00','2895f8',748,749,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(809,1,_binary 'D?3Û�œP-',293,749,748,NULL,122,'2015-03-03 06:00:00','380c0d',750,751,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(810,1,_binary 'þ«< 1+¢¥',293,751,750,NULL,123,'2015-03-03 06:00:00','d25728',752,753,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(811,1,_binary '€•�9¢Ë¶',293,753,752,NULL,124,'2015-03-03 06:00:00','b7e918',754,755,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(812,1,_binary '\\\ÖÌ�T3 ',293,755,754,NULL,125,'2015-03-03 06:00:00','7210d2',756,757,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(813,1,_binary '+\ð›¹C`Œ',293,757,756,NULL,126,'2015-03-03 06:00:00','7c7518',758,759,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(814,1,_binary ']\ï\Ó\ëXdV\í',293,759,758,NULL,127,'2015-03-03 06:00:00','aae31d',760,761,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(815,1,_binary '²`+—ï',293,761,760,NULL,128,'2015-03-03 06:00:00','85f8fd',762,763,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(816,1,_binary '|›¯·GO',293,763,762,NULL,129,'2015-03-03 06:00:00','4787a9',764,765,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(817,1,_binary '\ñ\öB\Êde\Ö',293,765,764,NULL,130,'2015-03-03 06:00:00','823146',766,767,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(818,1,_binary 'LŠØŒ\ì\0І',293,767,766,NULL,131,'2015-03-03 06:00:00','7f36c6',768,769,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(819,1,_binary '\ã\ß\ßu\ãÙºb',293,769,768,NULL,132,'2015-03-03 06:00:00','d3b994',770,771,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(820,1,_binary 'x7„%…cþ',293,771,770,NULL,133,'2015-03-03 06:00:00','5b1588',772,773,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(821,1,_binary '£�\ê\æ8\Ó',293,773,772,NULL,134,'2015-03-03 06:00:00','593a17',774,775,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(822,1,_binary 'Í´Æ·e\Êÿ7',293,775,774,NULL,135,'2015-03-03 06:00:00','e1288b',776,777,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(823,1,_binary 'z\ë\ð\×\Û̓',293,777,776,NULL,136,'2015-03-03 06:00:00','44b1ed',778,779,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(824,1,_binary '8e\ó lj',293,779,778,NULL,137,'2015-03-03 06:00:00','4faab1',780,781,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(825,1,_binary 'KŸ¨¦E>0,',293,781,780,NULL,138,'2015-03-03 06:00:00','8098d6',782,783,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(826,1,_binary ']�_QO²]',293,783,782,NULL,139,'2015-03-03 06:00:00','251565',784,785,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(827,1,_binary '\Ím¬\0M\Æ',293,785,784,NULL,140,'2015-03-03 06:00:00','3dff9e',786,787,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(828,1,_binary 'O—?M„—\ìˆ',293,787,786,NULL,141,'2015-03-03 06:00:00','0a407b',788,789,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(829,1,_binary '¡2¢\ä\Ý\Òh',293,789,788,NULL,142,'2015-03-03 06:00:00','16f57f',790,791,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(830,1,_binary '\ÒÌŠ}Íš£¹',293,791,790,NULL,143,'2015-03-03 06:00:00','6e6723',792,793,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(831,1,_binary '0ž\Û2�Š\Ê',293,793,792,NULL,144,'2015-03-03 06:00:00','fd3758',794,795,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(832,1,_binary 'k–ˆG�ÿ',293,795,794,NULL,145,'2015-03-03 06:00:00','51cda1',796,797,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(833,1,_binary '\ðúmQ\ìE',293,797,796,NULL,146,'2015-03-03 06:00:00','f398d0',798,799,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(834,1,_binary '\òpœ�(\Ó\Ë\â',293,799,798,NULL,147,'2015-03-03 06:00:00','772711',800,801,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(835,1,_binary 'D\éMoRu',293,801,800,NULL,148,'2015-03-03 06:00:00','5f5c8a',802,803,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(836,1,_binary 'g¢³¡cQ`%',293,803,802,NULL,149,'2015-03-03 06:00:00','037366',804,805,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(837,1,_binary '>2NA\Õ',293,805,804,NULL,150,'2015-03-03 06:00:00','fe71e8',806,807,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(838,1,_binary 'šU·=NG3,',293,807,806,NULL,151,'2015-03-03 06:00:00','798a1b',808,809,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(839,1,_binary '\óÁѳ�³?',293,809,808,NULL,152,'2015-03-03 06:00:00','416523',810,811,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(840,1,_binary 'ùW …ƒ§\âž',293,811,810,NULL,153,'2015-03-03 06:00:00','8f3165',812,813,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(841,1,_binary 'lU\ïÀ\ã¤{.',293,813,812,NULL,154,'2015-03-03 06:00:00','81a804',814,815,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(842,1,_binary 'P˜¸Vœ¢\ò',293,815,814,NULL,155,'2015-03-03 06:00:00','b1d99e',816,817,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(843,1,_binary '¥¬\öT,ùG(',293,817,816,NULL,156,'2015-03-03 06:00:00','4a7ea1',818,819,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(844,1,_binary '�SЭ«kt',293,819,818,NULL,157,'2015-03-03 06:00:00','b8166e',820,821,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(845,1,_binary '\Õ\áļuOP§',293,821,820,NULL,158,'2015-03-03 06:00:00','c3f307',822,823,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(846,1,_binary ',,\Ö‰Á¤',293,823,822,NULL,159,'2015-03-03 06:00:00','d3fb0f',824,825,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(847,1,_binary '¨8i\ó\ô†\Ð',293,825,824,NULL,160,'2015-03-03 06:00:00','bfbe41',826,827,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(848,1,_binary 'ûÀm\í:º¼',293,827,826,NULL,161,'2015-03-03 06:00:00','cee3b4',828,829,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(849,1,_binary 'Ÿ€\é\r\n¡˜q',293,829,828,NULL,162,'2015-03-03 06:00:00','3e0b47',830,831,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(850,1,_binary '\\û\àP\Ó\Ý\n',293,831,830,NULL,163,'2015-03-03 06:00:00','5f201c',832,833,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(851,1,_binary '\×\Ñs\×UZ',293,833,832,NULL,164,'2015-03-03 06:00:00','59c201',834,835,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(852,1,_binary 'ĸ\ëIrÀ2g',293,835,834,NULL,165,'2015-03-03 06:00:00','332c71',836,837,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(853,1,_binary '\×h�\Ô2Uý',293,837,836,NULL,166,'2015-03-03 06:00:00','77c51d',838,839,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(854,1,_binary '`›\ò\ÂHý)',293,839,838,NULL,167,'2015-03-03 06:00:00','6bbe99',840,841,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(855,1,_binary 'ÿ3Z\Äd\Ø2§',293,841,840,NULL,168,'2015-03-03 06:00:00','1a4a1b',842,843,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(856,1,_binary '\ô’\ë/\Ë\ï',293,843,842,NULL,169,'2015-03-03 06:00:00','c048a1',844,845,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(857,1,_binary '<\Ú\Ò\n±)\î',293,845,844,NULL,170,'2015-03-03 06:00:00','9810cb',846,847,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(858,1,_binary '\éª>-\Ç9\È',293,847,846,NULL,171,'2015-03-03 06:00:00','9dacfe',848,849,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(859,1,_binary 'ýk±½ÑªL“',293,849,848,NULL,172,'2015-03-03 06:00:00','4db28d',850,851,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(860,1,_binary 'L¤_ ~nS',293,851,850,NULL,173,'2015-03-03 06:00:00','8c3fe0',852,853,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(861,1,_binary 'ѱCœ ¸\Çz',293,853,852,NULL,174,'2015-03-03 06:00:00','4c00c0',854,855,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(862,1,_binary 'Àয\öL}R',293,855,854,NULL,175,'2015-03-03 06:00:00','04929d',856,857,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(863,1,_binary 'ýjŠR«¾Œ\'',293,857,856,NULL,176,'2015-03-03 06:00:00','02b51d',858,859,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(864,1,_binary '™K\ÙU\ó\ôZZ',293,859,858,NULL,177,'2015-03-03 06:00:00','da2562',860,861,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(865,1,_binary 'b�\ç$ª™\Í',293,861,860,NULL,178,'2015-03-03 06:00:00','f813a0',862,863,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(866,1,_binary '~s%œ\"\ô½g',293,863,862,NULL,179,'2015-03-03 06:00:00','cd778b',864,865,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(867,1,_binary 'T\ð\0\ä/9?²',293,865,864,NULL,180,'2015-03-03 06:00:00','057975',866,867,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(868,1,_binary '1#AXs\êT\r',293,867,866,NULL,181,'2015-03-03 06:00:00','75924d',868,869,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(869,1,_binary '¢0°.1\ï(@',293,869,868,NULL,182,'2015-03-03 06:00:00','2caaad',870,871,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(870,1,_binary '\ñ ?\ä#ý>°',293,871,870,NULL,183,'2015-03-03 06:00:00','ae0cc4',872,873,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(871,1,_binary '˜\ò\êá™»V',293,873,872,NULL,184,'2015-03-03 06:00:00','cac708',874,875,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(872,1,_binary 'b\ã †µ<$',293,875,874,NULL,185,'2015-03-03 06:00:00','be0855',876,877,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(873,1,_binary 'þ\Ïצ¼»§’',293,877,876,NULL,186,'2015-03-03 06:00:00','e7e8b0',878,879,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(874,1,_binary '\âhB\ÙŒ«',293,879,878,NULL,187,'2015-03-03 06:00:00','2cb29e',880,881,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(875,1,_binary '€\àŸ\Úz¿©˜',293,881,880,NULL,188,'2015-03-03 06:00:00','96cff7',882,883,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(876,1,_binary 'g|\É-GFh.',293,883,882,NULL,189,'2015-03-03 06:00:00','43c115',884,885,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(877,1,_binary '–k–ø«EI',293,885,884,NULL,190,'2015-03-03 06:00:00','51513a',886,887,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(878,1,_binary ':\n\Äm\Z\\Q',293,887,886,NULL,191,'2015-03-03 06:00:00','333b92',888,889,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(879,1,_binary 'µ Ü»\Å \Öa',293,889,888,NULL,192,'2015-03-03 06:00:00','b423bd',890,891,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(880,1,_binary 'ú\ÅG\ÊG�\à«',293,891,890,NULL,193,'2015-03-03 06:00:00','f9d744',892,893,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(881,1,_binary '=\ßt•\Öw“Y',293,893,892,NULL,194,'2015-03-03 06:00:00','7ff81d',894,895,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(882,1,_binary 'ÿn\Ù\'_\òk',293,895,894,NULL,195,'2015-03-03 06:00:00','666708',896,897,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(883,1,_binary '¨Ý‘gYa\Ù',293,897,896,NULL,196,'2015-03-03 06:00:00','ba0a36',898,899,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(884,1,_binary 'n\í\á7|S',293,899,898,NULL,197,'2015-03-03 06:00:00','e5344c',900,901,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(885,1,_binary '\ë>BˆCj\Ý,',293,901,900,NULL,198,'2015-03-03 06:00:00','b9313f',902,903,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(886,1,_binary '­ ´±¼t\é',293,903,902,NULL,199,'2015-03-03 06:00:00','265ea4',904,905,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(887,1,_binary '\ñG\Ë\ð`}\Ì',293,905,904,NULL,200,'2015-03-03 06:00:00','b139ef',906,907,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(888,1,_binary 'ˆ1Čۯ\áƒ',293,907,906,NULL,201,'2015-03-03 06:00:00','933215',908,909,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(889,1,_binary 'L«ºDo�u¡',293,909,908,NULL,202,'2015-03-03 06:00:00','998c42',910,911,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(890,1,_binary '\ôÝ£Te“¾',293,911,910,NULL,203,'2015-03-03 06:00:00','bfbd3d',912,913,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(891,1,_binary 'Ug-\r\Ë1\Ê',293,913,912,NULL,204,'2015-03-03 06:00:00','0a4416',914,915,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(892,1,_binary '‘ ”ÝŠ\èF”',293,915,914,NULL,205,'2015-03-03 06:00:00','53503a',916,917,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(893,1,_binary '¿¿mj$dŠ•',293,917,916,NULL,206,'2015-03-03 06:00:00','4112c8',918,919,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(894,1,_binary '\Ü\ïÙ€‡\î&',293,919,918,NULL,207,'2015-03-03 06:00:00','0cd14d',920,921,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(895,1,_binary '\"\êT\äüM',293,921,920,NULL,208,'2015-03-03 06:00:00','8da12e',922,923,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(896,1,_binary 'iŸp¾\Z}h',293,923,922,NULL,209,'2015-03-03 06:00:00','5a3ea1',924,925,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(897,1,_binary '6T\ö\ë\ÙHÜŠ',293,925,924,NULL,210,'2015-03-03 06:00:00','310fb8',926,927,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(898,1,_binary '´„j¤4\Ì',293,927,926,NULL,211,'2015-03-03 06:00:00','e6d536',928,929,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(899,1,_binary '¼\ë·Y‹*š,',293,929,928,NULL,212,'2015-03-03 06:00:00','c8d1d9',930,931,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(900,1,_binary 'L=\âS,ˆX¬',293,931,930,NULL,213,'2015-03-03 06:00:00','f15c9b',932,933,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(901,1,_binary '\Õ\Ü\â‚/’½½',293,933,932,NULL,214,'2015-03-03 06:00:00','263aa7',934,935,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(902,1,_binary '¤ÿ9\Í\å Q',293,935,934,NULL,215,'2015-03-03 06:00:00','da6e62',936,937,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(903,1,_binary '\×\éV‰®”³o',293,937,936,NULL,216,'2015-03-03 06:00:00','11e783',938,939,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(904,1,_binary 'k\á�3&4®™',293,939,938,NULL,217,'2015-03-03 06:00:00','979495',940,941,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(905,1,_binary '#ͼ\ÂY�',293,941,940,NULL,218,'2015-03-03 06:00:00','e99612',942,943,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(906,1,_binary '\ËS¹\ç\Èj§',293,943,942,NULL,219,'2015-03-03 06:00:00','5f9e37',944,945,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(907,1,_binary 'w\å@\à ,E',293,945,944,NULL,220,'2015-03-03 06:00:00','598452',946,947,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(908,1,_binary 'hž\'ʦ\ì',293,947,946,NULL,221,'2015-03-03 06:00:00','4e71f5',948,949,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(909,1,_binary 'ì–£MS\ó˜',293,949,948,NULL,222,'2015-03-03 06:00:00','8425e1',950,951,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(910,1,_binary '\Ì\\ø\È\Ùûý',293,951,950,NULL,223,'2015-03-03 06:00:00','54bf28',952,953,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(911,1,_binary 'm\Ñ[ÀÒ”\Õ',293,953,952,NULL,224,'2015-03-03 06:00:00','b738b3',954,955,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(912,1,_binary '‚}ù«OÖ¥',293,955,954,NULL,225,'2015-03-03 06:00:00','9ed359',956,957,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(913,1,_binary 'ˆ!\Z\ß;ƒ¡6',293,957,956,NULL,226,'2015-03-03 06:00:00','8b72d5',958,959,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(914,1,_binary '¥ÖŒŽmÿ\ìT',293,959,958,NULL,227,'2015-03-03 06:00:00','662a30',960,961,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(915,1,_binary '\0ûºÿ0',293,961,960,NULL,228,'2015-03-03 06:00:00','0c086b',962,963,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(916,1,_binary 'L\ë\óan\Ã',293,963,962,NULL,229,'2015-03-03 06:00:00','d6f6a6',964,965,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(917,1,_binary '?ÀSO/\Ç\Ï\Â',293,965,964,NULL,230,'2015-03-03 06:00:00','71caed',966,967,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(918,1,_binary '/Lm\óÒ“\Ô',293,967,966,NULL,231,'2015-03-03 06:00:00','7fae8b',968,969,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(919,1,_binary '˳\ñ.lú€)',293,969,968,NULL,232,'2015-03-03 06:00:00','ac91ea',970,971,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(920,1,_binary '7HfO\éw  ',293,971,970,NULL,233,'2015-03-03 06:00:00','c81a0b',972,973,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(921,1,_binary ' f\ÝR·é¡‹',293,973,972,NULL,234,'2015-03-03 06:00:00','554ce9',974,975,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(922,1,_binary '\\·- ¾<ºý',293,975,974,NULL,235,'2015-03-03 06:00:00','2eb75b',976,977,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(923,1,_binary '¹©¹&Uû\Ë+',293,977,976,NULL,236,'2015-03-03 06:00:00','759f52',978,979,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(924,1,_binary '‹,z8Fd\Å',293,979,978,NULL,237,'2015-03-03 06:00:00','97e653',980,981,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(925,1,_binary 'P\Ö0úkø¸',293,981,980,NULL,238,'2015-03-03 06:00:00','4ae7e9',982,983,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(926,1,_binary 'x’ »n\\',293,983,982,NULL,239,'2015-03-03 06:00:00','41c3c0',984,985,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(927,1,_binary '½U“\'0 ',293,985,984,NULL,240,'2015-03-03 06:00:00','a22abc',986,987,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(928,1,_binary '\ÊoÊ‹‚Œ¡!',293,987,986,NULL,241,'2015-03-03 06:00:00','477119',988,989,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(929,1,_binary '?j ž?¼S\ô',293,989,988,NULL,242,'2015-03-03 06:00:00','db28e6',990,991,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(930,1,_binary 'ŠPT &\ä\n',293,991,990,NULL,243,'2015-03-03 06:00:00','c27a58',992,993,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(931,1,_binary '¶b\r+ÄI',293,993,992,NULL,244,'2015-03-03 06:00:00','ebad84',994,995,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(932,1,_binary '\n\ÍgjPk�',293,995,994,NULL,245,'2015-03-03 06:00:00','171c86',996,997,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(933,1,_binary 'L�M¼^\Æ',293,997,996,NULL,246,'2015-03-03 06:00:00','89d9a1',998,999,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(934,1,_binary ' f�Ü›P‘\Ï',293,999,998,NULL,247,'2015-03-03 06:00:00','69e98c',1000,1001,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(935,1,_binary '-Á*=GB>',293,1001,1000,NULL,248,'2015-03-03 06:00:00','7f8643',1002,1003,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(936,1,_binary 'j¤[|\Ì\Ô<',293,1003,1002,NULL,249,'2015-03-03 06:00:00','a45e11',1004,1005,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(937,1,_binary '\Ç6×¹µt\ö',293,1005,1004,NULL,250,'2015-03-03 06:00:00','83f1f0',1006,1007,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(938,1,_binary '&Ï�\É\ÓÿÚ¨',293,1007,1006,NULL,251,'2015-03-03 06:00:00','af6467',1008,1009,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(939,1,_binary '˜~\ÆNNKŽ\Í',293,1009,1008,NULL,252,'2015-03-03 06:00:00','68b1ae',1010,1011,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(940,1,_binary 'ûndffºR',293,1011,1010,NULL,253,'2015-03-03 06:00:00','32a02a',1012,1013,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(941,1,_binary 'e4A½�gQ(',293,1013,1012,NULL,254,'2015-03-03 06:00:00','91a313',1014,1015,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(942,1,_binary 'ؼt^\Ð@£',293,1015,1014,NULL,255,'2015-03-03 06:00:00','533a05',1016,1017,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(943,1,_binary '¥U“\ÂÒ…',293,1017,1016,NULL,256,'2015-03-03 06:00:00','3c5aab',1018,1019,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(944,1,_binary 'WPkÀ||',293,1019,1018,NULL,257,'2015-03-03 06:00:00','c5fd54',1020,1021,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(945,1,_binary 'Ž‘6>{¥=',293,1021,1020,NULL,258,'2015-03-03 06:00:00','f5f7b0',1022,1023,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(946,1,_binary 'T”$\nL\à',293,1023,1022,NULL,259,'2015-03-03 06:00:00','8f995c',1024,1025,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(947,1,_binary 'X£\ô\Æo@=',293,1025,1024,NULL,260,'2015-03-03 06:00:00','541331',1026,1027,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(948,1,_binary ';0\Ëý£`',293,1027,1026,NULL,261,'2015-03-03 06:00:00','01adcb',1028,1029,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(949,1,_binary 'ù-\ë8ºX',293,1029,1028,NULL,262,'2015-03-03 06:00:00','1013db',1030,1031,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(950,1,_binary ')\ÌÑ—.»ø±',293,1031,1030,NULL,263,'2015-03-03 06:00:00','019cbd',1032,1033,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(951,1,_binary '6©`þŽŸ',293,1033,1032,NULL,264,'2015-03-03 06:00:00','e1f369',1034,1035,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(952,1,_binary 'ý^þLA·›´',293,1035,1034,NULL,265,'2015-03-03 06:00:00','3f825e',1036,1037,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(953,1,_binary '3&=‰C1\ó',293,1037,1036,NULL,266,'2015-03-03 06:00:00','87d99d',1038,1039,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(954,1,_binary '\Æ\ôq]?§\å\ð',293,1039,1038,NULL,267,'2015-03-03 06:00:00','ace177',1040,1041,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(955,1,_binary '\n \0’m‰5',293,1041,1040,NULL,268,'2015-03-03 06:00:00','bc847a',1042,1043,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(956,1,_binary '\Ñ\óQaºš\"\Ç',293,1043,1042,NULL,269,'2015-03-03 06:00:00','b0b6f0',1044,1045,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(957,1,_binary '>a}@`\ë',293,1045,1044,NULL,270,'2015-03-03 06:00:00','10bba0',1046,1047,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(958,1,_binary 'm;K¼Šxc¸',293,1047,1046,NULL,271,'2015-03-03 06:00:00','c70e5d',1048,1049,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(959,1,_binary '9\Ö%!4\"\Æ\â',293,1049,1048,NULL,272,'2015-03-03 06:00:00','320ed1',1050,1051,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(960,1,_binary '¡rW›Ë�ª£',293,1051,1050,NULL,273,'2015-03-03 06:00:00','95fc5a',1052,1053,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(961,1,_binary 'Hœ\ô\ÊG\â',293,1053,1052,NULL,274,'2015-03-03 06:00:00','0c537a',1054,1055,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(962,1,_binary '\ÐAL;\ÎbK<',293,1055,1054,NULL,275,'2015-03-03 06:00:00','737f4c',1056,1057,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(963,1,_binary 'D\÷F2\ÕÀ\Ï\ò',293,1057,1056,NULL,276,'2015-03-03 06:00:00','a0c173',1058,1059,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(964,1,_binary '(Yû´u‚>\Î',293,1059,1058,NULL,277,'2015-03-03 06:00:00','45128b',1060,1061,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(965,1,_binary 'N\Æ]€\ÄO\ÅD',293,1061,1060,NULL,278,'2015-03-03 06:00:00','899681',1062,1063,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(966,1,_binary ' dc•\õ\Ï',293,1063,1062,NULL,279,'2015-03-03 06:00:00','c90a24',1064,1065,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(967,1,_binary 't\Z`\÷:n',293,1065,1064,NULL,280,'2015-03-03 06:00:00','28d395',1066,1067,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(968,1,_binary '��\ÒÀR\ãÍ”',293,1067,1066,NULL,281,'2015-03-03 06:00:00','558f2c',1068,1069,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(969,1,_binary '\ÃþPz‚„a',293,1069,1068,NULL,282,'2015-03-03 06:00:00','778bc4',1070,1071,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(970,1,_binary 'BA5T�1™\Ý',293,1071,1070,NULL,283,'2015-03-03 06:00:00','cf2603',1072,1073,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(971,1,_binary '’Ÿ/\æ\à¶ ‘',293,1073,1072,NULL,284,'2015-03-03 06:00:00','0b12b2',1074,1075,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(972,1,_binary '\Ø ˜\ð\è',293,1075,1074,NULL,285,'2015-03-03 06:00:00','a13e14',1076,1077,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(973,1,_binary 'û#\Ü\ð\î?',293,1077,1076,NULL,286,'2015-03-03 06:00:00','fbb695',1078,1079,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(974,1,_binary '9\âQ\Ä\ÖúŒ',293,1079,1078,NULL,287,'2015-03-03 06:00:00','ebd1b3',1080,1081,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(975,1,_binary '4\à�s@%\0r',293,1081,1080,NULL,288,'2015-03-03 06:00:00','1ec588',1082,1083,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(976,1,_binary '\ÅZd‹6x§',293,1083,1082,NULL,289,'2015-03-03 06:00:00','46f60f',1084,1085,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(977,1,_binary '*,\ÈG¦Q^¿',293,1085,1084,NULL,290,'2015-03-03 06:00:00','701a1c',1086,1087,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(978,1,_binary '>. 2\Ý',293,1087,1086,NULL,291,'2015-03-03 06:00:00','26ca8c',1088,1089,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(979,1,_binary ']\éi\Ö®5',293,1089,1088,NULL,292,'2015-03-03 06:00:00','237069',1090,1091,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(980,1,_binary 'L\í\é\ä²5­™',293,1091,1090,NULL,293,'2015-03-03 06:00:00','e49f6c',1092,1093,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(981,1,_binary '\ð\ÞV–ñ¾ž•',293,1093,1092,NULL,294,'2015-03-03 06:00:00','b17b4a',1094,1095,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(982,1,_binary 'cqe-\Û~h',293,1095,1094,NULL,295,'2015-03-03 06:00:00','378d21',1096,1097,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(983,1,_binary '“°ºimG',293,1097,1096,NULL,296,'2015-03-03 06:00:00','ee8ffc',1098,1099,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(984,1,_binary 'U¾)\Å\à\ô3ƒ',293,1099,1098,NULL,297,'2015-03-03 06:00:00','d05452',1100,1101,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(985,1,_binary 'u„]’ \ï\ì',293,1101,1100,NULL,298,'2015-03-03 06:00:00','06c608',1102,1103,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(986,1,_binary '8\çVq\'\n%µ',293,1103,1102,NULL,299,'2015-03-03 06:00:00','3d3d58',1104,1105,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(987,1,_binary 's¢J|\ÈHû',293,1281,1280,NULL,388,'2015-03-03 06:00:00','c0808b',1282,1283,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1076,1,_binary '³1’ŸÌŒ\Ø',293,1283,1282,NULL,389,'2015-03-03 06:00:00','9ee096',1284,1285,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1077,1,_binary '\íM˜\ØÕŒ',293,1285,1284,NULL,390,'2015-03-03 06:00:00','3aa6c4',1286,1287,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1078,1,_binary '§ˆ&~sû²´',293,1287,1286,NULL,391,'2015-03-03 06:00:00','839a16',1288,1289,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1079,1,_binary 'Bº Ÿ-\î\ê',293,1289,1288,NULL,392,'2015-03-03 06:00:00','14a6d2',1290,1291,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1080,1,_binary 'N;”¸¦b4ƒ',293,1291,1290,NULL,393,'2015-03-03 06:00:00','f0b858',1292,1293,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1081,1,_binary '‡�\0Bx\')',293,1293,1292,NULL,394,'2015-03-03 06:00:00','f1b9fb',1294,1295,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1082,1,_binary 'q.%¯Ñ‰\Û\Ò',293,1295,1294,NULL,395,'2015-03-03 06:00:00','ad71c8',1296,1297,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1083,1,_binary '\àªû„­²\ä\ö',293,1297,1296,NULL,396,'2015-03-03 06:00:00','22ef48',1298,1299,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1084,1,_binary 'µ\óS-¥i\ó',293,1299,1298,NULL,397,'2015-03-03 06:00:00','210fc1',1300,1301,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1085,1,_binary '–�Qû¯\0',293,1301,1300,NULL,398,'2015-03-03 06:00:00','0fb69e',1302,1303,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1086,1,_binary '\ÃP.–G²',293,1303,1302,NULL,399,'2015-03-03 06:00:00','80a750',1304,1305,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1087,1,_binary '8\ô_E(x‘a',293,1305,1304,NULL,400,'2015-03-03 06:00:00','c919e7',1306,1307,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1088,1,_binary 'e•\Ô\÷ƒQ\Õ',293,1307,1306,NULL,401,'2015-03-03 06:00:00','1a913e',1308,1309,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1089,1,_binary 'Cr\å\ñ\é+ü',293,1309,1308,NULL,402,'2015-03-03 06:00:00','fe92f6',1310,1311,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1090,1,_binary '}#�kx\èû',293,1311,1310,NULL,403,'2015-03-03 06:00:00','912f32',1312,1313,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1091,1,_binary 'ëƒ�Gf\ç&ˆ',293,1313,1312,NULL,404,'2015-03-03 06:00:00','2106e7',1314,1315,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1092,1,_binary 'vBÁ©\óŒ',293,1315,1314,NULL,405,'2015-03-03 06:00:00','d3aca1',1316,1317,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1093,1,_binary '½7Ûµ{ \Æ\â',293,1317,1316,NULL,406,'2015-03-03 06:00:00','20bbfa',1318,1319,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1094,1,_binary '\ÍÒ­À\ð2-',293,1319,1318,NULL,407,'2015-03-03 06:00:00','cec866',1320,1321,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1095,1,_binary '�\Î\á\É?­#',293,1321,1320,NULL,408,'2015-03-03 06:00:00','ce15c0',1322,1323,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1096,1,_binary 'G\É1°\Ý\ÔgT',293,1323,1322,NULL,409,'2015-03-03 06:00:00','20e42a',1324,1325,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1097,1,_binary '\Îe{\Î\Ýt–T',293,1325,1324,NULL,410,'2015-03-03 06:00:00','b8c03a',1326,1327,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1098,1,_binary '}\Ñt®\åS7R',293,1327,1326,NULL,411,'2015-03-03 06:00:00','75bad2',1328,1329,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1099,1,_binary 'Ò‡`Z\Ï\ç¢y',293,1329,1328,NULL,412,'2015-03-03 06:00:00','701337',1330,1331,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1100,1,_binary 'K\Òj\Îsu£i',293,1331,1330,NULL,413,'2015-03-03 06:00:00','cbe978',1332,1333,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1101,1,_binary ' º(_q�•\á',293,1333,1332,NULL,414,'2015-03-03 06:00:00','3584e5',1334,1335,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1102,1,_binary '–)ü‰”bH',293,1335,1334,NULL,415,'2015-03-03 06:00:00','f66f68',1336,1337,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1103,1,_binary '.\ZÀ‹°­\õ7',293,1337,1336,NULL,416,'2015-03-03 06:00:00','d99c97',1338,1339,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1104,1,_binary 's&o-=',293,1339,1338,NULL,417,'2015-03-03 06:00:00','110872',1340,1341,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1105,1,_binary '\÷:±€ \éf\ò',293,1341,1340,NULL,418,'2015-03-03 06:00:00','0ee225',1342,1343,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1106,1,_binary '·]ø—”rYY',293,1343,1342,NULL,419,'2015-03-03 06:00:00','095025',1344,1345,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1107,1,_binary '“ C‘‰$Àº',293,1345,1344,NULL,420,'2015-03-03 06:00:00','d71583',1346,1347,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1108,1,_binary '\ã\Ô\ÂWh*',293,1347,1346,NULL,421,'2015-03-03 06:00:00','e32375',1348,1349,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1109,1,_binary '+¶±h“ný\n',293,1349,1348,NULL,422,'2015-03-03 06:00:00','817881',1350,1351,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1110,1,_binary '\ß\ó\î£,´X',293,1351,1350,NULL,423,'2015-03-03 06:00:00','3249c7',1352,1353,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1111,1,_binary 'ú\Ô\ÊZ\ZJz\ò',293,1353,1352,NULL,424,'2015-03-03 06:00:00','7e4c8c',1354,1355,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1112,1,_binary 'a›ž\èî¿�\ð',293,1355,1354,NULL,425,'2015-03-03 06:00:00','eaed46',1356,1357,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1113,1,_binary '“\rI\Þ&\Ü\Ìy',293,1357,1356,NULL,426,'2015-03-03 06:00:00','2362f9',1358,1359,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1114,1,_binary '\êª\Í\óo´\ñG',293,1359,1358,NULL,427,'2015-03-03 06:00:00','b81a8d',1360,1361,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1115,1,_binary '¤\åG9þ¸',293,1361,1360,NULL,428,'2015-03-03 06:00:00','04c523',1362,1363,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1116,1,_binary '\Ò|ü\ÞA}q',293,1363,1362,NULL,429,'2015-03-03 06:00:00','95ed30',1364,1365,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1117,1,_binary ' \r¼„mh\Å4',293,1365,1364,NULL,430,'2015-03-03 06:00:00','ccd767',1366,1367,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1118,1,_binary 'ƒº“\'\Ç',293,1367,1366,NULL,431,'2015-03-03 06:00:00','3287bd',1368,1369,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1119,1,_binary 'j  Gž3',293,1369,1368,NULL,432,'2015-03-03 06:00:00','5e2380',1370,1371,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1120,1,_binary '­¬%\×c+3A',293,1371,1370,NULL,433,'2015-03-03 06:00:00','4e19f9',1372,1373,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1121,1,_binary '\ä°ŽÆ­',293,1373,1372,NULL,434,'2015-03-03 06:00:00','44571b',1374,1375,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1122,1,_binary 'P[™ =Ë¥]',293,1375,1374,NULL,435,'2015-03-03 06:00:00','013030',1376,1377,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1123,1,_binary '5\Ó3|\ö\Ñ(',293,1377,1376,NULL,436,'2015-03-03 06:00:00','a53480',1378,1379,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1124,1,_binary '¤‚…\Þx\Ý\×ø',293,1379,1378,NULL,437,'2015-03-03 06:00:00','1f49e9',1380,1381,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1125,1,_binary 'sX‡\ð‹\ç',293,1381,1380,NULL,438,'2015-03-03 06:00:00','5fad3d',1382,1383,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1126,1,_binary '{HŠ—f\á',293,1383,1382,NULL,439,'2015-03-03 06:00:00','32b7aa',1384,1385,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1127,1,_binary '*\çbc\Ôýv',293,1385,1384,NULL,440,'2015-03-03 06:00:00','42fa15',1386,1387,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1128,1,_binary '-\Ï\Ä\ÓÉŽ”',293,1387,1386,NULL,441,'2015-03-03 06:00:00','0488a8',1388,1389,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1129,1,_binary 'Tþ�\Ìt/\õ',293,1389,1388,NULL,442,'2015-03-03 06:00:00','30084e',1390,1391,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1130,1,_binary 'm¢ü\é»Z\ä]',293,1391,1390,NULL,443,'2015-03-03 06:00:00','40ff5b',1392,1393,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1131,1,_binary 'J°ÿÙ»M',293,1393,1392,NULL,444,'2015-03-03 06:00:00','da0038',1394,1395,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1132,1,_binary '‡ Y\n‘\Ò;3',293,1395,1394,NULL,445,'2015-03-03 06:00:00','e59477',1396,1397,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1133,1,_binary '9\æ‡1�\å\\',293,1397,1396,NULL,446,'2015-03-03 06:00:00','a3d80c',1398,1399,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1134,1,_binary '5}\ϼ|kM',293,1399,1398,NULL,447,'2015-03-03 06:00:00','738cfd',1400,1401,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1135,1,_binary '[#�V\Æ\Å\îa',293,1401,1400,NULL,448,'2015-03-03 06:00:00','58b754',1402,1403,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1136,1,_binary 'K\"•=š\èS',293,1403,1402,NULL,449,'2015-03-03 06:00:00','fc6e58',1404,1405,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1137,1,_binary 'KŒ«‰×›-',293,1405,1404,NULL,450,'2015-03-03 06:00:00','86dadf',1406,1407,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1138,1,_binary '™Æ˜MD�»<',293,1407,1406,NULL,451,'2015-03-03 06:00:00','a6dec2',1408,1409,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1139,1,_binary '\ã²ø\×\\\ñ™',293,1409,1408,NULL,452,'2015-03-03 06:00:00','0c82dd',1410,1411,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1140,1,_binary 'Ï·\Ë’6\à',293,1411,1410,NULL,453,'2015-03-03 06:00:00','892369',1412,1413,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1141,1,_binary '°H\ÌÅ‚',293,1413,1412,NULL,454,'2015-03-03 06:00:00','15de4c',1414,1415,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1142,1,_binary '¹\è Oš)³)',293,1415,1414,NULL,455,'2015-03-03 06:00:00','ccc9e9',1416,1417,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1143,1,_binary '\àŠ_\Çbj¶G',293,1417,1416,NULL,456,'2015-03-03 06:00:00','98ef7c',1418,1419,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1144,1,_binary '½ø\ö?«X9',293,1419,1418,NULL,457,'2015-03-03 06:00:00','3af39f',1420,1421,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1145,1,_binary '\è\ñ²¥�\ô¸',293,1421,1420,NULL,458,'2015-03-03 06:00:00','eccae2',1422,1423,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1146,1,_binary 'Œû¡…4O',293,1423,1422,NULL,459,'2015-03-03 06:00:00','e496f2',1424,1425,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1147,1,_binary '– k¬\ÐA†',293,1425,1424,NULL,460,'2015-03-03 06:00:00','735bbd',1426,1427,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1148,1,_binary '€\í?†ÕƒK',293,1427,1426,NULL,461,'2015-03-03 06:00:00','8682d3',1428,1429,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1149,1,_binary 'm^-¸¬',293,1429,1428,NULL,462,'2015-03-03 06:00:00','9f9cff',1430,1431,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1150,1,_binary '“rwäž’`',293,1431,1430,NULL,463,'2015-03-03 06:00:00','0e5bd9',1432,1433,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1151,1,_binary 'Ϫ3—\éR\ä',293,1433,1432,NULL,464,'2015-03-03 06:00:00','92b296',1434,1435,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1152,1,_binary '\Ü\ÈE\ÒKU&`',293,1435,1434,NULL,465,'2015-03-03 06:00:00','40b8c2',1436,1437,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1153,1,_binary 'ž#j�€)Wž',293,1437,1436,NULL,466,'2015-03-03 06:00:00','4d2b34',1438,1439,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1154,1,_binary '\Ðhœ\Z^·',293,1439,1438,NULL,467,'2015-03-03 06:00:00','8badca',1440,1441,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1155,1,_binary '[J[W¦2ª',293,1441,1440,NULL,468,'2015-03-03 06:00:00','e868f4',1442,1443,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1156,1,_binary '…\ã\äDZ\Òù',293,1443,1442,NULL,469,'2015-03-03 06:00:00','b80dba',1444,1445,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1157,1,_binary ' ‹›}\÷Eu;',293,1445,1444,NULL,470,'2015-03-03 06:00:00','4374f6',1446,1447,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1158,1,_binary '\\\ʼný”¼',293,1447,1446,NULL,471,'2015-03-03 06:00:00','23d596',1448,1449,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1159,1,_binary ' B-¿(“jg',293,1449,1448,NULL,472,'2015-03-03 06:00:00','03ce05',1450,1451,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1160,1,_binary '\'©\Íi¡Íµ]',293,1451,1450,NULL,473,'2015-03-03 06:00:00','15be53',1452,1453,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1161,1,_binary 'e@ª¿¥ºA',293,1453,1452,NULL,474,'2015-03-03 06:00:00','4a763f',1454,1455,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1162,1,_binary '—`]\Ô´Ó¾',293,1455,1454,NULL,475,'2015-03-03 06:00:00','3178d6',1456,1457,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1163,1,_binary '9\ãT¤`\"<“',293,1457,1456,NULL,476,'2015-03-03 06:00:00','b7fad6',1458,1459,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1164,1,_binary 'V\É\ñ´ýP',293,1459,1458,NULL,477,'2015-03-03 06:00:00','03726b',1460,1461,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1165,1,_binary '‚£4‡\à\ó‡ª',293,1461,1460,NULL,478,'2015-03-03 06:00:00','7faa02',1462,1463,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1166,1,_binary '\Ä\ê\ë¶\ï\ú',293,1463,1462,NULL,479,'2015-03-03 06:00:00','328abb',1464,1465,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1167,1,_binary 'ù(®\íL‘',293,1465,1464,NULL,480,'2015-03-03 06:00:00','e26331',1466,1467,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1168,1,_binary 'k›l\Ô\ã•',293,1467,1466,NULL,481,'2015-03-03 06:00:00','be570e',1468,1469,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1169,1,_binary 'û\Þw|\Ó\÷',293,1469,1468,NULL,482,'2015-03-03 06:00:00','7f82ac',1470,1471,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1170,1,_binary 'EAÿ*õø',293,1471,1470,NULL,483,'2015-03-03 06:00:00','38e62c',1472,1473,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1171,1,_binary 'h°(�¯¡\ñ',293,1473,1472,NULL,484,'2015-03-03 06:00:00','7968b8',1474,1475,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1172,1,_binary 'ß²*/Œ\Ó\ð',293,1475,1474,NULL,485,'2015-03-03 06:00:00','de112e',1476,1477,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1173,1,_binary 'ž&w |M',293,1477,1476,NULL,486,'2015-03-03 06:00:00','1503ac',1478,1479,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1174,1,_binary '0­Iº…ˆ\Í',293,1479,1478,NULL,487,'2015-03-03 06:00:00','b23cca',1480,1481,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1175,1,_binary '’\ë\Ý-\n™A\É',293,1481,1480,NULL,488,'2015-03-03 06:00:00','a2e8ef',1482,1483,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1176,1,_binary '\õGob\Ú\Z\ô',293,1483,1482,NULL,489,'2015-03-03 06:00:00','427564',1484,1485,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1177,1,_binary '^wh)\à0\èZ',293,1485,1484,NULL,490,'2015-03-03 06:00:00','10b777',1486,1487,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1178,1,_binary '®Mm\ÓX–!',293,1487,1486,NULL,491,'2015-03-03 06:00:00','71f116',1488,1489,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1179,1,_binary '7Š«\Ç\Ùo',293,1489,1488,NULL,492,'2015-03-03 06:00:00','3106b8',1490,1491,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1180,1,_binary 'A“S\ó))€ƒ',293,1491,1490,NULL,493,'2015-03-03 06:00:00','415e96',1492,1493,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1181,1,_binary ':`\æØ¸Dj',293,1493,1492,NULL,494,'2015-03-03 06:00:00','197472',1494,1495,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1182,1,_binary '\ZI ^)ئ©',293,1495,1494,NULL,495,'2015-03-03 06:00:00','8743ca',1496,1497,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1183,1,_binary '\Ð\Úx…ùc¦\Ò',293,1497,1496,NULL,496,'2015-03-03 06:00:00','4ab95c',1498,1499,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1184,1,_binary '\ÏJ¹\ö\'>\Ú',293,1499,1498,NULL,497,'2015-03-03 06:00:00','812e3e',1500,1501,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1185,1,_binary 'YoÞ¥¬¼$\è',293,1501,1500,NULL,498,'2015-03-03 06:00:00','053a98',1502,1503,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1186,1,_binary '?\ä\é\Ës,{',293,1503,1502,NULL,499,'2015-03-03 06:00:00','dad523',1504,1505,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1187,1,_binary '&‘—rU¢–½',293,1505,1504,NULL,500,'2015-03-03 06:00:00','5fc231',1506,1507,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1188,1,_binary 'toM8\É>²r',293,1507,1506,NULL,501,'2015-03-03 06:00:00','3adbad',1508,1509,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1189,1,_binary '5””(°m',293,1509,1508,NULL,502,'2015-03-03 06:00:00','4fed58',1510,1511,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1190,1,_binary 'W™{¶³ü>',293,1511,1510,NULL,503,'2015-03-03 06:00:00','d46d39',1512,1513,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1191,1,_binary '\"…Z&ýˆ¯\Â',293,1513,1512,NULL,504,'2015-03-03 06:00:00','6674e8',1514,1515,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1192,1,_binary '̦\ôo\Ów\Ø',293,1515,1514,NULL,505,'2015-03-03 06:00:00','064a57',1516,1517,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1193,1,_binary 'B6±„‡}»',293,1517,1516,NULL,506,'2015-03-03 06:00:00','4861ba',1518,1519,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1194,1,_binary '%\î�[œ\Ê',293,1519,1518,NULL,507,'2015-03-03 06:00:00','3828f4',1520,1521,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1195,1,_binary '`Ý™lC\Æ^',293,1523,1522,NULL,509,'2015-03-03 06:00:00','092f4f',1524,1525,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1197,1,_binary '@F�°\Õo:!',293,1525,1524,NULL,510,'2015-03-03 06:00:00','9d4cc2',1526,1527,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1198,1,_binary 'BþEz…!',293,1527,1526,NULL,511,'2015-03-03 06:00:00','ed1909',1528,1529,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1199,1,_binary 'fT¸Ž•',293,1529,1528,NULL,512,'2015-03-03 06:00:00','4739fa',1530,1531,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1200,1,_binary 'wg,\Ò+{-',293,1531,1530,NULL,513,'2015-03-03 06:00:00','fe5bb0',1532,1533,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1201,1,_binary '\Å]—·Æ«À',293,1533,1532,NULL,514,'2015-03-03 06:00:00','508604',1534,1535,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1202,1,_binary '’4½ÿ\Ç\åg™',293,1535,1534,NULL,515,'2015-03-03 06:00:00','832a96',1536,1537,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1203,1,_binary 'v‡O \ÑQ{ú',293,1537,1536,NULL,516,'2015-03-03 06:00:00','077c9f',1538,1539,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1204,1,_binary 'g\Ç[%\ö@½',293,1539,1538,NULL,517,'2015-03-03 06:00:00','dde5e3',1540,1541,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1205,1,_binary 'S“\äm\ì\Ä\ã\Ý',293,1541,1540,NULL,518,'2015-03-03 06:00:00','af8dbf',1542,1543,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1206,1,_binary '.\Âap·øý',293,1543,1542,NULL,519,'2015-03-03 06:00:00','6c6f89',1544,1545,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1207,1,_binary ' s“1R7 ',293,1545,1544,NULL,520,'2015-03-03 06:00:00','2fc6fb',1546,1547,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1208,1,_binary 'Ž\×\nr\ñ\Õ6&',293,1547,1546,NULL,521,'2015-03-03 06:00:00','54009e',1548,1549,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1209,1,_binary '\á+¢\Ò\÷±\êf',293,1549,1548,NULL,522,'2015-03-03 06:00:00','1773f0',1550,1551,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1210,1,_binary '%džn\÷]\è',293,1551,1550,NULL,523,'2015-03-03 06:00:00','95113f',1552,1553,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1211,1,_binary 'ý³\\�—1',293,1553,1552,NULL,524,'2015-03-03 06:00:00','2d51ea',1554,1555,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1212,1,_binary '\ÊK$\Ñ\ë�M',293,1555,1554,NULL,525,'2015-03-03 06:00:00','7d0cbf',1556,1557,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1213,1,_binary '\ð„T\Î\rŽ�\Ì',293,1557,1556,NULL,526,'2015-03-03 06:00:00','891045',1558,1559,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1214,1,_binary '\î>¸`vSª',293,1559,1558,NULL,527,'2015-03-03 06:00:00','189a19',1560,1561,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1215,1,_binary '—(Oû\Ä\'',293,1561,1560,NULL,528,'2015-03-03 06:00:00','f79587',1562,1563,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1216,1,_binary '‰0B½\ä\Ð\\ƒ',293,1563,1562,NULL,529,'2015-03-03 06:00:00','3eb84b',1564,1565,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1217,1,_binary '-�v\'Yúo',293,1565,1564,NULL,530,'2015-03-03 06:00:00','69db7e',1566,1567,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1218,1,_binary ' sŒ\\ˆc',293,1567,1566,NULL,531,'2015-03-03 06:00:00','25bfc7',1568,1569,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1219,1,_binary 'D\Õ@\ðµ\ê\Z',293,1569,1568,NULL,532,'2015-03-03 06:00:00','210506',1570,1571,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1220,1,_binary 'Š(Žkr\n\÷T',293,1571,1570,NULL,533,'2015-03-03 06:00:00','b62635',1572,1573,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1221,1,_binary '‰\Æ\ê¶À',293,1573,1572,NULL,534,'2015-03-03 06:00:00','306034',1574,1575,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1222,1,_binary 'ÑŽ©v 3¶',293,1575,1574,NULL,535,'2015-03-03 06:00:00','be57e3',1576,1577,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1223,1,_binary '©€A6À-k',293,1577,1576,NULL,536,'2015-03-03 06:00:00','f32642',1578,1579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1224,1,_binary '\÷DnQq‘\è',293,1579,1578,NULL,537,'2015-03-03 06:00:00','d7ebc7',1580,1581,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1225,1,_binary '±\Â\Äd\Ô\r',293,1581,1580,NULL,538,'2015-03-03 06:00:00','c0b808',1582,1583,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1226,1,_binary 'l\Ç\äÅ­\å\ï\Ì',293,1583,1582,NULL,539,'2015-03-03 06:00:00','946ee0',1584,1585,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1227,1,_binary 'f (qÈ‚',293,1585,1584,NULL,540,'2015-03-03 06:00:00','5502be',1586,1587,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1228,1,_binary '\ó�\ô\ò¨Á>½',293,1587,1586,NULL,541,'2015-03-03 06:00:00','474668',1588,1589,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1229,1,_binary '™f¾\à~j',293,1589,1588,NULL,542,'2015-03-03 06:00:00','03a5ef',1590,1591,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1230,1,_binary '\Þª\ï³',293,1591,1590,NULL,543,'2015-03-03 06:00:00','9f29ab',1592,1593,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1231,1,_binary '‡\Ô\÷Ò�2\ö\í',293,1593,1592,NULL,544,'2015-03-03 06:00:00','31b0ed',1594,1595,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1232,1,_binary '\ó)}\ä�5(',293,1595,1594,NULL,545,'2015-03-03 06:00:00','83dd9f',1596,1597,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1233,1,_binary ']ª\ôEd]',293,1597,1596,NULL,546,'2015-03-03 06:00:00','e7412b',1598,1599,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1234,1,_binary 'œU‰�\â\É,',293,1599,1598,NULL,547,'2015-03-03 06:00:00','32bedd',1600,1601,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1235,1,_binary '\ÐÙ›«\í ¢\Í',293,1601,1600,NULL,548,'2015-03-03 06:00:00','88f37a',1602,1603,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1236,1,_binary 'ºª^©>88\Ì',293,1603,1602,NULL,549,'2015-03-03 06:00:00','d5da23',1604,1605,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1237,1,_binary '•–\Øû\íÁ',293,1605,1604,NULL,550,'2015-03-03 06:00:00','e34aad',1606,1607,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1238,1,_binary '™ \\žª%a',293,1607,1606,NULL,551,'2015-03-03 06:00:00','55363e',1608,1609,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1239,1,_binary '¿®>\Ò\õ\äk',293,1609,1608,NULL,552,'2015-03-03 06:00:00','d1adaa',1610,1611,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1240,1,_binary '�\ð¦\ï\á¹|',293,1611,1610,NULL,553,'2015-03-03 06:00:00','18c663',1612,1613,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1241,1,_binary '‡@01\ÏTÿ',293,1613,1612,NULL,554,'2015-03-03 06:00:00','72e302',1614,1615,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1242,1,_binary '\äÁfi\ãŠ\Ô',293,1615,1614,NULL,555,'2015-03-03 06:00:00','e267a4',1616,1617,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1243,1,_binary '\ô+A\õ†QC9',293,1617,1616,NULL,556,'2015-03-03 06:00:00','28c196',1618,1619,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1244,1,_binary '“m…VH¸«p',293,1619,1618,NULL,557,'2015-03-03 06:00:00','df6984',1620,1621,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1245,1,_binary '=°�0\ô\Å2',293,1621,1620,NULL,558,'2015-03-03 06:00:00','39d2ea',1622,1623,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1246,1,_binary '3M #Á\Õ\ë¸',293,1623,1622,NULL,559,'2015-03-03 06:00:00','3f9f9e',1624,1625,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1247,1,_binary '�‹²¿¡˜F',293,1625,1624,NULL,560,'2015-03-03 06:00:00','f2077f',1626,1627,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1248,1,_binary '•Ò¯B�l¬',293,1627,1626,NULL,561,'2015-03-03 06:00:00','ae67b6',1628,1629,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1249,1,_binary '­\Þ5ˆ\ê·',293,1629,1628,NULL,562,'2015-03-03 06:00:00','9be9e6',1630,1631,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1250,1,_binary 'Q”w\èKžW$',293,1631,1630,NULL,563,'2015-03-03 06:00:00','b54b5b',1632,1633,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1251,1,_binary 'úƒonE\ç',293,1633,1632,NULL,564,'2015-03-03 06:00:00','071966',1634,1635,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1252,1,_binary '¥2¦m«\"',293,1635,1634,NULL,565,'2015-03-03 06:00:00','a239cf',1636,1637,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1253,1,_binary 'Q%+§¨\á',293,1637,1636,NULL,566,'2015-03-03 06:00:00','754fe2',1638,1639,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1254,1,_binary 'WC\"i\í“Sª',293,1639,1638,NULL,567,'2015-03-03 06:00:00','f37afa',1640,1641,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1255,1,_binary '†ý°€Í¦ ¨',293,1641,1640,NULL,568,'2015-03-03 06:00:00','f60273',1642,1643,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1256,1,_binary '£ ¸ Œ{-',293,1643,1642,NULL,569,'2015-03-03 06:00:00','3d1a85',1644,1645,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1257,1,_binary '\ß]ùq‘\ô„)',293,1645,1644,NULL,570,'2015-03-03 06:00:00','acb7a8',1646,1647,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1258,1,_binary '\n\Æ&¬\ç!',293,1647,1646,NULL,571,'2015-03-03 06:00:00','e5e9db',1648,1649,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1259,1,_binary '\ñ�Lµ¨�Àj',293,1649,1648,NULL,572,'2015-03-03 06:00:00','d6ea65',1650,1651,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1260,1,_binary '#C€ˆ\n®]j',293,1651,1650,NULL,573,'2015-03-03 06:00:00','22aec4',1652,1653,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1261,1,_binary '‹ç¨­�\ãt',293,1653,1652,NULL,574,'2015-03-03 06:00:00','18cca0',1654,1655,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1262,1,_binary '\ße<\ó�_‹',293,1655,1654,NULL,575,'2015-03-03 06:00:00','6d76be',1656,1657,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1263,1,_binary '\ï–Ï®,¦ø',293,1657,1656,NULL,576,'2015-03-03 06:00:00','ecc668',1658,1659,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1264,1,_binary '\Äl[\Öy…',293,1659,1658,NULL,577,'2015-03-03 06:00:00','8953c6',1660,1661,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1265,1,_binary '¿ß‰\äz²O',293,1661,1660,NULL,578,'2015-03-03 06:00:00','4657f2',1662,1663,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1266,1,_binary '\Ã\ð\Ï\0\Ï',293,1663,1662,NULL,579,'2015-03-03 06:00:00','09a019',1664,1665,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1267,1,_binary '¸z\'Cüý',293,1665,1664,NULL,580,'2015-03-03 06:00:00','7db7e2',1666,1667,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1268,1,_binary 'NvE¯v',293,1667,1666,NULL,581,'2015-03-03 06:00:00','533cf7',1668,1669,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1269,1,_binary '7±J´üs–\è',293,1669,1668,NULL,582,'2015-03-03 06:00:00','2e2de0',1670,1671,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1270,1,_binary '‰£}\Âи',293,1671,1670,NULL,583,'2015-03-03 06:00:00','406491',1672,1673,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1271,1,_binary 'I7\'eG€‘%',293,1673,1672,NULL,584,'2015-03-03 06:00:00','cf0fb7',1674,1675,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1272,1,_binary ',f\Ók',293,1675,1674,NULL,585,'2015-03-03 06:00:00','14befc',1676,1677,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1273,1,_binary 'Nܹ—\å°#3',293,1677,1676,NULL,586,'2015-03-03 06:00:00','2edf46',1678,1679,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1274,1,_binary 'Zs,\í7\ÈZ',293,1679,1678,NULL,587,'2015-03-03 06:00:00','fdaf10',1680,1681,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1275,1,_binary '«\Ì&\Ý\é\Õs\Ì',293,1681,1680,NULL,588,'2015-03-03 06:00:00','3bf44f',1682,1683,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1276,1,_binary '\ÃRj„\ê\ò-',293,1683,1682,NULL,589,'2015-03-03 06:00:00','6949cf',1684,1685,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1277,1,_binary 'ŸW„FO\ê`',293,1685,1684,NULL,590,'2015-03-03 06:00:00','97111b',1686,1687,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1278,1,_binary 'x\Ãügݤ\Ü\È',293,1687,1686,NULL,591,'2015-03-03 06:00:00','e13531',1688,1689,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1279,1,_binary '\ì’\Åq뼂\Ý',293,1689,1688,NULL,592,'2015-03-03 06:00:00','749fe5',1690,1691,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1280,1,_binary '‚x*®c\Ø',293,1691,1690,NULL,593,'2015-03-03 06:00:00','530d19',1692,1693,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1281,1,_binary '•4ÿ¥\È-\ï',293,1693,1692,NULL,594,'2015-03-03 06:00:00','9fa2c3',1694,1695,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1282,1,_binary 'E\ãW³¸\ð\Çt',293,1695,1694,NULL,595,'2015-03-03 06:00:00','7f7cd0',1696,1697,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1283,1,_binary '\æ7\÷ޱ\î›:',293,1697,1696,NULL,596,'2015-03-03 06:00:00','2759ee',1698,1699,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1284,1,_binary ' \â\Î/@\à‹G',293,1699,1698,NULL,597,'2015-03-03 06:00:00','6b2bf4',1700,1701,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1285,1,_binary '\Úrƒ)\Õ\ïx\Ô',293,1701,1700,NULL,598,'2015-03-03 06:00:00','4231af',1702,1703,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1286,1,_binary '\í\à\æw\æMjp',293,1703,1702,NULL,599,'2015-03-03 06:00:00','015243',1704,1705,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1287,1,_binary 'K\îWnE’1}',293,1705,1704,NULL,600,'2015-03-03 06:00:00','39ad6e',1706,1707,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1288,1,_binary '\Øå�‡\Û\00',293,1707,1706,NULL,601,'2015-03-03 06:00:00','5c9726',1708,1709,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1289,1,_binary '’¢…\îºd¢',293,1709,1708,NULL,602,'2015-03-03 06:00:00','6ef734',1710,1711,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1290,1,_binary '%ûk:7K\ï?',293,1711,1710,NULL,603,'2015-03-03 06:00:00','7be0ae',1712,1713,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1291,1,_binary '$$ —@?\ô',293,1713,1712,NULL,604,'2015-03-03 06:00:00','1b6a9c',1714,1715,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1292,1,_binary '7t\ÑT,2¢',293,1715,1714,NULL,605,'2015-03-03 06:00:00','7303f9',1716,1717,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1293,1,_binary '6†Ÿ\'§z',293,1717,1716,NULL,606,'2015-03-03 06:00:00','d62bf3',1718,1719,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1294,1,_binary 'ƒ\r¨\ÕW\ìÀ ',293,1719,1718,NULL,607,'2015-03-03 06:00:00','e1d8d8',1720,1721,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1295,1,_binary '\'p™™62',293,1721,1720,NULL,608,'2015-03-03 06:00:00','b6470c',1722,1723,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1296,1,_binary '\Ú”¨��A\Å',293,1723,1722,NULL,609,'2015-03-03 06:00:00','cd4816',1724,1725,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1297,1,_binary 'pR\ã•x\ç',293,1725,1724,NULL,610,'2015-03-03 06:00:00','1b9552',1726,1727,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1298,1,_binary '\Îû=7/e\n',293,1727,1726,NULL,611,'2015-03-03 06:00:00','d15553',1728,1729,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1299,1,_binary '£Ÿ«N¢M',293,1729,1728,NULL,612,'2015-03-03 06:00:00','4a3e84',1730,1731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1300,1,_binary '«^‡M¼:',293,1731,1730,NULL,613,'2015-03-03 06:00:00','2aab1a',1732,1733,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1301,1,_binary 'L³\÷Vo\÷\Û',293,1733,1732,NULL,614,'2015-03-03 06:00:00','eaa218',1734,1735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1302,1,_binary '[o¶\Ú\ôž°¦',293,1735,1734,NULL,615,'2015-03-03 06:00:00','bcf381',1736,1737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1303,1,_binary '›mŒp¯ØžK',293,1737,1736,NULL,616,'2015-03-03 06:00:00','abbb6b',1738,1739,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1304,1,_binary '©&Œ`\\‡¯',293,1739,1738,NULL,617,'2015-03-03 06:00:00','da451c',1740,1741,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1305,1,_binary ']µÌ¢\Ær\Ñ',293,1741,1740,NULL,618,'2015-03-03 06:00:00','2f3e89',1742,1743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1306,1,_binary '\ã\Ìh‚‰¨—',293,1743,1742,NULL,619,'2015-03-03 06:00:00','69b8f4',1744,1745,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1307,1,_binary '˜ww\ÛOF\Ï',293,1745,1744,NULL,620,'2015-03-03 06:00:00','469e77',1746,1747,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1308,1,_binary 'JGŸ\å{\áO',293,1747,1746,NULL,621,'2015-03-03 06:00:00','87501a',1748,1749,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1309,1,_binary '%}¥\\”ùeM',293,1749,1748,NULL,622,'2015-03-03 06:00:00','40c28a',1750,1751,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1310,1,_binary '.µË–v\ñc!',293,1751,1750,NULL,623,'2015-03-03 06:00:00','161d3a',1752,1753,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1311,1,_binary '\É\Ù±\Ò\"û0',293,1753,1752,NULL,624,'2015-03-03 06:00:00','dade4e',1754,1755,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1312,1,_binary 'M3ˆ”/u\ë“',293,1755,1754,NULL,625,'2015-03-03 06:00:00','38ce0f',1756,1757,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1313,1,_binary 'i\íJ3œ‡',293,1757,1756,NULL,626,'2015-03-03 06:00:00','5d4cbd',1758,1759,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1314,1,_binary ';hO*�\Â[',293,1759,1758,NULL,627,'2015-03-03 06:00:00','070fc8',1760,1761,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1315,1,_binary '-¶–»%Q†?',293,1761,1760,NULL,628,'2015-03-03 06:00:00','d00691',1762,1763,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1316,1,_binary '­\â­SR',293,1763,1762,NULL,629,'2015-03-03 06:00:00','1cc80d',1764,1765,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1317,1,_binary '‘†«…f¢pž',293,1765,1764,NULL,630,'2015-03-03 06:00:00','3a83d0',1766,1767,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1318,1,_binary 't“’¯:•\Ò',293,1767,1766,NULL,631,'2015-03-03 06:00:00','c40260',1768,1769,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1319,1,_binary '\Ømߌ\ñZ3',293,1769,1768,NULL,632,'2015-03-03 06:00:00','57e57d',1770,1771,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1320,1,_binary 'Kx\Ö\Ý8W\ÌI',293,1771,1770,NULL,633,'2015-03-03 06:00:00','f91837',1772,1773,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1321,1,_binary 'S\Î?¯\Â\ì\ê¶',293,1773,1772,NULL,634,'2015-03-03 06:00:00','149a94',1774,1775,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1322,1,_binary '\Ë1&ø˜,ÿ$',293,1775,1774,NULL,635,'2015-03-03 06:00:00','9a9f8b',1776,1777,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1323,1,_binary 'Q\íBŒg!\è',293,1777,1776,NULL,636,'2015-03-03 06:00:00','7b1cc5',1778,1779,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1324,1,_binary '�\ì»\ðA*P&',293,1779,1778,NULL,637,'2015-03-03 06:00:00','2bde42',1780,1781,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1325,1,_binary '\÷iž7B^ý',293,1781,1780,NULL,638,'2015-03-03 06:00:00','328066',1782,1783,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1326,1,_binary '\r,\ã\åÝ ',293,1783,1782,NULL,639,'2015-03-03 06:00:00','b179d4',1784,1785,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1327,1,_binary '% šuLûPS',293,1785,1784,NULL,640,'2015-03-03 06:00:00','c33e79',1786,1787,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1328,1,_binary ' .T\\\Çk~«',293,1787,1786,NULL,641,'2015-03-03 06:00:00','1afbaf',1788,1789,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1329,1,_binary 'Q–‘Œº•„z',293,1789,1788,NULL,642,'2015-03-03 06:00:00','e9b3b0',1790,1791,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1330,1,_binary 'EÛŒ¢°\É',293,1791,1790,NULL,643,'2015-03-03 06:00:00','40eedf',1792,1793,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1331,1,_binary 'L’–\àSˆ',293,1793,1792,NULL,644,'2015-03-03 06:00:00','29cf3a',1794,1795,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1332,1,_binary '\n†+\rg\Ì>‘',293,1795,1794,NULL,645,'2015-03-03 06:00:00','202e5b',1796,1797,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1333,1,_binary ' \ÙÍ©W‘',293,1797,1796,NULL,646,'2015-03-03 06:00:00','9d0e86',1798,1799,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1334,1,_binary 'k\Ó\äŒúL¦',293,1799,1798,NULL,647,'2015-03-03 06:00:00','c50f05',1800,1801,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1335,1,_binary '¥\Ö\Ìuÿ_Vœ',293,1801,1800,NULL,648,'2015-03-03 06:00:00','b15e98',1802,1803,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1336,1,_binary '\Ï?\à¨Ágy2',293,1803,1802,NULL,649,'2015-03-03 06:00:00','55a6a8',1804,1805,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1337,1,_binary '¡+*\ë¦\õ\×6',293,1805,1804,NULL,650,'2015-03-03 06:00:00','f7e9ef',1806,1807,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1338,1,_binary '\ß°¸¥ªO\ò',293,1807,1806,NULL,651,'2015-03-03 06:00:00','7359a0',1808,1809,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1339,1,_binary 'Δ«s±f\Ï',293,1809,1808,NULL,652,'2015-03-03 06:00:00','5bb9b5',1810,1811,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1340,1,_binary 'ü;–«N`Œ',293,1811,1810,NULL,653,'2015-03-03 06:00:00','a4bbea',1812,1813,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1341,1,_binary '¾V\Ðc\Ûø',293,1813,1812,NULL,654,'2015-03-03 06:00:00','e4b707',1814,1815,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1342,1,_binary '4›\õ̽\Ø}\Þ',293,1815,1814,NULL,655,'2015-03-03 06:00:00','f20647',1816,1817,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1343,1,_binary 'a ES\à\0¾',293,1817,1816,NULL,656,'2015-03-03 06:00:00','48995f',1818,1819,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1344,1,_binary '5=E\Â1Œad',293,1819,1818,NULL,657,'2015-03-03 06:00:00','72eedf',1820,1821,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1345,1,_binary '–²uV\÷‹\ô',293,1821,1820,NULL,658,'2015-03-03 06:00:00','806c10',1822,1823,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1346,1,_binary 'a\È\Åé­—�•',293,1823,1822,NULL,659,'2015-03-03 06:00:00','9708b7',1824,1825,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1347,1,_binary '\˜�^\È',293,1825,1824,NULL,660,'2015-03-03 06:00:00','c1ceea',1826,1827,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1348,1,_binary 'dN \ó\õ®W',293,1827,1826,NULL,661,'2015-03-03 06:00:00','f0364b',1828,1829,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1349,1,_binary '5†Õ�­Ê©²',293,1829,1828,NULL,662,'2015-03-03 06:00:00','094264',1830,1831,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1350,1,_binary '˶#\ç\ÑÞ¬Á',293,1831,1830,NULL,663,'2015-03-03 06:00:00','0722b6',1832,1833,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1351,1,_binary '\r\ÊN±¾\ë',293,1833,1832,NULL,664,'2015-03-03 06:00:00','b69d5c',1834,1835,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1352,1,_binary 'b\ôŽ^-œ¨',293,1835,1834,NULL,665,'2015-03-03 06:00:00','b9417c',1836,1837,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1353,1,_binary 'º¯ Ô—}‹',293,1837,1836,NULL,666,'2015-03-03 06:00:00','1212ab',1838,1839,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1354,1,_binary 'O\è(\È\æQ\Ä',293,1839,1838,NULL,667,'2015-03-03 06:00:00','056756',1840,1841,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1355,1,_binary 'm‘Á\ô/½Ov',293,1841,1840,NULL,668,'2015-03-03 06:00:00','daa2fa',1842,1843,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1356,1,_binary '\ó\'ý»U�ûŽ',293,1843,1842,NULL,669,'2015-03-03 06:00:00','f5c079',1844,1845,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1357,1,_binary 'ˆ�W‹ �•',293,1845,1844,NULL,670,'2015-03-03 06:00:00','5e604e',1846,1847,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1358,1,_binary '~7Ižú²',293,1847,1846,NULL,671,'2015-03-03 06:00:00','2cf4ee',1848,1849,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1359,1,_binary 'Ò³„\ïra',293,1849,1848,NULL,672,'2015-03-03 06:00:00','0f0d40',1850,1851,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1360,1,_binary '”4¦_\Òü',293,1851,1850,NULL,673,'2015-03-03 06:00:00','5c4ea4',1852,1853,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1361,1,_binary '\Ë5²¢¨\ó\È\ß',293,1853,1852,NULL,674,'2015-03-03 06:00:00','4bb374',1854,1855,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1362,1,_binary 'Sÿ\\x( ‘§',293,1855,1854,NULL,675,'2015-03-03 06:00:00','fa4f06',1856,1857,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1363,1,_binary 'n¸£W­>ü',293,1857,1856,NULL,676,'2015-03-03 06:00:00','f027e9',1858,1859,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1364,1,_binary 'ûµ\ñ\×\Æv~I',293,1859,1858,NULL,677,'2015-03-03 06:00:00','939415',1860,1861,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1365,1,_binary 'S°A-¡\ÒD',293,1861,1860,NULL,678,'2015-03-03 06:00:00','081abf',1862,1863,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1366,1,_binary '\òB¦3ľH',293,1863,1862,NULL,679,'2015-03-03 06:00:00','bec986',1864,1865,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1367,1,_binary '\Zû¹FM&\Ôk',293,1865,1864,NULL,680,'2015-03-03 06:00:00','bb6971',1866,1867,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1368,1,_binary 'Ĕ͂GÄž\r',293,1867,1866,NULL,681,'2015-03-03 06:00:00','19395e',1868,1869,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1369,1,_binary '/VÏ”K”\ä',293,1869,1868,NULL,682,'2015-03-03 06:00:00','7355f0',1870,1871,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1370,1,_binary '£\é6ƒÊ˜7',293,1871,1870,NULL,683,'2015-03-03 06:00:00','e1ab2d',1872,1873,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1371,1,_binary '\ã@kˆ¯ \\µ',293,1873,1872,NULL,684,'2015-03-03 06:00:00','81a244',1874,1875,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1372,1,_binary 'PÜ‹hb\ç6',293,1875,1874,NULL,685,'2015-03-03 06:00:00','fd7c0b',1876,1877,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1373,1,_binary 'Ns\Ä\èaK+',293,1877,1876,NULL,686,'2015-03-03 06:00:00','aa8ef0',1878,1879,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1374,1,_binary 'ø\à\ášü‡\\G',293,1879,1878,NULL,687,'2015-03-03 06:00:00','8287f7',1880,1881,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1375,1,_binary '¢Ô’¿ ¢P',293,1881,1880,NULL,688,'2015-03-03 06:00:00','a3e76e',1882,1883,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1376,1,_binary '\é´ÀqP}ƒý',293,1883,1882,NULL,689,'2015-03-03 06:00:00','8060cb',1884,1885,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1377,1,_binary '$±¹?Gf)\Þ',293,1885,1884,NULL,690,'2015-03-03 06:00:00','fc0aa1',1886,1887,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1378,1,_binary '\Zr°TO!¯Š',293,1887,1886,NULL,691,'2015-03-03 06:00:00','b5e899',1888,1889,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1379,1,_binary '©­¦Ôƒ«E{',293,1889,1888,NULL,692,'2015-03-03 06:00:00','c36a68',1890,1891,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1380,1,_binary '´¿œF 2³¸',293,1891,1890,NULL,693,'2015-03-03 06:00:00','5b5d0c',1892,1893,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1381,1,_binary '·`\õ\åª\ô\Å\Ü',293,1893,1892,NULL,694,'2015-03-03 06:00:00','47ab65',1894,1895,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1382,1,_binary '¸�j\ÐE',293,1895,1894,NULL,695,'2015-03-03 06:00:00','7acbc4',1896,1897,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1383,1,_binary 'q·˜T[r\Z\ä',293,1897,1896,NULL,696,'2015-03-03 06:00:00','4c0f7c',1898,1899,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1384,1,_binary '†¸O²L\Ï\ß',293,1899,1898,NULL,697,'2015-03-03 06:00:00','d9573c',1900,1901,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1385,1,_binary 'o,ºž<\Â\Ð',293,1901,1900,NULL,698,'2015-03-03 06:00:00','a52962',1902,1903,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1386,1,_binary '\"%L\Ê`\ðü',293,1903,1902,NULL,699,'2015-03-03 06:00:00','859fab',1904,1905,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1387,1,_binary '\ß OhE ‰',294,0,0,NULL,1,'2015-03-04 06:00:00','990997',506,507,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1388,1,_binary '\é�Kˆ-Œ\Æ?',294,507,506,NULL,2,'2015-03-04 06:00:00','8c25bc',508,509,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1389,1,_binary 'µ]½y¡\Ö\ìŒ',294,509,508,NULL,3,'2015-03-04 06:00:00','d6655f',510,511,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1390,1,_binary '\ÅL·“2ûœ¼',294,511,510,NULL,4,'2015-03-04 06:00:00','0b885e',512,513,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1391,1,_binary '\Ñ,[­5qD\î',294,513,512,NULL,5,'2015-03-04 06:00:00','b909ee',514,515,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1392,1,_binary '‹r°\à gÔ€',294,515,514,NULL,6,'2015-03-04 06:00:00','a1ffb9',516,517,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1393,1,_binary '@ÿ\Û\Í\Î',294,517,516,NULL,7,'2015-03-04 06:00:00','dcdcf8',518,519,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1394,1,_binary 'Ÿe�\Å ¾',294,519,518,NULL,8,'2015-03-04 06:00:00','7487a5',520,521,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1395,1,_binary 'uHuøxŽ\Ñ',294,521,520,NULL,9,'2015-03-04 06:00:00','eec315',522,523,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1396,1,_binary 'cùƒ%�]',294,523,522,NULL,10,'2015-03-04 06:00:00','d307be',524,525,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1397,1,_binary '“³G8¡a#',294,525,524,NULL,11,'2015-03-04 06:00:00','ffd03e',526,527,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1398,1,_binary '\Ê?siÓ£œ\Õ',294,527,526,NULL,12,'2015-03-04 06:00:00','2e8cae',528,529,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1399,1,_binary 'À7\Õš\Ï\"',294,529,528,NULL,13,'2015-03-04 06:00:00','0fc6f7',530,531,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1400,1,_binary '\Ê8PUœB´j',294,531,530,NULL,14,'2015-03-04 06:00:00','e3ba35',532,533,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1401,1,_binary 'O»,ÁO„\0e',294,533,532,NULL,15,'2015-03-04 06:00:00','a4127e',534,535,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1402,1,_binary '*\ó\Û\åS_‰',294,535,534,NULL,16,'2015-03-04 06:00:00','bdbf9d',536,537,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1403,1,_binary '¬[\Ì ‹‹\Ùý',294,537,536,NULL,17,'2015-03-04 06:00:00','aeee2e',538,539,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1404,1,_binary 'g‹o:“\å-',294,539,538,NULL,18,'2015-03-04 06:00:00','c540e4',540,541,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1405,1,_binary '›ø\0\Í\Âø2',294,541,540,NULL,19,'2015-03-04 06:00:00','705f00',542,543,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1406,1,_binary '’†2\Ç|k€Q',294,543,542,NULL,20,'2015-03-04 06:00:00','c2e520',544,545,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1407,1,_binary '¤\È\åx©=',294,545,544,NULL,21,'2015-03-04 06:00:00','247cd7',546,547,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1408,1,_binary '\ËÓœF\n”',294,547,546,NULL,22,'2015-03-04 06:00:00','44c2f2',548,549,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1409,1,_binary '\Zw_tJ\é',294,549,548,NULL,23,'2015-03-04 06:00:00','540b70',550,551,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1410,1,_binary '\ÑLûP}ˆ\ï',294,551,550,NULL,24,'2015-03-04 06:00:00','e538a5',552,553,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1411,1,_binary '¦z\Ð\ã\Ê\éŒ',294,553,552,NULL,25,'2015-03-04 06:00:00','a58d71',554,555,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1412,1,_binary '\Î,�\õ Y…',294,555,554,NULL,26,'2015-03-04 06:00:00','3d047a',556,557,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1413,1,_binary 'y\'Wºq¦s8',294,557,556,NULL,27,'2015-03-04 06:00:00','102330',558,559,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1414,1,_binary '=9\ß\n\éqg',294,559,558,NULL,28,'2015-03-04 06:00:00','231832',560,561,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1415,1,_binary '^\ëj\ÊDWI=',294,561,560,NULL,29,'2015-03-04 06:00:00','b3f8df',562,563,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1416,1,_binary '�K§\Þ\ÑÀ¨',294,563,562,NULL,30,'2015-03-04 06:00:00','57cc4c',564,565,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1417,1,_binary 'v)\×{c\\Ÿ',294,565,564,NULL,31,'2015-03-04 06:00:00','4b5bcc',566,567,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1418,1,_binary 'c{±»€½x\n',294,567,566,NULL,32,'2015-03-04 06:00:00','b996e8',568,569,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1419,1,_binary 'i•*\Â`\ô<\'',294,569,568,NULL,33,'2015-03-04 06:00:00','6c23fd',570,571,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1420,1,_binary '¨üNŠš\æ',294,571,570,NULL,34,'2015-03-04 06:00:00','dea240',572,573,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1421,1,_binary '€ \íc—\ñMe',294,573,572,NULL,35,'2015-03-04 06:00:00','98781a',574,575,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1422,1,_binary 'ÀÕ¯\ä\ô;·d',294,575,574,NULL,36,'2015-03-04 06:00:00','8ef0fa',576,577,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1423,1,_binary '�·`ƒ¤r\Ê\É',294,577,576,NULL,37,'2015-03-04 06:00:00','155e0d',578,579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1424,1,_binary 'GÏš,Ľ²\È',294,579,578,NULL,38,'2015-03-04 06:00:00','8b66b2',580,581,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1425,1,_binary '¹\ð³\Ìr{',294,581,580,NULL,39,'2015-03-04 06:00:00','684c8c',582,583,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1426,1,_binary '.�\í¾>\×$)',294,583,582,NULL,40,'2015-03-04 06:00:00','d54f77',584,585,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1427,1,_binary 'ZµwoK\Âú',294,585,584,NULL,41,'2015-03-04 06:00:00','ede31c',586,587,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1428,1,_binary ' €žÃ‚\×\Ò\Â',294,587,586,NULL,42,'2015-03-04 06:00:00','f3fff9',588,589,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1429,1,_binary ':-ÿÎ�›·',294,589,588,NULL,43,'2015-03-04 06:00:00','3f9dfd',590,591,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1430,1,_binary '\÷P´N³g\ó®',294,591,590,NULL,44,'2015-03-04 06:00:00','822a60',592,593,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1431,1,_binary '‰ú‚I1¸E',294,593,592,NULL,45,'2015-03-04 06:00:00','fdca22',594,595,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1432,1,_binary '7°\îF�Oˆ',294,595,594,NULL,46,'2015-03-04 06:00:00','176bd6',596,597,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1433,1,_binary '[‚h´†ge',294,597,596,NULL,47,'2015-03-04 06:00:00','ced1f2',598,599,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1434,1,_binary '±�is\î^\ñ',294,599,598,NULL,48,'2015-03-04 06:00:00','2b7f5d',600,601,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1435,1,_binary 'ƒ :Úˆ³\èŸ',294,601,600,NULL,49,'2015-03-04 06:00:00','1182e7',602,603,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1436,1,_binary '\r„i–þ‰.£',294,603,602,NULL,50,'2015-03-04 06:00:00','7ad563',604,605,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1437,1,_binary '³\ãq‚�(\Ø9',294,605,604,NULL,51,'2015-03-04 06:00:00','4a85b0',606,607,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1438,1,_binary '°&\éY«ba',294,607,606,NULL,52,'2015-03-04 06:00:00','35cb09',608,609,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1439,1,_binary '\ñ\Îk-S\ïRl',294,609,608,NULL,53,'2015-03-04 06:00:00','1227fe',610,611,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1440,1,_binary '‚\ÌVb®’øD',294,611,610,NULL,54,'2015-03-04 06:00:00','ef7013',612,613,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1441,1,_binary 'ˆ<¬E®\"0',294,613,612,NULL,55,'2015-03-04 06:00:00','14a502',614,615,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1442,1,_binary '¦Ÿ%\Ï\nº\Ù',294,615,614,NULL,56,'2015-03-04 06:00:00','2978e7',616,617,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1443,1,_binary '¸f˜t\Çkh',294,617,616,NULL,57,'2015-03-04 06:00:00','c7c279',618,619,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1444,1,_binary '\n\ÑF¯ù²ea',294,619,618,NULL,58,'2015-03-04 06:00:00','6b0d09',620,621,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1445,1,_binary 'uÁ«cHp*',294,621,620,NULL,59,'2015-03-04 06:00:00','c8335d',622,623,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1446,1,_binary '1¿œJ\ØSl',294,623,622,NULL,60,'2015-03-04 06:00:00','cba2e6',624,625,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1447,1,_binary '\nhK1‰x\â',294,625,624,NULL,61,'2015-03-04 06:00:00','b31b87',626,627,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1448,1,_binary 'D ÿ\Ç\âu/',294,627,626,NULL,62,'2015-03-04 06:00:00','abeb30',628,629,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1449,1,_binary 'yJ6\ÅLr',294,629,628,NULL,63,'2015-03-04 06:00:00','f4383c',630,631,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1450,1,_binary 'H4£²Af8',294,631,630,NULL,64,'2015-03-04 06:00:00','f42057',632,633,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1451,1,_binary '0\â\ê{›M¨',294,633,632,NULL,65,'2015-03-04 06:00:00','8536d4',634,635,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1452,1,_binary 'c¦.7n5‰',294,635,634,NULL,66,'2015-03-04 06:00:00','6c336c',636,637,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1453,1,_binary '\ð\Ü7ÑŸ1³,',294,637,636,NULL,67,'2015-03-04 06:00:00','7f1da7',638,639,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1454,1,_binary '\Ë*\Î\0\Ç=\Ôþ',294,639,638,NULL,68,'2015-03-04 06:00:00','e5d8d9',640,641,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1455,1,_binary '\ï`Y›rP\Ü',294,641,640,NULL,69,'2015-03-04 06:00:00','0bac19',642,643,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1456,1,_binary 'e“!|\Ò!•ª',294,643,642,NULL,70,'2015-03-04 06:00:00','21d6e0',644,645,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1457,1,_binary '+\Ô3 ÌŠU',294,645,644,NULL,71,'2015-03-04 06:00:00','2186e0',646,647,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1458,1,_binary 'j-ü\â\áQ¢5',294,647,646,NULL,72,'2015-03-04 06:00:00','556177',648,649,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1459,1,_binary '-\ì<¹\ÙSN\á',294,649,648,NULL,73,'2015-03-04 06:00:00','3fac43',650,651,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1460,1,_binary '`1K\õE\×û',294,651,650,NULL,74,'2015-03-04 06:00:00','418ae2',652,653,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1461,1,_binary 'Ô¤\ë}¡\è \n',294,653,652,NULL,75,'2015-03-04 06:00:00','e4567a',654,655,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1462,1,_binary 'I[œšB¼_',294,655,654,NULL,76,'2015-03-04 06:00:00','9ca5be',656,657,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1463,1,_binary '-\Z\Ãl\ß>Ø»',294,657,656,NULL,77,'2015-03-04 06:00:00','391642',658,659,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1464,1,_binary '\×\à\á\ÇO\Ï',294,659,658,NULL,78,'2015-03-04 06:00:00','01403e',660,661,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1465,1,_binary 'K§w‹\ÔAÜ©',294,661,660,NULL,79,'2015-03-04 06:00:00','e5a292',662,663,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1466,1,_binary '\Â5û&ýy\Í',294,663,662,NULL,80,'2015-03-04 06:00:00','e30aad',664,665,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1467,1,_binary 'I®„vn9\\¯',294,665,664,NULL,81,'2015-03-04 06:00:00','342c2d',666,667,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1468,1,_binary 'š‘h\ö\Ó\"@#',294,667,666,NULL,82,'2015-03-04 06:00:00','fae9e7',668,669,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1469,1,_binary 'l6%N\â\ñ¼',294,669,668,NULL,83,'2015-03-04 06:00:00','bb7f97',670,671,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1470,1,_binary '¥\ämt‰q��',294,671,670,NULL,84,'2015-03-04 06:00:00','da12df',672,673,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1471,1,_binary '\Ì=B7\Ó5ˆ\Ð',294,673,672,NULL,85,'2015-03-04 06:00:00','5e2fb5',674,675,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1472,1,_binary '}\Ü6§=€',294,675,674,NULL,86,'2015-03-04 06:00:00','b78d99',676,677,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1473,1,_binary '\Ì{\Åw\ ',294,677,676,NULL,87,'2015-03-04 06:00:00','734933',678,679,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1474,1,_binary 'ý\Ï|\íG.1?',294,679,678,NULL,88,'2015-03-04 06:00:00','e38983',680,681,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1475,1,_binary '“’Y\Î\åKÿ',294,681,680,NULL,89,'2015-03-04 06:00:00','18d68e',682,683,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1476,1,_binary '­¨ùS1Q',294,683,682,NULL,90,'2015-03-04 06:00:00','d84217',684,685,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1477,1,_binary 'A\Å9ˆ©Z',294,685,684,NULL,91,'2015-03-04 06:00:00','a79ac0',686,687,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1478,1,_binary '\ì~%\ï«3’',294,687,686,NULL,92,'2015-03-04 06:00:00','24fa45',688,689,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1479,1,_binary ' ~\ó\õ\Ë`ƒ',294,689,688,NULL,93,'2015-03-04 06:00:00','0930af',690,691,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1480,1,_binary 'ž{\Ë\Ý´ ',294,691,690,NULL,94,'2015-03-04 06:00:00','f19d33',692,693,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1481,1,_binary '\ÛÀh°o ',294,693,692,NULL,95,'2015-03-04 06:00:00','094093',694,695,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1482,1,_binary 'aŒ\'%y–¾›',294,695,694,NULL,96,'2015-03-04 06:00:00','e2ce4e',696,697,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1483,1,_binary '$\Ú\õ£’',294,697,696,NULL,97,'2015-03-04 06:00:00','5280ed',698,699,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1484,1,_binary 'fJ­‰t\çW',294,699,698,NULL,98,'2015-03-04 06:00:00','7e0837',700,701,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1485,1,_binary '\ÕZ.Eüm',294,701,700,NULL,99,'2015-03-04 06:00:00','9908e9',702,703,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1486,1,_binary '»\ñ€°2ÿj',294,703,702,NULL,100,'2015-03-04 06:00:00','051fa1',704,705,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1487,1,_binary ' R -Ì“X¶',294,705,704,NULL,101,'2015-03-04 06:00:00','a017d4',706,707,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1488,1,_binary '=®l¯¶`6\"',294,707,706,NULL,102,'2015-03-04 06:00:00','e6c477',708,709,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1489,1,_binary '�\÷5µ\ö\õ',294,709,708,NULL,103,'2015-03-04 06:00:00','430904',710,711,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1490,1,_binary '_yjlȃ¿p',294,711,710,NULL,104,'2015-03-04 06:00:00','650be6',712,713,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1491,1,_binary '±¼Y©S.\ï',294,713,712,NULL,105,'2015-03-04 06:00:00','e86432',714,715,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1492,1,_binary 'ý\ï{�\ç\Ö!\ñ',294,715,714,NULL,106,'2015-03-04 06:00:00','f2a227',716,717,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1493,1,_binary 'FÝ·«®ü\ï',294,717,716,NULL,107,'2015-03-04 06:00:00','38c9c7',718,719,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1494,1,_binary 'H†\å·e\ÆIø',294,719,718,NULL,108,'2015-03-04 06:00:00','7295a1',720,721,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1495,1,_binary '�´c·À�Õ…',294,721,720,NULL,109,'2015-03-04 06:00:00','7ac206',722,723,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1496,1,_binary '7y+\õú\Ú\Ù',294,723,722,NULL,110,'2015-03-04 06:00:00','75e73d',724,725,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1497,1,_binary 'aª\ð$%I¨’',294,725,724,NULL,111,'2015-03-04 06:00:00','7546bb',726,727,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1498,1,_binary '‘‹;x[Qƒ',294,727,726,NULL,112,'2015-03-04 06:00:00','7d9775',728,729,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1499,1,_binary 'ƒpT׫{t',294,729,728,NULL,113,'2015-03-04 06:00:00','938b0d',730,731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1500,1,_binary '±?£ºy”@',294,731,730,NULL,114,'2015-03-04 06:00:00','8b2e02',732,733,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1501,1,_binary 'm„G‰\Øe»O',294,733,732,NULL,115,'2015-03-04 06:00:00','cf7634',734,735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1502,1,_binary '¼?\ÛV\Í7',294,735,734,NULL,116,'2015-03-04 06:00:00','9cc1cc',736,737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1503,1,_binary 'Z—¸)7‹I',294,737,736,NULL,117,'2015-03-04 06:00:00','f5a1c5',738,739,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1504,1,_binary '\è\à/\ÙRY¼',294,739,738,NULL,118,'2015-03-04 06:00:00','9cd24c',740,741,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1505,1,_binary '\ÍD% Y',294,741,740,NULL,119,'2015-03-04 06:00:00','c61c40',742,743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1506,1,_binary 'u\"ŽÆ® \'',294,743,742,NULL,120,'2015-03-04 06:00:00','085bc2',744,745,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1507,1,_binary '4\ÈpC‘\Ôs',294,745,744,NULL,121,'2015-03-04 06:00:00','64f449',746,747,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1508,1,_binary 'C\ÛT*£6',294,747,746,NULL,122,'2015-03-04 06:00:00','03baac',748,749,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1509,1,_binary '�}p}Oi~s',294,749,748,NULL,123,'2015-03-04 06:00:00','c778ef',750,751,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1510,1,_binary '…\ôzª\ë¸_g',294,751,750,NULL,124,'2015-03-04 06:00:00','ba9298',752,753,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1511,1,_binary 'ø¸ž\Æÿ\\.',294,753,752,NULL,125,'2015-03-04 06:00:00','555e9f',754,755,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1512,1,_binary '“\íl‚·ˆ\ß ',294,755,754,NULL,126,'2015-03-04 06:00:00','641739',756,757,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1513,1,_binary '›W¢Jø\ôÈŸ',294,757,756,NULL,127,'2015-03-04 06:00:00','4d1b3f',758,759,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1514,1,_binary 'n2Rph|K',294,759,758,NULL,128,'2015-03-04 06:00:00','8cebb6',760,761,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1515,1,_binary '®¡l·\Ãd\n\ò',294,761,760,NULL,129,'2015-03-04 06:00:00','7a681b',762,763,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1516,1,_binary '¦¡It\ó\ä ',294,763,762,NULL,130,'2015-03-04 06:00:00','7ade8e',764,765,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1517,1,_binary 'X§.£y\í©',294,765,764,NULL,131,'2015-03-04 06:00:00','ef06af',766,767,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1518,1,_binary '|Ÿ\Ç\ó飳\'',294,767,766,NULL,132,'2015-03-04 06:00:00','d617ac',768,769,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1519,1,_binary '\Û\Ëü)\ã\Ó',294,769,768,NULL,133,'2015-03-04 06:00:00','42e937',770,771,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1520,1,_binary 'uzûJƼ9',294,771,770,NULL,134,'2015-03-04 06:00:00','e41dde',772,773,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1521,1,_binary '¹U?6|�',294,773,772,NULL,135,'2015-03-04 06:00:00','a4f442',774,775,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1522,1,_binary 's¸|ÀO*Ž',294,775,774,NULL,136,'2015-03-04 06:00:00','2e27a7',776,777,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1523,1,_binary '̈VŒ±\î',294,777,776,NULL,137,'2015-03-04 06:00:00','8bdec3',778,779,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1524,1,_binary 'K\"ÿ�ù‚',294,779,778,NULL,138,'2015-03-04 06:00:00','027e8b',780,781,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1525,1,_binary 'bf§~\ï\ö€',294,781,780,NULL,139,'2015-03-04 06:00:00','3a5418',782,783,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1526,1,_binary 'h–n¡j',294,783,782,NULL,140,'2015-03-04 06:00:00','ca2aab',784,785,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1527,1,_binary '\çiE«-%\î�',294,785,784,NULL,141,'2015-03-04 06:00:00','999275',786,787,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1528,1,_binary 'VT8C®²',294,787,786,NULL,142,'2015-03-04 06:00:00','a689e1',788,789,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1529,1,_binary '\Èýp3�\ñ¤',294,789,788,NULL,143,'2015-03-04 06:00:00','790049',790,791,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1530,1,_binary '“³¯\å,\í?',294,791,790,NULL,144,'2015-03-04 06:00:00','15e3f7',792,793,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1531,1,_binary 'Ÿ…F+¼”',294,793,792,NULL,145,'2015-03-04 06:00:00','de3109',794,795,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1532,1,_binary '\å\ó±d‚\óD',294,795,794,NULL,146,'2015-03-04 06:00:00','98cc7c',796,797,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1533,1,_binary '�D>‹\æ\"',294,797,796,NULL,147,'2015-03-04 06:00:00','202793',798,799,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1534,1,_binary '4}Ú˜£B\ë\â',294,799,798,NULL,148,'2015-03-04 06:00:00','77090c',800,801,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1535,1,_binary '\äÒ•Ž\òúù',294,801,800,NULL,149,'2015-03-04 06:00:00','ca7824',802,803,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1536,1,_binary 'DF �+©\ç',294,803,802,NULL,150,'2015-03-04 06:00:00','5a303f',804,805,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1537,1,_binary '\áj¶šN«]',294,805,804,NULL,151,'2015-03-04 06:00:00','9c7b46',806,807,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1538,1,_binary 'wg´«2ܺ',294,807,806,NULL,152,'2015-03-04 06:00:00','8fea93',808,809,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1539,1,_binary 'Ž\ï¸ €œ¸',294,809,808,NULL,153,'2015-03-04 06:00:00','28afc5',810,811,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1540,1,_binary '†aB\÷\ó½\Ú',294,811,810,NULL,154,'2015-03-04 06:00:00','cf88b7',812,813,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1541,1,_binary 'H\×\îO_m6¯',294,813,812,NULL,155,'2015-03-04 06:00:00','7b0905',814,815,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1542,1,_binary 'B\Ývª…{n¨',294,815,814,NULL,156,'2015-03-04 06:00:00','03d445',816,817,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1543,1,_binary '\É\r­\Î\÷¢',294,817,816,NULL,157,'2015-03-04 06:00:00','7340d3',818,819,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1544,1,_binary '  ˆ*\Î\â?',294,819,818,NULL,158,'2015-03-04 06:00:00','5f2e0d',820,821,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1545,1,_binary '�Á{¾^þ™',294,821,820,NULL,159,'2015-03-04 06:00:00','efacfd',822,823,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1546,1,_binary 'Iž#¢F�',294,823,822,NULL,160,'2015-03-04 06:00:00','b73c78',824,825,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1547,1,_binary '2®4\Êø»ý',294,825,824,NULL,161,'2015-03-04 06:00:00','294d4a',826,827,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1548,1,_binary '™@e—ý%W',294,827,826,NULL,162,'2015-03-04 06:00:00','6e4065',828,829,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1549,1,_binary '\Ü+©󰌱',294,829,828,NULL,163,'2015-03-04 06:00:00','42b265',830,831,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1550,1,_binary '|\ñž–\Ù(•\å',294,831,830,NULL,164,'2015-03-04 06:00:00','feac70',832,833,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1551,1,_binary '[v,˜^¯',294,833,832,NULL,165,'2015-03-04 06:00:00','e01490',834,835,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1552,1,_binary 'a§†\ô€�s',294,835,834,NULL,166,'2015-03-04 06:00:00','4a2918',836,837,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1553,1,_binary 'ý„¯\õ«\æý',294,837,836,NULL,167,'2015-03-04 06:00:00','cb0da9',838,839,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1554,1,_binary '‚\r\écx)$',294,839,838,NULL,168,'2015-03-04 06:00:00','747fe5',840,841,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1555,1,_binary '8§c\æF\í\0',294,841,840,NULL,169,'2015-03-04 06:00:00','8983eb',842,843,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1556,1,_binary '§^¦º\Æz›',294,843,842,NULL,170,'2015-03-04 06:00:00','3d16df',844,845,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1557,1,_binary '™`U‡G*6#',294,845,844,NULL,171,'2015-03-04 06:00:00','3d294c',846,847,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1558,1,_binary ' V“\Ï©WY',294,847,846,NULL,172,'2015-03-04 06:00:00','eee6e8',848,849,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1559,1,_binary 'c¨S”¡‹',294,849,848,NULL,173,'2015-03-04 06:00:00','6a67ee',850,851,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1560,1,_binary '—=[vf³j\È',294,851,850,NULL,174,'2015-03-04 06:00:00','5ca89e',852,853,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1561,1,_binary ')‡\÷z\ÅÞµ\Ò',294,853,852,NULL,175,'2015-03-04 06:00:00','8c0e59',854,855,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1562,1,_binary 'p£Q‹)ž­',294,855,854,NULL,176,'2015-03-04 06:00:00','e7bdc5',856,857,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1563,1,_binary '¢­„7qq',294,857,856,NULL,177,'2015-03-04 06:00:00','be2375',858,859,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1564,1,_binary '\ZMÀ*C‹<',294,859,858,NULL,178,'2015-03-04 06:00:00','678c00',860,861,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1565,1,_binary 'E\á\Ó@z\ßZ',294,861,860,NULL,179,'2015-03-04 06:00:00','9be9ce',862,863,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1566,1,_binary '�H2v¶b\îV',294,863,862,NULL,180,'2015-03-04 06:00:00','7abbcc',864,865,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1567,1,_binary 'Q \n\Ýd\Û\Ñp',294,865,864,NULL,181,'2015-03-04 06:00:00','b9c180',866,867,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1568,1,_binary 'ŒpŠ8\åQ\ó',294,867,866,NULL,182,'2015-03-04 06:00:00','71a9f6',868,869,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1569,1,_binary '¹š\êQ2',294,869,868,NULL,183,'2015-03-04 06:00:00','3ba2f0',870,871,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1570,1,_binary '\Å\Ó` Px2\Õ',294,871,870,NULL,184,'2015-03-04 06:00:00','e90835',872,873,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1571,1,_binary '0*œ‰\ÊX#l',294,873,872,NULL,185,'2015-03-04 06:00:00','96062d',874,875,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1572,1,_binary '¡\ËÇžý€i\õ',294,875,874,NULL,186,'2015-03-04 06:00:00','6560b8',876,877,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1573,1,_binary 'N\ç¸\ÇÒ¶¿',294,877,876,NULL,187,'2015-03-04 06:00:00','e30410',878,879,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1574,1,_binary 'rC\çm¤�°',294,879,878,NULL,188,'2015-03-04 06:00:00','386748',880,881,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1575,1,_binary '\í\ÙJ†y¯',294,881,880,NULL,189,'2015-03-04 06:00:00','27f43f',882,883,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1576,1,_binary '¸\ò\å6ÿ¢',294,883,882,NULL,190,'2015-03-04 06:00:00','d0104d',884,885,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1577,1,_binary 'Ž(\Ù\õ\ïŽO',294,885,884,NULL,191,'2015-03-04 06:00:00','0d77b2',886,887,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1578,1,_binary 'œ^\öc',294,887,886,NULL,192,'2015-03-04 06:00:00','9569f6',888,889,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1579,1,_binary 'Uÿü\Ã\í\ä',294,889,888,NULL,193,'2015-03-04 06:00:00','1db567',890,891,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1580,1,_binary 'ù䨎\æeÿ\à',294,891,890,NULL,194,'2015-03-04 06:00:00','49f726',892,893,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1581,1,_binary '•ø’O\ë\÷',294,893,892,NULL,195,'2015-03-04 06:00:00','d673d1',894,895,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1582,1,_binary '\ê\Þo\Õ\ßE˜',294,895,894,NULL,196,'2015-03-04 06:00:00','4fb2db',896,897,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1583,1,_binary 'ÿ±Ž \ô¢‚0',294,897,896,NULL,197,'2015-03-04 06:00:00','1fd24a',898,899,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1584,1,_binary '\ðµD\ë�ˆ\è',294,899,898,NULL,198,'2015-03-04 06:00:00','02274b',900,901,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1585,1,_binary '{u2œ¶\÷¸^',294,901,900,NULL,199,'2015-03-04 06:00:00','38f890',902,903,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1586,1,_binary '­r7¸‘#',294,903,902,NULL,200,'2015-03-04 06:00:00','3f1df8',904,905,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1587,1,_binary '\ê\ê£\Ñ\ë”Y\Î',294,905,904,NULL,201,'2015-03-04 06:00:00','e6f75a',906,907,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1588,1,_binary '¹ª\Ð\Z\ô¾',294,907,906,NULL,202,'2015-03-04 06:00:00','76c7c7',908,909,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1589,1,_binary '’\Â=)\n\ç\õ}',294,909,908,NULL,203,'2015-03-04 06:00:00','b8e7ad',910,911,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1590,1,_binary '\ê8‹™­³§\Ü',294,911,910,NULL,204,'2015-03-04 06:00:00','8a8725',912,913,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1591,1,_binary '\çÅ‚ÿ\ÈG»;',294,913,912,NULL,205,'2015-03-04 06:00:00','ff4275',914,915,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1592,1,_binary 'M ¾:\ç\Î5',294,915,914,NULL,206,'2015-03-04 06:00:00','903c46',916,917,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1593,1,_binary '\æ\Z«^\õ½KŠ',294,917,916,NULL,207,'2015-03-04 06:00:00','c0ae86',918,919,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1594,1,_binary 'BVù?\Ü\ó\Ü',294,919,918,NULL,208,'2015-03-04 06:00:00','acf92e',920,921,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1595,1,_binary 'Jµ\Ö\æ=',294,921,920,NULL,209,'2015-03-04 06:00:00','d5f707',922,923,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1596,1,_binary '\Ì̼\ÏJ‡W�',294,923,922,NULL,210,'2015-03-04 06:00:00','4fe3e1',924,925,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1597,1,_binary 'Ÿ1T¸\Î\r',294,925,924,NULL,211,'2015-03-04 06:00:00','b25e01',926,927,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1598,1,_binary '\Ýb†\çO\í¯\Å',294,927,926,NULL,212,'2015-03-04 06:00:00','4d5153',928,929,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1599,1,_binary 'úJ’z+ù4\Ê',294,929,928,NULL,213,'2015-03-04 06:00:00','2053ff',930,931,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1600,1,_binary '*\ÎL\á·\í03',294,931,930,NULL,214,'2015-03-04 06:00:00','64b569',932,933,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1601,1,_binary '¸¶\å\àƒ\òň',294,933,932,NULL,215,'2015-03-04 06:00:00','87e5b7',934,935,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1602,1,_binary 'úŠs¸ûƒ',294,935,934,NULL,216,'2015-03-04 06:00:00','c4f22c',936,937,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1603,1,_binary 'qbm\ïƒ3',294,937,936,NULL,217,'2015-03-04 06:00:00','2c6f99',938,939,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1604,1,_binary '\ívÑ·<&\ÉY',294,939,938,NULL,218,'2015-03-04 06:00:00','7425cb',940,941,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1605,1,_binary '\î9{\Þ\Öü\Z',294,941,940,NULL,219,'2015-03-04 06:00:00','02137a',942,943,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1606,1,_binary '\ÞR•܆³‡',294,943,942,NULL,220,'2015-03-04 06:00:00','298e3d',944,945,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1607,1,_binary '\áܘn,&ù\Ì',294,945,944,NULL,221,'2015-03-04 06:00:00','d7512f',946,947,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1608,1,_binary '\Ü3ý½‘�Á\á',294,947,946,NULL,222,'2015-03-04 06:00:00','ec0156',948,949,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1609,1,_binary '—\\Ó»;¬­\Í',294,949,948,NULL,223,'2015-03-04 06:00:00','c73392',950,951,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1610,1,_binary 'þ\0ž�\n\Ö(',294,951,950,NULL,224,'2015-03-04 06:00:00','2ed4a2',952,953,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1611,1,_binary 'ŸÇ¬Ã�Áº™',294,953,952,NULL,225,'2015-03-04 06:00:00','6c6025',954,955,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1612,1,_binary 'O]h \á–B',294,955,954,NULL,226,'2015-03-04 06:00:00','da1c69',956,957,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1613,1,_binary 'y™\á#¥Á\'',294,957,956,NULL,227,'2015-03-04 06:00:00','4b7fc6',958,959,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1614,1,_binary 'G• é…˜¯',294,959,958,NULL,228,'2015-03-04 06:00:00','02e2cc',960,961,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1615,1,_binary 'n’UƒúAK˜',294,961,960,NULL,229,'2015-03-04 06:00:00','80e747',962,963,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1616,1,_binary 'GC\åKí½œ\Õ',294,963,962,NULL,230,'2015-03-04 06:00:00','ebfc1e',964,965,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1617,1,_binary '\r”#þjÕ�',294,965,964,NULL,231,'2015-03-04 06:00:00','03a5de',966,967,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1618,1,_binary '\Ô+Ž’—Q9',294,967,966,NULL,232,'2015-03-04 06:00:00','a9f81f',968,969,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1619,1,_binary 'gs\Ç%«øÚ”',294,969,968,NULL,233,'2015-03-04 06:00:00','5f24f7',970,971,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1620,1,_binary 'U\\‘%\ìýº\Î',294,971,970,NULL,234,'2015-03-04 06:00:00','1dc094',972,973,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1621,1,_binary 'Lr\õ½bsO=',294,973,972,NULL,235,'2015-03-04 06:00:00','b64ff5',974,975,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1622,1,_binary '’Ÿ�<\ÒT\Ãý',294,975,974,NULL,236,'2015-03-04 06:00:00','c2c2a0',976,977,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1623,1,_binary '«Õ—¼hœ—J',294,977,976,NULL,237,'2015-03-04 06:00:00','46bc6a',978,979,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1624,1,_binary ' \èª\Î-À>',294,979,978,NULL,238,'2015-03-04 06:00:00','1486bb',980,981,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1625,1,_binary 'Œ¹,½\Ó7\îm',294,981,980,NULL,239,'2015-03-04 06:00:00','d353de',982,983,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1626,1,_binary '»[\ëx¶x¤',294,983,982,NULL,240,'2015-03-04 06:00:00','ee3e02',984,985,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1627,1,_binary '­胒ȯ',294,985,984,NULL,241,'2015-03-04 06:00:00','aee82f',986,987,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1628,1,_binary '\Â\Ìý)¹Z�',294,987,986,NULL,242,'2015-03-04 06:00:00','1bc480',988,989,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1629,1,_binary '\÷ƒ\r†*\ê\0b',294,989,988,NULL,243,'2015-03-04 06:00:00','b7666c',990,991,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1630,1,_binary '\Ø=Ž\ðZDt',294,991,990,NULL,244,'2015-03-04 06:00:00','4d4102',992,993,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1631,1,_binary '\ðI)®\ô\ç�',294,993,992,NULL,245,'2015-03-04 06:00:00','280c9b',994,995,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1632,1,_binary '\ØÛ˜ˆ\ÍM\Ì\ó',294,995,994,NULL,246,'2015-03-04 06:00:00','da9edf',996,997,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1633,1,_binary 'd \Úú',294,997,996,NULL,247,'2015-03-04 06:00:00','966fbf',998,999,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1634,1,_binary '\Ã)1–SZ ',294,999,998,NULL,248,'2015-03-04 06:00:00','3647c9',1000,1001,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1635,1,_binary '9;Œ¼U\ö',294,1001,1000,NULL,249,'2015-03-04 06:00:00','5992b2',1002,1003,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1636,1,_binary '\ÂQ!0\í',294,1003,1002,NULL,250,'2015-03-04 06:00:00','a2cd41',1004,1005,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1637,1,_binary 'e,0Cü‰',294,1005,1004,NULL,251,'2015-03-04 06:00:00','411d40',1006,1007,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1638,1,_binary 'K\É%IšE8g',294,1007,1006,NULL,252,'2015-03-04 06:00:00','afa44b',1008,1009,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1639,1,_binary 'û•œL=J',294,1009,1008,NULL,253,'2015-03-04 06:00:00','89ee84',1010,1011,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1640,1,_binary ' \n\\–¯­g~',294,1011,1010,NULL,254,'2015-03-04 06:00:00','a312b2',1012,1013,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1641,1,_binary '\Æ-–\ÛJ\ñ%',294,1013,1012,NULL,255,'2015-03-04 06:00:00','f9ede4',1014,1015,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1642,1,_binary '\ãs½`w\Ã',294,1015,1014,NULL,256,'2015-03-04 06:00:00','a85d53',1016,1017,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1643,1,_binary '_\Ó6šf¡a\æ',294,1017,1016,NULL,257,'2015-03-04 06:00:00','728968',1018,1019,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1644,1,_binary 'iý\Ä\æ!@ÿ',294,1019,1018,NULL,258,'2015-03-04 06:00:00','f72a92',1020,1021,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1645,1,_binary '½\Þ\á‰%e¶',294,1021,1020,NULL,259,'2015-03-04 06:00:00','842b50',1022,1023,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1646,1,_binary 'x\Ä\Ã,} ',294,1023,1022,NULL,260,'2015-03-04 06:00:00','5f7a41',1024,1025,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1647,1,_binary '‹¾#\\\á’c*',294,1025,1024,NULL,261,'2015-03-04 06:00:00','153ce5',1026,1027,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1648,1,_binary '\"£3mNqœw',294,1027,1026,NULL,262,'2015-03-04 06:00:00','ce6ccd',1028,1029,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1649,1,_binary 'Vgf\î.DA',294,1029,1028,NULL,263,'2015-03-04 06:00:00','107694',1030,1031,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1650,1,_binary 'û)\Ãm:8\ê\Z',294,1031,1030,NULL,264,'2015-03-04 06:00:00','ef6bc6',1032,1033,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1651,1,_binary 'ŠÁ¬‡\"š ',294,1033,1032,NULL,265,'2015-03-04 06:00:00','d4c021',1034,1035,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1652,1,_binary '¾‘\áÀ\Û\ÅvS',294,1035,1034,NULL,266,'2015-03-04 06:00:00','4e102e',1036,1037,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1653,1,_binary 'h…$Íž=Df',294,1037,1036,NULL,267,'2015-03-04 06:00:00','741b3a',1038,1039,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1654,1,_binary '\æ\ðЮ…CŸ4',294,1039,1038,NULL,268,'2015-03-04 06:00:00','84ff9a',1040,1041,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1655,1,_binary '�š\ËÔ–�_\\',294,1041,1040,NULL,269,'2015-03-04 06:00:00','31a767',1042,1043,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1656,1,_binary 'u*\á\ð�?o‰',294,1043,1042,NULL,270,'2015-03-04 06:00:00','03e972',1044,1045,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1657,1,_binary '?\0~rv±',294,1045,1044,NULL,271,'2015-03-04 06:00:00','569402',1046,1047,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1658,1,_binary 's7§…Õ¡\Ú/',294,1047,1046,NULL,272,'2015-03-04 06:00:00','4ae11f',1048,1049,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1659,1,_binary '\ÖY‰\Õ\ókh*',294,1049,1048,NULL,273,'2015-03-04 06:00:00','eece58',1050,1051,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1660,1,_binary '¬¡s\ð²-‘€',294,1051,1050,NULL,274,'2015-03-04 06:00:00','7effb9',1052,1053,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1661,1,_binary '³2\0\Ä\ÓT27',294,1053,1052,NULL,275,'2015-03-04 06:00:00','f8b5cb',1054,1055,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1662,1,_binary 'e8g­PÇ’\í',294,1055,1054,NULL,276,'2015-03-04 06:00:00','d42e44',1056,1057,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1663,1,_binary '¯LÛŠ \Ð',294,1057,1056,NULL,277,'2015-03-04 06:00:00','457525',1058,1059,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1664,1,_binary 'ÈŠ´³\×',294,1065,1064,NULL,281,'2015-03-04 06:00:00','b7ee6e',1066,1067,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1668,1,_binary '·.—o\ê\ò\÷',294,1067,1066,NULL,282,'2015-03-04 06:00:00','a0330d',1068,1069,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1669,1,_binary 'S}©\Ý0#–',294,1069,1068,NULL,283,'2015-03-04 06:00:00','17eb83',1070,1071,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1670,1,_binary 'F¥\â4\é\"\Ó',294,1071,1070,NULL,284,'2015-03-04 06:00:00','200818',1072,1073,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1671,1,_binary 'ø”�¾Fm',294,1073,1072,NULL,285,'2015-03-04 06:00:00','bf62fc',1074,1075,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1672,1,_binary 'u[‚Šs\Ô*:',294,1075,1074,NULL,286,'2015-03-04 06:00:00','34c998',1076,1077,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1673,1,_binary '\à\'DO\0‘”ƒ',294,1077,1076,NULL,287,'2015-03-04 06:00:00','84ce1d',1078,1079,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1674,1,_binary 'ý\×Qû\ÕÖŸ²',294,1079,1078,NULL,288,'2015-03-04 06:00:00','e8e080',1080,1081,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1675,1,_binary '\È\á!G6F=´',294,1081,1080,NULL,289,'2015-03-04 06:00:00','19481f',1082,1083,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1676,1,_binary '\É\èe¢M‡W5',294,1083,1082,NULL,290,'2015-03-04 06:00:00','2986c2',1084,1085,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1677,1,_binary '@Ž4<‰•B',294,1085,1084,NULL,291,'2015-03-04 06:00:00','614993',1086,1087,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1678,1,_binary '\áwGY\ô',294,1087,1086,NULL,292,'2015-03-04 06:00:00','fd866a',1088,1089,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1679,1,_binary '\0\ïQ\Èc=·',294,1089,1088,NULL,293,'2015-03-04 06:00:00','866407',1090,1091,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1680,1,_binary '¹™\ÉT\Ý\n',294,1091,1090,NULL,294,'2015-03-04 06:00:00','1aa406',1092,1093,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1681,1,_binary 'L\÷\î\âµÄ£\Ë',294,1093,1092,NULL,295,'2015-03-04 06:00:00','5a66e4',1094,1095,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1682,1,_binary '€›\\s‹ø\í',294,1095,1094,NULL,296,'2015-03-04 06:00:00','906cc4',1096,1097,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1683,1,_binary 'Ŭa7\Ø6‚-',294,1097,1096,NULL,297,'2015-03-04 06:00:00','5721e0',1098,1099,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1684,1,_binary '…<–\ïy\Òú»',294,1099,1098,NULL,298,'2015-03-04 06:00:00','a35eda',1100,1101,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1685,1,_binary '¶kh�7\Ü\õ',294,1101,1100,NULL,299,'2015-03-04 06:00:00','2057c0',1102,1103,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1686,1,_binary 'G\äq¯º&x\Æ',294,1103,1102,NULL,300,'2015-03-04 06:00:00','28e184',1104,1105,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1687,1,_binary 'S\Ϫ\'c',294,1105,1104,NULL,301,'2015-03-04 06:00:00','bb2b7a',1106,1107,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1688,1,_binary 'd”\àM\à;',294,1107,1106,NULL,302,'2015-03-04 06:00:00','9375ca',1108,1109,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1689,1,_binary '–ý\Ö7\ôQ\ËE',294,1109,1108,NULL,303,'2015-03-04 06:00:00','6c5fc9',1110,1111,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1690,1,_binary ']\â8\ã\Ú\ë)\Ç',294,1111,1110,NULL,304,'2015-03-04 06:00:00','91747e',1112,1113,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1691,1,_binary '\ÃX\ók\ô\á“',294,1113,1112,NULL,305,'2015-03-04 06:00:00','06b710',1114,1115,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1692,1,_binary '…\ì\Âs \Û\ö',294,1115,1114,NULL,306,'2015-03-04 06:00:00','b912eb',1116,1117,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1693,1,_binary 'nû_¡r\é',294,1117,1116,NULL,307,'2015-03-04 06:00:00','9344a2',1118,1119,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1694,1,_binary 'I••\𯷠p',294,1119,1118,NULL,308,'2015-03-04 06:00:00','0a92bd',1120,1121,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1695,1,_binary '\Ä[\ñf%“¯|',294,1121,1120,NULL,309,'2015-03-04 06:00:00','a22b7a',1122,1123,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1696,1,_binary '´Ƥƒ\ÈS\Í',294,1123,1122,NULL,310,'2015-03-04 06:00:00','04a319',1124,1125,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1697,1,_binary '\Í\é#\0¸~ýk',294,1125,1124,NULL,311,'2015-03-04 06:00:00','aa8335',1126,1127,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1698,1,_binary '0%*\É=\öc\Ã',294,1127,1126,NULL,312,'2015-03-04 06:00:00','24920b',1128,1129,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1699,1,_binary '`O$�›¯“',294,1129,1128,NULL,313,'2015-03-04 06:00:00','14df12',1130,1131,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1700,1,_binary '’–T`À',294,1131,1130,NULL,314,'2015-03-04 06:00:00','2b1e48',1132,1133,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1701,1,_binary '=\Ü\ç³qz\Zz',294,1133,1132,NULL,315,'2015-03-04 06:00:00','268f41',1134,1135,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1702,1,_binary 'F‘‰³W\ÍN',294,1135,1134,NULL,316,'2015-03-04 06:00:00','5b54ad',1136,1137,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1703,1,_binary 'Xn\ö½3·Gý',294,1137,1136,NULL,317,'2015-03-04 06:00:00','1d0b14',1138,1139,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1704,1,_binary '\n\é\ÂuVÿÝ–',294,1139,1138,NULL,318,'2015-03-04 06:00:00','efeecf',1140,1141,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1705,1,_binary '\Ê/®†”c',294,1141,1140,NULL,319,'2015-03-04 06:00:00','a747d3',1142,1143,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1706,1,_binary '0ª\æ\ÔS.ƒ',294,1143,1142,NULL,320,'2015-03-04 06:00:00','4bb42b',1144,1145,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1707,1,_binary '\ÉÍ¡\ä\â¢\éa',294,1145,1144,NULL,321,'2015-03-04 06:00:00','75a878',1146,1147,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1708,1,_binary '‘Sün\õe3',294,1147,1146,NULL,322,'2015-03-04 06:00:00','280936',1148,1149,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1709,1,_binary '\ê§\\ê',294,1149,1148,NULL,323,'2015-03-04 06:00:00','5ccfc5',1150,1151,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1710,1,_binary '“no&Oµ \Í',294,1151,1150,NULL,324,'2015-03-04 06:00:00','54a390',1152,1153,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1711,1,_binary '.›˜1;=ˆ',294,1153,1152,NULL,325,'2015-03-04 06:00:00','c263e6',1154,1155,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1712,1,_binary 'P\Ñ\ò\Ø\Ý\Ówÿ',294,1155,1154,NULL,326,'2015-03-04 06:00:00','4adaa9',1156,1157,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1713,1,_binary '\Z\Î\Z*3t\æ>',294,1157,1156,NULL,327,'2015-03-04 06:00:00','d9d527',1158,1159,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1714,1,_binary 'Эe`@\õ`\Ø',294,1159,1158,NULL,328,'2015-03-04 06:00:00','6df022',1160,1161,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1715,1,_binary '¦µ2µdªÀ\è',294,1161,1160,NULL,329,'2015-03-04 06:00:00','8546e8',1162,1163,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1716,1,_binary '\ÞB\ò¬@\Éu',294,1163,1162,NULL,330,'2015-03-04 06:00:00','48adca',1164,1165,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1717,1,_binary 'þšSb\ç:\ä',294,1165,1164,NULL,331,'2015-03-04 06:00:00','c0aa90',1166,1167,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1718,1,_binary 'D\Ã\Þ? \0\ê~',294,1167,1166,NULL,332,'2015-03-04 06:00:00','5d8715',1168,1169,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1719,1,_binary '•‰\Ö_‘\çþ\'',294,1169,1168,NULL,333,'2015-03-04 06:00:00','c01f32',1170,1171,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1720,1,_binary 'oB3É \Ô~\È',294,1171,1170,NULL,334,'2015-03-04 06:00:00','d2f6d3',1172,1173,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1721,1,_binary '( N=\ô®A',294,1173,1172,NULL,335,'2015-03-04 06:00:00','d2758c',1174,1175,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1722,1,_binary '\ã\Ø\0?›œ\Þm',294,1175,1174,NULL,336,'2015-03-04 06:00:00','bbdeca',1176,1177,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1723,1,_binary '/t{\ómPƒ',294,1177,1176,NULL,337,'2015-03-04 06:00:00','980946',1178,1179,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1724,1,_binary '\ìU‘ƒž0',294,1179,1178,NULL,338,'2015-03-04 06:00:00','f315ec',1180,1181,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1725,1,_binary 'ƒ}„š;\áN¯',294,1181,1180,NULL,339,'2015-03-04 06:00:00','cecaaa',1182,1183,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1726,1,_binary '¶a\Þ]‡\÷\"',294,1183,1182,NULL,340,'2015-03-04 06:00:00','b7db76',1184,1185,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1727,1,_binary '‚À\óR\ÍN€',294,1185,1184,NULL,341,'2015-03-04 06:00:00','8649ce',1186,1187,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1728,1,_binary '+\Ë~´ºè´²',294,1187,1186,NULL,342,'2015-03-04 06:00:00','cf5469',1188,1189,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1729,1,_binary ' €‚ø™\åÔ¦',294,1189,1188,NULL,343,'2015-03-04 06:00:00','2667ea',1190,1191,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1730,1,_binary 'Ö…;›NLW‹',294,1191,1190,NULL,344,'2015-03-04 06:00:00','3f8a64',1192,1193,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1731,1,_binary 'ª¿\Ö,Kh†',294,1193,1192,NULL,345,'2015-03-04 06:00:00','4c4427',1194,1195,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1732,1,_binary '\ô¼\\0ÿ\Ã%C',294,1195,1194,NULL,346,'2015-03-04 06:00:00','7fecfa',1196,1197,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1733,1,_binary 'J…\óm5¢§',294,1197,1196,NULL,347,'2015-03-04 06:00:00','98f4c0',1198,1199,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1734,1,_binary 'U±–\Åw�C',294,1199,1198,NULL,348,'2015-03-04 06:00:00','be4209',1200,1201,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1735,1,_binary '_‚�¨\î“\à',294,1201,1200,NULL,349,'2015-03-04 06:00:00','34dcef',1202,1203,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1736,1,_binary '\êVR‡»€]4',294,1203,1202,NULL,350,'2015-03-04 06:00:00','ab741c',1204,1205,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1737,1,_binary 'GP\᪠œ',294,1205,1204,NULL,351,'2015-03-04 06:00:00','cd9673',1206,1207,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1738,1,_binary 'y\Ù¸Cp¨^',294,1207,1206,NULL,352,'2015-03-04 06:00:00','017bab',1208,1209,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1739,1,_binary '\Ìppx ¤„',294,1209,1208,NULL,353,'2015-03-04 06:00:00','db44d8',1210,1211,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1740,1,_binary '[ \Z:\Ð\ï\æR',294,1211,1210,NULL,354,'2015-03-04 06:00:00','0d31c2',1212,1213,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1741,1,_binary 'ªŒ‚\ÐEw »',294,1213,1212,NULL,355,'2015-03-04 06:00:00','c7db32',1214,1215,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1742,1,_binary '\Ã\÷¨c‹•ù',294,1215,1214,NULL,356,'2015-03-04 06:00:00','fd5062',1216,1217,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1743,1,_binary '\ß\ñ\ï\ó\Ò:§g',294,1217,1216,NULL,357,'2015-03-04 06:00:00','6ada32',1218,1219,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1744,1,_binary '•\Ùp6;@ž',294,1219,1218,NULL,358,'2015-03-04 06:00:00','1aec12',1220,1221,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1745,1,_binary '4F„Í¡\Ûb5',294,1221,1220,NULL,359,'2015-03-04 06:00:00','61b2a6',1222,1223,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1746,1,_binary '\ë\ß\é©,B|',294,1223,1222,NULL,360,'2015-03-04 06:00:00','e0f95b',1224,1225,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1747,1,_binary 'µ\Å9H¡,\õ\á',294,1225,1224,NULL,361,'2015-03-04 06:00:00','28cfba',1226,1227,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1748,1,_binary '\ë\Ê\õc\öž',294,1227,1226,NULL,362,'2015-03-04 06:00:00','4ff8b3',1228,1229,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1749,1,_binary '\ëP²–£Ž]•',294,1229,1228,NULL,363,'2015-03-04 06:00:00','1ebe10',1230,1231,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1750,1,_binary '±y\ï±fF^',294,1231,1230,NULL,364,'2015-03-04 06:00:00','c337aa',1232,1233,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1751,1,_binary 'ɽ\Ý~\Ç(\Ó ',294,1233,1232,NULL,365,'2015-03-04 06:00:00','b36f63',1234,1235,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1752,1,_binary '�þ‡ \å[§i',294,1235,1234,NULL,366,'2015-03-04 06:00:00','fcdc9d',1236,1237,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1753,1,_binary '\ð “\ÉZS¿',294,1237,1236,NULL,367,'2015-03-04 06:00:00','f3f09a',1238,1239,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1754,1,_binary '«®t\nc0',294,1239,1238,NULL,368,'2015-03-04 06:00:00','e320af',1240,1241,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1755,1,_binary 'K \ÃÙ²\n\ê',294,1241,1240,NULL,369,'2015-03-04 06:00:00','ca47c3',1242,1243,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1756,1,_binary '‚Ç�0I�R',294,1243,1242,NULL,370,'2015-03-04 06:00:00','6ec959',1244,1245,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1757,1,_binary '¤ª§vp1r',294,1245,1244,NULL,371,'2015-03-04 06:00:00','a1c1e9',1246,1247,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1758,1,_binary '~\Z~Mœ\ÆRn',294,1247,1246,NULL,372,'2015-03-04 06:00:00','2ccf56',1248,1249,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1759,1,_binary '6\Â\Õ‹ü\ò#',294,1249,1248,NULL,373,'2015-03-04 06:00:00','7c2ee9',1250,1251,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1760,1,_binary '\Í\"©Ô˜c',294,1251,1250,NULL,374,'2015-03-04 06:00:00','909f17',1252,1253,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1761,1,_binary '\É\rÈ£KÀ \Þ',294,1253,1252,NULL,375,'2015-03-04 06:00:00','a983da',1254,1255,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1762,1,_binary '3&¾1‡\ï',294,1255,1254,NULL,376,'2015-03-04 06:00:00','83429f',1256,1257,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1763,1,_binary '\Å\àc¯F\ÈŒ',294,1257,1256,NULL,377,'2015-03-04 06:00:00','802469',1258,1259,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1764,1,_binary 'ú\ìJ¨{ªud',294,1259,1258,NULL,378,'2015-03-04 06:00:00','8dbabf',1260,1261,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1765,1,_binary '½\î¾O\Å9y',294,1261,1260,NULL,379,'2015-03-04 06:00:00','dcda88',1262,1263,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1766,1,_binary 't\Â\ð\×WD¸@',294,1263,1262,NULL,380,'2015-03-04 06:00:00','27a0ef',1264,1265,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1767,1,_binary 'io#V6X\õh',294,1265,1264,NULL,381,'2015-03-04 06:00:00','5e7b4d',1266,1267,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1768,1,_binary '\í\'ž¬R¶s',294,1267,1266,NULL,382,'2015-03-04 06:00:00','ff3641',1268,1269,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1769,1,_binary '%ZÿUƒ\ãİ',294,1269,1268,NULL,383,'2015-03-04 06:00:00','e4577f',1270,1271,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1770,1,_binary 'aÆ�+´p¾',294,1271,1270,NULL,384,'2015-03-04 06:00:00','f0f242',1272,1273,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1771,1,_binary '\ó`%¶úq',294,1273,1272,NULL,385,'2015-03-04 06:00:00','b16e5f',1274,1275,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1772,1,_binary 'k~P9I K',294,1275,1274,NULL,386,'2015-03-04 06:00:00','d43f7f',1276,1277,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1773,1,_binary 'UüroQ\ê\Ü*',294,1277,1276,NULL,387,'2015-03-04 06:00:00','e8c9a1',1278,1279,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1774,1,_binary '\é\ÅUz\å\Æ ',294,1279,1278,NULL,388,'2015-03-04 06:00:00','c1f268',1280,1281,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1775,1,_binary '“\ÏÍ•|0',294,1281,1280,NULL,389,'2015-03-04 06:00:00','5e3f8d',1282,1283,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1776,1,_binary '\ÌVA\ô“\\³·',294,1283,1282,NULL,390,'2015-03-04 06:00:00','786aa5',1284,1285,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1777,1,_binary ' \Ä\Ü\ð \n™',294,1285,1284,NULL,391,'2015-03-04 06:00:00','695441',1286,1287,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1778,1,_binary 'R[\í°\ì\Í',294,1287,1286,NULL,392,'2015-03-04 06:00:00','021162',1288,1289,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1779,1,_binary '\'\Ë{5\Óù4',294,1289,1288,NULL,393,'2015-03-04 06:00:00','6527a2',1290,1291,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1780,1,_binary '+�]/`b\ØK',294,1291,1290,NULL,394,'2015-03-04 06:00:00','accf64',1292,1293,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1781,1,_binary '?«$\í–zk',294,1293,1292,NULL,395,'2015-03-04 06:00:00','d1924c',1294,1295,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1782,1,_binary 'S.�t1_i',294,1295,1294,NULL,396,'2015-03-04 06:00:00','41e5e7',1296,1297,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1783,1,_binary '\Zœ\ãiV�%',294,1297,1296,NULL,397,'2015-03-04 06:00:00','448c38',1298,1299,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1784,1,_binary '³9S ˜$',294,1299,1298,NULL,398,'2015-03-04 06:00:00','55a2f8',1300,1301,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1785,1,_binary '\ë\ö™³\Õb',294,1301,1300,NULL,399,'2015-03-04 06:00:00','7b1c7f',1302,1303,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1786,1,_binary 'E�®7’6šH',294,1303,1302,NULL,400,'2015-03-04 06:00:00','62744d',1304,1305,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1787,1,_binary 'y³’0\Êȧ',294,1305,1304,NULL,401,'2015-03-04 06:00:00','9f869d',1306,1307,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1788,1,_binary '¢c&…3d\ÚW',294,1307,1306,NULL,402,'2015-03-04 06:00:00','893dc0',1308,1309,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1789,1,_binary 'ayL›§³',294,1309,1308,NULL,403,'2015-03-04 06:00:00','4dbe7f',1310,1311,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1790,1,_binary 'Ä�\ëx\éݤ‘',294,1311,1310,NULL,404,'2015-03-04 06:00:00','22d369',1312,1313,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1791,1,_binary 'B\òG<¡\Å',294,1313,1312,NULL,405,'2015-03-04 06:00:00','de4a4c',1314,1315,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1792,1,_binary '´w\ÙB\÷Ÿ^',294,1315,1314,NULL,406,'2015-03-04 06:00:00','8a9e27',1316,1317,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1793,1,_binary '¬Â¨\È\×\Úÿr',294,1317,1316,NULL,407,'2015-03-04 06:00:00','cf9561',1318,1319,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1794,1,_binary ' Á\0À\Ë\Ú*\×',294,1319,1318,NULL,408,'2015-03-04 06:00:00','b053ea',1320,1321,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1795,1,_binary 'v¯Qdýg?',294,1321,1320,NULL,409,'2015-03-04 06:00:00','d49c35',1322,1323,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1796,1,_binary '¶¨Tw‘¿h…',294,1323,1322,NULL,410,'2015-03-04 06:00:00','5238dd',1324,1325,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1797,1,_binary '\ÝGg5O`',294,1325,1324,NULL,411,'2015-03-04 06:00:00','64bd92',1326,1327,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1798,1,_binary 'ý�\õ#(‰\Ú',294,1327,1326,NULL,412,'2015-03-04 06:00:00','3bd2a9',1328,1329,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1799,1,_binary 'XGÁ\áD 5',294,1329,1328,NULL,413,'2015-03-04 06:00:00','8713f2',1330,1331,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1800,1,_binary 'Y;\ÙE r\ñ‡',294,1331,1330,NULL,414,'2015-03-04 06:00:00','8ef5d2',1332,1333,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1801,1,_binary 'gFݯ\ÞG&2',294,1333,1332,NULL,415,'2015-03-04 06:00:00','e34e4d',1334,1335,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1802,1,_binary '`\ñ\ÝÃ�}T',294,1335,1334,NULL,416,'2015-03-04 06:00:00','b95ec8',1336,1337,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1803,1,_binary '‰�S§™»8',294,1337,1336,NULL,417,'2015-03-04 06:00:00','df429f',1338,1339,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1804,1,_binary '”S¬\òM\äs',294,1339,1338,NULL,418,'2015-03-04 06:00:00','88d0a9',1340,1341,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1805,1,_binary '²X3ÀD±',294,1341,1340,NULL,419,'2015-03-04 06:00:00','4065de',1342,1343,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1806,1,_binary '\Í\öúEι',294,1343,1342,NULL,420,'2015-03-04 06:00:00','8b2442',1344,1345,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1807,1,_binary 'µ\ô¨Å°›±V',294,1345,1344,NULL,421,'2015-03-04 06:00:00','12cb54',1346,1347,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1808,1,_binary 'e$‚rЃi',294,1347,1346,NULL,422,'2015-03-04 06:00:00','f2cfcd',1348,1349,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1809,1,_binary 'b:b–I\\M',294,1349,1348,NULL,423,'2015-03-04 06:00:00','39dd79',1350,1351,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1810,1,_binary 'w\Þ.\Òq\r¦',294,1351,1350,NULL,424,'2015-03-04 06:00:00','805acc',1352,1353,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1811,1,_binary '\Õ\\Eƒ¥\Í',294,1353,1352,NULL,425,'2015-03-04 06:00:00','df947b',1354,1355,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1812,1,_binary '«,ݨ-R·¨',294,1355,1354,NULL,426,'2015-03-04 06:00:00','0f4a22',1356,1357,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1813,1,_binary '.\Í \"­G',294,1357,1356,NULL,427,'2015-03-04 06:00:00','dfa940',1358,1359,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1814,1,_binary '\0\ï\ä>{L:i',294,1359,1358,NULL,428,'2015-03-04 06:00:00','8517a8',1360,1361,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1815,1,_binary 'Kma¯.hZ§',294,1361,1360,NULL,429,'2015-03-04 06:00:00','07e2a7',1362,1363,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1816,1,_binary '\Ê.¿\Ì\Æ\èž^',294,1363,1362,NULL,430,'2015-03-04 06:00:00','5aac25',1364,1365,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1817,1,_binary '>\Z‰g\éÄ›',294,1365,1364,NULL,431,'2015-03-04 06:00:00','cdf208',1366,1367,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1818,1,_binary '\r{\ÜÍ”uÔ¤',294,1367,1366,NULL,432,'2015-03-04 06:00:00','08707d',1368,1369,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1819,1,_binary 'Ô� ™š',294,1369,1368,NULL,433,'2015-03-04 06:00:00','842092',1370,1371,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1820,1,_binary 't%%‚„+d',294,1371,1370,NULL,434,'2015-03-04 06:00:00','65611b',1372,1373,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1821,1,_binary '\êÿ\ôư\Ïw',294,1373,1372,NULL,435,'2015-03-04 06:00:00','df11f2',1374,1375,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1822,1,_binary 'T±œÿ�;¸)',294,1375,1374,NULL,436,'2015-03-04 06:00:00','717e44',1376,1377,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1823,1,_binary '\ä•\n\n�\ÖE',294,1377,1376,NULL,437,'2015-03-04 06:00:00','d36564',1378,1379,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1824,1,_binary '§00#°\á\ï\Í',294,1379,1378,NULL,438,'2015-03-04 06:00:00','781158',1380,1381,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1825,1,_binary 'ƒ;�—?\é|¶',294,1381,1380,NULL,439,'2015-03-04 06:00:00','d1e43b',1382,1383,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1826,1,_binary 'u�Ÿ\â9?\Ó',294,1383,1382,NULL,440,'2015-03-04 06:00:00','0eadf6',1384,1385,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1827,1,_binary '\æ}…ROT(1',294,1385,1384,NULL,441,'2015-03-04 06:00:00','8d8266',1386,1387,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1828,1,_binary 'u†Ã˜D\"–',294,1387,1386,NULL,442,'2015-03-04 06:00:00','927a47',1388,1389,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1829,1,_binary 'P \Úi�\Öýy',294,1389,1388,NULL,443,'2015-03-04 06:00:00','f945cc',1390,1391,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1830,1,_binary 'o\ã$µ\ÈEH',294,1391,1390,NULL,444,'2015-03-04 06:00:00','7c2e2b',1392,1393,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1831,1,_binary 'MW낸”º',294,1393,1392,NULL,445,'2015-03-04 06:00:00','5bcb49',1394,1395,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1832,1,_binary 'c§£°ùO‘6',294,1395,1394,NULL,446,'2015-03-04 06:00:00','3390cb',1396,1397,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1833,1,_binary 'Ò¦À\n\ÖS\\L',294,1397,1396,NULL,447,'2015-03-04 06:00:00','729f3c',1398,1399,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1834,1,_binary '•|n…=ø‘',294,1399,1398,NULL,448,'2015-03-04 06:00:00','dbfb72',1400,1401,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1835,1,_binary 'n›\ßd/s¦\Ç',294,1401,1400,NULL,449,'2015-03-04 06:00:00','7fde54',1402,1403,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1836,1,_binary 'ø\ç\Ô,VR',294,1403,1402,NULL,450,'2015-03-04 06:00:00','809975',1404,1405,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1837,1,_binary '#w\Ïrù¦\å',294,1405,1404,NULL,451,'2015-03-04 06:00:00','62507a',1406,1407,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1838,1,_binary '¨4\ì8\"•ÿ',294,1407,1406,NULL,452,'2015-03-04 06:00:00','820595',1408,1409,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1839,1,_binary 'Ÿ0Ö�]^\Î\ï',294,1409,1408,NULL,453,'2015-03-04 06:00:00','35f766',1410,1411,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1840,1,_binary '‹\ÑOMœ\Õ\Ü',294,1411,1410,NULL,454,'2015-03-04 06:00:00','ae88a4',1412,1413,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1841,1,_binary '³bi\É庳',294,1413,1412,NULL,455,'2015-03-04 06:00:00','96ab2d',1414,1415,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1842,1,_binary '?gƇYŒ\Ó',294,1415,1414,NULL,456,'2015-03-04 06:00:00','3f0ca1',1416,1417,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1843,1,_binary '\\Ú½\Þj\ôA�',294,1417,1416,NULL,457,'2015-03-04 06:00:00','199303',1418,1419,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1844,1,_binary 'b\"\íd¢R3D',294,1419,1418,NULL,458,'2015-03-04 06:00:00','f66ffd',1420,1421,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1845,1,_binary 'ª³ƒ\ß\â ù',294,1421,1420,NULL,459,'2015-03-04 06:00:00','8fa343',1422,1423,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1846,1,_binary '…\Òù\\j\Ê ',294,1423,1422,NULL,460,'2015-03-04 06:00:00','f60231',1424,1425,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1847,1,_binary 'e@t¶#',294,1425,1424,NULL,461,'2015-03-04 06:00:00','5ac7bb',1426,1427,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1848,1,_binary '�S´>©&wP',294,1427,1426,NULL,462,'2015-03-04 06:00:00','86e416',1428,1429,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1849,1,_binary '\Ô?\æS\÷',294,1429,1428,NULL,463,'2015-03-04 06:00:00','9b8bd3',1430,1431,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1850,1,_binary 'W\Ò\èF|C\ë',294,1431,1430,NULL,464,'2015-03-04 06:00:00','749152',1432,1433,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1851,1,_binary '\ßMu\òn—œ',294,1433,1432,NULL,465,'2015-03-04 06:00:00','4944ad',1434,1435,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1852,1,_binary '9W¹3J ¥',294,1435,1434,NULL,466,'2015-03-04 06:00:00','0d55dd',1436,1437,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1853,1,_binary 'nS\Íwh’}Z',294,1437,1436,NULL,467,'2015-03-04 06:00:00','702cdd',1438,1439,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1854,1,_binary '}‚$&y4¦ ',294,1439,1438,NULL,468,'2015-03-04 06:00:00','7aa1d2',1440,1441,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1855,1,_binary 'Sï>´±\Zž',294,1441,1440,NULL,469,'2015-03-04 06:00:00','d90326',1442,1443,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1856,1,_binary '\Ðݾ¸f]Î’',294,1443,1442,NULL,470,'2015-03-04 06:00:00','8fbc05',1444,1445,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1857,1,_binary '9[ e\ö\ð_f',294,1445,1444,NULL,471,'2015-03-04 06:00:00','7d5bd7',1446,1447,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1858,1,_binary '_Ú�\Ú)µZ',294,1447,1446,NULL,472,'2015-03-04 06:00:00','c16017',1448,1449,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1859,1,_binary '\Ò.\Μ¾˜',294,1449,1448,NULL,473,'2015-03-04 06:00:00','299283',1450,1451,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1860,1,_binary '£¡�mþ¯É¬',294,1451,1450,NULL,474,'2015-03-04 06:00:00','475525',1452,1453,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1861,1,_binary 'œ‰\ì�`”l²',294,1453,1452,NULL,475,'2015-03-04 06:00:00','d90c8c',1454,1455,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1862,1,_binary '\ð9\é°_Ÿ',294,1455,1454,NULL,476,'2015-03-04 06:00:00','1a1970',1456,1457,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1863,1,_binary 'Š¿®\Ø+r',294,1457,1456,NULL,477,'2015-03-04 06:00:00','bb1fe4',1458,1459,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1864,1,_binary '\ë\î/:�™�',294,1459,1458,NULL,478,'2015-03-04 06:00:00','ad4bbb',1460,1461,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1865,1,_binary '9…uQ*}¥Œ',294,1461,1460,NULL,479,'2015-03-04 06:00:00','ac9d03',1462,1463,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1866,1,_binary ';uI(7š\óF',294,1463,1462,NULL,480,'2015-03-04 06:00:00','e94355',1464,1465,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1867,1,_binary '½‰´‡šØ­�',294,1465,1464,NULL,481,'2015-03-04 06:00:00','57f28f',1466,1467,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1868,1,_binary '˜h¨n\çU:',294,1467,1466,NULL,482,'2015-03-04 06:00:00','6113f8',1468,1469,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1869,1,_binary 'þ_€\Ó\õ³&',294,1469,1468,NULL,483,'2015-03-04 06:00:00','91649d',1470,1471,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1870,1,_binary 'ë¾¼\ß1\Ð\Þ',294,1471,1470,NULL,484,'2015-03-04 06:00:00','5ff07e',1472,1473,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1871,1,_binary '\Æ^\×Þ˜•N\Ï',294,1473,1472,NULL,485,'2015-03-04 06:00:00','387d5e',1474,1475,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1872,1,_binary '¸‰K\Ø(+\ä',294,1475,1474,NULL,486,'2015-03-04 06:00:00','75f275',1476,1477,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1873,1,_binary 'ȸƒø«‰\Ö',294,1477,1476,NULL,487,'2015-03-04 06:00:00','312b5b',1478,1479,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1874,1,_binary '\r6\Óû³\æK\Ð',294,1479,1478,NULL,488,'2015-03-04 06:00:00','733980',1480,1481,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1875,1,_binary '\àDB!2$‰Œ',294,1481,1480,NULL,489,'2015-03-04 06:00:00','de9697',1482,1483,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1876,1,_binary 'QI¢Z\\t\Zÿ',294,1483,1482,NULL,490,'2015-03-04 06:00:00','558f12',1484,1485,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1877,1,_binary 'K!0\Ï*=š',294,1485,1484,NULL,491,'2015-03-04 06:00:00','0ac3e7',1486,1487,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1878,1,_binary '+\é\çÿHf',294,1487,1486,NULL,492,'2015-03-04 06:00:00','d4e080',1488,1489,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1879,1,_binary '\ç<^«8I=\Ó',294,1489,1488,NULL,493,'2015-03-04 06:00:00','15d701',1490,1491,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1880,1,_binary '„\åC\ó³8\Û',294,1491,1490,NULL,494,'2015-03-04 06:00:00','ee91fe',1492,1493,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1881,1,_binary '�~\ã¶\ô\ÄÌ¡',294,1493,1492,NULL,495,'2015-03-04 06:00:00','7acd5e',1494,1495,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1882,1,_binary 'PütŒ¾Œx@',294,1495,1494,NULL,496,'2015-03-04 06:00:00','6841bb',1496,1497,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1883,1,_binary ' \ÉM\ã“\ì',294,1497,1496,NULL,497,'2015-03-04 06:00:00','04943e',1498,1499,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1884,1,_binary 'Å¢4+\çµ\à',294,1499,1498,NULL,498,'2015-03-04 06:00:00','9387c3',1500,1501,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1885,1,_binary '\Ì\ÊF¬úÁc\Ê',294,1501,1500,NULL,499,'2015-03-04 06:00:00','903cae',1502,1503,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1886,1,_binary '¹„/c,{·?',294,1503,1502,NULL,500,'2015-03-04 06:00:00','faaac4',1504,1505,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1887,1,_binary 'hJγ\ôžO',294,1505,1504,NULL,501,'2015-03-04 06:00:00','e84ba9',1506,1507,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1888,1,_binary 'üÕ“-�wŽ‚',294,1507,1506,NULL,502,'2015-03-04 06:00:00','2572eb',1508,1509,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1889,1,_binary '¥X@6•\Þ',294,1509,1508,NULL,503,'2015-03-04 06:00:00','674b4f',1510,1511,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1890,1,_binary '8a\Ö_øù\ói',294,1511,1510,NULL,504,'2015-03-04 06:00:00','35ee93',1512,1513,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1891,1,_binary '\0E’*;bo',294,1513,1512,NULL,505,'2015-03-04 06:00:00','4a62b6',1514,1515,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1892,1,_binary '¼X<½%',294,1515,1514,NULL,506,'2015-03-04 06:00:00','f5250c',1516,1517,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1893,1,_binary '9©H\Õ4a\Ú',294,1517,1516,NULL,507,'2015-03-04 06:00:00','482e16',1518,1519,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1894,1,_binary ' ±\á�\æ¸',294,1519,1518,NULL,508,'2015-03-04 06:00:00','e078fe',1520,1521,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1895,1,_binary '\re\ï\ð¶S±þ',294,1521,1520,NULL,509,'2015-03-04 06:00:00','899acc',1522,1523,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1896,1,_binary 'º\Ä2\íùÁ',294,1523,1522,NULL,510,'2015-03-04 06:00:00','f36455',1524,1525,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1897,1,_binary '‰1\Æ>\õ',294,1525,1524,NULL,511,'2015-03-04 06:00:00','f4b5a7',1526,1527,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1898,1,_binary 'N>(+pŸ',294,1527,1526,NULL,512,'2015-03-04 06:00:00','5e0edf',1528,1529,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1899,1,_binary '|\Ùù:\Óa ',294,1529,1528,NULL,513,'2015-03-04 06:00:00','6d61f6',1530,1531,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1900,1,_binary '\Öߌ\Öz1£º',294,1531,1530,NULL,514,'2015-03-04 06:00:00','9b6fe0',1532,1533,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1901,1,_binary 'm\Ã4£\Ýl',294,1533,1532,NULL,515,'2015-03-04 06:00:00','a72c6b',1534,1535,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1902,1,_binary '\ÄX¿\Þÿ‚\ì…',294,1535,1534,NULL,516,'2015-03-04 06:00:00','039f17',1536,1537,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1903,1,_binary '\ÏÀ%}£˜~o',294,1537,1536,NULL,517,'2015-03-04 06:00:00','066cd2',1538,1539,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1904,1,_binary 'm{!Ȫl',294,1539,1538,NULL,518,'2015-03-04 06:00:00','a6cc79',1540,1541,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1905,1,_binary 'µ\ÜR,tVk',294,1541,1540,NULL,519,'2015-03-04 06:00:00','01f726',1542,1543,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1906,1,_binary '¨\èUN¥T\àý',294,1543,1542,NULL,520,'2015-03-04 06:00:00','e25f76',1544,1545,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1907,1,_binary 'u¸\ìø\ã\Öø�',294,1545,1544,NULL,521,'2015-03-04 06:00:00','45d4a3',1546,1547,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1908,1,_binary '­î¦³\Õ \àE',294,1547,1546,NULL,522,'2015-03-04 06:00:00','a70852',1548,1549,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1909,1,_binary '4\Â\çŸ\Ëz',294,1549,1548,NULL,523,'2015-03-04 06:00:00','f209c0',1550,1551,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1910,1,_binary 'J\ïjc`\Æv',294,1551,1550,NULL,524,'2015-03-04 06:00:00','fb6139',1552,1553,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1911,1,_binary '.¥\ïœ0ÿŸ',294,1553,1552,NULL,525,'2015-03-04 06:00:00','908f3a',1554,1555,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1912,1,_binary ' ŒKWI\ê¿b',294,1555,1554,NULL,526,'2015-03-04 06:00:00','139354',1556,1557,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1913,1,_binary 'DlO £€D\é',294,1557,1556,NULL,527,'2015-03-04 06:00:00','56bbd0',1558,1559,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1914,1,_binary '\Ð%\ô\Â$¿\Ê',294,1559,1558,NULL,528,'2015-03-04 06:00:00','656791',1560,1561,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1915,1,_binary '¼+è—¨†',294,1561,1560,NULL,529,'2015-03-04 06:00:00','ca428f',1562,1563,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1916,1,_binary '\ì*\á ˜\à\Ý',294,1563,1562,NULL,530,'2015-03-04 06:00:00','df686c',1564,1565,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1917,1,_binary '|2�›\é\àŒ',294,1565,1564,NULL,531,'2015-03-04 06:00:00','c056e6',1566,1567,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1918,1,_binary 'k&»\à0',294,1567,1566,NULL,532,'2015-03-04 06:00:00','5fef48',1568,1569,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1919,1,_binary '\Í¥A\"\ó\î/',294,1569,1568,NULL,533,'2015-03-04 06:00:00','28feba',1570,1571,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1920,1,_binary ',œ\Ø\ë7ižq',294,1571,1570,NULL,534,'2015-03-04 06:00:00','f7e618',1572,1573,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1921,1,_binary '\êAE\ÃK•ý\Æ',294,1573,1572,NULL,535,'2015-03-04 06:00:00','6e4863',1574,1575,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1922,1,_binary 'P@±Œy',294,1575,1574,NULL,536,'2015-03-04 06:00:00','7f4f15',1576,1577,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1923,1,_binary '…^¹�µ\å-9',294,1577,1576,NULL,537,'2015-03-04 06:00:00','020736',1578,1579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1924,1,_binary '„\óB¯MtH\Ý',294,1579,1578,NULL,538,'2015-03-04 06:00:00','77b4ff',1580,1581,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1925,1,_binary 'E\äÿº\Ã)>Á',294,1581,1580,NULL,539,'2015-03-04 06:00:00','155462',1582,1583,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1926,1,_binary 'ˆ“œU„\Ö',294,1583,1582,NULL,540,'2015-03-04 06:00:00','78ad5d',1584,1585,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1927,1,_binary '\ÓP‰üשׁ',294,1585,1584,NULL,541,'2015-03-04 06:00:00','a73bc8',1586,1587,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1928,1,_binary 'ƒŠ_ Û˜',294,1587,1586,NULL,542,'2015-03-04 06:00:00','deee73',1588,1589,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1929,1,_binary 'n\"\ãg^•',294,1589,1588,NULL,543,'2015-03-04 06:00:00','0c1107',1590,1591,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1930,1,_binary '�\Ö\çJ\'_',294,1591,1590,NULL,544,'2015-03-04 06:00:00','ae2089',1592,1593,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1931,1,_binary '1Á\ß\îºd®>',294,1593,1592,NULL,545,'2015-03-04 06:00:00','6b3713',1594,1595,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1932,1,_binary '\áX\'\æ‡\ÅÛ²',294,1595,1594,NULL,546,'2015-03-04 06:00:00','fa1615',1596,1597,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1933,1,_binary 'T6\ÝL Ù¶',294,1597,1596,NULL,547,'2015-03-04 06:00:00','ce1b23',1598,1599,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1934,1,_binary '\ìb�\Ñ]l\ã',294,1599,1598,NULL,548,'2015-03-04 06:00:00','680775',1600,1601,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1935,1,_binary ':\\ \óYK¯',294,1601,1600,NULL,549,'2015-03-04 06:00:00','b94bc2',1602,1603,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1936,1,_binary '/�OP[\ë:\×',294,1603,1602,NULL,550,'2015-03-04 06:00:00','e41341',1604,1605,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1937,1,_binary '€°‹B\×qH\Þ',294,1605,1604,NULL,551,'2015-03-04 06:00:00','f03071',1606,1607,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1938,1,_binary '¦\ÕP«Dd\É:',294,1607,1606,NULL,552,'2015-03-04 06:00:00','fef3c9',1608,1609,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1939,1,_binary '\ì?‚¯’®\Ë',294,1609,1608,NULL,553,'2015-03-04 06:00:00','c5ba9a',1610,1611,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1940,1,_binary 'K¸³vGP',294,1611,1610,NULL,554,'2015-03-04 06:00:00','7ca548',1612,1613,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1941,1,_binary '\Þc˜\òX@\ô\Ç',294,1613,1612,NULL,555,'2015-03-04 06:00:00','941129',1614,1615,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1942,1,_binary '˜\Ì\Ĺ\õNC',294,1615,1614,NULL,556,'2015-03-04 06:00:00','354adf',1616,1617,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1943,1,_binary '\ÓÝ…\òZ¡‹k',294,1617,1616,NULL,557,'2015-03-04 06:00:00','152dfa',1618,1619,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1944,1,_binary ' \㵕\Î.',294,1619,1618,NULL,558,'2015-03-04 06:00:00','e2b927',1620,1621,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1945,1,_binary '=¤`]d12',294,1621,1620,NULL,559,'2015-03-04 06:00:00','80ae63',1622,1623,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1946,1,_binary 'k³s-T“',294,1623,1622,NULL,560,'2015-03-04 06:00:00','dbb9ba',1624,1625,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1947,1,_binary 'ˆ\èÍ©�\ñ3š',294,1625,1624,NULL,561,'2015-03-04 06:00:00','3174e0',1626,1627,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1948,1,_binary ';ü\æ—ù\÷»',294,1627,1626,NULL,562,'2015-03-04 06:00:00','d931f0',1628,1629,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1949,1,_binary 'S¼ Œw\Ìo',294,1629,1628,NULL,563,'2015-03-04 06:00:00','38ef8a',1630,1631,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1950,1,_binary '\õ \Îzú\ð\ë…',294,1631,1630,NULL,564,'2015-03-04 06:00:00','e641e7',1632,1633,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1951,1,_binary '\ôýŠšƒ\Ì\Ý',294,1633,1632,NULL,565,'2015-03-04 06:00:00','a1693e',1634,1635,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1952,1,_binary 'a©\à\Û\ñ½\÷',294,1635,1634,NULL,566,'2015-03-04 06:00:00','bfd5b6',1636,1637,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1953,1,_binary '*�I\ð†�ž',294,1637,1636,NULL,567,'2015-03-04 06:00:00','9bde6d',1638,1639,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1954,1,_binary 'Jm9\ànI\Ñb',294,1639,1638,NULL,568,'2015-03-04 06:00:00','b453e8',1640,1641,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1955,1,_binary '\êbWË«•\è',294,1641,1640,NULL,569,'2015-03-04 06:00:00','051474',1642,1643,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1956,1,_binary '>}=‚D­mv',294,1643,1642,NULL,570,'2015-03-04 06:00:00','5b2b0a',1644,1645,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1957,1,_binary '\É+/û|�c',294,1645,1644,NULL,571,'2015-03-04 06:00:00','51ac7d',1646,1647,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1958,1,_binary '\"޼G¼\äÿ',294,1647,1646,NULL,572,'2015-03-04 06:00:00','59ffbb',1648,1649,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1959,1,_binary '}uc1vt°',294,1649,1648,NULL,573,'2015-03-04 06:00:00','7a024a',1650,1651,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1960,1,_binary '\öµVŒ.\Æ©',294,1651,1650,NULL,574,'2015-03-04 06:00:00','d44c4f',1652,1653,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1961,1,_binary 'Ú“q\ï•\ÈÉ¢',294,1653,1652,NULL,575,'2015-03-04 06:00:00','eb2f0e',1654,1655,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1962,1,_binary '\õ�scg˜%',294,1655,1654,NULL,576,'2015-03-04 06:00:00','d09223',1656,1657,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1963,1,_binary 'Wph†Q',294,1657,1656,NULL,577,'2015-03-04 06:00:00','ef1a29',1658,1659,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1964,1,_binary 'w>€ ׉!l',294,1659,1658,NULL,578,'2015-03-04 06:00:00','b2c564',1660,1661,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1965,1,_binary '�\ç\"\å\Þm¤t',294,1661,1660,NULL,579,'2015-03-04 06:00:00','20eed7',1662,1663,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1966,1,_binary '›\Çy\ð/¼\îk',294,1663,1662,NULL,580,'2015-03-04 06:00:00','e45e3a',1664,1665,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1967,1,_binary '�‰Q\r¡[‰D',294,1665,1664,NULL,581,'2015-03-04 06:00:00','b3fd15',1666,1667,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1968,1,_binary '¬Mt\ÒA\Þ',294,1667,1666,NULL,582,'2015-03-04 06:00:00','9eb13a',1668,1669,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1969,1,_binary 'ucs,ŸwÀ',294,1669,1668,NULL,583,'2015-03-04 06:00:00','d11ae8',1670,1671,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1970,1,_binary 'I-<�’\ô³ ',294,1671,1670,NULL,584,'2015-03-04 06:00:00','b2ebd2',1672,1673,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1971,1,_binary '\îºJ¬\ßø\ã·',294,1673,1672,NULL,585,'2015-03-04 06:00:00','0cb8ae',1674,1675,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1972,1,_binary '\Í&q06\å',294,1675,1674,NULL,586,'2015-03-04 06:00:00','24f17f',1676,1677,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1973,1,_binary '›\Òn¹>a§?',294,1677,1676,NULL,587,'2015-03-04 06:00:00','17fc5e',1678,1679,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1974,1,_binary '’`3m0¿\\˜',294,1679,1678,NULL,588,'2015-03-04 06:00:00','fec5fd',1680,1681,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1975,1,_binary '\ÎBy•t¿',294,1681,1680,NULL,589,'2015-03-04 06:00:00','600b97',1682,1683,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1976,1,_binary '\å’\äû˜Z,\Ç',294,1683,1682,NULL,590,'2015-03-04 06:00:00','d79523',1684,1685,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1977,1,_binary '1?\ÎC‹',294,1685,1684,NULL,591,'2015-03-04 06:00:00','5a2034',1686,1687,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1978,1,_binary ')t\í\öFh¨',294,1687,1686,NULL,592,'2015-03-04 06:00:00','46a148',1688,1689,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1979,1,_binary 'z\ó%W\Ê\ê\Â\'',294,1689,1688,NULL,593,'2015-03-04 06:00:00','a5a90c',1690,1691,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1980,1,_binary '*Š\\´\à\Ù',294,1691,1690,NULL,594,'2015-03-04 06:00:00','ce5e6b',1692,1693,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1981,1,_binary 'Lˆ¢ºœ\é',294,1693,1692,NULL,595,'2015-03-04 06:00:00','ff37de',1694,1695,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1982,1,_binary 'ÁzZ n\nœ',294,1695,1694,NULL,596,'2015-03-04 06:00:00','c8c945',1696,1697,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1983,1,_binary '¹\'Ž¥\Æ|Ž&',294,1697,1696,NULL,597,'2015-03-04 06:00:00','314991',1698,1699,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1984,1,_binary 'Ÿ\ì0˜bþY',294,1699,1698,NULL,598,'2015-03-04 06:00:00','508b42',1700,1701,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1985,1,_binary '­­Ö›T0',294,1701,1700,NULL,599,'2015-03-04 06:00:00','1922ad',1702,1703,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1986,1,_binary 'WI\Îmu³ h',294,1703,1702,NULL,600,'2015-03-04 06:00:00','9aaf9c',1704,1705,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1987,1,_binary '¡ÁDŠGF',294,1705,1704,NULL,601,'2015-03-04 06:00:00','5cf41f',1706,1707,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1988,1,_binary '�ûþ,·Šü',294,1707,1706,NULL,602,'2015-03-04 06:00:00','d1305d',1708,1709,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1989,1,_binary '\É\õ9C',294,1709,1708,NULL,603,'2015-03-04 06:00:00','08026b',1710,1711,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1990,1,_binary 'a¡]øuFÛ–',294,1711,1710,NULL,604,'2015-03-04 06:00:00','30595a',1712,1713,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1991,1,_binary 'z•¸\Ø\åȱ<',294,1713,1712,NULL,605,'2015-03-04 06:00:00','b95ba2',1714,1715,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1992,1,_binary 'œ\0I“>\Ú@�',294,1715,1714,NULL,606,'2015-03-04 06:00:00','7ed61b',1716,1717,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1993,1,_binary 'øL‰\é@¬[',294,1717,1716,NULL,607,'2015-03-04 06:00:00','a01f55',1718,1719,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1994,1,_binary '*;\áo˜˜&?',294,1719,1718,NULL,608,'2015-03-04 06:00:00','04a91f',1720,1721,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1995,1,_binary '%\÷$k£~\ó',294,1721,1720,NULL,609,'2015-03-04 06:00:00','7bd6e6',1722,1723,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1996,1,_binary '\Ô7³�»³t\ë',294,1723,1722,NULL,610,'2015-03-04 06:00:00','b40ff4',1724,1725,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1997,1,_binary 'ƒ\'À\å\ñ )',294,1725,1724,NULL,611,'2015-03-04 06:00:00','239b19',1726,1727,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1998,1,_binary '\ì©\î¤Øˆu',294,1727,1726,NULL,612,'2015-03-04 06:00:00','1d4728',1728,1729,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(1999,1,_binary '’•)E¼7\á',294,1729,1728,NULL,613,'2015-03-04 06:00:00','9891c6',1730,1731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2000,1,_binary '…(eÿV”¤',294,1731,1730,NULL,614,'2015-03-04 06:00:00','f1bc1a',1732,1733,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2001,1,_binary 'ŽÏ—¡ƒ•',294,1733,1732,NULL,615,'2015-03-04 06:00:00','3ebe20',1734,1735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2002,1,_binary '­\Ü8\ë\è{y',294,1735,1734,NULL,616,'2015-03-04 06:00:00','1427a5',1736,1737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2003,1,_binary '\é¿ÿ©�5',294,1737,1736,NULL,617,'2015-03-04 06:00:00','b6b372',1738,1739,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2004,1,_binary '8\'wt(y',294,1739,1738,NULL,618,'2015-03-04 06:00:00','eb1a94',1740,1741,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2005,1,_binary 'I2(.£jC’',294,1741,1740,NULL,619,'2015-03-04 06:00:00','40340f',1742,1743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2006,1,_binary '\æ\î\õ¢Tk´',294,1743,1742,NULL,620,'2015-03-04 06:00:00','9f2376',1744,1745,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2007,1,_binary '\Ç\ïƒt²\å',294,1745,1744,NULL,621,'2015-03-04 06:00:00','55ee5f',1746,1747,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2008,1,_binary ':q.\Ûe·5',294,1747,1746,NULL,622,'2015-03-04 06:00:00','882fcf',1748,1749,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2009,1,_binary '€Þ¦E§¹u',294,1749,1748,NULL,623,'2015-03-04 06:00:00','1a9dff',1750,1751,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2010,1,_binary '4\â\"ed\Õ\ô\Ú',294,1751,1750,NULL,624,'2015-03-04 06:00:00','0ef574',1752,1753,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2011,1,_binary 'ã©»Û§X~',294,1753,1752,NULL,625,'2015-03-04 06:00:00','1e05fb',1754,1755,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2012,1,_binary 'ü\â\ò\é;±\îW',294,1755,1754,NULL,626,'2015-03-04 06:00:00','430286',1756,1757,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2013,1,_binary '\Ö\ÝD§‰¶^',294,1757,1756,NULL,627,'2015-03-04 06:00:00','23dea3',1758,1759,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2014,1,_binary '¢�»\Â+»',294,1759,1758,NULL,628,'2015-03-04 06:00:00','5858dd',1760,1761,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2015,1,_binary '–ˆ\Zl¿¼Z',294,1761,1760,NULL,629,'2015-03-04 06:00:00','f65249',1762,1763,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2016,1,_binary '\ßš{!ܵ©',294,1763,1762,NULL,630,'2015-03-04 06:00:00','1e7398',1764,1765,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2017,1,_binary 'O\"E?o4S=',294,1765,1764,NULL,631,'2015-03-04 06:00:00','9879e0',1766,1767,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2018,1,_binary '¡\Þ\ðm|\ÌD',294,1767,1766,NULL,632,'2015-03-04 06:00:00','49ea76',1768,1769,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2019,1,_binary 'Ó‡s�u¥¨š',294,1769,1768,NULL,633,'2015-03-04 06:00:00','531b24',1770,1771,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2020,1,_binary 'X±¦idb½§',294,1771,1770,NULL,634,'2015-03-04 06:00:00','5adcfa',1772,1773,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2021,1,_binary 'ËŽ0§ yeú',294,1773,1772,NULL,635,'2015-03-04 06:00:00','9508e1',1774,1775,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2022,1,_binary '\ån\æ|@\á™',294,1775,1774,NULL,636,'2015-03-04 06:00:00','f4ec1f',1776,1777,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2023,1,_binary 'øË©\ÌøB¾\Ï',294,1777,1776,NULL,637,'2015-03-04 06:00:00','793b5e',1778,1779,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2024,1,_binary '\ßz·\Ãz‰>û',294,1779,1778,NULL,638,'2015-03-04 06:00:00','b537b8',1780,1781,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2025,1,_binary 'o¡~\Ò\Ù3\ÃA',294,1781,1780,NULL,639,'2015-03-04 06:00:00','5a6fc9',1782,1783,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2026,1,_binary 'Y˜žŠS4!\ò',294,1783,1782,NULL,640,'2015-03-04 06:00:00','0bea2b',1784,1785,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2027,1,_binary '\öMׇ8\Ü',294,1785,1784,NULL,641,'2015-03-04 06:00:00','664546',1786,1787,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2028,1,_binary '\é=z4±¶þ=',294,1787,1786,NULL,642,'2015-03-04 06:00:00','4acdbf',1788,1789,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2029,1,_binary '\á¡þ\Ú\í\"\×\÷',294,1789,1788,NULL,643,'2015-03-04 06:00:00','b5f430',1790,1791,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2030,1,_binary '|\é}\Ø{‰§·',294,1791,1790,NULL,644,'2015-03-04 06:00:00','c166c9',1792,1793,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2031,1,_binary '\ô¡½k¬5t',294,1793,1792,NULL,645,'2015-03-04 06:00:00','389619',1794,1795,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2032,1,_binary 'û\Ø\n=:\ò]©',294,1795,1794,NULL,646,'2015-03-04 06:00:00','31c2f7',1796,1797,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2033,1,_binary '�Ο‘�\05\Ã',294,1797,1796,NULL,647,'2015-03-04 06:00:00','5a185b',1798,1799,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2034,1,_binary '\ã\àù¼m\õ',294,1799,1798,NULL,648,'2015-03-04 06:00:00','726554',1800,1801,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2035,1,_binary '£\љĈ\Zh',294,1801,1800,NULL,649,'2015-03-04 06:00:00','7f5586',1802,1803,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2036,1,_binary 'Œ! ´¢ ˆ\Ò',294,1803,1802,NULL,650,'2015-03-04 06:00:00','033a95',1804,1805,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2037,1,_binary '0°D5�\n',294,1805,1804,NULL,651,'2015-03-04 06:00:00','936270',1806,1807,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2038,1,_binary 'ª¾}_e\â',294,1807,1806,NULL,652,'2015-03-04 06:00:00','c04c42',1808,1809,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2039,1,_binary '�š{°\àB',294,1809,1808,NULL,653,'2015-03-04 06:00:00','8b783b',1810,1811,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2040,1,_binary '×µ«µ 1B',294,1811,1810,NULL,654,'2015-03-04 06:00:00','493835',1812,1813,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2041,1,_binary '•Zµ³k*',294,1813,1812,NULL,655,'2015-03-04 06:00:00','895093',1814,1815,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2042,1,_binary 'e\ñ\ö¨:·D¾',294,1815,1814,NULL,656,'2015-03-04 06:00:00','6a8531',1816,1817,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2043,1,_binary 'tA/EŒž\0',294,1817,1816,NULL,657,'2015-03-04 06:00:00','bfeeb2',1818,1819,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2044,1,_binary '1ÿ\ÎÅ£—8',294,1819,1818,NULL,658,'2015-03-04 06:00:00','19b7f0',1820,1821,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2045,1,_binary 'š¯º.\Ü B3',294,1821,1820,NULL,659,'2015-03-04 06:00:00','47356b',1822,1823,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2046,1,_binary '\Zs²\ãª0þ\Ë',294,1823,1822,NULL,660,'2015-03-04 06:00:00','a30e25',1824,1825,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2047,1,_binary '±>\Øfp\Í',294,1825,1824,NULL,661,'2015-03-04 06:00:00','c6f1df',1826,1827,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2048,1,_binary 'uF\Ì\åù`l',294,1827,1826,NULL,662,'2015-03-04 06:00:00','7b8df1',1828,1829,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2049,1,_binary '\Z7=G&bh',294,1829,1828,NULL,663,'2015-03-04 06:00:00','6085b3',1830,1831,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2050,1,_binary 'ÀL3¤\ÞÁ¬',294,1831,1830,NULL,664,'2015-03-04 06:00:00','8e31f4',1832,1833,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2051,1,_binary 'w‰+\ñhY\éB',294,1833,1832,NULL,665,'2015-03-04 06:00:00','c8e9f2',1834,1835,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2052,1,_binary 'H¤Ô°\ÔY‡',294,1835,1834,NULL,666,'2015-03-04 06:00:00','b2cfc7',1836,1837,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2053,1,_binary 'g\Ú!šU€s',294,1837,1836,NULL,667,'2015-03-04 06:00:00','040be5',1838,1839,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2054,1,_binary '\áTÙ»O/¶\Â',294,1839,1838,NULL,668,'2015-03-04 06:00:00','bfcc9e',1840,1841,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2055,1,_binary '\à£\ÃKß‚\"',294,1841,1840,NULL,669,'2015-03-04 06:00:00','b778b0',1842,1843,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2056,1,_binary ':Y³\ï\â+\Î3',294,1843,1842,NULL,670,'2015-03-04 06:00:00','29e0a6',1844,1845,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2057,1,_binary '»\Ê×¾ƒ',294,1845,1844,NULL,671,'2015-03-04 06:00:00','be26cd',1846,1847,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2058,1,_binary 'zˆr9\é›',294,1847,1846,NULL,672,'2015-03-04 06:00:00','dc9ac9',1848,1849,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2059,1,_binary ':\ô!\×NTt»',294,1849,1848,NULL,673,'2015-03-04 06:00:00','a2c5a9',1850,1851,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2060,1,_binary 'qýO#ž�',294,1851,1850,NULL,674,'2015-03-04 06:00:00','113e55',1852,1853,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2061,1,_binary 'n\n\òÀƒÅª',294,1853,1852,NULL,675,'2015-03-04 06:00:00','996361',1854,1855,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2062,1,_binary '“´ ’6g·',294,1855,1854,NULL,676,'2015-03-04 06:00:00','b42315',1856,1857,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2063,1,_binary '—\ì\ÚAx¾',294,1857,1856,NULL,677,'2015-03-04 06:00:00','03f226',1858,1859,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2064,1,_binary 'Š01Y¯YX',294,1859,1858,NULL,678,'2015-03-04 06:00:00','6f6afc',1860,1861,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2065,1,_binary '…½BA§',294,1861,1860,NULL,679,'2015-03-04 06:00:00','a24e4d',1862,1863,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2066,1,_binary '€¬¡ì–§“',294,1863,1862,NULL,680,'2015-03-04 06:00:00','dcf3ee',1864,1865,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2067,1,_binary 'ùP @r‡‚#',294,1865,1864,NULL,681,'2015-03-04 06:00:00','16a233',1866,1867,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2068,1,_binary '´J‹ˆ@{ø',294,1867,1866,NULL,682,'2015-03-04 06:00:00','dcaa45',1868,1869,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2069,1,_binary 'Ÿ·Äƒ‹ý�\Ä',294,1869,1868,NULL,683,'2015-03-04 06:00:00','7b1d46',1870,1871,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2070,1,_binary '\ß1\ìh˜�—\Ô',294,1871,1870,NULL,684,'2015-03-04 06:00:00','400878',1872,1873,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2071,1,_binary 'Ï¥\Ù\çQÄ¿',294,1873,1872,NULL,685,'2015-03-04 06:00:00','aad5a6',1874,1875,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2072,1,_binary 'Vm§\Û\àN8\ã',294,1875,1874,NULL,686,'2015-03-04 06:00:00','90a388',1876,1877,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2073,1,_binary '„OGž\î¯\ÝL',294,1877,1876,NULL,687,'2015-03-04 06:00:00','55b31b',1878,1879,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2074,1,_binary 'Àl8Á\ê\Ò',294,1879,1878,NULL,688,'2015-03-04 06:00:00','082aa1',1880,1881,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2075,1,_binary '”û€L.\ì²',294,1881,1880,NULL,689,'2015-03-04 06:00:00','44ac83',1882,1883,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2076,1,_binary 'Mn誻O ',294,1883,1882,NULL,690,'2015-03-04 06:00:00','9716b5',1884,1885,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2077,1,_binary '\õ\÷hœ%4ú¾',294,1885,1884,NULL,691,'2015-03-04 06:00:00','7eeef7',1886,1887,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2078,1,_binary '\\\å\ìEQ\ZK€',294,1887,1886,NULL,692,'2015-03-04 06:00:00','28d762',1888,1889,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2079,1,_binary 'šÁ™Tu3U\'',294,1889,1888,NULL,693,'2015-03-04 06:00:00','569789',1890,1891,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2080,1,_binary '\Ó\ò\ÆdA0+b',294,1891,1890,NULL,694,'2015-03-04 06:00:00','dd5c03',1892,1893,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2081,1,_binary 'KX¹²°7',294,1893,1892,NULL,695,'2015-03-04 06:00:00','1b3290',1894,1895,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2082,1,_binary '\æ®ùsP\Þ:',294,1895,1894,NULL,696,'2015-03-04 06:00:00','04a311',1896,1897,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2083,1,_binary '@\ßx\Ûa\ò\í‹',294,1897,1896,NULL,697,'2015-03-04 06:00:00','cd8118',1898,1899,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2084,1,_binary '=g€l\çƒ`j',294,1899,1898,NULL,698,'2015-03-04 06:00:00','da75f4',1900,1901,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2085,1,_binary '¢/Ilk$Ál',294,1901,1900,NULL,699,'2015-03-04 06:00:00','fee0c0',1902,1903,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2086,1,_binary '$‘-¡¨™9',294,1903,1902,NULL,700,'2015-03-04 06:00:00','29e355',1904,1905,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2087,1,_binary '–\\^Eú\Ç\Ûx',294,1905,1904,NULL,701,'2015-03-04 06:00:00','f48fff',1906,1907,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2088,1,_binary '\Û\n¶xDOÙž',294,1907,1906,NULL,702,'2015-03-04 06:00:00','ab26b8',1908,1909,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2089,1,_binary ' \é� T–Œ',294,1909,1908,NULL,703,'2015-03-04 06:00:00','f6c1fa',1910,1911,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2090,1,_binary 'Á1µš«=',294,1911,1910,NULL,704,'2015-03-04 06:00:00','3ab5bd',1912,1913,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2091,1,_binary '\ß\0iT#¨n',294,1913,1912,NULL,705,'2015-03-04 06:00:00','8f5267',1914,1915,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2092,1,_binary '\ß\Þ\n\ïyÕ®',294,1915,1914,NULL,706,'2015-03-04 06:00:00','3d43dc',1916,1917,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2093,1,_binary '`‚\î\Ø[Žp',294,1917,1916,NULL,707,'2015-03-04 06:00:00','909633',1918,1919,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2094,1,_binary '\Ï|�¤„RÒ¡',294,1919,1918,NULL,708,'2015-03-04 06:00:00','66afaa',1920,1921,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2095,1,_binary 'Û‹\Â@;“\Ã+',294,1921,1920,NULL,709,'2015-03-04 06:00:00','2f8457',1922,1923,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2096,1,_binary '_\ò\ô:#£©',294,1923,1922,NULL,710,'2015-03-04 06:00:00','bf2017',1924,1925,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2097,1,_binary 'k\Ð\à™À¼',294,1925,1924,NULL,711,'2015-03-04 06:00:00','6cc33b',1926,1927,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2098,1,_binary '• \ëZ\é“\Ô',294,1927,1926,NULL,712,'2015-03-04 06:00:00','17dc98',1928,1929,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2099,1,_binary 'е| ?w:',294,1929,1928,NULL,713,'2015-03-04 06:00:00','7d8786',1930,1931,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2100,1,_binary 'º”\ð\áø¾d',294,1931,1930,NULL,714,'2015-03-04 06:00:00','68f8dd',1932,1933,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2101,1,_binary '~‰\ó9�€%',294,1933,1932,NULL,715,'2015-03-04 06:00:00','43c576',1934,1935,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2102,1,_binary '•\Õj­u\÷U',294,1935,1934,NULL,716,'2015-03-04 06:00:00','1fdd18',1936,1937,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2103,1,_binary ' 9\Ð\Æ\ÑTC',294,1937,1936,NULL,717,'2015-03-04 06:00:00','33bbc3',1938,1939,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2104,1,_binary '-=Pc\Þø4\á',294,1939,1938,NULL,718,'2015-03-04 06:00:00','b58a92',1940,1941,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2105,1,_binary 'º\Ê {6 |ˆ',294,1941,1940,NULL,719,'2015-03-04 06:00:00','bb4192',1942,1943,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2106,1,_binary '\Õ\Ô\ñù\ß6J',294,1943,1942,NULL,720,'2015-03-04 06:00:00','f62f02',1944,1945,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2107,1,_binary ',oOl\è\à',294,1945,1944,NULL,721,'2015-03-04 06:00:00','744763',1946,1947,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2108,1,_binary 'm\Z€½2\Ó',294,1947,1946,NULL,722,'2015-03-04 06:00:00','896807',1948,1949,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2109,1,_binary '†-rr\í58',294,1949,1948,NULL,723,'2015-03-04 06:00:00','54eddf',1950,1951,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2110,1,_binary '\ÕOŠ»¯z�',294,1951,1950,NULL,724,'2015-03-04 06:00:00','4e10b9',1952,1953,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2111,1,_binary '\õ«:¬·\é',294,1953,1952,NULL,725,'2015-03-04 06:00:00','8f8fa0',1954,1955,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2112,1,_binary '�—²›E',294,1955,1954,NULL,726,'2015-03-04 06:00:00','83155d',1956,1957,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2113,1,_binary 'jyÀEt\"Œ',294,1957,1956,NULL,727,'2015-03-04 06:00:00','f0970e',1958,1959,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2114,1,_binary '\Â.\ô뎂´Š',294,1959,1958,NULL,728,'2015-03-04 06:00:00','978336',1960,1961,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2115,1,_binary 'rW¯tŠ\Ô™',294,1961,1960,NULL,729,'2015-03-04 06:00:00','1995bb',1962,1963,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2116,1,_binary '5 2 K\à©',294,1963,1962,NULL,730,'2015-03-04 06:00:00','10f3a0',1964,1965,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2117,1,_binary '}\Ün\Ý%,',294,1965,1964,NULL,731,'2015-03-04 06:00:00','63d55e',1966,1967,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2118,1,_binary '\ë\â\ÖMŒ§„\ð',294,1967,1966,NULL,732,'2015-03-04 06:00:00','286d63',1968,1969,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2119,1,_binary '8p\á]\éš!½',294,1969,1968,NULL,733,'2015-03-04 06:00:00','20abcf',1970,1971,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2120,1,_binary 'Ö¹\ß\ÅJ ª5',294,1971,1970,NULL,734,'2015-03-04 06:00:00','a77b59',1972,1973,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2121,1,_binary 'c\ê\ì4ƒ~\à',294,1973,1972,NULL,735,'2015-03-04 06:00:00','e69d39',1974,1975,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2122,1,_binary 'PNM«(½\Ä@',294,1975,1974,NULL,736,'2015-03-04 06:00:00','db4417',1976,1977,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2123,1,_binary '\n¦K\ï‹Õ’',294,1977,1976,NULL,737,'2015-03-04 06:00:00','611e8f',1978,1979,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2124,1,_binary 'TÿHƒ\Ô\Ñ+',294,1979,1978,NULL,738,'2015-03-04 06:00:00','f9554b',1980,1981,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2125,1,_binary 'Ÿ¼¥Âˆ_\rw',294,1981,1980,NULL,739,'2015-03-04 06:00:00','f50828',1982,1983,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2126,1,_binary '¿@‘IЈF',294,1983,1982,NULL,740,'2015-03-04 06:00:00','50e805',1984,1985,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2127,1,_binary '¬y  >ø',294,1985,1984,NULL,741,'2015-03-04 06:00:00','a07751',1986,1987,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2128,1,_binary '\Ë2²¸\\k�',294,1987,1986,NULL,742,'2015-03-04 06:00:00','f009f9',1988,1989,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2129,1,_binary 'v8š€˜¿S6',294,1989,1988,NULL,743,'2015-03-04 06:00:00','d8f185',1990,1991,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2130,1,_binary '2Uªk[u',294,1991,1990,NULL,744,'2015-03-04 06:00:00','0046cf',1992,1993,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2131,1,_binary 'p¢\\EA\Âg¼',294,1993,1992,NULL,745,'2015-03-04 06:00:00','8c9bcc',1994,1995,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2132,1,_binary '\'~z\r¸Œ\0',294,1995,1994,NULL,746,'2015-03-04 06:00:00','3f7f99',1996,1997,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2133,1,_binary '¬ˆ¹=\ê\ö\r¿',294,1997,1996,NULL,747,'2015-03-04 06:00:00','204fef',1998,1999,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2134,1,_binary '\êŽ\ÉJyT\÷',294,1999,1998,NULL,748,'2015-03-04 06:00:00','419117',2000,2001,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2135,1,_binary '‘�|ši',294,2001,2000,NULL,749,'2015-03-04 06:00:00','686b54',2002,2003,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2136,1,_binary '\ãG(Þ…ý þ',294,2003,2002,NULL,750,'2015-03-04 06:00:00','5d901c',2004,2005,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2137,1,_binary '—#^\Õy \Ü',294,2005,2004,NULL,751,'2015-03-04 06:00:00','ed4ad7',2006,2007,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2138,1,_binary '»ƒz\Þ,+',294,2007,2006,NULL,752,'2015-03-04 06:00:00','2d9585',2008,2009,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2139,1,_binary '=J@A3�‡\Æ',294,2009,2008,NULL,753,'2015-03-04 06:00:00','b9b583',2010,2011,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2140,1,_binary '”½\á\È\n\÷\Ñ',294,2011,2010,NULL,754,'2015-03-04 06:00:00','392114',2012,2013,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2141,1,_binary 'Š~iF_ŽN',294,2013,2012,NULL,755,'2015-03-04 06:00:00','96cd50',2014,2015,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2142,1,_binary 'A«L~—°\åz',294,2015,2014,NULL,756,'2015-03-04 06:00:00','a6bf69',2016,2017,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2143,1,_binary 'žKb1\æ´{',294,2017,2016,NULL,757,'2015-03-04 06:00:00','22366b',2018,2019,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2144,1,_binary 'Ïš{·�S\Ê',294,2019,2018,NULL,758,'2015-03-04 06:00:00','8c8f53',2020,2021,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2145,1,_binary '8<˜_#É«',294,2021,2020,NULL,759,'2015-03-04 06:00:00','4490bf',2022,2023,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2146,1,_binary '\ÛÁqº\ÏE_',294,2023,2022,NULL,760,'2015-03-04 06:00:00','2a8106',2024,2025,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2147,1,_binary '6{�^\÷K\ç\'',294,2025,2024,NULL,761,'2015-03-04 06:00:00','25051e',2026,2027,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2148,1,_binary '‰\Û\íC\Õ|#E',294,2027,2026,NULL,762,'2015-03-04 06:00:00','c938da',2028,2029,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2149,1,_binary '˧¿]S\ëd',294,2029,2028,NULL,763,'2015-03-04 06:00:00','de1a4f',2030,2031,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2150,1,_binary '²úº”‚g',294,2031,2030,NULL,764,'2015-03-04 06:00:00','a2dc1a',2032,2033,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2151,1,_binary '\'j‹\ÓÅ…\õ\Ã',294,2033,2032,NULL,765,'2015-03-04 06:00:00','944fc9',2034,2035,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2152,1,_binary 'V!‰«¼n3�',294,2035,2034,NULL,766,'2015-03-04 06:00:00','2a03a7',2036,2037,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2153,1,_binary 'JSu¡Ÿyv“',294,2037,2036,NULL,767,'2015-03-04 06:00:00','ee8e3c',2038,2039,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2154,1,_binary ' +¾)\ÔÀ\ä¢',294,2039,2038,NULL,768,'2015-03-04 06:00:00','410c65',2040,2041,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2155,1,_binary '8r\r••¢Ø«',294,2041,2040,NULL,769,'2015-03-04 06:00:00','b7821e',2042,2043,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2156,1,_binary '¼\ö/Ÿù\'»5',294,2043,2042,NULL,770,'2015-03-04 06:00:00','c33de8',2044,2045,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2157,1,_binary '\õ‚\Î\Ó$\ïª',294,2045,2044,NULL,771,'2015-03-04 06:00:00','3cadaa',2046,2047,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2158,1,_binary 'Nµz]G\ß.›',294,2047,2046,NULL,772,'2015-03-04 06:00:00','6fa54a',2048,2049,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2159,1,_binary '2J\ñ%D',294,2049,2048,NULL,773,'2015-03-04 06:00:00','a4a85d',2050,2051,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2160,1,_binary ';‘…®\÷ \çD',294,2051,2050,NULL,774,'2015-03-04 06:00:00','5d0f1a',2052,2053,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2161,1,_binary 'ª0\ñb³¡',294,2053,2052,NULL,775,'2015-03-04 06:00:00','966c89',2054,2055,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2162,1,_binary ' 7Ö´\rS',294,2055,2054,NULL,776,'2015-03-04 06:00:00','b632a2',2056,2057,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2163,1,_binary 'Å”+Cngh',294,2057,2056,NULL,777,'2015-03-04 06:00:00','ecf60a',2058,2059,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2164,1,_binary 'm¸\ë~I2\Ú',294,2059,2058,NULL,778,'2015-03-04 06:00:00','3862cb',2060,2061,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2165,1,_binary '¿,†\\¼\÷<\"',294,2061,2060,NULL,779,'2015-03-04 06:00:00','e44ee9',2062,2063,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2166,1,_binary 'E\ëb\âúƒ\Ý',294,2063,2062,NULL,780,'2015-03-04 06:00:00','56b603',2064,2065,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2167,1,_binary 'š¶Iœ\ð‰ù\ñ',294,2065,2064,NULL,781,'2015-03-04 06:00:00','4d8108',2066,2067,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2168,1,_binary '\Í9\ïù=\Û\"',294,2067,2066,NULL,782,'2015-03-04 06:00:00','860a56',2068,2069,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2169,1,_binary 'Œ5\Ö;Vlb\î',294,2069,2068,NULL,783,'2015-03-04 06:00:00','faf132',2070,2071,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2170,1,_binary 'oÁ\á€AÞ·\Î',294,2071,2070,NULL,784,'2015-03-04 06:00:00','135339',2072,2073,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2171,1,_binary '´1\áYe\ïT',294,2119,2118,NULL,808,'2015-03-04 06:00:00','1e6f87',2120,2121,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2195,1,_binary '9W1*TÒ©)',294,2121,2120,NULL,809,'2015-03-04 06:00:00','5d65da',2122,2123,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2196,1,_binary '\Ù\\H\ZŸ¾\â&',294,2123,2122,NULL,810,'2015-03-04 06:00:00','004260',2124,2125,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2197,1,_binary 'yŸ \×?·“û',294,2125,2124,NULL,811,'2015-03-04 06:00:00','c8c208',2126,2127,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2198,1,_binary '½(§L\æ›',294,2127,2126,NULL,812,'2015-03-04 06:00:00','74e329',2128,2129,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2199,1,_binary 'º\ì;-ýRO',294,2129,2128,NULL,813,'2015-03-04 06:00:00','6fda95',2130,2131,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2200,1,_binary '�YªNK$Ͳ',294,2131,2130,NULL,814,'2015-03-04 06:00:00','02b76e',2132,2133,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2201,1,_binary '\É\ÛG\Õ\à\ð\í',294,2133,2132,NULL,815,'2015-03-04 06:00:00','7315d2',2134,2135,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2202,1,_binary '\Zß­\r\n=�\Ø',294,2135,2134,NULL,816,'2015-03-04 06:00:00','153c04',2136,2137,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2203,1,_binary 'g‚Ý„ª\Ûx\à',294,2137,2136,NULL,817,'2015-03-04 06:00:00','af575c',2138,2139,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2204,1,_binary '\ê\ó¬´~™ž9',294,2139,2138,NULL,818,'2015-03-04 06:00:00','4bd602',2140,2141,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2205,1,_binary 'Œ\Í9[ûx0\Ý',294,2141,2140,NULL,819,'2015-03-04 06:00:00','4669ee',2142,2143,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2206,1,_binary 'SªÎµ}\ÏÁ',294,2143,2142,NULL,820,'2015-03-04 06:00:00','98f1d2',2144,2145,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2207,1,_binary 'k[\Å}Q!œ',294,2145,2144,NULL,821,'2015-03-04 06:00:00','51ee41',2146,2147,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2208,1,_binary '”\Ëa\â\ñ�',294,2147,2146,NULL,822,'2015-03-04 06:00:00','76c076',2148,2149,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2209,1,_binary '˜\ÓÑÿjm\Ë',294,2149,2148,NULL,823,'2015-03-04 06:00:00','c40852',2150,2151,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2210,1,_binary '\ÆLdo#gd<',294,2151,2150,NULL,824,'2015-03-04 06:00:00','f4774d',2152,2153,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2211,1,_binary '\Ú\ö\Ó(¯M\Âl',294,2153,2152,NULL,825,'2015-03-04 06:00:00','2143b2',2154,2155,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2212,1,_binary 'Œ\ÌÖ–¾\æ',294,2155,2154,NULL,826,'2015-03-04 06:00:00','251bcd',2156,2157,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2213,1,_binary 'C[~*—K¤',294,2157,2156,NULL,827,'2015-03-04 06:00:00','1bfa37',2158,2159,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2214,1,_binary 'YV\Z]\Ü ¦§',294,2159,2158,NULL,828,'2015-03-04 06:00:00','fb272a',2160,2161,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2215,1,_binary 'Y\0\ñ)8¸Œ˜',294,2161,2160,NULL,829,'2015-03-04 06:00:00','fcdc2e',2162,2163,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2216,1,_binary 'T\î\õO‹‘f3',294,2163,2162,NULL,830,'2015-03-04 06:00:00','c76d96',2164,2165,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2217,1,_binary '$\ä\å;²pWÿ',294,2165,2164,NULL,831,'2015-03-04 06:00:00','bf2824',2166,2167,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2218,1,_binary '¸\è�\reWBs',294,2167,2166,NULL,832,'2015-03-04 06:00:00','811680',2168,2169,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2219,1,_binary '”\Èd§²„n',294,2169,2168,NULL,833,'2015-03-04 06:00:00','a88d80',2170,2171,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2220,1,_binary 'D\æ \É\Ø4\ï',294,2171,2170,NULL,834,'2015-03-04 06:00:00','b77f6b',2172,2173,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2221,1,_binary '¬ù\Ã<2\Ö!Ž',294,2173,2172,NULL,835,'2015-03-04 06:00:00','702ea8',2174,2175,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2222,1,_binary '.©À9Ye`¤',294,2175,2174,NULL,836,'2015-03-04 06:00:00','72b854',2176,2177,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2223,1,_binary 'ß’�Loÿ4',294,2177,2176,NULL,837,'2015-03-04 06:00:00','2b70fe',2178,2179,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2224,1,_binary '\éD~w”\Î\ðn',294,2179,2178,NULL,838,'2015-03-04 06:00:00','e1cba8',2180,2181,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2225,1,_binary 'ªC‡k\ÜúG@',294,2181,2180,NULL,839,'2015-03-04 06:00:00','970061',2182,2183,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2226,1,_binary '™%\ÓûAºiG',294,2183,2182,NULL,840,'2015-03-04 06:00:00','be8637',2184,2185,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2227,1,_binary 'Š£b)�agi',294,2185,2184,NULL,841,'2015-03-04 06:00:00','cd07e5',2186,2187,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2228,1,_binary '‘a8þ¨|Ì‚',294,2187,2186,NULL,842,'2015-03-04 06:00:00','a8d8de',2188,2189,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2229,1,_binary '*\÷£\äT¾\n>',294,2189,2188,NULL,843,'2015-03-04 06:00:00','044d77',2190,2191,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2230,1,_binary '¾ø³\ñ1',294,2191,2190,NULL,844,'2015-03-04 06:00:00','953a16',2192,2193,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2231,1,_binary '\æE¹)\óª‚',294,2193,2192,NULL,845,'2015-03-04 06:00:00','5bd177',2194,2195,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2232,1,_binary ' FuE4ŰR',294,2195,2194,NULL,846,'2015-03-04 06:00:00','ea30ad',2196,2197,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2233,1,_binary '\Z?´\Ò}þ\î1',294,2197,2196,NULL,847,'2015-03-04 06:00:00','586d18',2198,2199,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2234,1,_binary '0-e\å\æœ\nŒ',294,2199,2198,NULL,848,'2015-03-04 06:00:00','b0c4f9',2200,2201,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2235,1,_binary '‚ju\ä\à04º',294,2201,2200,NULL,849,'2015-03-04 06:00:00','7705d1',2202,2203,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2236,1,_binary '\É\÷˜¯\Õt',294,2203,2202,NULL,850,'2015-03-04 06:00:00','f8e5db',2204,2205,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2237,1,_binary 'D\Ñ\Ã\ôCQøº',294,2205,2204,NULL,851,'2015-03-04 06:00:00','2307f7',2206,2207,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2238,1,_binary '˜«-\'a3\ÃR',294,2207,2206,NULL,852,'2015-03-04 06:00:00','d9e807',2208,2209,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2239,1,_binary 'až\0­\ÆK@À',294,2209,2208,NULL,853,'2015-03-04 06:00:00','8ae9b4',2210,2211,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2240,1,_binary '_\Ût\á\ä\Æ\Å',294,2211,2210,NULL,854,'2015-03-04 06:00:00','04f19e',2212,2213,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2241,1,_binary '踘\ñ┵\'',294,2213,2212,NULL,855,'2015-03-04 06:00:00','3c0f22',2214,2215,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2242,1,_binary 'ÙƒS\à¦~n',294,2215,2214,NULL,856,'2015-03-04 06:00:00','ee71eb',2216,2217,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2243,1,_binary 'ƒ‘ú!{n•†',294,2217,2216,NULL,857,'2015-03-04 06:00:00','ea5cf0',2218,2219,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2244,1,_binary '—€iþ–/•',294,2219,2218,NULL,858,'2015-03-04 06:00:00','c476f0',2220,2221,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2245,1,_binary 'ÿ \ÚPª\0 ',294,2221,2220,NULL,859,'2015-03-04 06:00:00','471944',2222,2223,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2246,1,_binary '!üÝ—b\çE\Ö',294,2223,2222,NULL,860,'2015-03-04 06:00:00','61e8d9',2224,2225,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2247,1,_binary ')X¸&\츞',294,2225,2224,NULL,861,'2015-03-04 06:00:00','fcdb4c',2226,2227,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2248,1,_binary '\0Jmk\ó¿',294,2227,2226,NULL,862,'2015-03-04 06:00:00','1d9431',2228,2229,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2249,1,_binary '©4%\Î\ÎÁ§',294,2229,2228,NULL,863,'2015-03-04 06:00:00','76d535',2230,2231,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2250,1,_binary '\âC±‰BN',294,2231,2230,NULL,864,'2015-03-04 06:00:00','e11ae6',2232,2233,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2251,1,_binary ': §lˆŒþ',294,2233,2232,NULL,865,'2015-03-04 06:00:00','ca5eb3',2234,2235,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2252,1,_binary '­ÇšF&\Z¡\ã',294,2235,2234,NULL,866,'2015-03-04 06:00:00','fdc935',2236,2237,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2253,1,_binary ' \Ï!)›{L\É',294,2237,2236,NULL,867,'2015-03-04 06:00:00','033592',2238,2239,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2254,1,_binary 'Á\Èycm­ ',294,2239,2238,NULL,868,'2015-03-04 06:00:00','ec16e0',2240,2241,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2255,1,_binary '“sBÀ3’d',294,2241,2240,NULL,869,'2015-03-04 06:00:00','b52da3',2242,2243,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2256,1,_binary 'Á3\è‚\ÄRþe',294,2243,2242,NULL,870,'2015-03-04 06:00:00','27833e',2244,2245,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2257,1,_binary '¤¶\r\Ïýþ ',294,2245,2244,NULL,871,'2015-03-04 06:00:00','6e119a',2246,2247,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2258,1,_binary 'VdH\ò—\0\Ü',294,2247,2246,NULL,872,'2015-03-04 06:00:00','fbc6e6',2248,2249,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2259,1,_binary '“,»|}5\ã‘',294,2249,2248,NULL,873,'2015-03-04 06:00:00','c02fc8',2250,2251,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2260,1,_binary '—PQj=4²',294,2251,2250,NULL,874,'2015-03-04 06:00:00','cddfda',2252,2253,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2261,1,_binary 'Å®8‰\ç!h',294,2253,2252,NULL,875,'2015-03-04 06:00:00','58530d',2254,2255,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2262,1,_binary 'û(˜Y\âw\Û_',294,2255,2254,NULL,876,'2015-03-04 06:00:00','5a7aec',2256,2257,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2263,1,_binary '\Ì7\è\æf$is',294,2257,2256,NULL,877,'2015-03-04 06:00:00','db9b8c',2258,2259,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2264,1,_binary 'n\0e\Ü\\\']^',294,2259,2258,NULL,878,'2015-03-04 06:00:00','373d3a',2260,2261,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2265,1,_binary 'Cqw\Ú\ÊÞ…',294,2261,2260,NULL,879,'2015-03-04 06:00:00','c4718e',2262,2263,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2266,1,_binary 'U1wލ\Ã',294,2263,2262,NULL,880,'2015-03-04 06:00:00','ab1212',2264,2265,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2267,1,_binary 'eMþWp­\r,',294,2265,2264,NULL,881,'2015-03-04 06:00:00','8bc05e',2266,2267,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2268,1,_binary 'Q¢\ênK»',294,2267,2266,NULL,882,'2015-03-04 06:00:00','bb427e',2268,2269,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2269,1,_binary 'JA\ì’\íØ•º',294,2269,2268,NULL,883,'2015-03-04 06:00:00','0c9018',2270,2271,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2270,1,_binary 'k­\Ñ\æJ\ÒÀ\ê',294,2271,2270,NULL,884,'2015-03-04 06:00:00','0daa6a',2272,2273,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2271,1,_binary '~x\ÌOH“}#',294,2273,2272,NULL,885,'2015-03-04 06:00:00','0d26dc',2274,2275,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2272,1,_binary '\ôû\Æ\öc8',294,2275,2274,NULL,886,'2015-03-04 06:00:00','ed5fc7',2276,2277,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2273,1,_binary '”É´\Ì-\êh&',294,2277,2276,NULL,887,'2015-03-04 06:00:00','5e2cde',2278,2279,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2274,1,_binary '\×\ÒFÄŠd\é',294,2279,2278,NULL,888,'2015-03-04 06:00:00','f1edf8',2280,2281,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2275,1,_binary 'Œ\ìU\0>3Á\ã',294,2281,2280,NULL,889,'2015-03-04 06:00:00','345ce3',2282,2283,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2276,1,_binary '\Ê\ì¤Ï•Ÿ¢g',294,2283,2282,NULL,890,'2015-03-04 06:00:00','51b511',2284,2285,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2277,1,_binary 'ƒ/¸�.G¨c',294,2285,2284,NULL,891,'2015-03-04 06:00:00','4a05fc',2286,2287,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2278,1,_binary '0v2j6| ',294,2287,2286,NULL,892,'2015-03-04 06:00:00','a15e7c',2288,2289,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2279,1,_binary '” ”\Ì\ë\ÔU5',294,2289,2288,NULL,893,'2015-03-04 06:00:00','ab37f3',2290,2291,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2280,1,_binary '. \ì\Ç\ÞI\Ú\Ä',294,2291,2290,NULL,894,'2015-03-04 06:00:00','2495f8',2292,2293,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2281,1,_binary '€››�5\0i\ë',294,2293,2292,NULL,895,'2015-03-04 06:00:00','9d37b4',2294,2295,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2282,1,_binary '\ï\ß\Ä­sJ\ï',294,2295,2294,NULL,896,'2015-03-04 06:00:00','ddee28',2296,2297,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2283,1,_binary 'œ\ÈùÁ\èʉ',294,2297,2296,NULL,897,'2015-03-04 06:00:00','5225cd',2298,2299,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2284,1,_binary ' £‡\ä5\õ',294,2299,2298,NULL,898,'2015-03-04 06:00:00','8e6b99',2300,2301,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2285,1,_binary 'wŸ\â´y¹}�',294,2301,2300,NULL,899,'2015-03-04 06:00:00','f7a6b0',2302,2303,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2286,1,_binary 'put\Õ\Ì\Öû\Ú',294,2303,2302,NULL,900,'2015-03-04 06:00:00','a0a622',2304,2305,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2287,1,_binary ',=¨e‚\ïv3',294,2305,2304,NULL,901,'2015-03-04 06:00:00','8d9985',2306,2307,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2288,1,_binary '’\öŠBk\Þ7I',294,2307,2306,NULL,902,'2015-03-04 06:00:00','d615ca',2308,2309,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2289,1,_binary '!H¨»¡Z†%',294,2309,2308,NULL,903,'2015-03-04 06:00:00','3f3d76',2310,2311,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2290,1,_binary '&!\ç\Â\éRQ',294,2311,2310,NULL,904,'2015-03-04 06:00:00','15bd8a',2312,2313,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2291,1,_binary '\ã-\æPKy ',294,2313,2312,NULL,905,'2015-03-04 06:00:00','deec62',2314,2315,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2292,1,_binary 'G)\óœ\Í&\Å\É',294,2315,2314,NULL,906,'2015-03-04 06:00:00','77874e',2316,2317,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2293,1,_binary '€nYÑ“\÷\Ô',294,2317,2316,NULL,907,'2015-03-04 06:00:00','bbe871',2318,2319,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2294,1,_binary '¥\ì\Ù\ñ|,Ê¥',294,2319,2318,NULL,908,'2015-03-04 06:00:00','f2b153',2320,2321,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2295,1,_binary '¸<¶c\Ó\é',294,2321,2320,NULL,909,'2015-03-04 06:00:00','9c9da6',2322,2323,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2296,1,_binary '°ù@E-YÁJ',294,2323,2322,NULL,910,'2015-03-04 06:00:00','227f56',2324,2325,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2297,1,_binary ',F\nN’\éŠ',294,2325,2324,NULL,911,'2015-03-04 06:00:00','4a2e07',2326,2327,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2298,1,_binary 'q�œ±uÉ®',294,2327,2326,NULL,912,'2015-03-04 06:00:00','9c325a',2328,2329,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2299,1,_binary '©+]\Ø&\Ø',294,2329,2328,NULL,913,'2015-03-04 06:00:00','c91bc5',2330,2331,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2300,1,_binary 'Á¨§ŽÀ\Ü\ÖD',294,2331,2330,NULL,914,'2015-03-04 06:00:00','5ae46a',2332,2333,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2301,1,_binary '\ö‹Ý˜Ô/',294,2333,2332,NULL,915,'2015-03-04 06:00:00','d658d2',2334,2335,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2302,1,_binary ',\õr\è�a\ól',294,2335,2334,NULL,916,'2015-03-04 06:00:00','f3bb9b',2336,2337,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2303,1,_binary '—ƒ\ï>„\Ý?',294,2337,2336,NULL,917,'2015-03-04 06:00:00','15f690',2338,2339,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2304,1,_binary 'xÙ 6ýú²',294,2339,2338,NULL,918,'2015-03-04 06:00:00','f4279c',2340,2341,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2305,1,_binary 'K,\Ê?\ö\Ìÿ',294,2341,2340,NULL,919,'2015-03-04 06:00:00','228ebf',2342,2343,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2306,1,_binary 'ÿ\0£\Õ\È 0',294,2343,2342,NULL,920,'2015-03-04 06:00:00','8859e5',2344,2345,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2307,1,_binary 'V+\íB¾W',294,2345,2344,NULL,921,'2015-03-04 06:00:00','cd2778',2346,2347,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2308,1,_binary '¿K•qv\ì\á',294,2347,2346,NULL,922,'2015-03-04 06:00:00','12a8b9',2348,2349,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2309,1,_binary '�U•ÏŸ7#',294,2349,2348,NULL,923,'2015-03-04 06:00:00','cd56d6',2350,2351,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2310,1,_binary 'OO\â�P{\ì',294,2351,2350,NULL,924,'2015-03-04 06:00:00','767047',2352,2353,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2311,1,_binary 'ÿ\èu„ÿ',294,2353,2352,NULL,925,'2015-03-04 06:00:00','8dc255',2354,2355,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2312,1,_binary '~¥\Ç\n…9;',294,2355,2354,NULL,926,'2015-03-04 06:00:00','d79a87',2356,2357,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2313,1,_binary 'b_7+ À',294,2357,2356,NULL,927,'2015-03-04 06:00:00','a03cb9',2358,2359,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2314,1,_binary 'Q\Ö\Øh\á!z',294,2359,2358,NULL,928,'2015-03-04 06:00:00','c804d5',2360,2361,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2315,1,_binary '˜“\ÂØ§{\Þi',294,2361,2360,NULL,929,'2015-03-04 06:00:00','cb6acd',2362,2363,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2316,1,_binary 'S\\q¹K\Í!',294,2363,2362,NULL,930,'2015-03-04 06:00:00','b96e15',2364,2365,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2317,1,_binary 'dH\Ê^€žx]',294,2365,2364,NULL,931,'2015-03-04 06:00:00','95bbda',2366,2367,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2318,1,_binary '\×9+µ^t\\«',294,2367,2366,NULL,932,'2015-03-04 06:00:00','1502a2',2368,2369,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2319,1,_binary 'M›x\ì\0\ÛtA',294,2369,2368,NULL,933,'2015-03-04 06:00:00','560b94',2370,2371,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2320,1,_binary 'd&\í\ë‰w\Ò',294,2371,2370,NULL,934,'2015-03-04 06:00:00','4688a0',2372,2373,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2321,1,_binary 'í—¦ƒž\ñ',294,2373,2372,NULL,935,'2015-03-04 06:00:00','673fce',2374,2375,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2322,1,_binary 'v\Í3\ÜF¿\à\Õ',294,2375,2374,NULL,936,'2015-03-04 06:00:00','a15d3b',2376,2377,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2323,1,_binary '+\éü½�sù\î',294,2377,2376,NULL,937,'2015-03-04 06:00:00','f36f35',2378,2379,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2324,1,_binary 'Ò„#\r}6\r',294,2379,2378,NULL,938,'2015-03-04 06:00:00','6eee0c',2380,2381,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2325,1,_binary '\òz8]\ã\\¤',294,2381,2380,NULL,939,'2015-03-04 06:00:00','d0ab11',2382,2383,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2326,1,_binary 'B\åQX\Ø š\×',294,2383,2382,NULL,940,'2015-03-04 06:00:00','fd70dc',2384,2385,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2327,1,_binary '\îZ]œ¨c\Ê',294,2385,2384,NULL,941,'2015-03-04 06:00:00','beb92d',2386,2387,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2328,1,_binary '25j4ýB\ï',294,2387,2386,NULL,942,'2015-03-04 06:00:00','581742',2388,2389,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2329,1,_binary 'ª ©\ïz',294,2389,2388,NULL,943,'2015-03-04 06:00:00','2c9654',2390,2391,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2330,1,_binary '‘?\ë‡\ö\ñ·�',294,2391,2390,NULL,944,'2015-03-04 06:00:00','5ff2fd',2392,2393,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2331,1,_binary '�Wl„Õ´‰\ã',294,2393,2392,NULL,945,'2015-03-04 06:00:00','cde09b',2394,2395,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2332,1,_binary 'm\Ü$\Â*\ÝFa',294,2395,2394,NULL,946,'2015-03-04 06:00:00','7c505d',2396,2397,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2333,1,_binary '¸z}™²\ÉT',294,2397,2396,NULL,947,'2015-03-04 06:00:00','38eaba',2398,2399,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2334,1,_binary '±,\Ô\Ñ\0j¡',294,2399,2398,NULL,948,'2015-03-04 06:00:00','aaba26',2400,2401,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2335,1,_binary 'Ö¸;t\í(�\÷',294,2401,2400,NULL,949,'2015-03-04 06:00:00','28ad71',2402,2403,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2336,1,_binary '\"«û>Lˆx\î',294,2403,2402,NULL,950,'2015-03-04 06:00:00','c20dee',2404,2405,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2337,1,_binary '¥\ÍXÅ–tº¯',294,2405,2404,NULL,951,'2015-03-04 06:00:00','b21853',2406,2407,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2338,1,_binary '.\ãF¾VA\â',294,2407,2406,NULL,952,'2015-03-04 06:00:00','998759',2408,2409,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2339,1,_binary 'v\æÿ4\×Sd',294,2409,2408,NULL,953,'2015-03-04 06:00:00','9c6b8d',2410,2411,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2340,1,_binary 'b\ö\ô¯\Ïj?',294,2411,2410,NULL,954,'2015-03-04 06:00:00','155296',2412,2413,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2341,1,_binary '\Ê\Ò> \ëCn',294,2413,2412,NULL,955,'2015-03-04 06:00:00','4e278c',2414,2415,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2342,1,_binary 'Ø–_¬!ý:½',294,2415,2414,NULL,956,'2015-03-04 06:00:00','ff7fe0',2416,2417,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2343,1,_binary '-\æat¶\Z\ñ\n',294,2417,2416,NULL,957,'2015-03-04 06:00:00','7d68ba',2418,2419,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2344,1,_binary 'ͬgP_kf',294,2419,2418,NULL,958,'2015-03-04 06:00:00','4621f2',2420,2421,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2345,1,_binary '7qÁ\í¯`',294,2421,2420,NULL,959,'2015-03-04 06:00:00','caaace',2422,2423,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2346,1,_binary '‚\×Me@�\×z',294,2423,2422,NULL,960,'2015-03-04 06:00:00','9cc0fd',2424,2425,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2347,1,_binary '¤°FùŒ\ê… ',294,2425,2424,NULL,961,'2015-03-04 06:00:00','6ba0c9',2426,2427,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2348,1,_binary 'ƒª³�¾l',294,2427,2426,NULL,962,'2015-03-04 06:00:00','d6f3f6',2428,2429,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2349,1,_binary '„‰ÿY\"§\å',294,2429,2428,NULL,963,'2015-03-04 06:00:00','2eabd3',2430,2431,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2350,1,_binary 'OÌ€e`¤�\Z',294,2431,2430,NULL,964,'2015-03-04 06:00:00','129a94',2432,2433,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2351,1,_binary '±;J,¢²',294,2433,2432,NULL,965,'2015-03-04 06:00:00','6c71a8',2434,2435,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2352,1,_binary '•©Ñ„\ï“Á?',294,2435,2434,NULL,966,'2015-03-04 06:00:00','f42fad',2436,2437,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2353,1,_binary 'BýP€e>[L',294,2437,2436,NULL,967,'2015-03-04 06:00:00','420e17',2438,2439,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2354,1,_binary 'Ëš/(\Þy–',294,2439,2438,NULL,968,'2015-03-04 06:00:00','feda83',2440,2441,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2355,1,_binary 'C‰¿v\ê\Ð',294,2485,2484,NULL,991,'2015-03-04 06:00:00','70a7c6',2486,2487,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2378,1,_binary 'Ò¼µš¿2',294,2487,2486,NULL,992,'2015-03-04 06:00:00','29118b',2488,2489,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2379,1,_binary '\ä\ó©qQ*3',294,2489,2488,NULL,993,'2015-03-04 06:00:00','449220',2490,2491,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2380,1,_binary '\Òƒ#£Ši#',294,2491,2490,NULL,994,'2015-03-04 06:00:00','e11048',2492,2493,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2381,1,_binary '²˜ÿž\rN\r\×',294,2493,2492,NULL,995,'2015-03-04 06:00:00','8deef2',2494,2495,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2382,1,_binary '\ãv|øi:\ö',294,2495,2494,NULL,996,'2015-03-04 06:00:00','47d931',2496,2497,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2383,1,_binary '\Ã7\ì{iJf',294,2497,2496,NULL,997,'2015-03-04 06:00:00','7cc909',2498,2499,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2384,1,_binary 'µ8›?)8”\Ö',294,2499,2498,NULL,998,'2015-03-04 06:00:00','23e1f9',2500,2501,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2385,1,_binary '\Ö\æ\à(¾It',294,2501,2500,NULL,999,'2015-03-04 06:00:00','0f8e47',2502,2503,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2386,1,_binary 'Œ€2\Üo\çy',294,2503,2502,NULL,1000,'2015-03-04 06:00:00','d4eb3b',2504,2505,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2387,1,_binary 'ù5pšê›¶–',295,0,0,NULL,1,'2012-01-10 15:22:33','79ad56',2506,2507,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2388,1,_binary 'ù5pšê›¶–',295,2507,2506,NULL,2,'2012-01-10 15:22:33','d6ddd2',2506,2508,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2389,1,_binary 'ù5pšê›¶–',295,2508,2506,NULL,3,'2012-01-10 15:22:33','5597cd',2506,2509,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2390,1,_binary '\Ö$%\Î\êº/P',296,0,0,NULL,1,'2012-01-10 16:22:33','e96bc7',2506,2507,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2391,1,_binary '\Ö$%\Î\êº/P',296,2507,2506,NULL,2,'2012-01-10 16:22:33','552220',2506,2508,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2392,1,_binary '\Ö$%\Î\êº/P',296,2508,2506,NULL,3,'2012-01-10 16:22:33','b114b7',2506,2509,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2393,1,_binary 'E‚�³lg\Ð',297,0,0,NULL,1,'2012-01-10 18:22:33','a9dc70',2506,2510,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2394,1,_binary 'E‚�³lg\Ð',297,2510,2506,NULL,2,'2012-01-10 18:22:33','5d544d',2506,2511,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2395,1,_binary 'E‚�³lg\Ð',297,2511,2506,NULL,3,'2012-01-10 18:22:33','406c42',2506,2512,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2396,1,_binary 'yeé©�LX\ð',298,0,0,NULL,1,'2012-01-10 19:22:33','c906d7',2506,2510,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2397,1,_binary 'yeé©�LX\ð',298,2510,2506,NULL,2,'2012-01-10 19:22:33','d30668',2506,2511,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2398,1,_binary 'yeé©�LX\ð',298,2511,2506,NULL,3,'2012-01-10 19:22:33','297c2b',2506,2512,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2399,1,_binary 'o/\å\Ï\ë}϶',299,0,0,NULL,1,'2012-01-10 21:22:33','0661c2',2506,2513,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2400,1,_binary 'o/\å\Ï\ë}϶',299,2513,2506,NULL,2,'2012-01-10 21:22:33','ed13d7',2506,2514,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2401,1,_binary 'o/\å\Ï\ë}϶',299,2514,2506,NULL,3,'2012-01-10 21:22:33','d260ff',2506,2515,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2402,1,_binary '2\"U¼\ã*\êù',300,0,0,NULL,1,'2012-01-10 22:22:33','984557',2506,2513,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2403,1,_binary '2\"U¼\ã*\êù',300,2513,2506,NULL,2,'2012-01-10 22:22:33','7ebdfe',2506,2514,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2404,1,_binary '2\"U¼\ã*\êù',300,2514,2506,NULL,3,'2012-01-10 22:22:33','60526c',2506,2515,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2405,1,_binary 'B\õSDª\ÈЯ',86,29,116,NULL,2,'2012-01-11 11:22:33','60617e',2506,2516,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CustomVarPage','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2406,1,_binary 'ø€\É\0\Õ7ÁD',86,2516,2506,NULL,3,'2012-01-11 11:22:33','720ded',2506,2517,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2407,1,_binary 'V)�ª•€5',86,2517,2506,NULL,4,'2012-01-11 11:22:33','7719fc',2518,2519,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,211,390,43,99,210,350,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2408,1,_binary 'V)�ª•€5',86,2519,2518,NULL,5,'2012-01-11 11:34:33','a6d39a',2518,2520,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,165,344,0,120,196,299,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2409,1,_binary 'V)�ª•€5',86,2520,2518,NULL,6,'2012-01-11 11:40:33','ad848b',2521,2522,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,188,385,89,60,785,254,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2410,1,_binary 'V)�ª•€5',86,2522,2521,11111,6,'2012-01-11 11:41:09','ad848b',2526,2523,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2524,2525,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2411,1,_binary 'V)�ª•€5',86,2522,2521,NULL,7,'2012-01-11 11:46:33','440234',2518,2527,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,226,448,112,11,221,335,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2412,1,_binary 'V)�ª•€5',86,2527,2518,NULL,8,'2012-01-11 11:46:33','e4ef9c',2518,2528,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2413,1,_binary 'V)�ª•€5',86,2528,2518,NULL,9,'2012-01-11 11:47:09','24b14a',2529,2530,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,196,245,250,120,212,699,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2414,1,_binary 'V)�ª•€5',86,2530,2529,NULL,10,'2012-01-11 11:47:45','4ca42b',2531,2532,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,166,288,23,55,63,56,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2415,1,_binary 'V)�ª•€5',86,2532,2531,NULL,11,'2012-01-11 11:46:33','ce2437',2533,2534,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,275,157,0,212,163,255,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2416,1,_binary '\Ö‹\êÕ¬�™',301,0,0,NULL,1,'2012-01-12 11:22:33','62f207',2535,2536,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2417,1,_binary '\Ö‹\êÕ¬�™',301,2536,2535,NULL,2,'2012-01-12 11:34:33','0996f8',2537,2536,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2418,1,_binary '\Ö‹\êÕ¬�™',301,2536,2537,NULL,3,'2012-01-12 11:40:33','4d70ec',2538,2539,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2419,1,_binary '\Ö‹\êÕ¬�™',301,2539,2538,NULL,4,'2012-01-12 11:46:33','2e8876',2540,2539,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2420,1,_binary '\Ö‹\êÕ¬�™',301,2539,2540,NULL,5,'2012-01-12 11:52:33','7d0296',2541,2542,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2421,1,_binary '\Ö‹\êÕ¬�™',301,2542,2541,NULL,6,'2012-01-12 12:04:33','06db68',2543,2544,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2422,1,_binary '\Ö‹\êÕ¬�™',301,2544,2543,NULL,7,'2012-01-12 12:10:33','dd6979',2545,2546,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2423,1,_binary '\Ö‹\êÕ¬�™',301,2546,2545,NULL,8,'2012-01-12 11:58:33','29e4b4',2541,2547,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2424,1,_binary 'T\ó\ñ�\á\ö¶',302,0,0,NULL,1,'2012-01-13 07:22:33','',2548,NULL,'',3,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2425,1,_binary 'j¤ù™|•\"&',303,0,0,NULL,1,'2012-01-14 11:22:33','b587c6',28,94,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,390,1325,33,222,105,205,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2426,1,_binary 'j¤ù™|•\"&',303,94,28,NULL,2,'2012-01-14 11:25:33','ce5fe9',95,96,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,222,1559,62,152,198,253,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2427,1,_binary 'j¤ù™|•\"&',303,96,95,NULL,2,'2012-01-14 11:28:33','ce5fe9',NULL,97,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2428,1,_binary 'j¤ù™|•\"&',303,96,95,NULL,2,'2012-01-14 11:34:33','ce5fe9',NULL,98,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,72,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2429,1,_binary 'j¤ù™|•\"&',303,96,95,NULL,2,'2012-01-14 11:35:45','ce5fe9',NULL,99,NULL,NULL,72,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,108,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2430,1,_binary 'j¤ù™|•\"&',303,96,95,NULL,2,'2012-01-14 11:37:33','ce5fe9',NULL,100,NULL,NULL,108,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2431,1,_binary 'j¤ù™|•\"&',303,96,95,NULL,3,'2012-01-14 11:49:33','4dbf15',101,29,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,666,1111,0,333,222,333,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2432,1,_binary 'j¤ù™|•\"&',304,0,0,NULL,1,'2012-01-14 12:22:33','78ddef',102,103,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1002,2000,22,666,157,266,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2433,1,_binary '¨\ë„\ÜPŒ€',305,0,0,NULL,1,'2012-01-15 00:06:00','b6b375',2549,2550,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2434,1,_binary '¨\ë„\ÜPŒ€',305,2550,2549,NULL,2,'2012-01-15 00:12:00','170146',2551,2552,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2435,1,_binary '¨\ë„\ÜPŒ€',305,2552,2551,NULL,3,'2012-01-15 00:18:00','08c139',2553,2554,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2436,1,_binary '¨\ë„\ÜPŒ€',305,2554,2553,NULL,4,'2012-01-15 00:24:00','b956d9',2555,2556,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2437,1,_binary '¨\ë„\ÜPŒ€',305,2556,2555,NULL,4,'2012-01-15 00:30:00','b956d9',2560,2557,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2558,2559,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2438,1,_binary '\ök\Ã\ò \Zy',306,0,0,NULL,1,'2012-01-15 01:36:00','a2b8c1',2549,2550,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2439,1,_binary '\ök\Ã\ò \Zy',306,2550,2549,NULL,2,'2012-01-15 01:42:00','260c09',2561,2562,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2440,1,_binary '\ök\Ã\ò \Zy',306,2562,2561,NULL,3,'2012-01-15 01:48:00','95cde3',2555,2556,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2441,1,_binary '\ök\Ã\ò \Zy',306,2556,2555,NULL,3,'2012-01-15 01:54:00','95cde3',2560,2557,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2558,2559,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2442,1,_binary '¡;|Zb\÷-\ê',307,0,0,NULL,1,'2012-01-15 03:00:00','60f51c',2549,2550,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2443,1,_binary '¡;|Zb\÷-\ê',307,2550,2549,NULL,2,'2012-01-15 03:06:00','b3f97a',2563,2564,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2444,1,_binary '9\÷.9a\á‹N',308,0,0,NULL,1,'2012-01-15 04:12:00','259faa',2549,2550,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2445,1,_binary '9\÷.9a\á‹N',308,2550,2549,NULL,2,'2012-01-15 04:18:00','e63049',2555,2556,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2446,1,_binary '9\÷.9a\á‹N',308,2556,2555,NULL,2,'2012-01-15 04:24:00','e63049',2560,2557,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2558,2559,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2447,1,_binary '9\÷.9a\á‹N',308,2556,2555,NULL,3,'2012-01-15 04:30:00','cdc2de',2549,2550,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2448,1,_binary '9\÷.9a\á‹N',308,2550,2549,NULL,4,'2012-01-15 04:36:00','b159fb',2551,2552,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2449,1,_binary '9\÷.9a\á‹N',308,2552,2551,NULL,5,'2012-01-15 04:42:00','b7d914',2555,2556,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2450,1,_binary '9\÷.9a\á‹N',308,2556,2555,NULL,5,'2012-01-15 04:48:00','b7d914',2560,2557,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2565,2559,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2451,1,_binary '_7V®‹Lκ',309,0,0,NULL,1,'2012-01-16 05:54:00','af7d60',2549,2550,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2452,1,_binary '_7V®‹Lκ',309,2550,2549,NULL,2,'2012-01-16 06:00:00','621859',2561,2562,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2453,1,_binary '_7V®‹Lκ',309,2562,2561,NULL,3,'2012-01-16 06:06:00','f7716b',2566,2567,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2454,1,_binary '_7V®‹Lκ',309,2567,2566,NULL,4,'2012-01-16 06:12:00','15722e',2555,2556,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2455,1,_binary '_7V®‹Lκ',309,2556,2555,NULL,4,'2012-01-16 06:18:00','15722e',2560,2557,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2558,2559,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2456,1,_binary '_7V®‹Lκ',309,2556,2555,NULL,5,'2012-01-16 06:24:00','3d54d3',2549,2550,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2457,1,_binary '_7V®‹Lκ',309,2550,2549,NULL,6,'2012-01-16 06:30:00','e6d719',2551,2552,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2458,1,_binary '_7V®‹Lκ',309,2552,2551,NULL,7,'2012-01-16 06:36:00','201d11',2555,2556,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2459,1,_binary '_7V®‹Lκ',309,2556,2555,NULL,7,'2012-01-16 06:42:00','201d11',2560,2557,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2565,2559,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2460,1,_binary '(†BzW\çº',310,0,0,NULL,1,'2012-01-16 07:48:00','0c74d6',2549,2550,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2461,1,_binary '(†BzW\çº',310,2550,2549,NULL,1,'2012-01-16 07:54:00','0c74d6',2560,2568,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2558,2559,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2462,1,_binary '5 ÀŠÁ[¸',311,0,0,NULL,1,'2012-01-17 09:00:00','f2155c',2549,2550,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2463,1,_binary '5 ÀŠÁ[¸',311,2550,2549,NULL,2,'2012-01-17 09:06:00','147502',2551,2552,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2464,1,_binary '5 ÀŠÁ[¸',311,2552,2551,NULL,3,'2012-01-17 09:12:00','ba88ed',2561,2562,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2465,1,_binary '5 ÀŠÁ[¸',311,2562,2561,NULL,3,'2012-01-17 09:18:00','ba88ed',2560,2569,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2565,2559,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2466,1,_binary '\õŒûœ\å\Ë',312,0,0,NULL,1,'2012-01-16 00:29:42','139761',2570,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2467,1,_binary '\õŒûœ\å\Ë',313,0,0,NULL,1,'2012-01-16 00:53:42','c8812f',2571,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2468,1,_binary '\õŒûœ\å\Ë',313,29,2571,NULL,1,'2012-01-16 00:29:42','c8812f',2560,2572,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2558,2573,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2469,1,_binary '\õŒûœ\å\Ë',313,29,2571,NULL,1,'2012-01-16 00:35:42','c8812f',2560,2572,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2558,2574,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2470,1,_binary '\õŒûœ\å\Ë',313,29,2571,NULL,1,'2012-01-16 00:35:42','c8812f',2577,2572,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2575,2576,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2471,1,_binary '»\ò¥2N',314,0,0,NULL,1,'2012-01-17 00:11:42','829168',28,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2472,1,_binary '•I\â„™\í',317,0,0,NULL,1,'2012-01-17 03:11:42','d1a85a',2578,2579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2473,1,_binary '•I\â„™\í',318,0,0,NULL,1,'2012-01-17 04:11:42','02a45e',106,2579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2474,1,_binary '•I\â„™\í',319,0,0,NULL,1,'2012-01-17 05:11:42','ed2d20',106,2579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2475,1,_binary '•I\â„™\í',320,0,0,NULL,1,'2012-01-17 06:11:42','332d51',106,2579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2476,1,_binary '•I\â„™\í',321,0,0,NULL,1,'2012-01-17 07:11:42','b36185',2580,2579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2477,1,_binary '•I\â„™\í',322,0,0,NULL,1,'2012-01-17 08:11:42','d93da8',2581,2579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2478,1,_binary '•I\â„™\í',323,0,0,NULL,1,'2012-01-17 10:11:42','f3a879',2582,2579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2479,1,_binary '•I\â„™\í',323,2579,2582,NULL,2,'2012-01-17 10:17:42','33c2ff',2583,2579,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2480,1,_binary '•I\â„™\í',324,0,0,NULL,1,'2012-01-17 10:23:42','fd66e3',2584,2579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2481,1,_binary '•I\â„™\í',325,0,0,NULL,1,'2012-01-17 11:11:42','52aad3',2585,2579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2482,1,_binary '•I\â„™\í',326,0,0,NULL,1,'2012-01-17 11:17:42','0065f8',2586,2579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2483,1,_binary '•I\â„™\í',326,2579,2586,NULL,2,'2012-01-17 11:23:42','b8f52b',2587,2579,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2484,1,_binary '•I\â„™\í',327,0,0,NULL,1,'2012-01-17 11:29:42','408ff9',2588,2579,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2485,1,_binary '»\ò¥2N',328,0,0,NULL,1,'2012-01-17 00:11:42','a2b6a6',2589,2590,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2486,1,_binary '–ý\Ú\ÊÚ�\É',330,0,0,NULL,1,'2012-01-17 01:11:42','1bc1a5',2591,2592,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2487,1,_binary '!\ðª}‹hG³',332,0,0,NULL,1,'2012-01-17 02:11:42','605d34',2589,2593,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2488,1,_binary ',\Å\Þj>0',333,0,0,NULL,1,'2012-01-18 11:22:33','fbd2d2',2594,2595,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2489,1,_binary ',\Å\Þj>0',333,2595,2594,NULL,2,'2012-01-18 11:28:33','953a39',2596,2597,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2490,1,_binary ',\Å\Þj>0',333,2597,2596,NULL,3,'2012-01-18 11:34:33','106cda',2594,2595,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2491,1,_binary ',\Å\Þj>0',333,2595,2594,NULL,4,'2012-01-18 11:40:33','2c12d0',2598,2599,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2492,1,_binary ',\Å\Þj>0',333,2599,2598,NULL,5,'2012-01-18 11:46:33','734eec',2594,2595,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2493,1,_binary ',\Å\Þj>0',333,2595,2594,NULL,6,'2012-01-18 11:52:33','604f38',2598,2599,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2494,1,_binary ',\Å\Þj>0',333,2599,2598,NULL,7,'2012-01-18 11:52:34','14f4f6',2598,2599,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2495,1,_binary ',\Å\Þj>0',333,2599,2598,NULL,8,'2012-01-18 11:58:33','273120',2594,2595,NULL,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2496,1,_binary ',\Å\Þj>0',333,2595,2594,NULL,9,'2012-01-18 11:58:34','a2dd7a',2594,2595,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2497,1,_binary ',\Å\Þj>0',333,2595,2594,NULL,10,'2012-01-18 12:04:33','8e023a',2600,2601,NULL,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2498,1,_binary ',\Å\Þj>0',333,2601,2600,NULL,11,'2012-01-18 12:04:34','b476b5',2600,2601,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2499,1,_binary ',\Å\Þj>0',333,2601,2600,NULL,12,'2012-01-18 12:10:33','a04f1e',2594,2595,NULL,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2500,1,_binary ',\Å\Þj>0',333,2595,2594,NULL,13,'2012-01-18 12:16:33','4d605a',2594,2595,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2501,1,_binary ',\Å\Þj>0',333,2595,2594,NULL,14,'2012-01-18 12:22:33','c91f74',2602,2601,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2502,1,_binary ',\Å\Þj>0',333,2601,2602,NULL,15,'2012-01-18 12:28:33','494dc4',2594,2595,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2503,1,_binary ',\Å\Þj>0',333,2595,2594,NULL,16,'2012-01-18 12:34:33','0da46a',2603,2604,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2504,1,_binary '\Ñ\×ÚŽ\Ä\à\çd',334,0,0,NULL,1,'2012-01-18 11:22:33','f64f30',2596,2597,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2505,1,_binary '\Ñ\×ÚŽ\Ä\à\çd',334,2597,2596,NULL,2,'2012-01-18 11:28:33','bc4ede',2598,2599,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2506,1,_binary '\Ñ\×ÚŽ\Ä\à\çd',334,2599,2598,NULL,3,'2012-01-18 11:34:33','6c220d',2594,2595,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2507,1,_binary '\Ñ\×ÚŽ\Ä\à\çd',334,2595,2594,NULL,4,'2012-01-18 11:40:33','38ee8e',2600,2601,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2508,1,_binary 'O—Ü¢HÁ…‡',335,0,0,NULL,1,'2012-01-18 11:28:33','f68748',2594,2595,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2509,1,_binary 'O—Ü¢HÁ…‡',335,2595,2594,NULL,2,'2012-01-18 11:34:33','4bc399',2596,2597,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2510,1,_binary 'O—Ü¢HÁ…‡',335,2597,2596,NULL,3,'2012-01-18 11:40:33','a43d70',2594,2595,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2511,1,_binary ';\ã\×f\Æ\î\rƒ',336,0,0,NULL,1,'2012-01-18 11:22:33','964560',2605,2595,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2512,1,_binary '9Š\Æ1=\"¯¾',337,0,0,NULL,1,'2012-01-18 11:22:33','e6d272',2594,2595,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2513,1,_binary '\á\îù[8Š\ñ\á',338,0,0,NULL,1,'2012-01-18 11:22:33','e6d272',2606,NULL,'mysearchcat',26,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2514,1,_binary '\á\îù[8Š\ñ\á',338,0,2606,NULL,2,'2012-01-18 11:28:33','590872',2594,2595,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2515,1,_binary '\á\îù[8Š\ñ\á',338,2595,2594,NULL,3,'2012-01-18 11:34:33','590872',2607,NULL,'mysearchcat',28,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2516,1,_binary '\á\îù[8Š\ñ\á',338,NULL,2607,NULL,4,'2012-01-18 11:37:33','99c535',2594,2595,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2517,1,_binary '\á\îù[8Š\ñ\á',338,2595,2594,NULL,4,'2012-01-18 11:40:33','99c535',NULL,2608,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2518,1,_binary '\á\îù[8Š\ñ\á',338,2595,2594,NULL,5,'2012-01-18 11:43:33','72eed4',2594,2595,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2519,1,_binary '\á\îù[8Š\ñ\á',338,2595,2594,32,5,'2012-01-18 11:29:09','72eed4',2612,2609,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2610,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2520,1,_binary '\á\îù[8Š\ñ\á',338,2595,2594,NULL,5,'2012-01-18 11:46:33','72eed4',NULL,2613,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2521,1,_binary '\á\îù[8Š\ñ\á',338,2595,2594,NULL,6,'2012-01-18 11:49:33','cc7948',2594,2595,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2522,1,_binary '\á\îù[8Š\ñ\á',338,2595,2594,NULL,6,'2012-01-18 11:52:33','cc7948',NULL,2614,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2523,1,_binary '\á\îù[8Š\ñ\á',338,2595,2594,NULL,7,'2012-01-18 11:55:33','3636d8',2594,2595,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2524,1,_binary '\á\îù[8Š\ñ\á',338,2595,2594,NULL,7,'2012-01-18 11:58:33','3636d8',NULL,2615,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2525,1,_binary '“¬? ¼\ákp',339,0,0,NULL,1,'2012-01-26 11:22:33','3636d8',2616,NULL,'mysearchcat',38,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2526,1,_binary '“¬? ¼\ákp',339,0,2616,NULL,2,'2012-01-26 11:28:33','f715ee',2594,2595,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2527,1,_binary '“¬? ¼\ákp',339,2595,2594,40,2,'2012-01-26 11:29:09','f715ee',2612,2609,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2610,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,144,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2528,1,_binary '“¬? ¼\ákp',339,2595,2594,NULL,2,'2012-01-26 11:31:33','f715ee',NULL,2617,NULL,NULL,144,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2529,1,_binary '“¬? ¼\ákp',339,2595,2594,NULL,3,'2012-01-26 11:34:33','0552b9',2594,2595,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2530,1,_binary '“¬? ¼\ákp',339,2595,2594,NULL,3,'2012-01-26 11:37:33','0552b9',NULL,2618,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2531,1,_binary '“¬? ¼\ákp',339,2595,2594,NULL,4,'2012-01-26 11:40:33','02d92d',2594,2595,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2532,1,_binary '“¬? ¼\ákp',339,2595,2594,NULL,5,'2012-01-26 11:43:33','02d92d',2607,NULL,'mysearchcat',45,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2533,1,_binary 'b¿8\àe\"�œ',340,0,0,NULL,1,'2012-01-18 11:22:33','a90dc9',2594,2595,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2534,1,_binary 'JN[ýŠ',341,0,0,NULL,1,'2012-01-19 01:22:33','b62f1a',2619,2620,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2535,1,_binary 'JN[ýŠ',341,2620,2619,NULL,2,'2012-01-19 01:22:34','997f6c',2619,2621,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2536,1,_binary 'JN[ýŠ',341,2621,2619,NULL,3,'2012-01-19 01:22:35','3cc030',2619,2622,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2537,1,_binary 'JN[ýŠ',341,2622,2619,NULL,4,'2012-01-19 01:22:36','2103e4',2619,2622,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2538,1,_binary 'JN[ýŠ',341,2622,2619,NULL,5,'2012-01-19 01:22:37','fc0ba1',2619,2623,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2539,1,_binary 'JN[ýŠ',341,2623,2619,NULL,6,'2012-01-19 01:22:38','2b7d9b',2619,2623,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2540,1,_binary 'JN[ýŠ',341,2623,2619,NULL,7,'2012-01-19 01:22:39','8ab2cb',2619,2623,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2541,1,_binary 'JN[ýŠ',341,2623,2619,NULL,8,'2012-01-19 01:22:40','04c89f',2619,2624,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2542,1,_binary 'JN[ýŠ',341,2624,2619,NULL,9,'2012-01-19 01:22:41','33bfd8',2619,2625,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2543,1,_binary 'JN[ýŠ',341,2625,2619,NULL,10,'2012-01-19 01:22:42','43a6a2',2619,29,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2544,1,_binary 'JN[ýŠ',341,29,2619,NULL,11,'2012-01-19 01:22:43','395266',2619,2625,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2545,1,_binary 'JN[ýŠ',341,2625,2619,NULL,12,'2012-01-19 01:22:44','32b723',2619,2625,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2546,1,_binary 'JN[ýŠ',341,2625,2619,NULL,13,'2012-01-19 01:22:45','f8aedf',2619,2626,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2547,1,_binary 'JN[ýŠ',342,0,0,NULL,1,'2012-01-19 02:22:33','9948b5',28,2626,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2548,1,_binary 'JN[ýŠ',343,0,0,NULL,1,'2012-01-19 03:22:33','e9debd',28,2626,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2549,1,_binary 'JN[ýŠ',344,0,0,NULL,1,'2012-01-19 04:22:33','196446',28,2626,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2550,1,_binary 'JN[ýŠ',345,0,0,NULL,1,'2012-01-19 05:22:33','f78d34',28,2626,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2551,1,_binary 'JN[ýŠ',346,0,0,NULL,1,'2012-01-19 06:22:33','c2f0de',28,2626,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2552,1,_binary 'JN[ýŠ',347,0,0,NULL,1,'2012-01-19 07:22:33','f68b5d',28,2626,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2553,1,_binary '>\Ümn\óú\r',348,0,0,NULL,1,'2012-01-20 11:40:33','5763a9',2627,2628,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2554,1,_binary '\ñX\Ìyœc',348,2628,2627,NULL,2,'2012-01-20 11:40:34','153ad2',2629,2630,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2555,1,_binary '\ñX\Ìyœc',348,2630,2629,NULL,3,'2012-01-20 11:46:33','79c89d',2631,2632,NULL,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2556,1,_binary '\ñX\Ìyœc',348,2632,2631,NULL,4,'2012-01-20 11:52:33','675a1c',2631,2633,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2557,1,_binary '\ñX\Ìyœc',348,2633,2631,NULL,5,'2012-01-20 11:52:34','6fb8c7',2629,2634,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2558,1,_binary '�°\õR\Óq΢',349,0,0,NULL,1,'2012-01-20 12:22:38','9f3ff3',2627,2635,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2559,1,_binary '\Ö/B\\ȹp^',350,0,0,NULL,1,'2012-01-21 00:11:42','181ef5',0,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2560,1,_binary '\0r#�‚èr',351,0,0,NULL,1,'2012-01-22 11:34:33','461ac1',2627,2636,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,72,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2561,1,_binary '\0r#�‚èr',351,2636,2627,NULL,2,'2012-01-22 11:35:45','79edad',2637,29,NULL,NULL,72,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2562,1,_binary '\0r#�‚èr',351,29,2637,NULL,3,'2012-01-22 11:36:21','8b426f',2638,2639,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2563,1,_binary '\0r#�‚èr',351,2639,2638,3.33,3,'2012-01-22 11:36:57','8b426f',2643,2640,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2641,2642,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2564,1,_binary '\0r#�‚èr',351,2639,2638,NULL,4,'2012-01-22 11:37:33','fe92d8',2644,2645,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2565,1,_binary '\0r#�‚èr',351,2645,2644,NULL,5,'2012-01-22 11:38:09','51cec1',2644,29,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2566,1,_binary '\0r#�‚èr',351,29,2644,NULL,6,'2012-01-22 11:38:45','e522ed',2644,2646,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,108,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2567,1,_binary '\0r#�‚èr',351,2646,2644,NULL,7,'2012-01-22 11:40:33','b8377b',2627,2647,NULL,NULL,108,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,72,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2568,1,_binary '\0r#�‚èr',351,2647,2627,NULL,8,'2012-01-22 11:41:45','b4ea1b',2627,2648,NULL,NULL,72,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,108,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2569,1,_binary '\0r#�‚èr',351,2648,2627,NULL,9,'2012-01-22 11:43:33','cfbd64',2638,2639,NULL,NULL,108,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2570,1,_binary '\0r#�‚èr',351,2639,2638,NULL,10,'2012-01-22 11:46:33','88bfa9',2649,NULL,'',NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2571,1,_binary '\0r#�‚èr',352,0,0,NULL,1,'2012-01-23 11:47:09','88bfa9',2650,NULL,'',NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2572,1,_binary '\0r#�‚èr',352,0,2650,NULL,2,'2012-01-23 11:47:45','88bfa9',2650,NULL,'Category',5,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,18,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2573,1,_binary '\0r#�‚èr',352,NULL,2650,5,2,'2012-01-23 11:48:03','88bfa9',2643,2651,NULL,NULL,18,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2641,2642,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,18,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2574,1,_binary '\0r#�‚èr',352,NULL,2650,NULL,3,'2012-01-23 11:48:21','88bfa9',2652,NULL,'Bad No Result Category :(',0,18,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,252,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2575,1,_binary '\0r#�‚èr',352,NULL,2652,NULL,4,'2012-01-23 11:52:33','1c9699',0,2653,NULL,NULL,252,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2576,1,_binary 'Ÿ\ÌÛ’()µ',353,0,0,NULL,1,'2012-01-22 13:38:09','8d3cc9',2644,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2577,1,_binary 'Ÿ\ÌÛ’()µ',353,29,2644,NULL,2,'2012-01-22 13:38:45','73fc30',2644,2646,NULL,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,108,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2578,1,_binary 'Ÿ\ÌÛ’()µ',353,2646,2644,NULL,3,'2012-01-22 13:40:33','a265a5',2627,2654,NULL,NULL,108,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2579,2,_binary 'fQr\Õ\äÅ€',354,0,0,NULL,1,'2012-01-22 11:34:33','58e6c1',2655,2656,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2580,2,_binary 'fQr\Õ\äÅ€',354,2656,2655,NULL,2,'2012-01-22 11:43:33','42185e',2657,2658,NULL,NULL,540,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2581,2,_binary 'fQr\Õ\äÅ€',354,2658,2657,NULL,3,'2012-01-22 11:46:33','144aca',2659,NULL,'',0,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2582,2,_binary 'fQr\Õ\äÅ€',354,NULL,2659,NULL,4,'2012-01-22 11:49:33','f7da26',2660,NULL,'',NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2583,2,_binary 'fQr\Õ\äÅ€',354,NULL,2660,NULL,5,'2012-01-22 11:52:33','f7da26',2652,NULL,'Bad No Result Category bis :(',0,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2584,3,_binary '\â[\î\òFu\Ç4',355,0,0,NULL,1,'2012-01-22 11:34:33','67e220',2655,2656,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2585,3,_binary '\â[\î\òFu\Ç4',355,2656,2655,NULL,2,'2012-01-22 11:43:33','34b751',2661,NULL,'Cat not but not keyword, so this is not search',NULL,540,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2586,3,_binary '\â[\î\òFu\Ç4',355,NULL,2661,NULL,3,'2012-01-22 11:43:33','674961',2662,2663,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2587,1,_binary '+¥šøŠ{',352,2653,2652,NULL,5,'2012-01-23 11:22:33','58417a',2664,2665,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2588,3,_binary '+¥šøŠ{',356,0,0,NULL,1,'2012-01-23 12:22:33','ab06ed',2664,2666,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2589,1,_binary 'Ö¤\n�¶\ð(6',357,0,0,NULL,1,'2012-01-23 13:22:33','4e3e61',510,2667,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2590,2,_binary 'a_\Ät§¤^',358,0,0,NULL,1,'2012-01-23 14:22:33','29ad80',510,2668,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2591,3,_binary 'a_\Ät§¤^',359,0,0,NULL,1,'2012-01-23 15:22:33','effa78',2664,2666,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2592,1,_binary '”û\Ê>Œg\Ö',360,0,0,NULL,1,'2012-01-24 11:22:33','31c5d3',2669,2670,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,66,145,5,0,111,245,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2593,1,_binary '”û\Ê>Œg\Ö',360,2670,2669,NULL,1,'2012-01-24 11:23:33','31c5d3',2673,2671,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2672,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2594,1,_binary '”û\Ê>Œg\Ö',360,2670,2669,NULL,1,'2012-01-24 11:24:33','31c5d3',2673,2671,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2674,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2595,1,_binary '”û\Ê>Œg\Ö',360,2670,2669,NULL,1,'2012-01-24 11:25:33','31c5d3',2673,2671,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2675,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2596,1,_binary '”û\Ê>Œg\Ö',360,2670,2669,NULL,1,'2012-01-24 11:26:33','31c5d3',2673,2671,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2676,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,30,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2597,1,_binary '”û\Ê>Œg\Ö',360,2670,2669,NULL,1,'2012-01-24 11:27:03','31c5d3',2673,2671,NULL,NULL,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2677,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,30,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2598,1,_binary '”û\Ê>Œg\Ö',360,2670,2669,9,1,'2012-01-24 11:27:33','31c5d3',2673,2671,NULL,NULL,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2678,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2599,1,_binary '”û\Ê>Œg\Ö',360,2670,2669,10,1,'2012-01-24 11:27:34','31c5d3',2673,2671,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2678,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2600,1,_binary '”û\Ê>Œg\Ö',360,2670,2669,NULL,1,'2012-01-24 11:23:33','31c5d3',NULL,0,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2679,2680,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2601,1,_binary '”û\Ê>Œg\Ö',360,2670,2669,23,1,'2012-01-24 11:24:33','31c5d3',NULL,0,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2679,2680,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2602,1,_binary '”û\Ê>Œg\Ö',360,2670,2669,0,1,'2012-01-24 11:25:33','31c5d3',NULL,0,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2679,2680,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1499,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2603,1,_binary '”û\Ê>Œg\Ö',360,2670,2669,NULL,2,'2012-01-24 11:52:33','abf729',2681,2682,NULL,NULL,1499,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,99,20,0,160,455,169,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2604,1,_binary '”û\Ê>Œg\Ö',360,2682,2681,NULL,2,'2012-01-24 11:53:33','abf729',2686,2683,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2684,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2605,1,_binary '”û\Ê>Œg\Ö',360,2682,2681,NULL,2,'2012-01-24 11:55:33','abf729',2687,2683,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2684,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2606,1,_binary '”û\Ê>Œg\Ö',360,2682,2681,NULL,2,'2012-01-24 11:57:33','abf729',2688,2683,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2684,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2607,1,_binary '”û\Ê>Œg\Ö',360,2682,2681,NULL,2,'2012-01-24 11:58:33','abf729',2688,2683,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2689,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2608,1,_binary '”û\Ê>Œg\Ö',360,2682,2681,NULL,2,'2012-01-24 12:00:33','abf729',2688,2683,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2690,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1320,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2609,1,_binary '”û\Ê>Œg\Ö',360,2682,2681,NULL,2,'2012-01-24 12:22:33','abf729',2688,2683,NULL,NULL,1320,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2674,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2610,1,_binary '”û\Ê>Œg\Ö',361,0,0,NULL,NULL,'2012-01-24 13:52:33','abf729',NULL,2683,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2691,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2611,1,_binary '”û\Ê>Œg\Ö',362,0,0,NULL,NULL,'2012-01-24 15:04:33','abf729',2688,2683,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2675,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1320,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2612,1,_binary '”û\Ê>Œg\Ö',362,0,0,NULL,NULL,'2012-01-24 15:26:33','abf729',2688,2683,NULL,NULL,1320,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2676,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,420,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2613,1,_binary '”û\Ê>Œg\Ö',362,0,0,NULL,NULL,'2012-01-24 15:33:33','abf729',2692,2683,NULL,NULL,420,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2691,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,900,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2614,1,_binary '”û\Ê>Œg\Ö',362,0,0,NULL,NULL,'2012-01-24 15:48:33','abf729',2688,2683,NULL,NULL,900,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2677,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2615,1,_binary '”û\Ê>Œg\Ö',362,0,0,9.66,NULL,'2012-01-24 15:50:33','abf729',2688,0,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2678,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2616,1,_binary '”û\Ê>Œg\Ö',362,0,0,9.66,NULL,'2012-01-24 16:02:33','abf729',2696,2693,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2694,2695,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2617,1,_binary '”û\Ê>Œg\Ö',363,0,0,NULL,NULL,'2012-01-24 17:14:33','abf729',NULL,2693,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2691,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2618,1,_binary '”û\Ê>Œg\Ö',364,0,0,NULL,NULL,'2012-01-24 18:55:33','abf729',NULL,2693,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2697,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2619,1,_binary '`-\Ô1Ü® +',365,0,0,NULL,NULL,'2012-01-24 11:53:33','',2673,2698,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2672,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2620,1,_binary '`-\Ô1Ü® +',365,0,0,NULL,NULL,'2012-01-24 11:54:33','',2673,2698,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2674,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2621,1,_binary '`-\Ô1Ü® +',365,0,0,NULL,NULL,'2012-01-24 11:55:33','',2673,2698,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2675,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2622,1,_binary '`-\Ô1Ü® +',365,0,0,NULL,NULL,'2012-01-24 11:56:33','',2673,2698,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2676,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,30,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2623,1,_binary '`-\Ô1Ü® +',365,0,0,NULL,NULL,'2012-01-24 11:57:03','',2673,2698,NULL,NULL,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2677,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,30,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2624,1,_binary '`-\Ô1Ü® +',365,0,0,9,NULL,'2012-01-24 11:57:33','',2673,2698,NULL,NULL,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2678,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2625,1,_binary '`-\Ô1Ü® +',365,0,0,10,NULL,'2012-01-24 11:57:34','',2673,2698,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2678,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1499,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2626,1,_binary '`-\Ô1Ü® +',365,0,0,NULL,1,'2012-01-24 12:22:33','5d6a2f',2681,2682,NULL,NULL,1499,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,99,20,0,160,455,169,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2627,1,_binary '`-\Ô1Ü® +',365,2682,2681,NULL,1,'2012-01-24 12:23:33','5d6a2f',2686,2683,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2684,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2628,1,_binary '`-\Ô1Ü® +',365,2682,2681,NULL,1,'2012-01-24 12:25:33','5d6a2f',2687,2683,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2684,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2629,1,_binary '`-\Ô1Ü® +',365,2682,2681,NULL,1,'2012-01-24 12:27:33','5d6a2f',2688,2683,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2684,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2630,1,_binary '`-\Ô1Ü® +',365,2682,2681,NULL,1,'2012-01-24 12:28:33','5d6a2f',2688,2683,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2689,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2631,1,_binary '`-\Ô1Ü® +',365,2682,2681,NULL,1,'2012-01-24 12:30:33','5d6a2f',2688,2683,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2690,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1320,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2632,1,_binary '`-\Ô1Ü® +',365,2682,2681,NULL,1,'2012-01-24 12:52:33','5d6a2f',2688,2683,NULL,NULL,1320,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2674,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2633,1,_binary '`-\Ô1Ü® +',366,0,0,NULL,NULL,'2012-01-24 14:22:33','5d6a2f',NULL,2683,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2691,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2634,1,_binary '`-\Ô1Ü® +',367,0,0,NULL,NULL,'2012-01-24 15:34:33','5d6a2f',2688,2683,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2675,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1320,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2635,1,_binary '`-\Ô1Ü® +',367,0,0,NULL,NULL,'2012-01-24 15:56:33','5d6a2f',2688,2683,NULL,NULL,1320,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2676,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,420,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2636,1,_binary '`-\Ô1Ü® +',367,0,0,NULL,NULL,'2012-01-24 16:03:33','5d6a2f',2692,2683,NULL,NULL,420,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2691,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,900,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2637,1,_binary '`-\Ô1Ü® +',367,0,0,NULL,NULL,'2012-01-24 16:18:33','5d6a2f',2688,2683,NULL,NULL,900,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2677,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2638,1,_binary '`-\Ô1Ü® +',367,0,0,9.66,NULL,'2012-01-24 16:20:33','5d6a2f',2688,0,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2678,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2639,1,_binary '`-\Ô1Ü® +',367,0,0,9.66,NULL,'2012-01-24 16:32:33','5d6a2f',2696,2693,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2694,2695,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2640,1,_binary '`-\Ô1Ü® +',368,0,0,NULL,NULL,'2012-01-24 17:44:33','5d6a2f',NULL,2693,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2691,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2641,1,_binary '`-\Ô1Ü® +',369,0,0,NULL,NULL,'2012-01-24 19:25:33','5d6a2f',NULL,2693,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2697,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2642,1,_binary '†\Ø\àiAJN',370,0,0,NULL,NULL,'2012-01-25 11:53:33','',2673,2698,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2672,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2643,1,_binary '†\Ø\àiAJN',370,0,0,NULL,NULL,'2012-01-25 11:54:33','',2673,2698,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2674,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2644,1,_binary '†\Ø\àiAJN',370,0,0,NULL,NULL,'2012-01-25 11:55:33','',2673,2698,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2675,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2645,1,_binary '†\Ø\àiAJN',370,0,0,NULL,NULL,'2012-01-25 11:56:33','',2673,2698,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2676,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,30,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2646,1,_binary '†\Ø\àiAJN',370,0,0,NULL,NULL,'2012-01-25 11:57:03','',2673,2698,NULL,NULL,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2677,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,30,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2647,1,_binary '†\Ø\àiAJN',370,0,0,9,NULL,'2012-01-25 11:57:33','',2673,2698,NULL,NULL,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2678,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2648,1,_binary '†\Ø\àiAJN',370,0,0,10,NULL,'2012-01-25 11:57:34','',2673,2698,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2678,2611,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1499,NULL,NULL,NULL,NULL,NULL,'Page Scope Custom var','should not appear in events report',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2649,1,_binary '†\Ø\àiAJN',370,0,0,NULL,1,'2012-01-25 12:22:33','7a6198',2681,2682,NULL,NULL,1499,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,99,20,0,160,455,169,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2650,1,_binary '†\Ø\àiAJN',370,2682,2681,NULL,1,'2012-01-25 12:23:33','7a6198',2686,2683,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2684,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2651,1,_binary '†\Ø\àiAJN',370,2682,2681,NULL,1,'2012-01-25 12:25:33','7a6198',2687,2683,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2684,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2652,1,_binary '†\Ø\àiAJN',370,2682,2681,NULL,1,'2012-01-25 12:27:33','7a6198',2688,2683,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2684,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2653,1,_binary '†\Ø\àiAJN',370,2682,2681,NULL,1,'2012-01-25 12:28:33','7a6198',2688,2683,NULL,NULL,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2689,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2654,1,_binary '†\Ø\àiAJN',370,2682,2681,NULL,1,'2012-01-25 12:30:33','7a6198',2688,2683,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2690,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1320,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2655,1,_binary '†\Ø\àiAJN',370,2682,2681,NULL,1,'2012-01-25 12:52:33','7a6198',2688,2683,NULL,NULL,1320,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2674,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2656,1,_binary '†\Ø\àiAJN',371,0,0,NULL,NULL,'2012-01-25 14:22:33','7a6198',NULL,2683,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2691,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2657,1,_binary '†\Ø\àiAJN',372,0,0,NULL,NULL,'2012-01-25 15:34:33','7a6198',2688,2683,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2675,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1320,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2658,1,_binary '†\Ø\àiAJN',372,0,0,NULL,NULL,'2012-01-25 15:56:33','7a6198',2688,2683,NULL,NULL,1320,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2676,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,420,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2659,1,_binary '†\Ø\àiAJN',372,0,0,NULL,NULL,'2012-01-25 16:03:33','7a6198',2692,2683,NULL,NULL,420,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2691,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,900,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2660,1,_binary '†\Ø\àiAJN',372,0,0,NULL,NULL,'2012-01-25 16:18:33','7a6198',2688,2683,NULL,NULL,900,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2677,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2661,1,_binary '†\Ø\àiAJN',372,0,0,9.66,NULL,'2012-01-25 16:20:33','7a6198',2688,0,NULL,NULL,120,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2678,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2662,1,_binary '†\Ø\àiAJN',372,0,0,9.66,NULL,'2012-01-25 16:32:33','7a6198',2696,2693,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2694,2695,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2663,1,_binary '†\Ø\àiAJN',373,0,0,NULL,NULL,'2012-01-25 17:44:33','7a6198',NULL,2693,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2691,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2664,1,_binary '†\Ø\àiAJN',374,0,0,NULL,NULL,'2012-01-25 19:25:33','7a6198',NULL,2693,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2697,2685,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2665,1,_binary '·^\ò$f',375,0,0,NULL,1,'2012-01-25 00:11:42','430786',28,29,NULL,NULL,0,30,NULL,NULL,NULL,NULL,31,1111.11111,32,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2666,1,_binary '·^\ò$f',375,29,28,NULL,2,'2012-01-25 00:17:42','08e3b6',2699,29,NULL,NULL,360,30,NULL,NULL,NULL,NULL,31,666,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2667,1,_binary '·^\ò$f',375,29,2699,NULL,3,'2012-01-25 00:23:42','c22f81',35,29,NULL,NULL,360,0,NULL,NULL,NULL,NULL,31,888,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2668,1,_binary '·^\ò$f',375,29,35,NULL,4,'2012-01-25 00:23:43','4170dc',2700,29,NULL,NULL,1,2701,2702,30,2703,2704,31,NULL,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2669,1,_binary '·^\ò$f',376,0,0,NULL,1,'2012-01-25 01:47:42','b2e7a7',37,29,NULL,NULL,0,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2670,1,_binary '·^\ò$f',376,29,37,NULL,2,'2012-01-25 01:53:42','2df7bc',2705,29,NULL,NULL,360,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2671,1,_binary '·^\ò$f',376,29,2705,NULL,3,'2012-01-25 01:59:42','c9465b',2706,29,NULL,NULL,360,30,NULL,NULL,NULL,NULL,31,666,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2672,1,_binary '·^\ò$f',376,29,2706,NULL,4,'2012-01-25 02:41:42','2bdf2f',2719,29,NULL,NULL,720,0,NULL,NULL,NULL,NULL,2720,999,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2673,1,_binary '·^\ò$f',376,29,2719,NULL,5,'2012-01-25 02:44:42','9211a6',2719,29,NULL,NULL,180,0,NULL,NULL,NULL,NULL,2720,333,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2674,1,_binary '·^\ò$f',376,29,2719,NULL,6,'2012-01-25 02:47:42','8acf89',2719,29,NULL,NULL,180,2721,2722,NULL,NULL,NULL,2723,NULL,2724,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2675,1,_binary '·^\ò$f',377,0,0,NULL,1,'2012-01-25 07:41:42','472862',2719,29,NULL,NULL,0,0,NULL,NULL,NULL,NULL,2720,999,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2676,1,_binary '·^\ò$f',377,29,2719,NULL,2,'2012-01-25 07:44:42','533897',2719,29,NULL,NULL,180,0,NULL,NULL,NULL,NULL,2720,333,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2677,1,_binary '·^\ò$f',377,29,2719,NULL,3,'2012-01-25 07:47:42','4957d3',2719,29,NULL,NULL,180,2721,2722,NULL,NULL,NULL,2723,NULL,2724,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2678,1,_binary '·^\ò$f',378,0,0,NULL,1,'2012-01-26 02:41:42','619564',2719,29,NULL,NULL,360,0,NULL,NULL,NULL,NULL,2720,999,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2679,1,_binary '·^\ò$f',378,29,2719,NULL,2,'2012-01-26 02:44:42','28c32f',2719,29,NULL,NULL,180,0,NULL,NULL,NULL,NULL,2720,333,36,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2680,1,_binary '·^\ò$f',378,29,2719,NULL,3,'2012-01-26 02:47:42','c16364',2719,29,NULL,NULL,180,2721,2722,NULL,NULL,NULL,2723,NULL,2724,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2681,2,_binary 'u·\Ú\'\ó¡Jš',380,0,0,NULL,1,'2012-01-25 01:11:42','e512bf',2728,2729,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2682,1,_binary 'i2Jµ\à¶',382,0,0,NULL,1,'2012-02-01 11:22:33','c42efb',2730,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,381,285,65,96,155,386,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2683,1,_binary 'i2Jµ\à¶',383,0,0,NULL,1,'2012-02-01 14:22:33','add61a',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,266,185,58,80,245,318,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2684,1,_binary 'i2Jµ\à¶',384,0,0,NULL,1,'2012-02-01 16:22:33','bb79b8',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,266,185,58,80,245,318,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2685,2,_binary '^2ub6w\Å',385,0,0,NULL,1,'2012-02-01 11:22:33','6eb711',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,229,352,0,129,187,245,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2686,1,_binary '¹\õ\çü‘xÁ_',386,0,0,NULL,1,'2012-02-02 11:22:33','028ac2',2734,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,380,284,64,95,154,385,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2687,1,_binary '¹\õ\çü‘xÁ_',387,0,0,NULL,1,'2012-02-02 14:22:33','0b828e',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,265,184,57,79,244,317,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2688,1,_binary '¹\õ\çü‘xÁ_',388,0,0,NULL,1,'2012-02-02 16:22:33','425daa',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,265,184,57,79,244,317,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2689,2,_binary '{Å�…k\Ú$',389,0,0,NULL,1,'2012-02-02 11:22:33','930b25',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,228,351,0,128,186,244,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2690,1,_binary '\í鉸À·Tj',390,0,0,NULL,1,'2012-02-03 11:22:33','85e1d8',2736,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,379,283,63,94,153,384,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2691,1,_binary '\í鉸À·Tj',391,0,0,NULL,1,'2012-02-03 14:22:33','037e2d',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,264,183,56,78,243,316,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2692,1,_binary '\í鉸À·Tj',392,0,0,NULL,1,'2012-02-03 16:22:33','938228',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,264,183,56,78,243,316,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2693,2,_binary 'øŽ5\Î8!',393,0,0,NULL,1,'2012-02-03 11:22:33','54977f',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,227,350,0,127,185,243,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2694,1,_binary '9R\0\"–>',394,0,0,NULL,1,'2012-02-04 11:22:33','38290b',2730,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,378,282,62,93,152,383,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2695,1,_binary '9R\0\"–>',395,0,0,NULL,1,'2012-02-04 14:22:33','e1bfa4',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,263,182,55,77,242,315,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2696,1,_binary '9R\0\"–>',396,0,0,NULL,1,'2012-02-04 16:22:33','a8276b',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,263,182,55,77,242,315,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2697,2,_binary '\ÈzÒŒM\óú',397,0,0,NULL,1,'2012-02-04 11:22:33','2a4444',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,226,349,0,126,184,242,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2698,1,_binary '¦\Í\Û|\ñž`›',398,0,0,NULL,1,'2012-02-05 11:22:33','82c4e6',2734,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,377,281,61,92,151,382,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2699,1,_binary '¦\Í\Û|\ñž`›',399,0,0,NULL,1,'2012-02-05 14:22:33','403680',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,262,181,54,76,241,314,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2700,1,_binary '¦\Í\Û|\ñž`›',400,0,0,NULL,1,'2012-02-05 16:22:33','da5d57',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,262,181,54,76,241,314,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2701,2,_binary '½ n|�\Ãi',401,0,0,NULL,1,'2012-02-05 11:22:33','f890c1',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,225,348,0,125,183,241,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2702,1,_binary '¤\Ú:»ùR',402,0,0,NULL,1,'2012-02-06 11:22:33','023201',2736,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,376,280,60,91,150,381,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2703,1,_binary '¤\Ú:»ùR',403,0,0,NULL,1,'2012-02-06 14:22:33','c2351f',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,261,180,53,75,240,313,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2704,1,_binary '¤\Ú:»ùR',404,0,0,NULL,1,'2012-02-06 16:22:33','f1108e',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,261,180,53,75,240,313,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2705,2,_binary '\ÑEZP3Aª',405,0,0,NULL,1,'2012-02-06 11:22:33','3da5c2',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,224,347,0,124,182,240,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2706,1,_binary '¤ï¶¬žrK',406,0,0,NULL,1,'2012-02-07 11:22:33','bbce14',2730,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,375,279,59,90,149,380,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2707,1,_binary '¤ï¶¬žrK',407,0,0,NULL,1,'2012-02-07 14:22:33','198d09',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,260,179,52,74,239,312,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2708,1,_binary '¤ï¶¬žrK',408,0,0,NULL,1,'2012-02-07 16:22:33','ac7be6',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,260,179,52,74,239,312,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2709,2,_binary '\ê%v•m',409,0,0,NULL,1,'2012-02-07 11:22:33','e79254',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,223,346,0,123,181,239,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2710,1,_binary 'Vs!ù\ÏÁ',410,0,0,NULL,1,'2012-02-08 11:22:33','5f185e',2734,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,374,278,58,89,148,379,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2711,1,_binary 'Vs!ù\ÏÁ',411,0,0,NULL,1,'2012-02-08 14:22:33','661de9',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,259,178,51,73,238,311,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2712,1,_binary 'Vs!ù\ÏÁ',412,0,0,NULL,1,'2012-02-08 16:22:33','9321b1',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,259,178,51,73,238,311,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2713,2,_binary '\Z|\Ê\Ô\ÛQu0',413,0,0,NULL,1,'2012-02-08 11:22:33','50d520',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,222,345,0,122,180,238,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2714,1,_binary '#s9Ò­ü\r',414,0,0,NULL,1,'2012-02-09 11:22:33','c55728',2736,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,373,277,57,88,147,378,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2715,1,_binary '#s9Ò­ü\r',415,0,0,NULL,1,'2012-02-09 14:22:33','2c10d4',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,258,177,50,72,237,310,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2716,1,_binary '#s9Ò­ü\r',416,0,0,NULL,1,'2012-02-09 16:22:33','47f782',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,258,177,50,72,237,310,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2717,2,_binary '\â¦W\âNŒø',417,0,0,NULL,1,'2012-02-09 11:22:33','f8422f',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,221,344,0,121,179,237,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2718,1,_binary '»©\äm\ê%\Ç',418,0,0,NULL,1,'2012-02-10 11:22:33','cda66d',2730,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,372,276,56,87,146,377,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2719,1,_binary '»©\äm\ê%\Ç',419,0,0,NULL,1,'2012-02-10 14:22:33','416cff',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,257,176,49,71,236,309,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2720,1,_binary '»©\äm\ê%\Ç',420,0,0,NULL,1,'2012-02-10 16:22:33','91500b',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,257,176,49,71,236,309,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2721,2,_binary 'šZž±/µ',421,0,0,NULL,1,'2012-02-10 11:22:33','227479',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,220,343,0,120,178,236,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2722,1,_binary 'zˆ\ð^¹ã¯Š',422,0,0,NULL,1,'2012-02-11 11:22:33','9c210a',2734,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,371,275,55,86,145,376,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2723,1,_binary 'zˆ\ð^¹ã¯Š',423,0,0,NULL,1,'2012-02-11 14:22:33','a432ef',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,256,175,48,70,235,308,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2724,1,_binary 'zˆ\ð^¹ã¯Š',424,0,0,NULL,1,'2012-02-11 16:22:33','0d44af',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,256,175,48,70,235,308,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2725,2,_binary '+\î!\á£9Hf',425,0,0,NULL,1,'2012-02-11 11:22:33','e1ad52',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,219,342,0,119,177,235,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2726,1,_binary 'ù-µ\Ô\n“µ+',426,0,0,NULL,1,'2012-02-12 11:22:33','46f193',2736,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,370,274,54,85,144,375,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2727,1,_binary 'ù-µ\Ô\n“µ+',427,0,0,NULL,1,'2012-02-12 14:22:33','6ba237',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,255,174,47,69,234,307,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2728,1,_binary 'ù-µ\Ô\n“µ+',428,0,0,NULL,1,'2012-02-12 16:22:33','87d825',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,255,174,47,69,234,307,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2729,2,_binary '«n$O\ëe½',429,0,0,NULL,1,'2012-02-12 11:22:33','003eb0',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,218,341,0,118,176,234,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2730,1,_binary '&rQ5\Ñ\íc',430,0,0,NULL,1,'2012-02-13 11:22:33','eb5e52',2730,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,369,273,53,84,143,374,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2731,1,_binary '&rQ5\Ñ\íc',431,0,0,NULL,1,'2012-02-13 14:22:33','9a5ae8',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,254,173,46,68,233,306,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2732,1,_binary '&rQ5\Ñ\íc',432,0,0,NULL,1,'2012-02-13 16:22:33','a05ef8',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,254,173,46,68,233,306,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2733,2,_binary '_y[¹…©\Ì\à',433,0,0,NULL,1,'2012-02-13 11:22:33','f08d5a',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,217,340,0,117,175,233,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2734,1,_binary 'œ=S°“v‘',434,0,0,NULL,1,'2012-02-14 11:22:33','ec24b8',2734,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,368,272,52,83,142,373,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2735,1,_binary 'œ=S°“v‘',435,0,0,NULL,1,'2012-02-14 14:22:33','a7cea1',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,253,172,45,67,232,305,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2736,1,_binary 'œ=S°“v‘',436,0,0,NULL,1,'2012-02-14 16:22:33','d67717',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,253,172,45,67,232,305,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2737,2,_binary 'š¨Z‡x\Ël\Â',437,0,0,NULL,1,'2012-02-14 11:22:33','d4b27f',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,216,339,0,116,174,232,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2738,1,_binary '¦\r“ɦ&a�',438,0,0,NULL,1,'2012-02-15 11:22:33','bd5e44',2736,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,367,271,51,82,141,372,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2739,1,_binary '¦\r“ɦ&a�',439,0,0,NULL,1,'2012-02-15 14:22:33','0d5007',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,252,171,44,66,231,304,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2740,1,_binary '¦\r“ɦ&a�',440,0,0,NULL,1,'2012-02-15 16:22:33','4a8d59',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,252,171,44,66,231,304,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2741,2,_binary ' ü\Í) s¹',441,0,0,NULL,1,'2012-02-15 11:22:33','e001cd',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,215,338,0,115,173,231,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2742,1,_binary '\á\ÆM¯y\å\å',442,0,0,NULL,1,'2012-02-16 11:22:33','e465ab',2730,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,366,270,50,81,140,371,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2743,1,_binary '\á\ÆM¯y\å\å',443,0,0,NULL,1,'2012-02-16 14:22:33','f2a853',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,251,170,43,65,230,303,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2744,1,_binary '\á\ÆM¯y\å\å',444,0,0,NULL,1,'2012-02-16 16:22:33','c3cda1',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,251,170,43,65,230,303,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2745,2,_binary 'u•M¤\ÜP\0(',445,0,0,NULL,1,'2012-02-16 11:22:33','50dc92',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,214,337,0,114,172,230,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2746,1,_binary '\ã[\\/0f¶',446,0,0,NULL,1,'2012-02-17 11:22:33','98ff96',2734,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,365,269,49,80,139,370,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2747,1,_binary '\ã[\\/0f¶',447,0,0,NULL,1,'2012-02-17 14:22:33','200c73',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,250,169,42,64,229,302,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2748,1,_binary '\ã[\\/0f¶',448,0,0,NULL,1,'2012-02-17 16:22:33','abe0b8',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,250,169,42,64,229,302,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2749,2,_binary '\ð„\×M\Ð\Â',449,0,0,NULL,1,'2012-02-17 11:22:33','22d6bb',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,213,336,0,113,171,229,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2750,1,_binary 'º?�\ÍDK\Ûx',450,0,0,NULL,1,'2012-02-18 11:22:33','f6a5d8',2736,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,364,268,48,79,138,369,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2751,1,_binary 'º?�\ÍDK\Ûx',451,0,0,NULL,1,'2012-02-18 14:22:33','8fb760',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,249,168,41,63,228,301,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2752,1,_binary 'º?�\ÍDK\Ûx',452,0,0,NULL,1,'2012-02-18 16:22:33','7042f3',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,249,168,41,63,228,301,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2753,2,_binary 'gn\ê©1ùŠ',453,0,0,NULL,1,'2012-02-18 11:22:33','269382',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,212,335,0,112,170,228,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2754,1,_binary '\ôV{\ÕMF)C',454,0,0,NULL,1,'2012-02-19 11:22:33','bec855',2730,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,363,267,47,78,137,368,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2755,1,_binary '\ôV{\ÕMF)C',455,0,0,NULL,1,'2012-02-19 14:22:33','e059ed',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,248,167,40,62,227,300,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2756,1,_binary '\ôV{\ÕMF)C',456,0,0,NULL,1,'2012-02-19 16:22:33','bcecbf',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,248,167,40,62,227,300,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2757,2,_binary 'xŒAc\àÚ‘‚',457,0,0,NULL,1,'2012-02-19 11:22:33','120222',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,211,334,0,111,169,227,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2758,1,_binary 'ùʨƒdq\ï',458,0,0,NULL,1,'2012-02-20 11:22:33','24abf5',2734,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,362,266,46,77,136,367,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2759,1,_binary 'ùʨƒdq\ï',459,0,0,NULL,1,'2012-02-20 14:22:33','2da224',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,247,166,39,61,226,299,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2760,1,_binary 'ùʨƒdq\ï',460,0,0,NULL,1,'2012-02-20 16:22:33','99731a',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,247,166,39,61,226,299,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2761,2,_binary 'ú\'¼\ë\n%',461,0,0,NULL,1,'2012-02-20 11:22:33','711f15',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,210,333,0,110,168,226,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2762,1,_binary 'u:\ëÒ‰8u',462,0,0,NULL,1,'2012-02-21 11:22:33','b2fac1',2736,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,361,265,45,76,135,366,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2763,1,_binary 'u:\ëÒ‰8u',463,0,0,NULL,1,'2012-02-21 14:22:33','fc7cde',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,246,165,38,60,225,298,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2764,1,_binary 'u:\ëÒ‰8u',464,0,0,NULL,1,'2012-02-21 16:22:33','252c33',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,246,165,38,60,225,298,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2765,2,_binary '\ÍLL\Ýoo¹š',465,0,0,NULL,1,'2012-02-21 11:22:33','4ce6d5',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,209,332,0,109,167,225,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2766,1,_binary 'ý§’s—\Ý\Ë_',466,0,0,NULL,1,'2012-02-22 11:22:33','50a244',2730,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,360,264,44,75,134,365,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2767,1,_binary 'ý§’s—\Ý\Ë_',467,0,0,NULL,1,'2012-02-22 14:22:33','8bf263',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,245,164,37,59,224,297,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2768,1,_binary 'ý§’s—\Ý\Ë_',468,0,0,NULL,1,'2012-02-22 16:22:33','3bf13f',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,245,164,37,59,224,297,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2769,2,_binary 'Ì‘D\ÒZ\ã',469,0,0,NULL,1,'2012-02-22 11:22:33','c58839',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,208,331,0,108,166,224,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2770,1,_binary '=3ŒP\ß t',470,0,0,NULL,1,'2012-02-23 11:22:33','3bf62b',2734,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,359,263,43,74,133,364,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2771,1,_binary '=3ŒP\ß t',471,0,0,NULL,1,'2012-02-23 14:22:33','aeb8d7',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,244,163,36,58,223,296,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2772,1,_binary '=3ŒP\ß t',472,0,0,NULL,1,'2012-02-23 16:22:33','aaf4d6',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,244,163,36,58,223,296,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2773,2,_binary 'r\óø2c»£',473,0,0,NULL,1,'2012-02-23 11:22:33','90dbe4',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,207,330,0,107,165,223,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2774,1,_binary 'Œ~f5\â·R4',474,0,0,NULL,1,'2012-02-24 11:22:33','3b36c5',2736,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,358,262,42,73,132,363,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2775,1,_binary 'Œ~f5\â·R4',475,0,0,NULL,1,'2012-02-24 14:22:33','e969c8',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,243,162,35,57,222,295,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2776,1,_binary 'Œ~f5\â·R4',476,0,0,NULL,1,'2012-02-24 16:22:33','4014f7',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,243,162,35,57,222,295,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2777,2,_binary '½u\Ä\Í\íÿ',477,0,0,NULL,1,'2012-02-24 11:22:33','3d41b1',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,206,329,0,106,164,222,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2778,1,_binary '\É\УޱŒ',478,0,0,NULL,1,'2012-02-25 11:22:33','55f7d2',2730,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,357,261,41,72,131,362,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2779,1,_binary '\É\УޱŒ',479,0,0,NULL,1,'2012-02-25 14:22:33','05cce0',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,242,161,34,56,221,294,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2780,1,_binary '\É\УޱŒ',480,0,0,NULL,1,'2012-02-25 16:22:33','b8e27e',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,242,161,34,56,221,294,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2781,2,_binary 'ü¦\ÔCŽ\Z',481,0,0,NULL,1,'2012-02-25 11:22:33','df24ee',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,205,328,0,105,163,221,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2782,1,_binary 'ø>K\Z\ð#\ì<',482,0,0,NULL,1,'2012-02-26 11:22:33','26d2b6',2734,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,356,260,40,71,130,361,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2783,1,_binary 'ø>K\Z\ð#\ì<',483,0,0,NULL,1,'2012-02-26 14:22:33','f8dec4',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,241,160,33,55,220,293,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2784,1,_binary 'ø>K\Z\ð#\ì<',484,0,0,NULL,1,'2012-02-26 16:22:33','b952b8',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,241,160,33,55,220,293,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2785,2,_binary '‹\õMþ-Ý®',485,0,0,NULL,1,'2012-02-26 11:22:33','5213f2',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,204,327,0,104,162,220,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2786,1,_binary 'M›:Ô˜1d',486,0,0,NULL,1,'2012-02-27 11:22:33','871bdc',2736,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,355,259,39,70,129,360,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2787,1,_binary 'M›:Ô˜1d',487,0,0,NULL,1,'2012-02-27 14:22:33','94b4f6',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,240,159,32,54,219,292,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2788,1,_binary 'M›:Ô˜1d',488,0,0,NULL,1,'2012-02-27 16:22:33','a13e5b',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,240,159,32,54,219,292,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2789,2,_binary '† \Þwºq',489,0,0,NULL,1,'2012-02-27 11:22:33','48f297',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,203,326,0,103,161,219,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2790,1,_binary 'F}\á<9\Ê',490,0,0,NULL,1,'2012-02-28 11:22:33','2aea08',2730,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,354,258,38,69,128,359,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2791,1,_binary 'F}\á<9\Ê',491,0,0,NULL,1,'2012-02-28 14:22:33','86726b',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,239,158,31,53,218,291,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2792,1,_binary 'F}\á<9\Ê',492,0,0,NULL,1,'2012-02-28 16:22:33','1e0d40',2732,2738,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,239,158,31,53,218,291,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2793,2,_binary '9 \Ò\ó„+p|',493,0,0,NULL,1,'2012-02-28 11:22:33','72ebfd',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,202,325,0,102,160,218,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2794,1,_binary 'y\÷\")Vÿ6',494,0,0,NULL,1,'2012-02-29 11:22:33','652753',2734,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,353,257,37,68,127,358,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2795,1,_binary 'y\÷\")Vÿ6',495,0,0,NULL,1,'2012-02-29 14:22:33','94798e',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,238,157,30,52,217,290,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2796,1,_binary 'y\÷\")Vÿ6',496,0,0,NULL,1,'2012-02-29 16:22:33','9646bd',2732,2731,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,238,157,30,52,217,290,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2797,2,_binary '­µM<\î\ä\Ó',497,0,0,NULL,1,'2012-02-29 11:22:33','ef7372',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,201,324,0,101,159,217,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2798,1,_binary '\É\æž9�\Ç',498,0,0,NULL,1,'2012-03-01 11:22:33','6555b4',2736,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,352,256,36,67,126,357,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2799,1,_binary '\É\æž9�\Ç',499,0,0,NULL,1,'2012-03-01 14:22:33','454e7e',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,237,156,29,51,216,289,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2800,1,_binary '\É\æž9�\Ç',500,0,0,NULL,1,'2012-03-01 16:22:33','2fe539',2732,2735,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,237,156,29,51,216,289,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2801,2,_binary 'ÿr)\Ú_`',501,0,0,NULL,1,'2012-03-01 11:22:33','c4a970',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,200,323,0,100,158,216,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2802,1,_binary ' V*[º\"\×)',502,0,0,NULL,1,'2012-03-02 11:22:33','2d4f2a',2730,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,351,255,35,66,125,356,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2803,1,_binary ' V*[º\"\×)',503,0,0,NULL,1,'2012-03-02 14:22:33','2a6f1d',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,236,155,28,50,215,288,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2804,1,_binary ' V*[º\"\×)',504,0,0,NULL,1,'2012-03-02 16:22:33','b7e24f',2732,2737,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,236,155,28,50,215,288,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2805,2,_binary '‰\êW¸)°?0',505,0,0,NULL,1,'2012-03-02 11:22:33','8b4cc6',2733,96,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,199,322,0,99,157,215,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2806,1,_binary 'Ÿ1\î=¿y[\Í',506,0,0,NULL,1,'2010-01-03 23:55:00','7e4cf5',2739,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,209,1015,36,301,228,335,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2807,1,_binary 'Ÿ1\î=¿y[\Í',507,0,0,NULL,1,'2010-01-04 00:01:00','238fca',0,0,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2808,1,_binary '\öm³�,\n\Ê\Þ',508,0,0,NULL,1,'2012-01-27 12:22:33','82044b',2739,2740,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,356,1159,62,440,305,440,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2809,1,_binary '\öm³�,\n\Ê\Þ',509,0,0,NULL,1,'2012-01-29 11:22:33','324eb0',2741,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,296,1025,27,335,268,356,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2810,1,_binary '\öm³�,\n\Ê\Þ',510,0,0,NULL,1,'2012-01-29 11:28:33','008964',2742,2743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,198,998,0,299,199,289,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2811,1,_binary '\öm³�,\n\Ê\Þ',510,2743,2742,NULL,1,'2012-01-29 11:34:33','008964',NULL,0,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2812,1,_binary '\öm³�,\n\Ê\Þ',510,2743,2742,NULL,1,'2012-01-29 11:37:33','008964',NULL,0,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2813,1,_binary '\öm³�,\n\Ê\Þ',510,2743,2742,NULL,2,'2012-01-29 11:37:33','7786d6',2744,2743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,356,1499,33,269,356,452,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2814,1,_binary '\öm³�,\n\Ê\Þ',511,0,0,NULL,1,'2012-01-30 11:22:33','fbd390',2741,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,296,1025,27,335,268,356,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2815,1,_binary '\öm³�,\n\Ê\Þ',512,0,0,NULL,1,'2012-01-30 11:28:33','444c08',2742,2743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,198,998,0,299,199,289,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2816,1,_binary '\öm³�,\n\Ê\Þ',512,2743,2742,NULL,1,'2012-01-30 11:34:33','444c08',NULL,0,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2817,1,_binary '\öm³�,\n\Ê\Þ',512,2743,2742,NULL,1,'2012-01-30 11:37:33','444c08',NULL,0,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2818,1,_binary '\öm³�,\n\Ê\Þ',512,2743,2742,NULL,2,'2012-01-30 11:37:33','62c1fd',2744,2743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,356,1499,33,269,356,452,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2819,1,_binary '\öm³�,\n\Ê\Þ',513,0,0,NULL,1,'2012-01-31 11:22:33','1328d7',2741,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,296,1025,27,335,268,356,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2820,1,_binary '\öm³�,\n\Ê\Þ',514,0,0,NULL,1,'2012-01-31 11:28:33','5d2368',2742,2743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,198,998,0,299,199,289,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2821,1,_binary '\öm³�,\n\Ê\Þ',514,2743,2742,NULL,1,'2012-01-31 11:34:33','5d2368',NULL,0,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2822,1,_binary '\öm³�,\n\Ê\Þ',514,2743,2742,NULL,1,'2012-01-31 11:37:33','5d2368',NULL,0,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2823,1,_binary '\öm³�,\n\Ê\Þ',514,2743,2742,NULL,2,'2012-01-31 11:37:33','8e515e',2744,2743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,356,1499,33,269,356,452,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2824,1,_binary '\öm³�,\n\Ê\Þ',515,0,0,NULL,1,'2012-02-01 11:22:33','c46fe8',2741,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,296,1025,27,335,268,356,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2825,1,_binary '\öm³�,\n\Ê\Þ',515,29,2741,NULL,2,'2012-02-01 11:28:33','6d4d66',2742,2743,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,198,998,0,299,199,289,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2826,1,_binary '\öm³�,\n\Ê\Þ',515,2743,2742,NULL,2,'2012-02-01 11:34:33','6d4d66',NULL,0,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2827,1,_binary '\öm³�,\n\Ê\Þ',515,2743,2742,NULL,2,'2012-02-01 11:37:33','6d4d66',NULL,0,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2828,1,_binary '\öm³�,\n\Ê\Þ',515,2743,2742,NULL,3,'2012-02-01 11:37:33','fbf33c',2744,2743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,356,1499,33,269,356,452,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2829,1,_binary '\öm³�,\n\Ê\Þ',516,0,0,NULL,1,'2012-02-02 11:22:33','9759e9',2741,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,296,1025,27,335,268,356,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2830,1,_binary '\öm³�,\n\Ê\Þ',516,29,2741,NULL,2,'2012-02-02 11:28:33','9128a4',2742,2743,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,198,998,0,299,199,289,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2831,1,_binary '\öm³�,\n\Ê\Þ',516,2743,2742,NULL,2,'2012-02-02 11:34:33','9128a4',NULL,0,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2832,1,_binary '\öm³�,\n\Ê\Þ',516,2743,2742,NULL,2,'2012-02-02 11:37:33','9128a4',NULL,0,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2833,1,_binary '\öm³�,\n\Ê\Þ',516,2743,2742,NULL,3,'2012-02-02 11:37:33','ab16d6',2744,2743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,356,1499,33,269,356,452,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2834,1,_binary '\öm³�,\n\Ê\Þ',517,0,0,NULL,1,'2012-02-03 11:22:33','3c01d1',2741,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,296,1025,27,335,268,356,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2835,1,_binary '\öm³�,\n\Ê\Þ',517,29,2741,NULL,2,'2012-02-03 11:28:33','ce2ef6',2742,2743,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,198,998,0,299,199,289,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2836,1,_binary '\öm³�,\n\Ê\Þ',517,2743,2742,NULL,2,'2012-02-03 11:34:33','ce2ef6',NULL,0,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2837,1,_binary '\öm³�,\n\Ê\Þ',517,2743,2742,NULL,2,'2012-02-03 11:37:33','ce2ef6',NULL,0,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2838,1,_binary '\öm³�,\n\Ê\Þ',517,2743,2742,NULL,3,'2012-02-03 11:37:33','76a31a',2744,2743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,356,1499,33,269,356,452,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2839,1,_binary '\öm³�,\n\Ê\Þ',518,0,0,NULL,1,'2012-02-04 11:22:33','6b9d4d',2741,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,296,1025,27,335,268,356,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2840,1,_binary '\öm³�,\n\Ê\Þ',518,29,2741,NULL,2,'2012-02-04 11:28:33','676b49',2742,2743,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,198,998,0,299,199,289,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2841,1,_binary '\öm³�,\n\Ê\Þ',518,2743,2742,NULL,2,'2012-02-04 11:34:33','676b49',NULL,0,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2842,1,_binary '\öm³�,\n\Ê\Þ',518,2743,2742,NULL,2,'2012-02-04 11:37:33','676b49',NULL,0,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2843,1,_binary '\öm³�,\n\Ê\Þ',518,2743,2742,NULL,3,'2012-02-04 11:37:33','0fb3b0',2744,2743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,356,1499,33,269,356,452,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2844,1,_binary '\öm³�,\n\Ê\Þ',519,0,0,NULL,1,'2012-02-05 11:22:33','b814c0',2741,29,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,296,1025,27,335,268,356,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2845,1,_binary '\öm³�,\n\Ê\Þ',520,0,0,NULL,1,'2012-02-05 11:28:33','f194a2',2742,2743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,198,998,0,299,199,289,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2846,1,_binary '\öm³�,\n\Ê\Þ',520,2743,2742,NULL,1,'2012-02-05 11:34:33','f194a2',NULL,0,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2847,1,_binary '\öm³�,\n\Ê\Þ',520,2743,2742,NULL,1,'2012-02-05 11:37:33','f194a2',NULL,0,NULL,NULL,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2848,1,_binary '\öm³�,\n\Ê\Þ',520,2743,2742,NULL,2,'2012-02-05 11:37:33','a99a3c',2744,2743,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,356,1499,33,269,356,452,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2849,2,_binary '\ÏcµÄ°,š\ò',521,0,0,NULL,1,'2012-01-28 11:22:33','8ada6d',2745,2746,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,35,289,33,50,144,318,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2850,2,_binary '\ÏcµÄ°,š\ò',521,2746,2745,NULL,2,'2012-01-28 11:22:33','afc229',0,0,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,999,325,0,120,258,444,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2851,2,_binary '\ÏcµÄ°,š\ò',521,0,2745,NULL,3,'2012-01-28 11:22:33','5ac952',0,2747,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,189,245,21,350,344,299,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2852,1,_binary 'µ\\‚\ÑH�x%',522,0,0,NULL,1,'2012-01-29 11:22:33','92636e',2748,2749,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1080,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2853,1,_binary 'µ\\‚\ÑH�x%',523,0,0,NULL,1,'2012-01-29 13:22:33','115422',0,2749,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2854,1,_binary 'L\à$\åEŠ',524,0,0,NULL,1,'2012-01-30 11:28:33','9762c3',2750,2751,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2855,1,_binary 'L\à$\åEŠ',524,2751,2750,NULL,2,'2012-01-30 11:34:33','91e65a',2752,2753,NULL,NULL,359,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Status user','Loggedin','Status user','looking at \"profile page\"'),(2856,1,_binary 'L\à$\åEŠ',524,2753,2752,NULL,3,'2012-01-30 11:34:34','416ae4',2754,2753,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,'Language','FR','SET WITH EMPTY VALUE PAGE SCOPE','',NULL,NULL,'Status user','looking at \"profile page\"',NULL,NULL),(2857,1,_binary 'L\à$\åEŠ',524,2753,2754,NULL,4,'2012-01-30 11:34:36','3779be',2755,2753,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'var1','looking at \"profile page\"','var2','\'looking at \"\\profile page\"\'','var3','\\looking at \"\\profile page\"\\',NULL,NULL),(2858,1,_binary 'a\è\Ì-Qþ¢m',525,0,0,NULL,1,'2012-01-30 12:28:33','cdd9ab',2750,2751,NULL,NULL,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2859,1,_binary 'a\è\Ì-Qþ¢m',526,0,0,NULL,NULL,'2012-01-30 13:22:33','cdd9ab',NULL,2756,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2860,1,_binary '»†\ö–©Ÿ',527,0,0,NULL,1,'2012-01-31 01:11:42','9af42d',2757,2758,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2861,1,_binary '0\ïj—\ö>¼',528,0,0,NULL,1,'2013-04-07 10:00:00','',0,2762,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,9625,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2862,1,_binary '\ro?R.�ú2',529,0,0,NULL,1,'2013-04-06 11:00:00','',0,2762,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,9625,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2863,1,_binary '\Í�<\÷\Î •',530,0,0,NULL,1,'2013-04-05 12:00:00','',0,2762,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,9625,NULL,NULL,NULL,NULL,NULL,NULL,'HTTP-code','200',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +/*!40000 ALTER TABLE `log_link_visit_action` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `log_profiling` +-- + +DROP TABLE IF EXISTS `log_profiling`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `log_profiling` ( + `query` text NOT NULL, + `count` int(10) unsigned DEFAULT NULL, + `sum_time_ms` float DEFAULT NULL, + `idprofiling` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`idprofiling`), + UNIQUE KEY `query` (`query`(100)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `log_profiling` +-- + +LOCK TABLES `log_profiling` WRITE; +/*!40000 ALTER TABLE `log_profiling` DISABLE KEYS */; +/*!40000 ALTER TABLE `log_profiling` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `log_visit` +-- + +DROP TABLE IF EXISTS `log_visit`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `log_visit` ( + `idvisit` bigint(10) unsigned NOT NULL AUTO_INCREMENT, + `idsite` int(10) unsigned NOT NULL, + `idvisitor` binary(8) NOT NULL, + `visit_last_action_time` datetime NOT NULL, + `config_id` binary(8) NOT NULL, + `location_ip` varbinary(16) NOT NULL, + `profilable` tinyint(1) DEFAULT NULL, + `user_id` varchar(200) DEFAULT NULL, + `visit_first_action_time` datetime NOT NULL, + `visit_goal_buyer` tinyint(1) DEFAULT NULL, + `visit_goal_converted` tinyint(1) DEFAULT NULL, + `visitor_returning` tinyint(1) DEFAULT NULL, + `visitor_seconds_since_first` int(11) unsigned DEFAULT NULL, + `visitor_seconds_since_order` int(11) unsigned DEFAULT NULL, + `visitor_count_visits` int(11) unsigned NOT NULL DEFAULT '0', + `visit_entry_idaction_name` int(10) unsigned DEFAULT NULL, + `visit_entry_idaction_url` int(11) unsigned DEFAULT NULL, + `visit_exit_idaction_name` int(10) unsigned DEFAULT NULL, + `visit_exit_idaction_url` int(10) unsigned DEFAULT '0', + `visit_total_actions` int(11) unsigned DEFAULT NULL, + `visit_total_interactions` mediumint(8) unsigned DEFAULT '0', + `visit_total_searches` smallint(5) unsigned DEFAULT NULL, + `referer_keyword` varchar(255) DEFAULT NULL, + `referer_name` varchar(255) DEFAULT NULL, + `referer_type` tinyint(1) unsigned DEFAULT NULL, + `referer_url` varchar(1500) DEFAULT NULL, + `location_browser_lang` varchar(20) DEFAULT NULL, + `config_browser_engine` varchar(10) DEFAULT NULL, + `config_browser_name` varchar(40) DEFAULT NULL, + `config_browser_version` varchar(20) DEFAULT NULL, + `config_client_type` tinyint(1) DEFAULT NULL, + `config_device_brand` varchar(100) CHARACTER SET utf8 DEFAULT NULL, + `config_device_model` varchar(100) CHARACTER SET utf8 DEFAULT NULL, + `config_device_type` tinyint(100) DEFAULT NULL, + `config_os` char(3) DEFAULT NULL, + `config_os_version` varchar(100) CHARACTER SET utf8 DEFAULT NULL, + `visit_total_events` int(11) unsigned DEFAULT NULL, + `visitor_localtime` time DEFAULT NULL, + `visitor_seconds_since_last` int(11) unsigned DEFAULT NULL, + `config_resolution` varchar(18) DEFAULT NULL, + `config_cookie` tinyint(1) DEFAULT NULL, + `config_flash` tinyint(1) DEFAULT NULL, + `config_java` tinyint(1) DEFAULT NULL, + `config_pdf` tinyint(1) DEFAULT NULL, + `config_quicktime` tinyint(1) DEFAULT NULL, + `config_realplayer` tinyint(1) DEFAULT NULL, + `config_silverlight` tinyint(1) DEFAULT NULL, + `config_windowsmedia` tinyint(1) DEFAULT NULL, + `visit_total_time` int(11) unsigned NOT NULL, + `location_city` varchar(255) DEFAULT NULL, + `location_country` char(3) DEFAULT NULL, + `location_latitude` decimal(9,6) DEFAULT NULL, + `location_longitude` decimal(9,6) DEFAULT NULL, + `location_region` char(3) DEFAULT NULL, + `last_idlink_va` bigint(20) unsigned DEFAULT NULL, + `custom_dimension_1` varchar(255) DEFAULT NULL, + `custom_dimension_2` varchar(255) DEFAULT NULL, + `custom_dimension_3` varchar(255) DEFAULT NULL, + `custom_dimension_4` varchar(255) DEFAULT NULL, + `custom_dimension_5` varchar(255) DEFAULT NULL, + `custom_var_k1` varchar(200) DEFAULT NULL, + `custom_var_v1` varchar(200) DEFAULT NULL, + `custom_var_k2` varchar(200) DEFAULT NULL, + `custom_var_v2` varchar(200) DEFAULT NULL, + `custom_var_k3` varchar(200) DEFAULT NULL, + `custom_var_v3` varchar(200) DEFAULT NULL, + `custom_var_k4` varchar(200) DEFAULT NULL, + `custom_var_v4` varchar(200) DEFAULT NULL, + `custom_var_k5` varchar(200) DEFAULT NULL, + `custom_var_v5` varchar(200) DEFAULT NULL, + PRIMARY KEY (`idvisit`), + KEY `index_idsite_config_datetime` (`idsite`,`config_id`,`visit_last_action_time`), + KEY `index_idsite_datetime` (`idsite`,`visit_last_action_time`), + KEY `index_idsite_idvisitor_time` (`idsite`,`idvisitor`,`visit_last_action_time`) +) ENGINE=InnoDB AUTO_INCREMENT=531 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `log_visit` +-- + +LOCK TABLES `log_visit` WRITE; +/*!40000 ALTER TABLE `log_visit` DISABLE KEYS */; +INSERT INTO `log_visit` VALUES (1,1,_binary 'ê‚�ÿ³Ef\×','2012-08-09 08:10:38',_binary '\ñR³\å�\å',_binary '¯)À(',0,NULL,'2012-08-09 08:10:38',0,1,0,0,NULL,1,0,1,0,1,2,2,0,NULL,NULL,1,'','','WebKit','RM','0.9',1,'AP','generic desktop',0,'MAC','10.6',0,'08:10:38',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,1,_binary 'Ì�\Ä\÷c&\î','2012-08-09 08:11:30',_binary 'DS \Ñ,ù\åƒ',_binary '¯)À(',0,NULL,'2012-08-09 08:11:30',0,1,0,0,NULL,1,0,2,0,2,2,2,0,NULL,NULL,1,'','','WebKit','AN','',1,'HT','Vision',1,'AND','2.3',0,'08:11:30',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(3,1,_binary 't¤\ë\0q`\Òÿ','2012-08-09 08:11:56',_binary 'z¨3Á\Ã\Óÿ6',_binary '¯)À(',0,NULL,'2012-08-09 08:11:56',0,1,0,0,NULL,1,0,3,0,3,2,2,0,NULL,NULL,1,'','','WebKit','EP','2.30',1,'','generic desktop',0,'LIN','',0,'08:11:56',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(4,1,_binary '\â\Z™d¸–À','2012-08-09 08:12:03',_binary 'eŸ/R\Z§GP',_binary '¯)À(',0,NULL,'2012-08-09 08:12:03',0,1,0,0,NULL,1,0,4,0,4,2,2,0,NULL,NULL,1,'','','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',0,'08:12:03',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,1,_binary 'CA¶\Ð;L!','2012-08-09 13:48:07',_binary '»\ð~l�´†…',_binary 'H, \n',0,NULL,'2012-08-09 13:48:07',0,1,0,0,NULL,1,0,5,0,5,2,2,0,NULL,NULL,1,'','','Trident','IE','9.0',1,'','generic desktop',0,'WIN','7',0,'13:48:07',0,'unknown',0,0,0,0,0,0,0,0,2,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(6,1,_binary '„¶ :!¤‰·','2012-08-09 13:48:20',_binary '\á-šŒ0Z7',_binary 'H, \n',0,NULL,'2012-08-09 13:48:20',0,1,0,0,NULL,1,0,6,0,6,2,2,0,NULL,NULL,1,'','','WebKit','EP','2.30',1,'','generic desktop',0,'LIN','',0,'13:48:20',0,'unknown',0,0,0,0,0,0,0,0,2,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(7,1,_binary 'Cecw>£S¬','2012-08-09 13:49:48',_binary '\nª¬­“\ÙQ\Û',_binary 'H, \n',0,NULL,'2012-08-09 13:49:48',0,1,0,0,NULL,1,0,7,0,7,2,2,0,NULL,NULL,1,'','','WebKit','CH','19.0',1,'','generic desktop',0,'LIN','',0,'13:49:48',0,'unknown',0,0,0,0,0,0,0,0,2,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(8,1,_binary 'yE�£\óù','2012-08-09 20:56:45',_binary '\äi:\Ì,CQ',_binary '¯)À ',0,NULL,'2012-08-09 20:56:45',0,1,0,0,NULL,1,0,8,0,8,2,2,0,NULL,NULL,1,'','','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',0,'20:56:45',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(9,1,_binary 'jÏ¿´$¯R','2012-08-09 21:00:42',_binary 'ƒFµ\ØÂ¢',_binary '¯)À ',0,NULL,'2012-08-09 21:00:42',0,1,0,0,NULL,1,0,9,0,9,2,2,0,NULL,NULL,1,'','','WebKit','CH','19.0',1,'AP','generic desktop',0,'MAC','10.8',0,'21:00:42',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(10,1,_binary 'UR,�¶\Ó\á','2012-08-10 18:03:40',_binary '€^k�\Ã%-5',_binary '\0\0\0\0',0,NULL,'2012-08-10 18:03:40',0,1,0,0,NULL,1,0,10,0,10,2,2,0,NULL,NULL,1,'','','Trident','IE','9.0',1,'','generic desktop',0,'WIN','7',0,'18:03:40',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(11,1,_binary 'š\ô3F\ÝZ»','2012-08-10 19:59:50',_binary '¢\ô|z”x',_binary '¯)À\"',0,NULL,'2012-08-10 19:59:50',0,1,0,0,NULL,1,0,11,0,11,2,2,0,NULL,NULL,1,'','','Trident','IE','9.0',1,'','generic desktop',0,'WIN','7',0,'19:59:50',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(12,1,_binary '›€„-3^\æ§','2012-08-10 20:01:17',_binary '}¾dÙ¬>\ê‚',_binary '¯)À\"',0,NULL,'2012-08-10 20:01:17',0,1,0,0,NULL,1,0,2,0,2,2,2,0,NULL,NULL,1,'','','WebKit','EP','2.30',1,'','generic desktop',0,'LIN','',0,'20:01:17',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(13,1,_binary ' |…£Kß¡f','2012-08-10 20:21:03',_binary 'P½­Î’\Ö?',_binary '±G€',0,NULL,'2012-08-10 20:21:03',0,1,0,0,NULL,1,0,4,0,4,2,2,0,NULL,NULL,1,'','','Trident','IE','9.0',1,'','generic desktop',0,'WIN','7',0,'20:21:03',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'br',-10.000000,-55.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(14,1,_binary 'ÀaŠk7w½','2012-08-10 20:21:28',_binary 'z\éø/‘$Ùƒ',_binary '±G€',0,NULL,'2012-08-10 20:21:28',0,1,0,0,NULL,1,0,12,0,12,2,2,0,NULL,NULL,1,'','','WebKit','EP','2.30',1,'','generic desktop',0,'LIN','',0,'20:21:28',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'br',-10.000000,-55.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(15,1,_binary '¶x¾\ìŒY ','2012-08-10 20:22:08',_binary '\í\ï�f ¬\Í\\',_binary '±G€',0,NULL,'2012-08-10 20:22:08',0,1,0,0,NULL,1,0,13,0,13,2,2,0,NULL,NULL,1,'','','WebKit','CH','20.0',1,'','generic desktop',0,'WIN','7',0,'20:22:08',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'br',-10.000000,-55.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(16,1,_binary '\n¼a�(`\ö\Ü','2012-08-11 13:49:46',_binary 'i.¡\Ñ\ðD;‹',_binary '\0\0\0\0',0,NULL,'2012-08-11 13:49:46',0,1,0,0,NULL,1,0,14,0,14,2,2,0,NULL,NULL,1,'','','WebKit','EP','2.30',1,'','generic desktop',0,'LIN','',0,'13:49:46',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(17,1,_binary 'ǡڧp¨\ä:','2012-08-11 15:31:05',_binary '£\ÏD55H­^',_binary '\0\0\0\0',1,'commonuser','2012-08-11 15:31:05',0,1,0,0,NULL,1,0,15,0,15,2,2,0,NULL,NULL,1,'','','WebKit','CH','20.0',1,'','generic desktop',0,'WIN','7',0,'15:31:05',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(18,1,_binary '‹¨¯>Ù†I','2012-08-11 17:46:03',_binary '@\Ö\Z\ê\Âd²\ï',_binary '',0,NULL,'2012-08-11 17:46:03',0,0,0,0,NULL,1,0,NULL,0,0,2,0,0,NULL,NULL,1,'','','','Apache HTTP Client','4.2',2,'','',NULL,'UNK','UNK',0,'17:46:03',0,'unknown',0,0,0,0,0,0,0,0,1,NULL,'au',-27.000000,133.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Apache-HttpClient/4.2.1 (java 1.5)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(19,1,_binary 'ª uü’P»','2012-08-11 16:10:38',_binary 'ø¿h\â\á\ów',_binary '¯)À)',0,NULL,'2012-08-11 16:10:38',0,1,0,0,NULL,1,0,1,0,1,2,2,0,NULL,NULL,1,'','','WebKit','RM','0.9',1,'AP','generic desktop',0,'MAC','10.6',0,'16:10:38',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(20,1,_binary 'δ\ð�h\Èr-','2012-08-11 16:11:30',_binary 'ü\ï0\ÞN5\Éù',_binary '¯)À)',0,NULL,'2012-08-11 16:11:30',0,1,0,0,NULL,1,17,18,17,18,2,2,0,NULL,NULL,1,'','','WebKit','AN','',1,'HT','Vision',1,'AND','2.3',0,'16:11:30',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(21,1,_binary '¸\ô�›¸\ÖΪ','2012-08-11 17:48:07',_binary '²\áu\ê´L~b',_binary 'H, ',0,NULL,'2012-08-11 17:48:07',0,1,0,0,NULL,1,19,20,19,20,2,2,0,NULL,NULL,1,'','','Trident','IE','9.0',1,'','generic desktop',0,'WIN','7',0,'17:48:07',0,'unknown',0,0,0,0,0,0,0,0,2,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(22,1,_binary '‘jt\éGœ¨','2012-08-11 17:48:08',_binary '\Ã+µƒ\Ï',_binary 'H, ',0,NULL,'2012-08-11 17:48:08',0,1,0,0,NULL,1,0,5,0,5,2,2,0,NULL,NULL,1,'','','','UNK','',NULL,'','',NULL,'BOT','UNK',0,'17:48:08',0,'unknown',0,0,0,0,0,0,0,0,2,'Ashburn','us',39.040000,-77.490000,'VA',NULL,NULL,NULL,NULL,NULL,NULL,'Bot','Googlebot/2.1 (+http://www.googlebot.com/bot.html)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(23,1,_binary '¿ºH)\'¬‚\Ä','2012-08-11 18:12:40',_binary '™\åµ\ír\ê',_binary '¯)À*',0,NULL,'2012-08-11 18:10:38',0,0,0,0,NULL,1,0,NULL,0,0,6,0,0,NULL,NULL,1,'','','WebKit','RM','0.9',1,'AP','generic desktop',0,'MAC','10.6',0,'18:10:38',0,'unknown',0,0,0,0,0,0,0,0,123,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(24,1,_binary '\ã‡\Þj?\ãn\õ','2012-08-11 19:15:40',_binary 'H8\ÍSTªZ\r',_binary '¯)À+',0,NULL,'2012-08-11 19:12:40',0,1,0,0,NULL,1,24,25,26,27,4,4,0,NULL,NULL,1,'','','WebKit','RM','0.9',1,'AP','generic desktop',0,'MAC','10.6',0,'19:12:40',0,'unknown',0,0,0,0,0,0,0,0,182,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(25,1,_binary '1†F x�Ÿ','2012-08-11 20:15:41',_binary 'ø¿h\â\á\ów',_binary '¯)À)',0,NULL,'2012-08-11 20:15:41',0,1,0,0,NULL,1,0,1,0,1,2,2,0,NULL,NULL,1,'','','WebKit','RM','0.9',1,'AP','generic desktop',0,'MAC','10.6',0,'20:15:41',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(26,1,_binary '\\0c´~«c•','2012-08-11 20:15:51',_binary 'e-¤[\0j',_binary '\0\0\0\0\0\0\0\0\0\0ÿÿ{-CY',0,NULL,'2012-08-11 20:15:51',0,1,0,0,NULL,1,0,1,0,1,2,2,0,NULL,NULL,1,'','','WebKit','RM','0.9',1,'AP','generic desktop',0,'MAC','10.6',0,'20:15:51',0,'unknown',0,0,0,0,0,0,0,0,2,'Seoul','kr',37.600000,126.980000,'11',NULL,NULL,NULL,NULL,NULL,NULL,'Not-Bot','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) RockMelt/0.9.58.494 Chrome/11.0.696.71 Safari/534.24',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(27,1,_binary '\ä\0+ \ò\Â\Ýp','2012-08-15 07:18:38',_binary '¾=0Q­\Ü+¢',_binary '\0\0\0\0',1,NULL,'2012-08-15 07:18:38',0,1,0,0,NULL,1,28,29,28,29,2,2,0,NULL,'piwik.org',3,'http://piwik.org/contribute%','','Trident','IE','6.0',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','NewLoggedOut'),(28,1,_binary '�y�5À\òº','2012-08-15 04:30:13',_binary '!\Ó\rp\÷$9',_binary '\0\0\0\0',1,NULL,'2012-08-15 04:30:13',0,1,0,0,NULL,1,33,34,33,34,2,2,0,NULL,'sn110w.snt110.mail.live.com',3,'http://sn110w.snt110.mail.live.com/mail/InboxLight.aspx?n=184083971','','WebKit','CH','11.0',1,'','generic desktop',0,'WIN','XP',0,'08:00:47',0,'1280x800',1,1,1,1,0,0,0,1,2,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Forum status','Anonymous',NULL,NULL,NULL,NULL),(29,2,_binary '\ä\0+ \ò\Â\Ýp','2012-08-15 04:18:38',_binary '\Ã\Ä\ã\"Nü9',_binary '\0\0\0\0',1,NULL,'2012-08-15 04:18:38',0,0,0,0,NULL,1,35,29,35,29,2,2,0,NULL,'piwik.org',3,'http://piwik.org/contribute%','','WebKit','SF','5.0',1,'AP','generic desktop',0,'MAC','10.6',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','NewLoggedOut'),(30,3,_binary '\ä\0+ \ò\Â\Ýp','2012-08-15 04:18:38',_binary 'C\ÅxúÙ±\ñ<',_binary '\0\0\0\0',1,NULL,'2012-08-15 04:18:38',0,0,0,0,NULL,1,37,29,37,29,6,6,0,NULL,'piwik.org',3,'http://piwik.org/contribute%','','WebKit','SF','5.0',1,'AP','generic desktop',0,'MAC','10.6',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','NewLoggedOut'),(31,1,_binary '\àX}f\à#','2014-03-12 00:34:15',_binary 'CúýQZ*¤€',_binary 'T\ÂH',1,NULL,'2014-03-12 00:34:15',0,1,0,0,NULL,1,38,39,38,39,2,2,0,NULL,'musicforeveryoneradio.be',3,'http://musicforeveryoneradio.be:2222/CMD_PLUGINS/installatron/index.raw','','Blink','CH','33.0',1,'','generic desktop',0,'WIN','7',0,'01:34:18',0,'1920x1080',1,1,1,1,0,0,1,0,2,'Maaseik','be',51.100000,5.800000,'VLG',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(32,1,_binary '\ðwÞ‡úV','2014-03-13 00:32:32',_binary '=¡µ”‚I\ê',_binary ']P‚£',1,NULL,'2014-03-13 00:32:23',0,1,0,0,NULL,1,38,39,42,43,6,4,0,NULL,'Google',2,'http://www.google.ru/url?rct=j&q=&esrc=s&source=web&cd=1&url=http%3A%2F%2Fpiwik.org%2F&cad=rjt','','Gecko','FF','27.0',1,'','generic desktop',0,'WIN','8',0,'04:28:18',0,'1920x1080',1,1,1,0,0,0,0,0,10,'Moscow','ru',55.750000,37.620000,'MOW',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(33,1,_binary '‹”.\ó±tg','2014-03-13 00:32:24',_binary 'Ÿ\\¶ýi‹\Ì',_binary '°)\âš',1,NULL,'2014-03-13 00:32:24',0,1,0,0,NULL,1,40,41,40,41,2,2,0,NULL,NULL,1,'http://piwik.org/docs/installation/','','Blink','CH','33.0',1,'','generic desktop',0,'WIN','7',0,'02:32:21',0,'1366x768',1,1,1,1,0,0,1,0,2,'Esentepe','tr',40.980000,40.420000,'53',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(34,1,_binary '\Ö\ðܶiI¸k','2014-03-13 00:33:11',_binary '\å_\ãvEý',_binary '¼k\î ',1,NULL,'2014-03-13 00:33:11',0,1,0,0,NULL,1,45,46,45,46,2,2,0,NULL,'forum.golem.de',3,'http://forum.golem.de/kommentare/security/urteil-zu-tracking-nutzer-muessen-piwik-analyse-widersprechen-koennen/piwik-log-analytics/80715,3669355,3669355,read.html','','Gecko','FF','27.0',1,'','generic desktop',0,'WIN','7',0,'01:33:13',0,'2560x1440',1,1,1,1,1,0,1,1,2,'Mainz','de',50.000000,8.270000,'RP',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(35,1,_binary '\à\ë5\Äú\âª\n','2014-03-13 00:34:46',_binary '¾3~H¦\ìx',_binary 'ξK',1,NULL,'2014-03-13 00:33:27',0,1,0,0,NULL,1,47,48,58,59,4,4,0,NULL,NULL,1,'http://piwik.org/what-is-piwik/','','Trident','IE','8.0',1,'','generic desktop',0,'WIN','7',0,'17:33:27',0,'1536x864',0,0,0,0,0,0,0,0,81,'Lake Forest','us',33.650000,-117.680000,'CA',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(36,1,_binary 'ü–å–½L]T','2014-03-13 00:33:33',_binary 'R®�I\Ó%\0\Ñ',_binary 'Pˆ A',1,NULL,'2014-03-13 00:33:33',0,1,0,0,NULL,1,49,50,49,50,2,2,0,NULL,'berndjung.com',3,'http://berndjung.com/piwik/index.php?module=CoreHome&action=index&idSite=1&period=day&date=today','','Gecko','FM','27.0',1,'','generic smartphone',1,'AND','',0,'01:33:31',0,'360x640',1,1,0,0,0,0,0,0,2,'Weilerswist','de',50.770000,6.830000,'NW',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(37,1,_binary 'L\îµÝ·o','2014-03-13 00:33:50',_binary '\ë-\ö—–\ä‘',_binary '\Ûe.\Þ',1,NULL,'2014-03-13 00:33:50',0,1,0,0,NULL,1,45,46,45,46,2,2,0,NULL,'Google',2,'https://www.google.co.jp/url?rct=j&q=&esrc=s&source=web&cd=2&url=https%3A%2F%2Fpiwik.org%2Flog-analytics%2F','','WebKit','SF','7.0',1,'AP','generic desktop',0,'MAC','10.9',0,'09:33:50',0,'2560x1440',1,0,1,1,1,0,0,0,2,'Nihon\'odori','jp',35.450000,139.650000,'14',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(38,1,_binary '=œ­?„\Âr','2014-03-13 00:33:55',_binary 'Ú¢œ²^‚¼',_binary 'lÓµ ',1,NULL,'2014-03-13 00:33:55',0,1,0,0,NULL,1,51,52,51,52,2,2,0,NULL,'Google',2,'https://www.google.com/','','Blink','CH','33.0',1,'AP','generic desktop',0,'MAC','10.9',0,'17:33:58',0,'1360x768',1,1,1,1,1,0,1,1,2,'San Francisco','us',37.790000,-122.410000,'CA',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(39,1,_binary '�Ø’t¨\Âm�','2014-03-13 00:34:31',_binary '™\ãE\é\Æ\Â\ß',_binary '2\ô‚',1,NULL,'2014-03-13 00:33:59',0,1,0,0,NULL,1,38,39,54,55,4,4,0,NULL,'Google',2,'http://www.google.com/url?rct=j&q=&esrc=s&source=web&cd=1&url=http%3A%2F%2Fpiwik.org%2F','','WebKit','SF','7.0',1,'AP','generic desktop',0,'MAC','10.9',0,'19:34:01',0,'2880x1800',1,1,1,1,1,0,0,0,34,NULL,'us',38.000000,-97.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(40,1,_binary '\àX}f\à#','2014-03-13 00:34:21',_binary 'CúýQZ*¤€',_binary 'T\ÂH',1,NULL,'2014-03-13 00:34:21',0,0,1,86406,NULL,2,0,NULL,0,0,2,0,0,NULL,'musicforeveryoneradio.be',3,'http://musicforeveryoneradio.be:2222/CMD_PLUGINS/installatron/index.raw','','Blink','CH','33.0',1,'','generic desktop',0,'WIN','7',0,'01:34:24',86406,'1920x1080',1,1,1,1,0,0,1,0,1,'Maaseik','be',51.100000,5.800000,'VLG',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(41,1,_binary '\Ø3–\ñ¤Â¬','2014-03-13 00:34:42',_binary 'i\é\òø¬WT',_binary 'ÁŸ�',1,NULL,'2014-03-13 00:34:42',0,1,0,0,NULL,1,56,57,56,57,2,2,0,NULL,NULL,1,'http://demo.piwik.org/index.php?module=MultiSites&action=index&date=yesterday&period=day&idSite=32','','Blink','CH','34.0',1,'','generic desktop',0,'WIN','7',0,'01:34:37',0,'1920x1200',1,1,1,1,1,0,1,0,2,NULL,'de',51.000000,9.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org','Demo language','English',NULL,NULL,NULL,NULL,NULL,NULL),(42,1,_binary 'Ù‹S\×ü\õ ‚','2014-03-13 00:34:53',_binary 'È’R¾iH',_binary '®a‹?',1,NULL,'2014-03-13 00:34:53',0,1,0,0,NULL,1,38,39,38,39,2,2,0,NULL,'blog.comperiosearch.com',3,'http://blog.comperiosearch.com/blog/2014/02/05/dynamic-search-ranking-using-elasticsearch-neo4j-and-piwik/','','Blink','CH','33.0',1,'','generic desktop',0,'WIN','8.1',0,'20:34:49',0,'1366x768',1,1,1,1,0,0,0,0,2,'Raleigh','us',35.770000,-78.640000,'NC',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(43,3,_binary '\ä\0+ \ò\Â\Ýp','2012-08-15 07:18:38',_binary 'Õ‰\ë\Ü,§ ',_binary '\0\0\0\0',1,NULL,'2012-08-15 07:18:38',0,0,1,10800,NULL,2,28,29,28,29,2,2,0,NULL,'piwik.org',3,'http://piwik.org/contribute%','','Trident','IE','6.0',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorType','NewLoggedOut'),(44,3,_binary '�y�5À\òº','2012-08-15 04:30:13',_binary '˜#­\Ø\÷y\Ú[',_binary '\0\0\0\0',1,NULL,'2012-08-15 04:30:13',0,0,0,0,NULL,1,33,34,33,34,2,2,0,NULL,'sn110w.snt110.mail.live.com',3,'http://sn110w.snt110.mail.live.com/mail/InboxLight.aspx?n=184083971','','WebKit','CH','11.0',1,'','generic desktop',0,'WIN','XP',0,'08:00:47',0,'1280x800',1,1,1,1,0,0,0,1,1,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Forum status','Anonymous',NULL,NULL,NULL,NULL),(45,3,_binary '\àX}f\à#','2014-03-12 00:34:15',_binary 'µ®†¾Œ# ',_binary 'T\ÂH',1,NULL,'2014-03-12 00:34:15',0,0,0,0,NULL,1,38,39,38,39,2,2,0,NULL,'musicforeveryoneradio.be',3,'http://musicforeveryoneradio.be:2222/CMD_PLUGINS/installatron/index.raw','','Blink','CH','33.0',1,'','generic desktop',0,'WIN','7',0,'01:34:18',0,'1920x1080',1,1,1,1,0,0,1,0,1,'Maaseik','be',51.100000,5.800000,'VLG',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(46,3,_binary '\ðwÞ‡úV','2014-03-13 00:32:32',_binary '\ꉼT:´À',_binary ']P‚£',1,NULL,'2014-03-13 00:32:23',0,0,0,0,NULL,1,38,39,42,43,6,4,0,NULL,'Google',2,'http://www.google.ru/url?rct=j&q=&esrc=s&source=web&cd=1&url=http%3A%2F%2Fpiwik.org%2F&cad=rjt','','Gecko','FF','27.0',1,'','generic desktop',0,'WIN','8',0,'04:28:18',0,'1920x1080',1,1,1,0,0,0,0,0,10,'Moscow','ru',55.750000,37.620000,'MOW',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(47,3,_binary '‹”.\ó±tg','2014-03-13 00:32:24',_binary '\Z(¡c²€^',_binary '°)\âš',1,NULL,'2014-03-13 00:32:24',0,0,0,0,NULL,1,40,41,40,41,2,2,0,NULL,NULL,1,'http://piwik.org/docs/installation/','','Blink','CH','33.0',1,'','generic desktop',0,'WIN','7',0,'02:32:21',0,'1366x768',1,1,1,1,0,0,1,0,1,'Esentepe','tr',40.980000,40.420000,'53',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(48,3,_binary '\Ö\ðܶiI¸k','2014-03-13 00:33:11',_binary 'X�‹Û’ý',_binary '¼k\î ',1,NULL,'2014-03-13 00:33:11',0,0,0,0,NULL,1,45,46,45,46,2,2,0,NULL,'forum.golem.de',3,'http://forum.golem.de/kommentare/security/urteil-zu-tracking-nutzer-muessen-piwik-analyse-widersprechen-koennen/piwik-log-analytics/80715,3669355,3669355,read.html','','Gecko','FF','27.0',1,'','generic desktop',0,'WIN','7',0,'01:33:13',0,'2560x1440',1,1,1,1,1,0,1,1,1,'Mainz','de',50.000000,8.270000,'RP',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(49,3,_binary '\à\ë5\Äú\âª\n','2014-03-13 00:34:46',_binary 'Ì B½­ \0d',_binary 'ξK',1,NULL,'2014-03-13 00:33:27',0,0,0,0,NULL,1,47,48,58,59,4,4,0,NULL,NULL,1,'http://piwik.org/what-is-piwik/','','Trident','IE','8.0',1,'','generic desktop',0,'WIN','7',0,'17:33:27',0,'1536x864',0,0,0,0,0,0,0,0,80,'Lake Forest','us',33.650000,-117.680000,'CA',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(50,3,_binary 'ü–å–½L]T','2014-03-13 00:33:33',_binary 'BP­j°\×\Ñ',_binary 'Pˆ A',1,NULL,'2014-03-13 00:33:33',0,0,0,0,NULL,1,49,50,49,50,2,2,0,NULL,'berndjung.com',3,'http://berndjung.com/piwik/index.php?module=CoreHome&action=index&idSite=1&period=day&date=today','','Gecko','FM','27.0',1,'','generic smartphone',1,'AND','',0,'01:33:31',0,'360x640',1,1,0,0,0,0,0,0,1,'Weilerswist','de',50.770000,6.830000,'NW',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(51,3,_binary 'L\îµÝ·o','2014-03-13 00:33:50',_binary '�8þ¶kš',_binary '\Ûe.\Þ',1,NULL,'2014-03-13 00:33:50',0,0,0,0,NULL,1,45,46,45,46,2,2,0,NULL,'Google',2,'https://www.google.co.jp/url?rct=j&q=&esrc=s&source=web&cd=2&url=https%3A%2F%2Fpiwik.org%2Flog-analytics%2F','','WebKit','SF','7.0',1,'AP','generic desktop',0,'MAC','10.9',0,'09:33:50',0,'2560x1440',1,0,1,1,1,0,0,0,1,'Nihon\'odori','jp',35.450000,139.650000,'14',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(52,3,_binary '=œ­?„\Âr','2014-03-13 00:33:55',_binary 'þ°‹sMŠ\Ú',_binary 'lÓµ ',1,NULL,'2014-03-13 00:33:55',0,0,0,0,NULL,1,51,52,51,52,2,2,0,NULL,'Google',2,'https://www.google.com/','','Blink','CH','33.0',1,'AP','generic desktop',0,'MAC','10.9',0,'17:33:58',0,'1360x768',1,1,1,1,1,0,1,1,1,'San Francisco','us',37.790000,-122.410000,'CA',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(53,3,_binary '�Ø’t¨\Âm�','2014-03-13 00:34:31',_binary ':\ÆRùž-S',_binary '2\ô‚',1,NULL,'2014-03-13 00:33:59',0,0,0,0,NULL,1,38,39,54,55,4,4,0,NULL,'Google',2,'http://www.google.com/url?rct=j&q=&esrc=s&source=web&cd=1&url=http%3A%2F%2Fpiwik.org%2F','','WebKit','SF','7.0',1,'AP','generic desktop',0,'MAC','10.9',0,'19:34:01',0,'2880x1800',1,1,1,1,1,0,0,0,33,NULL,'us',38.000000,-97.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(54,3,_binary '\àX}f\à#','2014-03-13 00:34:21',_binary 'µ®†¾Œ# ',_binary 'T\ÂH',1,NULL,'2014-03-13 00:34:21',0,0,1,86406,NULL,2,0,NULL,0,0,2,0,0,NULL,'musicforeveryoneradio.be',3,'http://musicforeveryoneradio.be:2222/CMD_PLUGINS/installatron/index.raw','','Blink','CH','33.0',1,'','generic desktop',0,'WIN','7',0,'01:34:24',86406,'1920x1080',1,1,1,1,0,0,1,0,1,'Maaseik','be',51.100000,5.800000,'VLG',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(55,3,_binary '\Ø3–\ñ¤Â¬','2014-03-13 00:34:42',_binary '�+Ù¹r�xû',_binary 'ÁŸ�',1,NULL,'2014-03-13 00:34:42',0,0,0,0,NULL,1,56,57,56,57,2,2,0,NULL,NULL,1,'http://demo.piwik.org/index.php?module=MultiSites&action=index&date=yesterday&period=day&idSite=32','','Blink','CH','34.0',1,'','generic desktop',0,'WIN','7',0,'01:34:37',0,'1920x1200',1,1,1,1,1,0,1,0,1,NULL,'de',51.000000,9.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org','Demo language','English',NULL,NULL,NULL,NULL,NULL,NULL),(56,3,_binary 'Ù‹S\×ü\õ ‚','2014-03-13 00:34:53',_binary 'Œ¢;‚\ÂÍŽ',_binary '®a‹?',1,NULL,'2014-03-13 00:34:53',0,0,0,0,NULL,1,38,39,38,39,2,2,0,NULL,'blog.comperiosearch.com',3,'http://blog.comperiosearch.com/blog/2014/02/05/dynamic-search-ranking-using-elasticsearch-neo4j-and-piwik/','','Blink','CH','33.0',1,'','generic desktop',0,'WIN','8.1',0,'20:34:49',0,'1366x768',1,1,1,1,0,0,0,0,1,'Raleigh','us',35.770000,-78.640000,'NC',NULL,NULL,NULL,NULL,NULL,NULL,'Domain landed','piwik.org',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(57,1,_binary '6œ¥‚[[\Ø','2012-09-30 08:12:04',_binary '¿•}\ñs\Ó\ß',_binary '¯)À(',0,NULL,'2012-09-30 08:10:38',0,1,0,0,NULL,1,0,1,0,2,20,20,0,NULL,NULL,1,'','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'08:10:38',0,'unknown',0,0,0,0,0,0,0,0,54,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(58,1,_binary '(g³<��œ\Ú','2012-08-10 08:10:38',_binary '7\ïØ©S=·3',_binary '¯)Á-',0,NULL,'2012-08-10 08:10:38',0,1,0,0,NULL,1,0,60,0,60,2,2,0,NULL,NULL,1,'','','WebKit','RM','0.9',1,'AP','generic desktop',0,'MAC','10.6',0,'08:10:38',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(59,1,_binary '\ïV‰¨zYi^','2012-08-09 08:10:39',_binary 'Ä¡�xÀ\0\É\ë',_binary '¯)Á.',0,NULL,'2012-08-09 08:10:39',0,1,0,0,NULL,1,0,61,0,61,2,2,0,NULL,NULL,1,'','','WebKit','RM','0.9',1,'AP','generic desktop',0,'MAC','10.6',0,'08:10:39',0,'unknown',0,0,0,0,0,0,0,0,2,NULL,'jp',36.000000,138.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(60,1,_binary 'l\Õ\Ó\Ý(�!’','2012-08-10 08:10:38',_binary '\r\ÖC“±NF\Ï',_binary '¯)¿-',0,NULL,'2012-08-10 08:10:38',0,1,0,0,NULL,1,0,62,0,62,2,2,0,NULL,NULL,1,'','','WebKit','RM','0.9',1,'AP','generic desktop',0,'MAC','10.6',0,'08:10:38',0,'unknown',0,0,0,0,0,0,0,0,2,'Singapore','sg',1.370000,103.800000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(61,1,_binary '\Õ\Ç`®�ž\ï','2012-08-09 08:10:39',_binary 'g(c\Ó\É\á',_binary '¯)¿.',0,NULL,'2012-08-09 08:10:39',0,1,0,0,NULL,1,0,63,0,63,2,2,0,NULL,NULL,1,'','','WebKit','RM','0.9',1,'AP','generic desktop',0,'MAC','10.6',0,'08:10:39',0,'unknown',0,0,0,0,0,0,0,0,2,'Singapore','sg',1.370000,103.800000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(62,1,_binary ' P­`µla','2012-08-19 08:10:38',_binary '+¸\ò\Ñ^o',_binary '¯)¿/',0,NULL,'2012-08-19 08:10:38',0,1,0,0,NULL,1,0,64,0,64,2,2,0,NULL,NULL,1,'','','WebKit','RM','0.9',1,'AP','generic desktop',0,'MAC','10.6',0,'08:10:38',0,'unknown',0,0,0,0,0,0,0,0,2,'Singapore','sg',1.370000,103.800000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(63,1,_binary 'Ž\0!M¬š\á\Ë','2012-01-16 00:00:00',_binary '®\Èl3”^',_binary 'œ',1,'<script>_x(13)</script>','2012-01-16 00:00:00',0,1,0,0,NULL,1,65,66,65,66,1,1,0,NULL,'referrer.com',3,'http://referrer.com/','xx','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'<script>_x(15)</script>','<',40.890000,-73.950000,'<',NULL,'<script>_x(10)</script>',NULL,NULL,NULL,NULL,'','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(64,1,_binary 'Ž\0!M¬š\á\Ë','2012-01-16 12:22:33',_binary '®\Èl3”^',_binary 'œ',1,'<script>_x(13)</script>','2012-01-16 12:22:33',0,1,1,44553,NULL,2,67,68,67,68,1,1,0,'','Google',2,'http://google.com/search?q=%3Cscript%3E_x%289%29%3C%2Fscript%3E','xx','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',44553,'1024x768',1,1,1,0,0,0,0,0,1,'<script>_x(15)</script>','<',40.890000,-73.950000,'<',NULL,NULL,NULL,NULL,NULL,NULL,'','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(65,1,_binary '2}ÿ˜¼j5¼','2012-01-17 00:00:00',_binary '‰2\Ó:\î?}',_binary 'œ',1,'{{_Vue.h.constructor`_x(25)`()}}','2012-01-17 00:00:00',0,1,0,0,NULL,1,69,70,69,70,1,1,0,NULL,'referrer.com',3,'http://referrer.com/{{_Vue.h.constructor`_x(20)`()}}','xx','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'{{_Vue.h.constructor`_x(27)`()}}','{{_',40.890000,-73.950000,'{{_',NULL,'{{_Vue.h.constructor`_x(22)`()}}',NULL,NULL,NULL,NULL,'{{_Vue.h.constructor`_x(23)`()}}','{{_Vue.h.constructor`_x(24)`()}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(66,1,_binary '2}ÿ˜¼j5¼','2012-01-17 12:22:33',_binary '‰2\Ó:\î?}',_binary 'œ',1,'{{_Vue.h.constructor`_x(25)`()}}','2012-01-17 12:22:33',0,1,1,44553,NULL,2,71,72,71,72,1,1,0,'{{_vue.h.constructor`_x(21)`()}}','Google',2,'http://google.com/search?q=%7B%7B_Vue.h.constructor%60_x%2821%29%60%28%29%7D%7D','xx','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',44553,'1024x768',1,1,1,0,0,0,0,0,1,'{{_Vue.h.constructor`_x(27)`()}}','{{_',40.890000,-73.950000,'{{_',NULL,NULL,NULL,NULL,NULL,NULL,'{{_Vue.h.constructor`_x(23)`()}}','{{_Vue.h.constructor`_x(24)`()}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(67,2,_binary '_–q\Íþ�O','2012-08-11 07:07:33',_binary 'ÕŠH:<þø{',_binary 'œ',1,NULL,'2012-08-11 07:07:33',0,0,0,0,NULL,1,28,73,28,73,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Englewood Cliffs','us',40.890000,-73.950000,'NJ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(68,2,_binary '_–q\Íþ�O','2012-08-11 10:07:33',_binary 'ÕŠH:<þø{',_binary 'œ',1,NULL,'2012-08-11 10:07:33',0,0,1,10800,NULL,2,28,73,28,73,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,0,'Tokyo','jp',35.700000,139.710000,'40',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(69,2,_binary '_–q\Íþ�O','2012-08-11 10:37:33',_binary 'ÕŠH:<þø{',_binary 'œ',1,NULL,'2012-08-11 10:37:33',0,0,1,12600,NULL,3,28,74,28,74,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',1800,'1024x768',1,1,1,0,0,0,0,0,0,'Montreal','ca',45.520000,-73.580000,'QC',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(70,2,_binary '_–q\Íþ�O','2012-08-11 11:07:33',_binary 'ÕŠH:<þø{',_binary 'œ',1,NULL,'2012-08-11 11:07:33',0,0,1,14400,NULL,4,28,75,28,75,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',1800,'1024x768',1,1,1,0,0,0,0,0,0,'Sao Paolo','br',-23.550000,-46.640000,'27',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(71,2,_binary 'ý*\õ.','2025-08-08 12:16:42',_binary 'ÕŠH:<þø{',_binary 'œ',1,NULL,'2025-08-08 12:16:42',0,0,0,0,NULL,1,28,73,28,73,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Englewood Cliffs','us',40.890000,-73.950000,'NJ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(72,2,_binary '\Å\ó¢”6¿\Ë','2025-08-08 15:16:42',_binary 'ÕŠH:<þø{',_binary 'œ',1,NULL,'2025-08-08 15:16:42',0,0,0,0,NULL,1,28,73,28,73,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Tokyo','jp',35.700000,139.710000,'40',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(73,2,_binary '\Å\ó¢”6¿\Ë','2025-08-08 15:46:42',_binary 'ÕŠH:<þø{',_binary 'œ',1,NULL,'2025-08-08 15:46:42',0,0,1,1800,NULL,2,28,74,28,74,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',1800,'1024x768',1,1,1,0,0,0,0,0,0,'Montreal','ca',45.520000,-73.580000,'QC',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(74,2,_binary '\Å\ó¢”6¿\Ë','2025-08-08 16:16:42',_binary 'ÕŠH:<þø{',_binary 'œ',1,NULL,'2025-08-08 16:16:42',0,0,1,3600,NULL,3,28,75,28,75,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',1800,'1024x768',1,1,1,0,0,0,0,0,0,'Sao Paolo','br',-23.550000,-46.640000,'27',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(75,1,_binary '\0cl&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'http://www.google.com.vn/url?rct=j&q=%3C%3E%26%5C%22the%20pdo%20extension%20is%20required%20for%20this%20adapter%20but%20the%20extension%20is%20not%20loaded&source=web&cd=4&url=http%3A%2F%2Fforum.piwik.org%2Fread.php%3F2%2C1011&cad=rja','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2,'Englewood Cliffs','us',40.890000,-73.950000,'NJ',2415,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(87,1,_binary '©·ºpx;a~','2012-01-07 11:22:34',_binary 'ȧµÁ}',_binary '\0\0',1,NULL,'2012-01-07 11:22:34',0,1,0,0,NULL,1,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Stratford-upon-Avon','gb',123.460000,21.320000,'WAR',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(88,1,_binary '©·ºpx;a~','2012-01-07 12:49:34',_binary 'ȧµÁ}',_binary '\0\0',1,NULL,'2012-01-07 12:22:34',0,1,1,3600,NULL,2,119,120,121,120,6,3,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Stratford-upon-Avon','gb',123.460000,21.320000,'WAR',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(89,1,_binary '©·ºpx;a~','2012-01-08 11:22:34',_binary '\ô‚\ìª\ñp€',_binary '\0\0',1,NULL,'2012-01-08 11:22:34',0,1,1,86400,NULL,3,117,118,117,118,2,2,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,2,'Nuneaton and Bedworth','gb',NULL,NULL,'WAR',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(90,1,_binary '©·ºpx;a~','2012-01-08 12:49:34',_binary '\ô‚\ìª\ñp€',_binary '\0\0',1,NULL,'2012-01-08 12:22:34',1,1,1,90000,0,4,119,120,121,120,11,5,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',2,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1623,'Nuneaton and Bedworth','gb',NULL,NULL,'WAR',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(91,1,_binary '¸\Ã~3\Þý\å','2012-01-09 11:22:34',_binary '…ª¨Z q\Ú\õ',_binary '\0\0',1,NULL,'2012-01-09 11:22:34',0,1,0,0,NULL,1,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Stratford-upon-Avon','gb',124.460000,22.230000,'WAR',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 2',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 2'),(92,1,_binary '¸\Ã~3\Þý\å','2012-01-09 12:49:34',_binary '…ª¨Z q\Ú\õ',_binary '\0\0',1,NULL,'2012-01-09 12:22:34',0,1,1,3600,NULL,2,119,120,121,120,6,3,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Stratford-upon-Avon','gb',124.460000,22.230000,'WAR',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 2',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 2'),(93,1,_binary '¸\Ã~3\Þý\å','2012-01-10 11:22:34',_binary '›d-WE\ô',_binary '\0\0',1,NULL,'2012-01-10 11:22:34',0,1,1,86400,NULL,3,117,118,117,118,2,2,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,2,'London','gb',NULL,NULL,'LND',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 2',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 2'),(94,1,_binary '¸\Ã~3\Þý\å','2012-01-10 12:49:34',_binary '›d-WE\ô',_binary '\0\0',1,NULL,'2012-01-10 12:22:34',0,1,1,90000,NULL,4,119,120,121,120,11,5,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',2,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'London','gb',NULL,NULL,'LND',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 2',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 2'),(95,1,_binary 'û©Ø�d\ó\â\Ù','2012-01-11 11:22:34',_binary 'µ¬\Ìè¡’',_binary '\0\0',1,NULL,'2012-01-11 11:22:34',0,1,0,0,NULL,1,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Stratford-upon-Avon','gb',NULL,NULL,'KEN',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 4',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 4'),(96,1,_binary 'û©Ø�d\ó\â\Ù','2012-01-11 12:49:34',_binary 'µ¬\Ìè¡’',_binary '\0\0',1,NULL,'2012-01-11 12:22:34',0,1,1,3600,NULL,2,119,120,121,120,6,3,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Stratford-upon-Avon','gb',NULL,NULL,'KEN',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 4',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 4'),(97,1,_binary 'û©Ø�d\ó\â\Ù','2012-01-12 11:22:34',_binary '>_T ‰R¤«',_binary '\0\0',1,NULL,'2012-01-12 11:22:34',0,1,1,86400,NULL,3,117,118,117,118,2,2,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,2,'Stratford-upon-Avon','ru',NULL,NULL,'SPE',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 4',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 4'),(98,1,_binary 'û©Ø�d\ó\â\Ù','2012-01-12 12:49:34',_binary '>_T ‰R¤«',_binary '\0\0',1,NULL,'2012-01-12 12:22:34',0,1,1,90000,NULL,4,119,120,121,120,11,5,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',2,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Stratford-upon-Avon','ru',NULL,NULL,'SPE',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 4',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 4'),(99,1,_binary 'ªh\Ç\\Jw\È','2012-01-13 11:22:34',_binary '(ž/˰i)ú',_binary '\0\0',1,NULL,'2012-01-13 11:22:34',0,1,0,0,NULL,1,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Hluboká nad Vltavou','ru',NULL,NULL,'SPE',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 6',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 6'),(100,1,_binary 'ªh\Ç\\Jw\È','2012-01-13 12:49:34',_binary '(ž/˰i)ú',_binary '\0\0',1,NULL,'2012-01-13 12:22:34',0,1,1,3600,NULL,2,119,120,121,120,6,3,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Hluboká nad Vltavou','ru',NULL,NULL,'SPE',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 6',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 6'),(101,1,_binary 'ªh\Ç\\Jw\È','2012-01-14 11:22:34',_binary '(§\îRO:‰',_binary '\0\0',1,NULL,'2012-01-14 11:22:34',0,1,1,86400,NULL,3,117,118,117,118,2,2,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,2,'Stratford-upon-Avon','mk',NULL,NULL,'18',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 6',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 6'),(102,1,_binary 'ªh\Ç\\Jw\È','2012-01-14 12:49:34',_binary '(§\îRO:‰',_binary '\0\0',1,NULL,'2012-01-14 12:22:34',1,1,1,90000,0,4,119,120,121,120,11,5,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',2,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1623,'Stratford-upon-Avon','mk',NULL,NULL,'18',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 6',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 6'),(103,1,_binary 'þ\Ó3’ӤС','2012-01-15 11:22:34',_binary '£bD\ÛA¯§',_binary '\0\0',1,NULL,'2012-01-15 11:22:34',0,1,0,0,NULL,1,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 8',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 8'),(104,1,_binary 'þ\Ó3’ӤС','2012-01-15 12:49:34',_binary '£bD\ÛA¯§',_binary '\0\0',1,NULL,'2012-01-15 12:22:34',0,1,1,3600,NULL,2,119,120,121,120,6,3,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 8',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 8'),(105,1,_binary 'ù \ZAqU6','2012-01-07 11:22:35',_binary '\Ì go˜\õ\Õh',_binary '\Â9\0\0',1,NULL,'2012-01-07 11:22:35',0,1,0,0,NULL,1,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Blink','CM','33.0',1,'GO','Nexus 4',1,'AND','4.4',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Besançon','fr',47.250000,6.020000,'BFC',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(106,1,_binary 'ù \ZAqU6','2012-01-07 12:49:35',_binary '\Ì go˜\õ\Õh',_binary '\Â9\0\0',1,NULL,'2012-01-07 12:22:35',0,1,1,3600,NULL,2,119,120,121,120,6,3,1,NULL,NULL,1,'','fr','Blink','CM','33.0',1,'GO','Nexus 4',1,'AND','4.4',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Besançon','fr',47.250000,6.020000,'BFC',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(107,1,_binary 'ù \ZAqU6','2012-01-08 11:22:35',_binary 'e\îü+:£\\',_binary '\0\0\0\0\0\0\0\0\0\0ÿÿ‰R\0\0',1,NULL,'2012-01-08 11:22:35',0,1,1,86400,NULL,3,117,118,117,118,2,2,0,NULL,NULL,1,'','fr','WebKit','AN','',1,'HT','Desire',1,'MLD','8.0',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,2,'Vancouver','ca',49.250000,-123.130000,'BC',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(108,1,_binary 'ù \ZAqU6','2012-01-08 12:49:35',_binary 'e\îü+:£\\',_binary '\0\0\0\0\0\0\0\0\0\0ÿÿ‰R\0\0',1,NULL,'2012-01-08 12:22:35',1,1,1,90000,0,4,119,120,121,120,11,5,1,NULL,NULL,1,'','fr','WebKit','AN','',1,'HT','Desire',1,'MLD','8.0',2,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1623,'Vancouver','ca',49.250000,-123.130000,'BC',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(109,1,_binary '\é0(½Áª\Íû','2012-01-07 11:22:36',_binary '\ÝZ<…bL-;',_binary '‰R\0\0',1,NULL,'2012-01-07 11:22:36',0,1,0,0,NULL,1,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Blink','CH','32.0',1,'','generic desktop',0,'WIN','8.1',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Vancouver','ca',49.250000,-123.130000,'BC',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(110,1,_binary '\é0(½Áª\Íû','2012-01-07 12:49:36',_binary 'na\Ót®‚',_binary '‰R\0\0',1,NULL,'2012-01-07 12:22:36',0,1,1,3600,NULL,2,119,120,121,120,6,3,1,NULL,NULL,1,'','','Blink','CH','32.0',1,'','generic desktop',0,'WIN','8.1',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Vancouver','ca',49.250000,-123.130000,'BC',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(111,1,_binary '\é0(½Áª\Íû','2012-01-08 11:22:36',_binary '¼N›�0i',_binary '‰R\0\0',1,NULL,'2012-01-08 11:22:36',0,1,1,86400,NULL,3,117,118,117,118,2,2,0,NULL,NULL,1,'','','Trident','IE','8.0',1,'','generic desktop',0,'WIN','Vista',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,2,'Vancouver','ca',49.250000,-123.130000,'BC',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(112,1,_binary '\é0(½Áª\Íû','2012-01-08 12:49:36',_binary '¼N›�0i',_binary '‰R\0\0',1,NULL,'2012-01-08 12:22:36',1,1,1,90000,0,4,119,120,121,120,11,5,1,NULL,NULL,1,'','','Trident','IE','8.0',1,'','generic desktop',0,'WIN','Vista',2,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1623,'Vancouver','ca',49.250000,-123.130000,'BC',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(113,1,_binary '�ŒšVJ†Be','2012-01-09 11:22:36',_binary 'G²^Ù—!&\Û',_binary ' \0\ö“¿\0\0\0\0\0\0\0\0\0\0',1,NULL,'2012-01-09 11:22:36',0,1,0,0,NULL,1,117,118,117,118,1,1,0,NULL,NULL,1,'','','Trident','IE','11.0',1,'DL','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'us',38.000000,-97.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 2',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 2'),(114,1,_binary '�ŒšVJ†Be','2012-01-09 12:49:36',_binary 'G²^Ù—!&\Û',_binary ' \0\ö“¿\0\0\0\0\0\0\0\0\0\0',1,NULL,'2012-01-09 12:22:36',0,1,1,3600,NULL,2,119,120,121,120,6,3,1,NULL,NULL,1,'','','Trident','IE','11.0',1,'DL','generic desktop',0,'WIN','7',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,NULL,'us',38.000000,-97.000000,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(115,1,_binary '�ŒšVJ†Be','2012-01-10 11:22:36',_binary 'Õ©\\\â¨(m',_binary 'q>\0\0',1,NULL,'2012-01-10 11:22:36',0,1,1,86400,NULL,3,117,118,117,118,2,2,0,NULL,NULL,1,'','','Blink','CH','34.0',1,'SO','Xperia Tablet S',2,'AND','4.1',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,2,'Lhasa','cn',29.650000,91.100000,'XZ',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 2',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 2'),(116,1,_binary '�ŒšVJ†Be','2012-01-10 12:49:36',_binary 'Õ©\\\â¨(m',_binary 'q>\0\0',1,NULL,'2012-01-10 12:22:36',0,1,1,90000,NULL,4,119,120,121,120,11,5,1,NULL,NULL,1,'','','Blink','CH','34.0',1,'SO','Xperia Tablet S',2,'AND','4.1',2,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Lhasa','cn',29.650000,91.100000,'XZ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(117,1,_binary 'Öœ}\ó/¹','2012-01-07 11:22:37',_binary '\õ�+2Q&\È',_binary '—d\0\0',1,NULL,'2012-01-07 11:22:37',0,1,0,0,NULL,1,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','WebKit','QQ','5.0',1,'SA','Galaxy Note 3',10,'AND','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'it',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(118,1,_binary 'Öœ}\ó/¹','2012-01-07 12:49:37',_binary '\õ�+2Q&\È',_binary '—d\0\0',1,NULL,'2012-01-07 12:22:37',0,1,1,3600,NULL,2,119,120,121,120,6,3,1,NULL,NULL,1,'','fr','WebKit','QQ','5.0',1,'SA','Galaxy Note 3',10,'AND','4.3',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,NULL,'it',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(119,1,_binary 'Öœ}\ó/¹','2012-01-08 11:22:37',_binary '\æ\Z3W\ñ-™\õ',_binary 'g\0\0',1,NULL,'2012-01-08 11:22:37',0,1,1,86400,NULL,3,117,118,117,118,2,2,0,NULL,NULL,1,'','fr','Gecko','FF','3.0',1,'','generic desktop',0,'UBT','9.04',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,2,NULL,'id',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(120,1,_binary 'Öœ}\ó/¹','2012-01-08 12:49:37',_binary '\æ\Z3W\ñ-™\õ',_binary 'g\0\0',1,NULL,'2012-01-08 12:22:37',1,1,1,90000,0,4,119,120,121,120,11,5,1,NULL,NULL,1,'','fr','Gecko','FF','3.0',1,'','generic desktop',0,'UBT','9.04',2,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1623,NULL,'id',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 0',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 0'),(121,1,_binary '\æKÄ�p ]i','2012-01-27 11:22:33',_binary '[\Éb€G‘',_binary '\Â9\0\0',1,'userid.email@example.org','2012-01-27 11:22:33',0,1,0,0,NULL,1,168,118,168,118,1,1,0,'wikileaks ftw','Google',2,'http://google.com/?q=Wikileaks FTW','fr','WebKit','SF','',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'not a city','us',1.000000,2.000000,'CA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(122,1,_binary '©·ºpx;a~','2012-01-09 11:22:34',_binary '\ô‚\ìª\ñp€',_binary '\0\0',1,NULL,'2012-01-09 11:22:34',0,1,1,172800,82800,5,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,1,'Stratford-upon-Avon','gb',123.460000,21.320000,'WAR',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 1',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 1'),(123,1,_binary '©·ºpx;a~','2012-01-09 12:49:34',_binary '\ô‚\ìª\ñp€',_binary '\0\0',1,NULL,'2012-01-09 12:22:34',0,1,2,176400,86400,6,119,120,119,120,5,2,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Stratford-upon-Avon','gb',123.460000,21.320000,'WAR',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 1',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 1'),(124,1,_binary '¸\Ã~3\Þý\å','2012-01-11 11:22:34',_binary '›d-WE\ô',_binary '\0\0',1,NULL,'2012-01-11 11:22:34',0,1,1,172800,NULL,5,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,1,'Nuneaton and Bedworth','gb',NULL,NULL,'WAR',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 3',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 3'),(125,1,_binary '¸\Ã~3\Þý\å','2012-01-11 12:49:34',_binary '›d-WE\ô',_binary '\0\0',1,NULL,'2012-01-11 12:22:34',1,1,1,176400,0,6,119,120,119,120,5,2,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1623,'Nuneaton and Bedworth','gb',NULL,NULL,'WAR',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 3',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 3'),(126,1,_binary 'û©Ø�d\ó\â\Ù','2012-01-13 11:22:34',_binary '>_T ‰R¤«',_binary '\0\0',1,NULL,'2012-01-13 11:22:34',0,1,1,172800,NULL,5,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,1,'Stratford-upon-Avon','gb',124.460000,22.230000,'WAR',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 5',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 5'),(127,1,_binary 'û©Ø�d\ó\â\Ù','2012-01-13 12:49:34',_binary '>_T ‰R¤«',_binary '\0\0',1,NULL,'2012-01-13 12:22:34',0,1,1,176400,NULL,6,119,120,119,120,5,2,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Stratford-upon-Avon','gb',124.460000,22.230000,'WAR',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 5',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 5'),(128,1,_binary 'ªh\Ç\\Jw\È','2012-01-15 11:22:34',_binary '(§\îRO:‰',_binary '\0\0',1,NULL,'2012-01-15 11:22:34',0,1,1,172800,82800,5,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,1,'London','gb',NULL,NULL,'LND',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 7',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 7'),(129,1,_binary 'ªh\Ç\\Jw\È','2012-01-15 12:49:34',_binary '(§\îRO:‰',_binary '\0\0',1,NULL,'2012-01-15 12:22:34',0,1,2,176400,86400,6,119,120,119,120,5,2,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'London','gb',NULL,NULL,'LND',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 7',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 7'),(130,1,_binary 'þ\Ó3’ӤС','2012-01-16 11:22:34',_binary '£bD\ÛA¯§',_binary '\0\0',1,NULL,'2012-01-16 11:22:34',0,1,1,86400,NULL,3,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,1,'Stratford-upon-Avon','gb',NULL,NULL,'KEN',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 8',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 8'),(131,1,_binary 'þ\Ó3’ӤС','2012-01-16 12:49:34',_binary '£bD\ÛA¯§',_binary '\0\0',1,NULL,'2012-01-16 12:22:34',0,1,1,90000,NULL,4,119,120,121,120,6,3,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Stratford-upon-Avon','gb',NULL,NULL,'KEN',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 8',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 8'),(132,1,_binary 'ù \ZAqU6','2012-01-09 11:22:35',_binary 'e\îü+:£\\',_binary '\0\0\0\0\0\0\0\0\0\0ÿÿ‰R\0\0',1,NULL,'2012-01-09 11:22:35',0,1,1,172800,82800,5,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','WebKit','AN','',1,'HT','Desire',1,'MLD','8.0',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,1,'Vancouver','ca',49.250000,-123.130000,'BC',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 1',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 1'),(133,1,_binary 'ù \ZAqU6','2012-01-09 12:49:35',_binary 'e\îü+:£\\',_binary '\0\0\0\0\0\0\0\0\0\0ÿÿ‰R\0\0',1,NULL,'2012-01-09 12:22:35',0,1,2,176400,86400,6,119,120,119,120,5,2,0,NULL,NULL,1,'','fr','WebKit','AN','',1,'HT','Desire',1,'MLD','8.0',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Vancouver','ca',49.250000,-123.130000,'BC',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 1',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 1'),(134,1,_binary '\é0(½Áª\Íû','2012-01-09 11:22:36',_binary '¼N›�0i',_binary '‰R\0\0',1,NULL,'2012-01-09 11:22:36',0,1,1,172800,82800,5,117,118,117,118,1,1,0,NULL,NULL,1,'','','Trident','IE','8.0',1,'','generic desktop',0,'WIN','Vista',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,1,'Vancouver','ca',49.250000,-123.130000,'BC',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 1',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 1'),(135,1,_binary '\é0(½Áª\Íû','2012-01-09 12:49:36',_binary '¼N›�0i',_binary '‰R\0\0',1,NULL,'2012-01-09 12:22:36',0,1,2,176400,86400,6,119,120,119,120,5,2,0,NULL,NULL,1,'','','Trident','IE','8.0',1,'','generic desktop',0,'WIN','Vista',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,'Vancouver','ca',49.250000,-123.130000,'BC',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(136,1,_binary '�ŒšVJ†Be','2012-01-11 11:22:36',_binary 'Õ©\\\â¨(m',_binary 'q>\0\0',1,NULL,'2012-01-11 11:22:36',0,1,1,172800,NULL,5,117,118,117,118,1,1,0,NULL,NULL,1,'','','Blink','CH','34.0',1,'SO','Xperia Tablet S',2,'AND','4.1',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,1,'Lhasa','cn',29.650000,91.100000,'XZ',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 3',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 3'),(137,1,_binary '�ŒšVJ†Be','2012-01-11 12:49:36',_binary 'Õ©\\\â¨(m',_binary 'q>\0\0',1,NULL,'2012-01-11 12:22:36',1,1,1,176400,0,6,119,120,119,120,5,2,0,NULL,NULL,1,'','','Blink','CH','34.0',1,'SO','Xperia Tablet S',2,'AND','4.1',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1623,'Lhasa','cn',29.650000,91.100000,'XZ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(138,1,_binary 'Öœ}\ó/¹','2012-01-09 11:22:37',_binary '\æ\Z3W\ñ-™\õ',_binary 'g\0\0',1,NULL,'2012-01-09 11:22:37',0,1,1,172800,82800,5,117,118,117,118,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.0',1,'','generic desktop',0,'UBT','9.04',0,'12:34:06',82800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'id',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 1',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 1'),(139,1,_binary 'Öœ}\ó/¹','2012-01-09 12:49:37',_binary '\æ\Z3W\ñ-™\õ',_binary 'g\0\0',1,NULL,'2012-01-09 12:22:37',0,1,2,176400,86400,6,119,120,119,120,5,2,0,NULL,NULL,1,'','fr','Gecko','FF','3.0',1,'','generic desktop',0,'UBT','9.04',1,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1621,NULL,'id',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 1 name','Cvar1 value is 1',NULL,NULL,NULL,NULL,NULL,NULL,'Cvar 5 name','Cvar5 value is 1'),(140,1,_binary '\æKÄ�p ]i','2012-01-28 11:22:33',_binary '[\Éb€G‘',_binary '\Â9\0\0',1,'userid.email@example.org','2012-01-28 11:22:33',0,1,1,86400,NULL,2,168,118,168,118,1,1,0,'wikileaks ftw','Google',2,'http://google.com/?q=Wikileaks FTW','fr','WebKit','SF','',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',86400,'1024x768',1,1,1,0,0,0,0,0,1,'not a city','us',1.000000,2.000000,'CA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(141,1,_binary 'œb£Ä�›','2012-01-09 01:22:33',_binary '5cv~\Ñ\Ïv¡',_binary 'œ\0\0',1,'user0','2012-01-09 01:22:33',0,1,0,0,NULL,1,180,181,180,181,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',0,'1920x1080',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',451,NULL,'0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(142,1,_binary 'œb£Ä�›','2012-01-09 02:22:33',_binary '5cv~\Ñ\Ïv¡',_binary 'œ\0\0',1,'user0','2012-01-09 02:22:33',0,1,1,3600,NULL,2,182,183,182,183,1,1,0,NULL,'whatever0.com',3,'http://whatever0.com/0','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',452,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(143,1,_binary 'œb£Ä�›','2012-01-09 03:22:33',_binary '5cv~\Ñ\Ïv¡',_binary 'œ\0\0',1,'user0','2012-01-09 03:22:33',0,1,1,7200,NULL,3,184,185,184,185,1,1,0,NULL,'whatever0.com',3,'http://whatever0.com/0','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',453,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(144,1,_binary 'œb£Ä�›','2012-01-09 04:22:33',_binary '5cv~\Ñ\Ïv¡',_binary 'œ\0\0',1,'user0','2012-01-09 04:22:33',0,1,1,10800,NULL,4,186,187,186,187,1,1,0,NULL,'whatever0.com',3,'http://whatever0.com/1','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',454,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(145,1,_binary 'œb£Ä�›','2012-01-09 05:22:33',_binary '5cv~\Ñ\Ïv¡',_binary 'œ\0\0',1,'user0','2012-01-09 05:22:33',0,1,1,14400,NULL,5,188,189,188,189,1,1,0,NULL,'whatever0.com',3,'http://whatever0.com/2','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',455,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(146,1,_binary '³Ú§{L©U','2012-01-09 01:22:33',_binary '~°? \Ã\ì#5',_binary 'œ\0\0',1,'user1','2012-01-09 01:22:33',0,1,0,0,NULL,1,190,191,190,191,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',0,'1920x1080',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',456,NULL,'5',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(147,1,_binary '³Ú§{L©U','2012-01-09 02:22:33',_binary '~°? \Ã\ì#5',_binary 'œ\0\0',1,'user1','2012-01-09 02:22:33',0,1,1,3600,NULL,2,192,193,192,193,1,1,0,NULL,'whatever1.com',3,'http://whatever1.com/0','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',457,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(148,1,_binary '³Ú§{L©U','2012-01-09 03:22:33',_binary '~°? \Ã\ì#5',_binary 'œ\0\0',1,'user1','2012-01-09 03:22:33',0,1,1,7200,NULL,3,194,195,194,195,1,1,0,NULL,'whatever.com1',3,'http://whatever.com1/1','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',458,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(149,1,_binary '³Ú§{L©U','2012-01-09 04:22:33',_binary '~°? \Ã\ì#5',_binary 'œ\0\0',1,'user1','2012-01-09 04:22:33',0,1,1,10800,NULL,4,196,197,196,197,1,1,0,NULL,'whatever1.com',3,'http://whatever1.com/2','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',459,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(150,1,_binary '³Ú§{L©U','2012-01-09 05:22:33',_binary '~°? \Ã\ì#5',_binary 'œ\0\0',1,'user1','2012-01-09 05:22:33',0,1,1,14400,NULL,5,198,199,198,199,1,1,0,NULL,'whatever3.com',3,'http://whatever3.com/3','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',460,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(151,1,_binary '¡ˆ\î\Ém¹','2012-01-09 01:22:33',_binary 'ø‚I\"e-\÷n',_binary 'œ\0\0',1,'user2','2012-01-09 01:22:33',0,1,0,0,NULL,1,200,201,200,201,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1920x1080',1,1,1,0,0,0,0,0,0,'Melbourne','au',NULL,NULL,'VIC',461,NULL,'10',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(152,1,_binary '¡ˆ\î\Ém¹','2012-01-09 02:22:33',_binary 'ø‚I\"e-\÷n',_binary 'œ\0\0',1,'user2','2012-01-09 02:22:33',0,1,1,3600,NULL,2,202,203,202,203,1,1,0,'this search term','Google',2,'http://www.google.com/search?q=this+search+term','fr','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',462,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(153,1,_binary '¡ˆ\î\Ém¹','2012-01-09 03:22:33',_binary 'ø‚I\"e-\÷n',_binary 'œ\0\0',1,'user2','2012-01-09 03:22:33',0,1,1,7200,NULL,3,204,205,204,205,1,1,0,'that search term','Google',2,'http://www.google.com/search?q=that+search+term','fr','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',463,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(154,1,_binary '¡ˆ\î\Ém¹','2012-01-09 04:22:33',_binary 'ø‚I\"e-\÷n',_binary 'œ\0\0',1,'user2','2012-01-09 04:22:33',0,1,1,10800,NULL,4,206,207,206,207,1,1,0,'this search term','Yahoo!',2,'http://search.yahoo.com/search?p=this+search+term','fr','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',464,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(155,1,_binary '¡ˆ\î\Ém¹','2012-01-09 05:22:33',_binary 'ø‚I\"e-\÷n',_binary 'œ\0\0',1,'user2','2012-01-09 05:22:33',0,1,1,14400,NULL,5,208,209,208,209,1,1,0,'that search term','Yahoo!',2,'http://search.yahoo.com/search?p=that+search+term','fr','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',465,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(156,1,_binary ' „”F\Ó85','2012-01-09 01:22:33',_binary '§\òµP\Ì-',_binary 'œ\0\0',1,'user3','2012-01-09 01:22:33',0,1,0,0,NULL,1,210,211,210,211,1,1,0,NULL,NULL,1,'','fr','WebKit','CH','3.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1920x1080',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',466,NULL,'15',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(157,1,_binary ' „”F\Ó85','2012-01-09 02:22:33',_binary '§\òµP\Ì-',_binary 'œ\0\0',1,'user3','2012-01-09 02:22:33',0,1,1,3600,NULL,2,212,213,212,213,1,1,0,'this search term','Ask',2,'http://www.ask.com/web?q=this+search+term','fr','WebKit','CH','3.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',467,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(158,1,_binary ' „”F\Ó85','2012-01-09 03:22:33',_binary '§\òµP\Ì-',_binary 'œ\0\0',1,'user3','2012-01-09 03:22:33',0,1,1,7200,NULL,3,214,215,214,215,1,1,0,'search term 1','Bing',2,'http://www.bing.com/search?q=search+term+1','fr','WebKit','CH','3.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',468,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(159,1,_binary ' „”F\Ó85','2012-01-09 04:22:33',_binary '§\òµP\Ì-',_binary 'œ\0\0',1,'user3','2012-01-09 04:22:33',0,1,1,10800,NULL,4,216,217,216,217,1,1,0,'search term 2','Babylon',2,'http://search.babylon.com/?q=search+term+2','fr','WebKit','CH','3.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',469,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(160,1,_binary ' „”F\Ó85','2012-01-09 05:22:33',_binary '§\òµP\Ì-',_binary 'œ\0\0',1,'user3','2012-01-09 05:22:33',0,1,1,14400,NULL,5,218,219,218,219,1,1,0,'search term 2','Alexa',2,'http://alexa.com/search?q=search+term+2','fr','WebKit','CH','3.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',470,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(161,1,_binary '\æ\î\ö­\ò\å\õ','2012-01-09 01:22:33',_binary '@Þ„h\"Oʵ',_binary 'œ\0\0',1,'user4','2012-01-09 01:22:33',0,1,0,0,NULL,1,220,221,220,221,1,1,0,NULL,NULL,1,'','fr','WebKit','CH','3.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',0,'1366x768',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',471,NULL,'20',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(162,1,_binary '\æ\î\ö­\ò\å\õ','2012-01-09 02:22:33',_binary '@Þ„h\"Oʵ',_binary 'œ\0\0',1,'user4','2012-01-09 02:22:33',0,1,1,3600,NULL,2,222,223,222,223,1,1,0,'search term 3','Google',2,'http://www.google.com/search?q=search+term+3','fr','WebKit','CH','3.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',472,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(163,1,_binary '\æ\î\ö­\ò\å\õ','2012-01-09 03:22:33',_binary '@Þ„h\"Oʵ',_binary 'œ\0\0',1,'user4','2012-01-09 03:22:33',0,1,1,7200,NULL,3,224,225,224,225,1,1,0,'search term 4','Yahoo!',2,'http://search.yahoo.com/search?p=search+term+4','fr','WebKit','CH','3.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',473,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(164,1,_binary '\æ\î\ö­\ò\å\õ','2012-01-09 04:22:33',_binary '@Þ„h\"Oʵ',_binary 'œ\0\0',1,'user4','2012-01-09 04:22:33',0,1,1,10800,NULL,4,226,227,226,227,1,1,0,'search term 3','Ask',2,'http://www.ask.com/web?q=search+term+3','fr','WebKit','CH','3.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',474,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(165,1,_binary '\æ\î\ö­\ò\å\õ','2012-01-09 05:22:33',_binary '@Þ„h\"Oʵ',_binary 'œ\0\0',1,'user4','2012-01-09 05:22:33',0,1,1,14400,NULL,5,228,229,228,229,1,1,0,'search term 4','Bing',2,'http://www.bing.com/search?q=search+term+4','fr','WebKit','CH','3.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',475,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(166,1,_binary '}&�¸Ý€r','2012-01-09 01:22:33',_binary '\êeB~œ\Ö\÷\Ì',_binary 'œ\0\0',1,'user5','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,231,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','SF','5.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',0,'1366x768',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',477,NULL,'0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(167,1,_binary '}&�¸Ý€r','2012-01-09 02:22:33',_binary '\êeB~œ\Ö\÷\Ì',_binary 'œ\0\0',1,'user5','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,233,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','SF','5.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',479,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(168,1,_binary '}&�¸Ý€r','2012-01-09 03:22:33',_binary '\êeB~œ\Ö\÷\Ì',_binary 'œ\0\0',1,'user5','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,235,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','SF','5.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',481,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(169,1,_binary '}&�¸Ý€r','2012-01-09 04:22:33',_binary '\êeB~œ\Ö\÷\Ì',_binary 'œ\0\0',1,'user5','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,237,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','SF','5.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',483,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(170,1,_binary '}&�¸Ý€r','2012-01-09 05:22:33',_binary '\êeB~œ\Ö\÷\Ì',_binary 'œ\0\0',1,'user5','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,239,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','SF','5.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',485,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(171,1,_binary '1*F\ÜR~ú','2012-01-09 01:22:33',_binary '\õ“q»\î~\â',_binary 'œ\0\0',1,'user6','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,231,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','MF','5.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',0,'1366x768',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',487,NULL,'5',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(172,1,_binary '1*F\ÜR~ú','2012-01-09 02:22:33',_binary '\õ“q»\î~\â',_binary 'œ\0\0',1,'user6','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,242,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','MF','5.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',489,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(173,1,_binary '1*F\ÜR~ú','2012-01-09 03:22:33',_binary '\õ“q»\î~\â',_binary 'œ\0\0',1,'user6','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,244,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','MF','5.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',491,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(174,1,_binary '1*F\ÜR~ú','2012-01-09 04:22:33',_binary '\õ“q»\î~\â',_binary 'œ\0\0',1,'user6','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,246,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','MF','5.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',493,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(175,1,_binary '1*F\ÜR~ú','2012-01-09 05:22:33',_binary '\õ“q»\î~\â',_binary 'œ\0\0',1,'user6','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,248,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','MF','5.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',495,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(176,1,_binary '{\Þ\ì\É|øù¹','2012-01-09 01:22:33',_binary '›\0m\ö\'‰',_binary 'œ\0\0',1,'user7','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,231,NULL,2,1,1,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',0,'1280x1024',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',497,NULL,'10',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(177,1,_binary '{\Þ\ì\É|øù¹','2012-01-09 02:22:33',_binary '›\0m\ö\'‰',_binary 'œ\0\0',1,'user7','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,251,NULL,2,1,1,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',499,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(178,1,_binary '{\Þ\ì\É|øù¹','2012-01-09 03:22:33',_binary '›\0m\ö\'‰',_binary 'œ\0\0',1,'user7','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,253,NULL,2,1,1,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',501,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(179,1,_binary '{\Þ\ì\É|øù¹','2012-01-09 04:22:33',_binary '›\0m\ö\'‰',_binary 'œ\0\0',1,'user7','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,255,NULL,2,1,1,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',503,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(180,1,_binary '{\Þ\ì\É|øù¹','2012-01-09 05:22:33',_binary '›\0m\ö\'‰',_binary 'œ\0\0',1,'user7','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,257,NULL,2,1,1,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',505,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(181,1,_binary '¡L•[\ÚW+�','2012-01-09 01:22:33',_binary 'g\í�\ëpa',_binary 'œ\0\0',1,'user8','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,231,NULL,2,1,1,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',0,'1280x1024',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',507,NULL,'15',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(182,1,_binary '¡L•[\ÚW+�','2012-01-09 02:22:33',_binary 'g\í�\ëpa',_binary 'œ\0\0',1,'user8','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,260,NULL,2,1,1,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',509,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(183,1,_binary '¡L•[\ÚW+�','2012-01-09 03:22:33',_binary 'g\í�\ëpa',_binary 'œ\0\0',1,'user8','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,262,NULL,2,1,1,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',511,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(184,1,_binary '¡L•[\ÚW+�','2012-01-09 04:22:33',_binary 'g\í�\ëpa',_binary 'œ\0\0',1,'user8','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,264,NULL,2,1,1,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',513,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(185,1,_binary '¡L•[\ÚW+�','2012-01-09 05:22:33',_binary 'g\í�\ëpa',_binary 'œ\0\0',1,'user8','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,266,NULL,2,1,1,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',515,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(186,1,_binary '†\ò„4!1ú','2012-01-09 01:22:33',_binary '\èU� ¤߃',_binary 'œ\0\0',1,'user9','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,231,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','CH','22.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',0,'1280x1024',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',517,NULL,'20',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(187,1,_binary '†\ò„4!1ú','2012-01-09 02:22:33',_binary '\èU� ¤߃',_binary 'œ\0\0',1,'user9','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,269,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','CH','22.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',519,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(188,1,_binary '†\ò„4!1ú','2012-01-09 03:22:33',_binary '\èU� ¤߃',_binary 'œ\0\0',1,'user9','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,271,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','CH','22.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',521,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(189,1,_binary '†\ò„4!1ú','2012-01-09 04:22:33',_binary '\èU� ¤߃',_binary 'œ\0\0',1,'user9','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,273,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','CH','22.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',523,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(190,1,_binary '†\ò„4!1ú','2012-01-09 05:22:33',_binary '\èU� ¤߃',_binary 'œ\0\0',1,'user9','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,275,NULL,2,1,1,NULL,NULL,1,'','fr','WebKit','CH','22.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',525,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(191,1,_binary 'Љڗ¹\äG','2012-01-09 01:22:33',_binary '—š\ãƒ\í–',_binary 'œ\0\0',1,'user10','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,231,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',0,'1680x1050',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',527,NULL,'0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(192,1,_binary 'Љڗ¹\äG','2012-01-09 02:22:33',_binary '—š\ãƒ\í–',_binary 'œ\0\0',1,'user10','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,278,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1680x1050',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',529,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(193,1,_binary 'Љڗ¹\äG','2012-01-09 03:22:33',_binary '—š\ãƒ\í–',_binary 'œ\0\0',1,'user10','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,280,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1680x1050',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',531,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(194,1,_binary 'Љڗ¹\äG','2012-01-09 04:22:33',_binary '—š\ãƒ\í–',_binary 'œ\0\0',1,'user10','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,282,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1680x1050',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',533,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(195,1,_binary 'Љڗ¹\äG','2012-01-09 05:22:33',_binary '—š\ãƒ\í–',_binary 'œ\0\0',1,'user10','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,284,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1680x1050',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',535,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(196,1,_binary '=\\¿\íH\Î#\Ò','2012-01-09 01:22:33',_binary 'h\èn\\0\Ý\Õ',_binary 'œ\0\0',1,'user11','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,231,NULL,2,1,1,NULL,NULL,1,'','fr','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1680x1050',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',537,NULL,'5',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(197,1,_binary '=\\¿\íH\Î#\Ò','2012-01-09 02:22:33',_binary 'h\èn\\0\Ý\Õ',_binary 'œ\0\0',1,'user11','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,287,NULL,2,1,1,NULL,NULL,1,'','fr','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',3600,'1680x1050',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',539,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(198,1,_binary '=\\¿\íH\Î#\Ò','2012-01-09 03:22:33',_binary 'h\èn\\0\Ý\Õ',_binary 'œ\0\0',1,'user11','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,289,NULL,2,1,1,NULL,NULL,1,'','fr','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',3600,'1680x1050',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',541,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(199,1,_binary '=\\¿\íH\Î#\Ò','2012-01-09 04:22:33',_binary 'h\èn\\0\Ý\Õ',_binary 'œ\0\0',1,'user11','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,291,NULL,2,1,1,NULL,NULL,1,'','fr','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',3600,'1680x1050',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',543,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(200,1,_binary '=\\¿\íH\Î#\Ò','2012-01-09 05:22:33',_binary 'h\èn\\0\Ý\Õ',_binary 'œ\0\0',1,'user11','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,293,NULL,2,1,1,NULL,NULL,1,'','fr','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',3600,'1680x1050',1,1,1,0,0,0,0,0,1,'Yokohama','jp',NULL,NULL,'14',545,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(201,1,_binary '\ä^\Ô4\0^','2012-01-09 01:22:33',_binary '\×ZÖ�m\Ä\Ð',_binary 'œ\0\0',1,'user12','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,231,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'','generic desktop',0,'WIN','8',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',547,NULL,'10',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(202,1,_binary '\ä^\Ô4\0^','2012-01-09 02:22:33',_binary '\×ZÖ�m\Ä\Ð',_binary 'œ\0\0',1,'user12','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,296,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'','generic desktop',0,'WIN','8',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',549,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(203,1,_binary '\ä^\Ô4\0^','2012-01-09 03:22:33',_binary '\×ZÖ�m\Ä\Ð',_binary 'œ\0\0',1,'user12','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,298,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'','generic desktop',0,'WIN','8',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',551,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(204,1,_binary '\ä^\Ô4\0^','2012-01-09 04:22:33',_binary '\×ZÖ�m\Ä\Ð',_binary 'œ\0\0',1,'user12','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,300,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'','generic desktop',0,'WIN','8',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',553,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(205,1,_binary '\ä^\Ô4\0^','2012-01-09 05:22:33',_binary '\×ZÖ�m\Ä\Ð',_binary 'œ\0\0',1,'user12','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,302,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'','generic desktop',0,'WIN','8',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',555,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(206,1,_binary '\Öú+\ë0$‘','2012-01-09 01:22:33',_binary 'T\Ø\"ùý«~',_binary 'œ\0\0',1,'user13','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,231,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'','generic desktop',0,'WIN','Vista',0,'12:34:06',0,'800x600',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',557,NULL,'15',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(207,1,_binary '\Öú+\ë0$‘','2012-01-09 02:22:33',_binary 'T\Ø\"ùý«~',_binary 'œ\0\0',1,'user13','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,305,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'','generic desktop',0,'WIN','Vista',0,'12:34:06',3600,'800x600',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',559,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(208,1,_binary '\Öú+\ë0$‘','2012-01-09 03:22:33',_binary 'T\Ø\"ùý«~',_binary 'œ\0\0',1,'user13','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,307,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'','generic desktop',0,'WIN','Vista',0,'12:34:06',3600,'800x600',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',561,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(209,1,_binary '\Öú+\ë0$‘','2012-01-09 04:22:33',_binary 'T\Ø\"ùý«~',_binary 'œ\0\0',1,'user13','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,309,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'','generic desktop',0,'WIN','Vista',0,'12:34:06',3600,'800x600',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',563,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(210,1,_binary '\Öú+\ë0$‘','2012-01-09 05:22:33',_binary 'T\Ø\"ùý«~',_binary 'œ\0\0',1,'user13','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,311,NULL,2,1,1,NULL,NULL,1,'','fr','Trident','IE','9.0',1,'','generic desktop',0,'WIN','Vista',0,'12:34:06',3600,'800x600',1,1,1,0,0,0,0,0,1,'Nice','fr',NULL,NULL,'PAC',565,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(211,1,_binary '¾ˆ\nq\Ã','2012-01-09 01:22:33',_binary '5•„µ„\ï¤',_binary 'œ\0\0',1,'user14','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,231,NULL,2,1,1,NULL,NULL,1,'','fr','Presto','OP','11.52',1,'AP','generic desktop',0,'MAC','10.6',0,'12:34:06',0,'320x480',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',567,NULL,'20',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(212,1,_binary '¾ˆ\nq\Ã','2012-01-09 02:22:33',_binary '5•„µ„\ï¤',_binary 'œ\0\0',1,'user14','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,314,NULL,2,1,1,NULL,NULL,1,'','fr','Presto','OP','11.52',1,'AP','generic desktop',0,'MAC','10.6',0,'12:34:06',3600,'320x480',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',569,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(213,1,_binary '¾ˆ\nq\Ã','2012-01-09 03:22:33',_binary '5•„µ„\ï¤',_binary 'œ\0\0',1,'user14','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,316,NULL,2,1,1,NULL,NULL,1,'','fr','Presto','OP','11.52',1,'AP','generic desktop',0,'MAC','10.6',0,'12:34:06',3600,'320x480',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',571,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(214,1,_binary '¾ˆ\nq\Ã','2012-01-09 04:22:33',_binary '5•„µ„\ï¤',_binary 'œ\0\0',1,'user14','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,318,NULL,2,1,1,NULL,NULL,1,'','fr','Presto','OP','11.52',1,'AP','generic desktop',0,'MAC','10.6',0,'12:34:06',3600,'320x480',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',573,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(215,1,_binary '¾ˆ\nq\Ã','2012-01-09 05:22:33',_binary '5•„µ„\ï¤',_binary 'œ\0\0',1,'user14','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,320,NULL,2,1,1,NULL,NULL,1,'','fr','Presto','OP','11.52',1,'AP','generic desktop',0,'MAC','10.6',0,'12:34:06',3600,'320x480',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',575,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(216,1,_binary ']⢢> ;\î','2012-01-09 01:22:33',_binary '½k\ó5^¡•¢',_binary 'œ\0\0',1,'user15','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',0,'1920x1080',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',576,NULL,'0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(217,1,_binary ']⢢> ;\î','2012-01-09 02:22:33',_binary '½k\ó5^¡•¢',_binary 'œ\0\0',1,'user15','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',577,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(218,1,_binary ']⢢> ;\î','2012-01-09 03:22:33',_binary '½k\ó5^¡•¢',_binary 'œ\0\0',1,'user15','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',578,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(219,1,_binary ']⢢> ;\î','2012-01-09 04:22:33',_binary '½k\ó5^¡•¢',_binary 'œ\0\0',1,'user15','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',579,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(220,1,_binary ']⢢> ;\î','2012-01-09 05:22:33',_binary '½k\ó5^¡•¢',_binary 'œ\0\0',1,'user15','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',580,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(221,1,_binary '»â®´\â[+\0','2012-01-09 01:22:33',_binary '\êþbÀ8',_binary 'œ\0\0',1,'user16','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',0,'1920x1080',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',581,NULL,'5',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(222,1,_binary '»â®´\â[+\0','2012-01-09 02:22:33',_binary '\êþbÀ8',_binary 'œ\0\0',1,'user16','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',582,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(223,1,_binary '»â®´\â[+\0','2012-01-09 03:22:33',_binary '\êþbÀ8',_binary 'œ\0\0',1,'user16','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',583,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(224,1,_binary '»â®´\â[+\0','2012-01-09 04:22:33',_binary '\êþbÀ8',_binary 'œ\0\0',1,'user16','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',584,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(225,1,_binary '»â®´\â[+\0','2012-01-09 05:22:33',_binary '\êþbÀ8',_binary 'œ\0\0',1,'user16','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',585,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(226,1,_binary '\Ô~i­ `\ôˆ','2012-01-09 01:22:33',_binary '�>#d¿PŠ\Ä',_binary 'œ\0\0',1,'user17','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',1,'12:34:06',0,'1920x1080',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',586,NULL,'10',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(227,1,_binary '\Ô~i­ `\ôˆ','2012-01-09 02:22:33',_binary '�>#d¿PŠ\Ä',_binary 'œ\0\0',1,'user17','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',587,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(228,1,_binary '\Ô~i­ `\ôˆ','2012-01-09 03:22:33',_binary '�>#d¿PŠ\Ä',_binary 'œ\0\0',1,'user17','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',588,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(229,1,_binary '\Ô~i­ `\ôˆ','2012-01-09 04:22:33',_binary '�>#d¿PŠ\Ä',_binary 'œ\0\0',1,'user17','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',589,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(230,1,_binary '\Ô~i­ `\ôˆ','2012-01-09 05:22:33',_binary '�>#d¿PŠ\Ä',_binary 'œ\0\0',1,'user17','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',590,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(231,1,_binary 'T„�B(\èJ½','2012-01-09 01:22:33',_binary 'JfA²ú\Ý_´',_binary 'œ\0\0',1,'user18','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','WebKit','CH','3.0',1,'','generic desktop',0,'WIN','7',1,'12:34:06',0,'1920x1080',1,1,1,0,0,0,0,0,0,'Melbourne','au',NULL,NULL,'VIC',591,NULL,'15',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(232,1,_binary 'T„�B(\èJ½','2012-01-09 02:22:33',_binary 'JfA²ú\Ý_´',_binary 'œ\0\0',1,'user18','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','WebKit','CH','3.0',1,'','generic desktop',0,'WIN','7',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Melbourne','au',NULL,NULL,'VIC',592,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(233,1,_binary 'T„�B(\èJ½','2012-01-09 03:22:33',_binary 'JfA²ú\Ý_´',_binary 'œ\0\0',1,'user18','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','WebKit','CH','3.0',1,'','generic desktop',0,'WIN','7',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Melbourne','au',NULL,NULL,'VIC',593,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(234,1,_binary 'T„�B(\èJ½','2012-01-09 04:22:33',_binary 'JfA²ú\Ý_´',_binary 'œ\0\0',1,'user18','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','WebKit','CH','3.0',1,'','generic desktop',0,'WIN','7',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Melbourne','au',NULL,NULL,'VIC',594,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(235,1,_binary 'T„�B(\èJ½','2012-01-09 05:22:33',_binary 'JfA²ú\Ý_´',_binary 'œ\0\0',1,'user18','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','WebKit','CH','3.0',1,'','generic desktop',0,'WIN','7',1,'12:34:06',3600,'1920x1080',1,1,1,0,0,0,0,0,0,'Melbourne','au',NULL,NULL,'VIC',595,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(236,1,_binary '•»0ÿ\ì$;','2012-01-09 01:22:33',_binary 'Zµ¥\ì\'I',_binary 'œ\0\0',1,'user19','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','WebKit','CH','3.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',0,'1366x768',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',596,NULL,'20',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(237,1,_binary '•»0ÿ\ì$;','2012-01-09 02:22:33',_binary 'Zµ¥\ì\'I',_binary 'œ\0\0',1,'user19','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','WebKit','CH','3.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',597,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(238,1,_binary '•»0ÿ\ì$;','2012-01-09 03:22:33',_binary 'Zµ¥\ì\'I',_binary 'œ\0\0',1,'user19','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','WebKit','CH','3.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',598,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(239,1,_binary '•»0ÿ\ì$;','2012-01-09 04:22:33',_binary 'Zµ¥\ì\'I',_binary 'œ\0\0',1,'user19','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','WebKit','CH','3.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',599,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(240,1,_binary '•»0ÿ\ì$;','2012-01-09 05:22:33',_binary 'Zµ¥\ì\'I',_binary 'œ\0\0',1,'user19','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','WebKit','CH','3.0',1,'','generic desktop',0,'LIN','',1,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',600,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(241,1,_binary 'eqB\0\í:´','2012-01-09 01:22:33',_binary 'Ô¸\ri.*¥¼',_binary 'œ\0\0',1,'user20','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','SF','5.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',0,'1366x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',602,NULL,'0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(242,1,_binary 'eqB\0\í:´','2012-01-09 02:22:33',_binary 'Ô¸\ri.*¥¼',_binary 'œ\0\0',1,'user20','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','SF','5.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',604,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(243,1,_binary 'eqB\0\í:´','2012-01-09 03:22:33',_binary 'Ô¸\ri.*¥¼',_binary 'œ\0\0',1,'user20','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','SF','5.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',606,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(244,1,_binary 'eqB\0\í:´','2012-01-09 04:22:33',_binary 'Ô¸\ri.*¥¼',_binary 'œ\0\0',1,'user20','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','SF','5.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',608,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(245,1,_binary 'eqB\0\í:´','2012-01-09 05:22:33',_binary 'Ô¸\ri.*¥¼',_binary 'œ\0\0',1,'user20','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','SF','5.0',1,'','generic desktop',0,'LIN','',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',610,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(246,1,_binary '3𞊯D','2012-01-09 01:22:33',_binary 'à·—:SѰ',_binary 'œ\0\0',1,'user21','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','MF','5.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',0,'1366x768',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',611,NULL,'5',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(247,1,_binary '3𞊯D','2012-01-09 02:22:33',_binary 'à·—:SѰ',_binary 'œ\0\0',1,'user21','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','MF','5.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',612,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(248,1,_binary '3𞊯D','2012-01-09 03:22:33',_binary 'à·—:SѰ',_binary 'œ\0\0',1,'user21','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','MF','5.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',613,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(249,1,_binary '3𞊯D','2012-01-09 04:22:33',_binary 'à·—:SѰ',_binary 'œ\0\0',1,'user21','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','MF','5.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',614,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(250,1,_binary '3𞊯D','2012-01-09 05:22:33',_binary 'à·—:SѰ',_binary 'œ\0\0',1,'user21','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','MF','5.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1366x768',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',615,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(251,1,_binary '\í.<’\Ê\÷·','2012-01-09 01:22:33',_binary '¶M¿D½¬ø\é',_binary 'œ\0\0',1,'user22','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',0,'1280x1024',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',617,NULL,'10',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(252,1,_binary '\í.<’\Ê\÷·','2012-01-09 02:22:33',_binary '¶M¿D½¬ø\é',_binary 'œ\0\0',1,'user22','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',619,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(253,1,_binary '\í.<’\Ê\÷·','2012-01-09 03:22:33',_binary '¶M¿D½¬ø\é',_binary 'œ\0\0',1,'user22','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',621,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(254,1,_binary '\í.<’\Ê\÷·','2012-01-09 04:22:33',_binary '¶M¿D½¬ø\é',_binary 'œ\0\0',1,'user22','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',623,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(255,1,_binary '\í.<’\Ê\÷·','2012-01-09 05:22:33',_binary '¶M¿D½¬ø\é',_binary 'œ\0\0',1,'user22','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'AP','iPad',2,'IOS','6.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Melbourne','au',NULL,NULL,'VIC',625,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(256,1,_binary '{\Ð\å\Ä袠','2012-01-09 01:22:33',_binary 't>\Ðn–w',_binary 'œ\0\0',1,'user23','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',0,'1280x1024',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',626,NULL,'15',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(257,1,_binary '{\Ð\å\Ä袠','2012-01-09 02:22:33',_binary 't>\Ðn–w',_binary 'œ\0\0',1,'user23','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',627,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(258,1,_binary '{\Ð\å\Ä袠','2012-01-09 03:22:33',_binary 't>\Ðn–w',_binary 'œ\0\0',1,'user23','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',628,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(259,1,_binary '{\Ð\å\Ä袠','2012-01-09 04:22:33',_binary 't>\Ðn–w',_binary 'œ\0\0',1,'user23','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',629,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(260,1,_binary '{\Ð\å\Ä袠','2012-01-09 05:22:33',_binary 't>\Ðn–w',_binary 'œ\0\0',1,'user23','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','Gecko','FF','14.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',630,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(261,1,_binary 'rzbRG’\ï','2012-01-09 01:22:33',_binary 'Z\È\ç\éUe\ñ',_binary 'œ\0\0',1,'user24','2012-01-09 01:22:33',0,0,0,0,NULL,1,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','CH','22.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',0,'1280x1024',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',632,NULL,'20',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(262,1,_binary 'rzbRG’\ï','2012-01-09 02:22:33',_binary 'Z\È\ç\éUe\ñ',_binary 'œ\0\0',1,'user24','2012-01-09 02:22:33',0,0,1,3600,NULL,2,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','CH','22.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',634,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(263,1,_binary 'rzbRG’\ï','2012-01-09 03:22:33',_binary 'Z\È\ç\éUe\ñ',_binary 'œ\0\0',1,'user24','2012-01-09 03:22:33',0,0,1,7200,NULL,3,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','CH','22.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',636,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(264,1,_binary 'rzbRG’\ï','2012-01-09 04:22:33',_binary 'Z\È\ç\éUe\ñ',_binary 'œ\0\0',1,'user24','2012-01-09 04:22:33',0,0,1,10800,NULL,4,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','CH','22.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',638,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(265,1,_binary 'rzbRG’\ï','2012-01-09 05:22:33',_binary 'Z\È\ç\éUe\ñ',_binary 'œ\0\0',1,'user24','2012-01-09 05:22:33',0,0,1,14400,NULL,5,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','WebKit','CH','22.0',1,'LG','Optimus LTE 2',1,'AND','4.0',0,'12:34:06',3600,'1280x1024',1,1,1,0,0,0,0,0,1,'Toronto','ca',NULL,NULL,'ON',640,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(266,1,_binary 'IoŠÿ¸¨›','2010-01-04 01:22:33',_binary '\ð§ vݰ|',_binary '›\0\0',1,'user10000','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',641,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(267,1,_binary '£Ž\ÍM\"€ ','2010-01-04 01:22:33',_binary ']ÁŸ�«\óµ',_binary '›\0\0',1,'user10001','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Melbourne','au',NULL,NULL,'VIC',642,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(268,1,_binary 'eÞ«UŸ‡\ó;','2010-01-04 01:22:33',_binary 'Æž·y¦T\ê',_binary '›\0\0',1,'user10002','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',643,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(269,1,_binary '/\ä2µ\0}^ ','2010-01-04 01:22:33',_binary '*ø©¼ù]g',_binary '›\0\0',1,'user10003','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',644,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(270,1,_binary 'Ò‘\\p,¾\æ\'','2010-01-04 01:22:33',_binary 'n›\n8kW†\È',_binary '›\0\0',1,'user10004','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',645,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(271,1,_binary 'AFŠ­ºˆe','2010-01-04 01:22:33',_binary '¢²9Í¢\ð\ã�',_binary '›\0\0',1,'user10005','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Melbourne','au',NULL,NULL,'VIC',646,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(272,1,_binary 'r¾Duÿ ±:','2010-01-04 01:22:33',_binary 'FV\0YB\"ü:',_binary '›\0\0',1,'user10006','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',647,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(273,1,_binary '—ƒ\ôv¡\Ý','2010-01-04 01:22:33',_binary '7\öw\Ä`b ',_binary '›\0\0',1,'user10007','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',648,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(274,1,_binary '\Ø\ÛQûf‹‘@','2010-01-04 01:22:33',_binary ']j½\"aaQ5',_binary '›\0\0',1,'user10008','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',649,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(275,1,_binary '\ë„ý©7™','2010-01-04 01:22:33',_binary '›#xfÐ¥$',_binary '›\0\0',1,'user10009','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Melbourne','au',NULL,NULL,'VIC',650,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(276,1,_binary '\\\Â4p\Ö','2010-01-04 01:22:33',_binary '•+˜\Ü\ã\Æ\Ñ',_binary '›\0\0',1,'user10010','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',651,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(277,1,_binary '7\Ü\Í]¡¾','2010-01-04 01:22:33',_binary '™\'�s\Êlo\ì',_binary '›\0\0',1,'user10011','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',652,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(278,1,_binary '\ñ­(Ŧ]f…','2010-01-04 01:22:33',_binary 'o}HX\r\Ñ{³',_binary '›\0\0',1,'user10012','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',653,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(279,1,_binary 'œ–}!±\ç%�','2010-01-04 01:22:33',_binary '6mùAœ',_binary '›\0\0',1,'user10013','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Melbourne','au',NULL,NULL,'VIC',654,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(280,1,_binary '\ô Æš·\ó†','2010-01-04 01:22:33',_binary '„ù„\Ômù',_binary '›\0\0',1,'user10014','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',655,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(281,1,_binary 'KÒ¢Aû\×','2010-01-04 01:22:33',_binary '�O\ ½@',_binary '›\0\0',1,'user10015','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',656,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(282,1,_binary '\'b\å%�º”','2010-01-04 01:22:33',_binary 'Q_NCD4Œ\ç',_binary '›\0\0',1,'user10016','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',657,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(283,1,_binary '˜\÷\ás7uc','2010-01-04 01:22:33',_binary '\åkd¾°—«¿',_binary '›\0\0',1,'user10017','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Melbourne','au',NULL,NULL,'VIC',658,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(284,1,_binary '\Ûȵ9}1e\0','2010-01-04 01:22:33',_binary '½\ÍÉŒ¾�',_binary '›\0\0',1,'user10018','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',659,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(285,1,_binary 'w\ë£ÿA\Ío','2010-01-04 01:22:33',_binary '\ë\ì™\'³8`\\',_binary '›\0\0',1,'user10019','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',660,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(286,1,_binary '¹~»t\'´a\å','2010-01-04 01:22:33',_binary 'bû—H:­\Î\á',_binary '›\0\0',1,'user10020','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',661,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(287,1,_binary 'PŸ¡X}y ','2010-01-04 01:22:33',_binary ')¬�k\è‡I\Ó',_binary '›\0\0',1,'user10021','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Melbourne','au',NULL,NULL,'VIC',662,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(288,1,_binary '–\ÙS¬\õ\Ö','2010-01-04 01:22:33',_binary 'd6\㢧I',_binary '›\0\0',1,'user10022','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Yokohama','jp',NULL,NULL,'14',663,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(289,1,_binary '�\á}ú§³\Õ\'','2010-01-04 01:22:33',_binary '\n�ªº\0d‘',_binary '›\0\0',1,'user10023','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Toronto','ca',NULL,NULL,'ON',664,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(290,1,_binary '´x^+”ˆ²','2010-01-04 01:22:33',_binary '»sƒVp{ƒ',_binary '›\0\0',1,'user10024','2010-01-04 01:22:33',0,1,0,0,NULL,1,396,0,396,0,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,'Nice','fr',NULL,NULL,'PAC',665,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(291,1,_binary '�ÃŽúž\öû\Ú','2015-02-03 00:00:00',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2015-02-03 00:00:00',0,0,0,0,NULL,1,0,NULL,0,0,21,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',21,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,686,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(292,1,_binary 'û\Ú@F�\é:^','2015-03-03 06:00:00',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2015-03-03 06:00:00',0,1,0,0,NULL,1,506,507,506,507,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,687,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(293,1,_binary '\"%L\Ê`\ðü','2015-03-03 06:00:00',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2015-03-03 06:00:00',0,1,0,0,NULL,1,508,509,1904,1905,699,699,0,NULL,NULL,1,'','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2,NULL,'xx',NULL,NULL,NULL,1386,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(294,1,_binary 'Œ€2\Üo\çy','2015-03-04 06:00:00',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2015-03-04 06:00:00',0,1,0,0,NULL,1,506,507,2504,2505,1000,1000,0,NULL,NULL,1,'','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2,NULL,'xx',NULL,NULL,NULL,2386,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(295,1,_binary 'ù5pšê›¶–','2012-01-10 15:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-10 15:22:33',0,1,0,0,NULL,1,2506,2507,2506,2509,3,3,0,NULL,'www.referrer1.com',3,'http://www.referrer1.com/sub/dir/page1.html','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2,NULL,'fr',NULL,NULL,NULL,2389,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(296,1,_binary '\Ö$%\Î\êº/P','2012-01-10 16:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-10 16:22:33',0,1,0,0,NULL,1,2506,2507,2506,2509,3,3,0,NULL,'www.referrer1.com',3,'http://www.referrer1.com/sub/dir/page2.html','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2,NULL,'fr',NULL,NULL,NULL,2392,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(297,1,_binary 'E‚�³lg\Ð','2012-01-10 18:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-10 18:22:33',0,1,0,0,NULL,1,2506,2510,2506,2512,3,3,0,NULL,'www.referrer2.com',3,'http://www.referrer2.com/sub/dir/page1.html','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2,NULL,'fr',NULL,NULL,NULL,2395,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(298,1,_binary 'yeé©�LX\ð','2012-01-10 19:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-10 19:22:33',0,1,0,0,NULL,1,2506,2510,2506,2512,3,3,0,NULL,'www.referrer2.com',3,'http://www.referrer2.com/sub/dir/page2.html','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2,NULL,'fr',NULL,NULL,NULL,2398,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(299,1,_binary 'o/\å\Ï\ë}϶','2012-01-10 21:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-10 21:22:33',0,1,0,0,NULL,1,2506,2513,2506,2515,3,3,0,NULL,'www.referrer3.com',3,'http://www.referrer3.com/sub/dir/page1.html','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2,NULL,'fr',NULL,NULL,NULL,2401,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(300,1,_binary '2\"U¼\ã*\êù','2012-01-10 22:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-10 22:22:33',0,1,0,0,NULL,1,2506,2513,2506,2515,3,3,0,NULL,'www.referrer3.com',3,'http://www.referrer3.com/sub/dir/page2.html','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2,NULL,'fr',NULL,NULL,NULL,2404,NULL,NULL,NULL,NULL,NULL,'CustomVarVisit','CustomVarValue2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(301,1,_binary '\Ö‹\êÕ¬�™','2012-01-12 12:10:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-12 11:22:33',0,1,0,0,NULL,1,2535,2536,2541,2547,8,8,0,'piwik','Google',2,'http://www.google.com/search?q=piwik','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2162,NULL,'fr',NULL,NULL,NULL,2423,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(302,1,_binary 'T\ó\ñ�\á\ö¶','2012-01-13 07:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-13 07:22:33',0,0,0,0,NULL,1,2548,0,2548,0,1,1,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2424,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(303,1,_binary 'j¤ù™|•\"&','2012-01-14 11:49:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-14 11:22:33',0,1,0,0,NULL,1,28,94,101,29,7,3,0,NULL,'referrer.com',3,'http://referrer.com/page.htm?param=valuewith some spaces','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1622,NULL,'fr',NULL,NULL,NULL,2431,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(304,1,_binary 'j¤ù™|•\"&','2012-01-14 12:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-14 12:22:33',0,1,1,3600,NULL,2,102,103,102,103,1,1,0,'purchase','Yahoo!',2,'http://search.yahoo.com/search?p=purchase','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2432,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(305,1,_binary '¨\ë„\ÜPŒ€','2012-01-15 00:30:00',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-15 00:06:00',0,1,0,0,NULL,1,2549,2550,2555,2556,5,4,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1441,NULL,'fr',NULL,NULL,NULL,2437,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(306,1,_binary '\ök\Ã\ò \Zy','2012-01-15 01:54:00',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-15 01:36:00',0,1,1,1001427,NULL,2,2549,2550,2555,2556,4,3,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',1001427,'1024x768',1,1,1,0,0,0,0,0,1081,NULL,'fr',NULL,NULL,NULL,2441,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(307,1,_binary '¡;|Zb\÷-\ê','2012-01-15 03:06:00',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-15 03:00:00',0,1,1,1006647,NULL,2,2549,2550,2563,2564,2,2,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',1006647,'1024x768',1,1,1,0,0,0,0,0,362,NULL,'fr',NULL,NULL,NULL,2443,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(308,1,_binary '9\÷.9a\á‹N','2012-01-15 04:48:00',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-15 04:12:00',0,1,0,0,NULL,1,2549,2550,2555,2556,7,5,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',2,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2161,NULL,'fr',NULL,NULL,NULL,2450,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(309,1,_binary '_7V®‹Lκ','2012-01-16 06:42:00',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-16 05:54:00',0,1,0,0,NULL,1,2549,2550,2555,2556,9,7,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',2,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2881,NULL,'fr',NULL,NULL,NULL,2459,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(310,1,_binary '(†BzW\çº','2012-01-16 07:54:00',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-16 07:48:00',0,1,0,0,NULL,1,2549,2550,2549,2550,2,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,361,NULL,'jp',NULL,NULL,NULL,2461,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(311,1,_binary '5 ÀŠÁ[¸','2012-01-17 09:18:00',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 09:00:00',0,1,0,0,NULL,1,2549,2550,2561,2562,4,3,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1081,NULL,'us',NULL,NULL,NULL,2465,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(312,1,_binary '\õŒûœ\å\Ë','2012-01-16 00:48:18',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-16 00:29:42',0,1,0,0,NULL,1,2570,29,2570,29,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1120,NULL,'fr',NULL,NULL,NULL,2466,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(313,1,_binary '\õŒûœ\å\Ë','2012-01-16 00:53:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-16 00:53:42',0,1,1,1440,NULL,2,2571,29,2571,29,4,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',3,'12:34:06',1440,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2470,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(314,1,_binary '»\ò¥2N','2012-01-17 00:29:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 00:11:42',0,1,0,0,NULL,1,28,29,28,29,1,1,0,'piwik kwd','ga campaign',6,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1084,NULL,'fr',NULL,NULL,NULL,2471,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(315,1,_binary '–ý\Ú\ÊÚ�\É','2012-01-17 01:29:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 01:29:42',0,1,0,0,NULL,1,0,NULL,0,0,0,0,0,'example.org','credited to goal please',6,'http://example.org/referrer','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(316,1,_binary '–ý\Ú\ÊÚ�\É','2012-01-17 01:35:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 01:35:42',0,1,1,360,NULL,2,0,NULL,0,0,0,0,0,'example.org','credited to another goal',6,'http://example.org/referrer','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',360,'1024x768',1,1,1,0,0,0,0,0,3,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(317,1,_binary '•I\â„™\í','2012-01-17 03:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 03:11:42',0,1,0,0,NULL,1,2578,2579,2578,2579,1,1,0,'whatever','ga campaign',6,'http://bing.com/search?q=whatever','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2472,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(318,1,_binary '•I\â„™\í','2012-01-17 04:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 04:11:42',0,1,1,3600,NULL,2,106,2579,106,2579,1,1,0,'thing1.com','ga campaign',6,'http://thing1.com/a/b/c.html?a=b&d=c','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2473,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(319,1,_binary '•I\â„™\í','2012-01-17 05:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 05:11:42',0,1,1,7200,NULL,3,106,2579,106,2579,1,1,0,'(adwords) www.adwords-publisher-website.org','adwords campaign',6,'http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-12345&output=html&h=280&slotname=123&w=336&lmt=1359388321&202&url=http%3A%2F%2Fwww.adwords-publisher-website.org%2F&dt=123&bpp=13&shv=r22&jsv=1565606614&correlator=ss&ga_vid=aaa&ga_sid=1359435122&ga_hid=1801871121&ga_fc=0&u_tz=780&u_his=4&u_java=1&u_h=900&u_w=1600&u_ah=876&u_aw=1551&u_cd=24&u_nplug=4&u_nmime=5&dff=georgia&dfs=16&adx=33&ady=201&biw=1551&bih=792&oid=3&fu=0&ifi=1&dtd=608&p=http%3A//www.adwords-publisher-website.com','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2474,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(320,1,_binary '•I\â„™\í','2012-01-17 06:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 06:11:42',0,1,1,10800,NULL,4,106,2579,106,2579,1,1,0,'nintendo consoles second hand','adwords campaign',6,'http://www.google.co.nz/aclk?ai=uYmFyiZgAf0oO0J&num=3&sig=EpOCR4xQ&adurl=http://pixel.everesttech.net/3163/cq%3Fev_sid%3D3%26ev_cmpid%3D33%26ev_ln%3Dused%2520wii%2520consoles%26ev_crx%528386%26ev_mt%3Db%26ev_n%3Dg%26ev_ltx%3D%26ev_pl%3D%26ev_pos%3D1s2%26url%3Dhttp%253A//au.shopping.com/used%2520wii%2520consoles/products%253Flinkin_id%253D8077872&rct=j&q=nintendo+consoles+second+hand','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2475,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(321,1,_binary '•I\â„™\í','2012-01-17 07:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 07:11:42',0,1,1,14400,NULL,5,2580,2579,2580,2579,1,1,0,'(adwords) example.com','adwords (text_image)',6,'http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-x&output=html&h=15&slotname=2973049897&adk=3777420323&w=728&lmt=1381755030&flash=11.9.900.117&url=http%3A%2F%2Fexample.com%2F&dt=1381755030169&bpp=8&bdt=2592&shv=r20131008&cbv=r20130906&saldr=sa&correlator=1381755030200&frm=20&ga_vid=1659309719.1381755030&ga_sid=1381755030&ga_hid=1569070879&ga_fc=0&u_tz=660&u_his=3&u_java=1&u_h=768&u_w=1366&u_ah=728&u_aw=1366&u_cd=24&u_nplug=0&u_nmime=0&dff=times%20new%20roman&dfs=13&adx=311&ady=107&biw=1349&bih=673&oid=2&ref=http%3A%2F%2Fwww.google.com.au%2Furl%3Fsa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26frm%3D1%26source%3Dweb%26cd%3D10%26ved%3D0CGcQFjAJ%26url%3Dhttp%253A%252F%252Fexample.com%252F%26ei%3DXNtbUvrJPKXOiAfw1IH4Bw%26usg%3DAFQjCNE66zRf2zaUw8FKf0JWxiM1FiXHVg&vis=1&fu=0&ifi=1&pfi=32&dtd=122&xpc=tBekiCZTWM&p=http%3A//example.com&rl_rc=true&adsense_enabled=true&ad_type=text_image&oe=utf8&height=15&width=728&format=fp_al_lp&kw_type=radlink&prev_fmts=728x15_0ads_al&rt=ChBSW-iYAADltAqmmOfZAA2SEg1BbmltYXRlZCBUZXh0Ggj','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2476,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(322,1,_binary '•I\â„™\í','2012-01-17 08:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 08:11:42',0,1,1,18000,NULL,6,2581,2579,2581,2579,1,1,0,'(adwords) www.example.com','adwords (text)',6,'http://googleads.g.doubleclick.net/pagead/ads?lient=ca-pub-x&output=html&h=15&slotname=4299800108&adk=2258396486&w=728&lmt=1381746604&flash=11.9.900.117&url=http%3A%2F%2Fwww.example.com%2Fphotofilters%2F%26section_id%3D%26p%3D4&dt=1381746604865&bpp=5&bdt=83&shv=r20131008&cbv=r20130906&saldr=sa&correlator=1381746604888&frm=20&ga_vid=1273315809.1372079408&ga_sid=1381744659&ga_hid=2064025848&ga_fc=1&u_tz=120&u_his=17&u_java=1&u_h=864&u_w=1536&u_ah=826&u_aw=1536&u_cd=24&u_nplug=0&u_nmime=0&dff=times%20new%20roman&dfs=12&adx=404&ady=159&biw=1536&bih=770&oid=3&ref=http%3A%2F%2Fwww.example.com%2Fphotofilters%2F%26section_id%3D%26p%3D3&vis=0&fu=0&ifi=1&pfi=0&dtd=51&xpc=Pn2WpF35Mu&p=http%3A//www.example.com&rl_rc=false&adsense_enabled=true&ad_type=text&ui=rc:0&oe=utf8&height=15&width=728&format=fpkc_al_lp&kw_type=radlink&prev_fmts=728x15_0ads_al&rt=ChBSW8euAAeWTgrCYs_kAEUQEhBQaG90byBCYWNrZ3JvdW5kGgjieib00mVdpSgBUhMIy7OEnY-WugIVoZDCCh0qUgC-&hl=en&kw0=Photo+Shop+Image&kw1=Photo+Background&kw2=Photo+to+Painting&kw3=Photo','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2477,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(323,1,_binary '•I\â„™\í','2012-01-17 10:17:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 10:11:42',0,1,1,25200,NULL,7,2582,2579,2583,2579,2,2,0,'piwik kwd','ga campaign',6,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,362,NULL,'fr',NULL,NULL,NULL,2479,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(324,1,_binary '•I\â„™\í','2012-01-17 10:23:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 10:23:42',0,1,1,25920,NULL,8,2584,2579,2584,2579,1,1,0,NULL,'myreferrerwebsite.com',3,'http://myreferrerwebsite.com','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',720,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2480,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(325,1,_binary '•I\â„™\í','2012-01-17 11:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 11:11:42',0,1,1,28800,NULL,9,2585,2579,2585,2579,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',2880,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2481,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(326,1,_binary '•I\â„™\í','2012-01-17 11:23:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 11:17:42',0,1,1,29160,NULL,10,2586,2579,2587,2579,2,2,0,NULL,'myotherreferrerwebsite.com',3,'http://myotherreferrerwebsite.com','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',360,'1024x768',1,1,1,0,0,0,0,0,362,NULL,'fr',NULL,NULL,NULL,2483,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(327,1,_binary '•I\â„™\í','2012-01-17 11:29:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 11:29:42',0,1,1,29880,NULL,11,2588,2579,2588,2579,1,1,0,NULL,'mutantregistration.com',3,'http://mutantregistration.com','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',720,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2484,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(328,1,_binary '»\ò¥2N','2012-01-17 00:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 00:11:42',0,1,1,0,NULL,2,2589,2590,2589,2590,1,1,0,NULL,'xavierinstitute.org',3,'http://xavierinstitute.org','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2485,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(329,1,_binary '»\ò¥2N','2012-01-17 00:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 00:11:42',1,1,2,0,0,2,0,NULL,0,0,0,0,0,NULL,'xavierinstitute.org',3,'http://xavierinstitute.org','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(330,1,_binary '–ý\Ú\ÊÚ�\É','2012-01-17 01:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 01:11:42',0,1,1,NULL,NULL,3,2591,2592,2591,2592,1,1,0,NULL,'mutantrights.org',3,'http://mutantrights.org','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',NULL,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2486,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(331,1,_binary '–ý\Ú\ÊÚ�\É','2012-01-17 01:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 01:11:42',1,1,2,NULL,0,3,0,NULL,0,0,0,0,0,NULL,'mutantrights.org',3,'http://mutantrights.org','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',NULL,'1024x768',1,1,1,0,0,0,0,0,2,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(332,1,_binary '!\ðª}‹hG³','2012-01-17 02:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-17 02:11:42',1,1,0,0,0,1,2589,2593,2589,2593,1,1,0,NULL,'apocalypsenow.org',3,'http://apocalypsenow.org','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,3,NULL,'fr',NULL,NULL,NULL,2487,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(333,1,_binary ',\Å\Þj>0','2012-01-18 12:34:33',_binary '\ÏPYNu=•=',_binary 'œ\0\0',1,NULL,'2012-01-18 11:22:33',0,1,0,0,NULL,1,2594,2595,2603,2604,16,16,0,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'http://www.google.com.vn/url?rct=j&q=%3C%3E%26%5C%22the%20pdo%20extension%20is%20required%20for%20this%20adapter%20but%20the%20extension%20is%20not%20loaded&source=web&cd=4&url=http%3A%2F%2Fforum.piwik.org%2Fread.php%3F2%2C1011&cad=rja','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,4322,NULL,'fr',NULL,NULL,NULL,2503,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(334,1,_binary '\Ñ\×ÚŽ\Ä\à\çd','2012-01-18 11:40:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-01-18 11:22:33',0,1,0,0,NULL,1,2596,2597,2600,2601,4,4,0,NULL,'www.external.com.vn',3,'http://www.external.com.vn/referrerPage-notCounted.html','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1082,NULL,'xx',NULL,NULL,NULL,2507,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(335,1,_binary 'O—Ü¢HÁ…‡','2012-01-18 11:40:33',_binary '\ï*5\ìI',_binary 'œ\0\0',1,NULL,'2012-01-18 11:28:33',0,1,0,0,NULL,1,2594,2595,2594,2595,3,3,0,NULL,'www.external.com.vn',3,'http://www.external.com.vn/referrerPage-counted.html','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,722,NULL,'xx',NULL,NULL,NULL,2510,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(336,1,_binary ';\ã\×f\Æ\î\rƒ','2012-01-18 11:22:33',_binary '\è\í\Ù.%i¦µ',_binary 'œ\0\0',1,NULL,'2012-01-18 11:22:33',0,1,0,0,NULL,1,2605,2595,2605,2595,1,1,0,'testkeyword','testcampaign',6,'','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,2511,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(337,1,_binary '9Š\Æ1=\"¯¾','2012-01-18 11:22:33',_binary '¹\î+\Z:!¦',_binary 'œ\0\0',1,NULL,'2012-01-18 11:22:33',0,1,0,0,NULL,1,2594,2595,2594,2595,1,1,0,NULL,NULL,1,'','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,2512,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(338,1,_binary '\á\îù[8Š\ñ\á','2012-01-18 11:58:33',_binary '¦£#.\ð…\'\É',_binary 'œ\0\0',1,NULL,'2012-01-18 11:22:33',0,1,0,0,NULL,1,2606,0,2594,2595,12,7,2,NULL,NULL,1,'','','','UNK','',NULL,'','',NULL,'UNK','UNK',1,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,2161,NULL,'xx',NULL,NULL,NULL,2524,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(339,1,_binary '“¬? ¼\ákp','2012-01-26 11:43:33',_binary '\ñ‘_XHf\×\Ò',_binary 'œ\0\0',1,NULL,'2012-01-26 11:22:33',0,1,0,0,NULL,1,2616,0,2607,NULL,8,5,2,NULL,NULL,1,'','','','UNK','',NULL,'','',NULL,'UNK','UNK',1,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1261,NULL,'xx',NULL,NULL,NULL,2532,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(340,1,_binary 'b¿8\àe\"�œ','2012-01-18 11:22:33',_binary 'pI\ꪫZ\Ð',_binary 'œ\0\0',1,NULL,'2012-01-18 11:22:33',0,1,0,0,NULL,1,2594,2595,2594,2595,1,1,0,NULL,'Google',2,'http://www.google.com.vn/url?rct=j&q=','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,2533,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(341,1,_binary 'JN[ýŠ','2012-01-19 01:22:45',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-19 01:22:33',0,1,0,0,NULL,1,2619,2620,2619,2626,13,13,0,'hello world','Bing',2,'http://bing.com/search?q=Hello world','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,14,NULL,'fr',NULL,NULL,NULL,2546,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(342,1,_binary 'JN[ýŠ','2012-01-19 02:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-19 02:22:33',0,1,1,3600,NULL,2,28,2626,28,2626,1,1,0,'salut','Google',2,'http://www.google.com.vn/url?q=Salut','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2547,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(343,1,_binary 'JN[ýŠ','2012-01-19 03:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-19 03:22:33',0,1,1,7200,NULL,3,28,2626,28,2626,1,1,0,'kia ora','Google',2,'http://www.google.com.vn/url?q=Kia Ora','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2548,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(344,1,_binary 'JN[ýŠ','2012-01-19 04:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-19 04:22:33',0,1,1,10800,NULL,4,28,2626,28,2626,1,1,0,'kia ora','Google',2,'http://www.google.com.vn/url?q=Kia Ora','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2549,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(345,1,_binary 'JN[ýŠ','2012-01-19 05:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-19 05:22:33',0,1,1,14400,NULL,5,28,2626,28,2626,1,1,0,'kia ora','Yahoo!',2,'http://nz.search.yahoo.com/search?p=Kia Ora','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2550,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(346,1,_binary 'JN[ýŠ','2012-01-19 06:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-19 06:22:33',0,1,1,18000,NULL,6,28,2626,28,2626,1,1,0,'kia ora','Yahoo! Images',2,'http://images.search.yahoo.com/search/images?_ylt=A2KcWcNKJzF&p=Kia%20Ora%20','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2551,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(347,1,_binary 'JN[ýŠ','2012-01-19 07:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-19 07:22:33',0,1,1,21600,NULL,7,28,2626,28,2626,1,1,0,'kia ora','Bing Images',2,'http://nz.bing.com/images/search?q=+++Kia+ora+++','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2552,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(348,1,_binary '\ñX\Ìyœc','2012-01-20 11:52:34',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-20 11:40:33',0,1,0,0,NULL,1,2627,2628,2629,2634,5,5,0,NULL,'anothersite.com',3,'http://anothersite.com/whatever.html?whatever=Ato%FC','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,723,NULL,'fr',NULL,NULL,NULL,2557,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(349,1,_binary '�°\õR\Óq΢','2012-01-20 12:22:38',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-20 12:22:38',0,1,0,0,NULL,1,2627,2635,2627,2635,1,1,0,NULL,'anothersite.com',3,'http://anothersite.com/whatever.html','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2558,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(350,1,_binary '\Ö/B\\ȹp^','2012-01-21 00:29:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-21 00:11:42',0,1,0,0,NULL,1,0,29,0,29,1,1,0,'','',1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1086,NULL,'fr',NULL,NULL,NULL,2559,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(351,1,_binary '\0r#�‚èr','2012-01-22 11:46:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-22 11:34:33',0,1,0,0,NULL,1,2627,2636,2649,NULL,11,10,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,721,NULL,'fr',NULL,NULL,NULL,2570,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(352,1,_binary '+¥šøŠ{','2012-01-23 11:52:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-23 11:47:09',0,1,1,87156,NULL,2,2650,0,2664,2665,6,5,3,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',87156,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2587,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(353,1,_binary 'Ÿ\ÌÛ’()µ','2012-01-22 13:40:33',_binary '4¤\÷\Õ\nØ ',_binary 'œB\0\0',1,NULL,'2012-01-22 13:38:09',0,1,0,0,NULL,1,2644,29,2627,2654,3,3,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1600x1000',1,1,1,0,0,0,0,0,146,NULL,'fr',NULL,NULL,NULL,2578,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(354,2,_binary 'fQr\Õ\äÅ€','2012-01-22 11:52:33',_binary 'ÕŠH:<þø{',_binary 'œ\0\0',1,NULL,'2012-01-22 11:34:33',0,0,0,0,NULL,1,2655,2656,2652,NULL,5,5,3,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'801x301',1,1,1,0,0,0,0,0,1081,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(355,3,_binary '\â[\î\òFu\Ç4','2012-01-22 11:43:33',_binary '\Ö`’\è\å\Év',_binary 'œ\0\0',1,NULL,'2012-01-22 11:34:33',0,0,0,0,NULL,1,2655,2656,2662,2663,3,3,1,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1801x1301',1,1,1,0,0,0,0,0,541,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'test cvar name','test cvar value',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(356,3,_binary '+¥šøŠ{','2012-01-23 12:22:33',_binary '\Ö`’\è\å\Év',_binary 'œ\0\0',1,NULL,'2012-01-23 12:22:33',0,0,0,0,NULL,1,2664,2666,2664,2666,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(357,1,_binary 'Ö¤\n�¶\ð(6','2012-01-23 13:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-23 13:22:33',0,1,0,0,NULL,1,510,2667,510,2667,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2589,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(358,2,_binary 'a_\Ät§¤^','2012-01-23 14:22:33',_binary 'ÕŠH:<þø{',_binary 'œ\0\0',1,NULL,'2012-01-23 14:22:33',0,0,0,0,NULL,1,510,2668,510,2668,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(359,3,_binary 'a_\Ät§¤^','2012-01-23 15:22:33',_binary '\Ö`’\è\å\Év',_binary 'œ\0\0',1,NULL,'2012-01-23 15:22:33',0,0,0,0,NULL,1,2664,2666,2664,2666,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(360,1,_binary '”û\Ê>Œg\Ö','2012-01-24 12:22:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-24 11:22:33',0,1,0,0,NULL,1,2669,2670,2681,2682,18,2,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',16,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,3601,NULL,'fr',NULL,NULL,NULL,2609,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(361,1,_binary '”û\Ê>Œg\Ö','2012-01-24 13:52:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-24 13:52:33',0,0,1,9000,NULL,2,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',9000,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2610,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(362,1,_binary '”û\Ê>Œg\Ö','2012-01-24 16:02:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-24 15:04:33',0,0,1,13320,NULL,3,0,NULL,0,0,6,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',6,'12:34:06',4320,'1024x768',1,1,1,0,0,0,0,0,3481,NULL,'fr',NULL,NULL,NULL,2616,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(363,1,_binary '”û\Ê>Œg\Ö','2012-01-24 17:14:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-24 17:14:33',0,0,1,21120,NULL,4,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',7800,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2617,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(364,1,_binary '”û\Ê>Œg\Ö','2012-01-24 18:55:33',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-24 18:55:33',0,0,1,27180,NULL,5,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',6060,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2618,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(365,1,_binary '`-\Ô1Ü® +','2012-01-24 12:52:33',_binary '\Ûv:¯\Ì\Ð9',_binary 'o\0\0',1,NULL,'2012-01-24 11:53:33',0,1,0,0,NULL,1,0,2682,2681,2682,14,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',13,'12:34:06',0,'1024x768',1,0,0,0,0,0,0,0,3541,NULL,'fr',NULL,NULL,NULL,2632,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(366,1,_binary '`-\Ô1Ü® +','2012-01-24 14:22:33',_binary '\Ûv:¯\Ì\Ð9',_binary 'o\0\0',1,NULL,'2012-01-24 14:22:33',0,0,1,8940,NULL,2,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',8940,'1024x768',1,0,0,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2633,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(367,1,_binary '`-\Ô1Ü® +','2012-01-24 16:32:33',_binary '\Ûv:¯\Ì\Ð9',_binary 'o\0\0',1,NULL,'2012-01-24 15:34:33',0,0,1,13260,NULL,3,0,NULL,0,0,6,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',6,'12:34:06',4320,'1024x768',1,0,0,0,0,0,0,0,3481,NULL,'fr',NULL,NULL,NULL,2639,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(368,1,_binary '`-\Ô1Ü® +','2012-01-24 17:44:33',_binary '\Ûv:¯\Ì\Ð9',_binary 'o\0\0',1,NULL,'2012-01-24 17:44:33',0,0,1,21060,NULL,4,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',7800,'1024x768',1,0,0,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2640,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(369,1,_binary '`-\Ô1Ü® +','2012-01-24 19:25:33',_binary '\Ûv:¯\Ì\Ð9',_binary 'o\0\0',1,NULL,'2012-01-24 19:25:33',0,0,1,27120,NULL,5,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',6060,'1024x768',1,0,0,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2641,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(370,1,_binary '†\Ø\àiAJN','2012-01-25 12:52:33',_binary '\æCBcLG',_binary 'o\0\0',1,NULL,'2012-01-25 11:53:33',0,1,0,0,NULL,1,0,2682,2681,2682,14,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',13,'12:34:06',0,'1024x768',1,0,0,0,0,0,0,0,3541,NULL,'fr',NULL,NULL,NULL,2655,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(371,1,_binary '†\Ø\àiAJN','2012-01-25 14:22:33',_binary '\æCBcLG',_binary 'o\0\0',1,NULL,'2012-01-25 14:22:33',0,0,1,8940,NULL,2,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',8940,'1024x768',1,0,0,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2656,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(372,1,_binary '†\Ø\àiAJN','2012-01-25 16:32:33',_binary '\æCBcLG',_binary 'o\0\0',1,NULL,'2012-01-25 15:34:33',0,0,1,13260,NULL,3,0,NULL,0,0,6,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',6,'12:34:06',4320,'1024x768',1,0,0,0,0,0,0,0,3481,NULL,'fr',NULL,NULL,NULL,2662,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(373,1,_binary '†\Ø\àiAJN','2012-01-25 17:44:33',_binary '\æCBcLG',_binary 'o\0\0',1,NULL,'2012-01-25 17:44:33',0,0,1,21060,NULL,4,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',7800,'1024x768',1,0,0,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2663,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(374,1,_binary '†\Ø\àiAJN','2012-01-25 19:25:33',_binary '\æCBcLG',_binary 'o\0\0',1,NULL,'2012-01-25 19:25:33',0,0,1,27120,NULL,5,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',1,'12:34:06',6060,'1024x768',1,0,0,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2664,NULL,NULL,NULL,NULL,NULL,'Visit Scope Custom var','should not appear in events report Bis',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(375,1,_binary '·^\ò$f','2012-01-25 00:23:43',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-25 00:11:42',0,1,0,0,NULL,1,28,29,2700,29,4,4,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,723,NULL,'fr',NULL,NULL,NULL,2668,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ValueIsZero','0','VisitorType','NewLoggedOut'),(376,1,_binary '·^\ò$f','2012-01-25 02:53:42',_binary '\Ç\ê½´^h³',_binary 'œ\0\0',1,NULL,'2012-01-25 01:47:42',3,1,1,5760,0,2,37,29,2719,29,6,6,0,NULL,NULL,1,'','pl','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',5760,'1024x768',1,1,1,0,0,0,0,0,3961,NULL,'pl',NULL,NULL,NULL,2674,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(377,1,_binary '·^\ò$f','2012-01-25 07:53:42',_binary '\Ç\ê½´^h³',_binary 'œ\0\0',1,NULL,'2012-01-25 07:41:42',2,1,1,27000,21240,3,2719,29,2719,29,3,3,0,NULL,NULL,1,'','pl','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',21240,'1024x768',1,1,1,0,0,0,0,0,721,NULL,'pl',NULL,NULL,NULL,2677,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(378,1,_binary '·^\ò$f','2012-01-26 02:53:42',_binary '\Ç\ê½´^h³',_binary 'œ\0\0',1,NULL,'2012-01-26 02:35:42',3,1,2,95040,0,4,0,29,2719,29,3,3,0,NULL,NULL,1,'','pl','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',68040,'1024x768',1,1,1,0,0,0,0,0,1081,NULL,'pl',NULL,NULL,NULL,2680,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(379,1,_binary '·^\ò$f','2012-01-26 06:59:42',_binary '\Ç\ê½´^h³',_binary 'œ\0\0',1,NULL,'2012-01-26 06:53:42',1,1,2,110520,0,5,0,NULL,0,0,0,0,0,NULL,NULL,1,'','pl','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',15480,'1024x768',1,1,1,0,0,0,0,0,363,NULL,'pl',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'VisitorName','Great name!','ValueIsZero','0','VisitorType','NewLoggedOut'),(380,2,_binary 'u·\Ú\'\ó¡Jš','2012-01-25 01:11:42',_binary 'ÕŠH:<þø{',_binary 'œ\0\0',1,NULL,'2012-01-25 01:11:42',0,0,0,0,NULL,1,2728,2729,2728,2729,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'cvar Name 1','cvar Value 1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(381,2,_binary '’¹+ߤ�x\ì','2012-01-26 07:05:42',_binary 'ÕŠH:<þø{',_binary 'œ\0\0',1,NULL,'2012-01-26 07:05:42',1,1,2,0,0,1,0,NULL,0,0,0,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(382,1,_binary 'i2Jµ\à¶','2012-02-01 11:28:33',_binary 'ø‚I\"e-\÷n',_binary 'œ\0\0',1,NULL,'2012-02-01 11:22:33',0,1,0,0,NULL,1,2730,2731,2730,2731,1,1,0,NULL,'www.referrer0.com',3,'http://www.referrer0.com/theReferrerPage0.html','fr','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'fr',NULL,NULL,NULL,2682,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(383,1,_binary 'i2Jµ\à¶','2012-02-01 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-01 14:22:33',0,1,1,10800,NULL,2,2732,2731,2732,2731,1,1,0,'free > proprietary','Google',2,'http://google.com/search?q=free+%3E+proprietary','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2683,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(384,1,_binary 'i2Jµ\à¶','2012-02-01 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-01 16:22:33',0,1,1,18000,NULL,3,2732,2731,2732,2731,1,1,0,'','Gemini',8,'https://gemini.google.com/app','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2684,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(385,2,_binary '^2ub6w\Å','2012-02-01 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-01 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Gemini',8,'https://gemini.google.com/app','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(386,1,_binary '¹\õ\çü‘xÁ_','2012-02-02 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-02 11:22:33',0,1,0,0,NULL,1,2734,2735,2734,2735,1,1,0,NULL,'www.referrer4.com',3,'http://www.referrer4.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2686,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(387,1,_binary '¹\õ\çü‘xÁ_','2012-02-02 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-02 14:22:33',0,1,1,10800,NULL,2,2732,2735,2732,2735,1,1,0,'justice )(&^#%$ not \'\" corruption!','Google',2,'http://google.com/search?q=justice+%29%28%26%5E%23%25%24+NOT+%27%22+corruption%21','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2687,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(388,1,_binary '¹\õ\çü‘xÁ_','2012-02-02 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-02 16:22:33',0,1,1,18000,NULL,3,2732,2735,2732,2735,1,1,0,'','Claude',8,'https://claude.ai/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2688,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(389,2,_binary '{Å�…k\Ú$','2012-02-02 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-02 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Claude',8,'https://claude.ai/','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(390,1,_binary '\í鉸À·Tj','2012-02-03 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-03 11:22:33',0,1,0,0,NULL,1,2736,2737,2736,2737,1,1,0,NULL,'www.referrer3.com',3,'http://www.referrer3.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2690,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(391,1,_binary '\í鉸À·Tj','2012-02-03 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-03 14:22:33',0,1,1,10800,NULL,2,2732,2737,2732,2737,1,1,0,'peace \",\" not war','Google',2,'http://google.com/search?q=peace+%22%2C%22+not+war','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2691,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(392,1,_binary '\í鉸À·Tj','2012-02-03 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-03 16:22:33',0,1,1,18000,NULL,3,2732,2737,2732,2737,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2692,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(393,2,_binary 'øŽ5\Î8!','2012-02-03 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-03 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(394,1,_binary '9R\0\"–>','2012-02-04 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-04 11:22:33',0,1,0,0,NULL,1,2730,2738,2730,2738,1,1,0,NULL,'www.referrer2.com',3,'http://www.referrer2.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2694,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(395,1,_binary '9R\0\"–>','2012-02-04 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-04 14:22:33',0,1,1,10800,NULL,2,2732,2738,2732,2738,1,1,0,'free > proprietary','Google',2,'http://google.com/search?q=free+%3E+proprietary','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2695,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(396,1,_binary '9R\0\"–>','2012-02-04 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-04 16:22:33',0,1,1,18000,NULL,3,2732,2738,2732,2738,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/search?q=matomo','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2696,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(397,2,_binary '\ÈzÒŒM\óú','2012-02-04 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-04 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/search?q=matomo','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(398,1,_binary '¦\Í\Û|\ñž`›','2012-02-05 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-05 11:22:33',0,1,0,0,NULL,1,2734,2731,2734,2731,1,1,0,NULL,'www.referrer1.com',3,'http://www.referrer1.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2698,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(399,1,_binary '¦\Í\Û|\ñž`›','2012-02-05 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-05 14:22:33',0,1,1,10800,NULL,2,2732,2731,2732,2731,1,1,0,'justice )(&^#%$ not \'\" corruption!','Google',2,'http://google.com/search?q=justice+%29%28%26%5E%23%25%24+NOT+%27%22+corruption%21','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2699,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(400,1,_binary '¦\Í\Û|\ñž`›','2012-02-05 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-05 16:22:33',0,1,1,18000,NULL,3,2732,2731,2732,2731,1,1,0,'','ChatGPT',8,'https://matomo.chat.openai.com/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2700,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(401,2,_binary '½ n|�\Ãi','2012-02-05 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-05 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','ChatGPT',8,'https://matomo.chat.openai.com/','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(402,1,_binary '¤\Ú:»ùR','2012-02-06 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-06 11:22:33',0,1,0,0,NULL,1,2736,2735,2736,2735,1,1,0,NULL,'www.referrer0.com',3,'http://www.referrer0.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2702,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(403,1,_binary '¤\Ú:»ùR','2012-02-06 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-06 14:22:33',0,1,1,10800,NULL,2,2732,2735,2732,2735,1,1,0,'peace \",\" not war','Google',2,'http://google.com/search?q=peace+%22%2C%22+not+war','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2703,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(404,1,_binary '¤\Ú:»ùR','2012-02-06 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-06 16:22:33',0,1,1,18000,NULL,3,2732,2735,2732,2735,1,1,0,'','ChatGPT',8,'https://chat.openai.com/share/5485594657885584684','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2704,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(405,2,_binary '\ÑEZP3Aª','2012-02-06 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-06 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','ChatGPT',8,'https://chat.openai.com/share/5485594657885584684','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(406,1,_binary '¤ï¶¬žrK','2012-02-07 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-07 11:22:33',0,1,0,0,NULL,1,2730,2737,2730,2737,1,1,0,NULL,'www.referrer4.com',3,'http://www.referrer4.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2706,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(407,1,_binary '¤ï¶¬žrK','2012-02-07 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-07 14:22:33',0,1,1,10800,NULL,2,2732,2737,2732,2737,1,1,0,'free > proprietary','Google',2,'http://google.com/search?q=free+%3E+proprietary','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2707,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(408,1,_binary '¤ï¶¬žrK','2012-02-07 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-07 16:22:33',0,1,1,18000,NULL,3,2732,2737,2732,2737,1,1,0,'','ChatGPT',8,'https://chat.openai.com/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2708,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(409,2,_binary '\ê%v•m','2012-02-07 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-07 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','ChatGPT',8,'https://chat.openai.com/','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(410,1,_binary 'Vs!ù\ÏÁ','2012-02-08 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-08 11:22:33',0,1,0,0,NULL,1,2734,2738,2734,2738,1,1,0,NULL,'www.referrer3.com',3,'http://www.referrer3.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2710,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(411,1,_binary 'Vs!ù\ÏÁ','2012-02-08 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-08 14:22:33',0,1,1,10800,NULL,2,2732,2738,2732,2738,1,1,0,'justice )(&^#%$ not \'\" corruption!','Google',2,'http://google.com/search?q=justice+%29%28%26%5E%23%25%24+NOT+%27%22+corruption%21','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2711,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(412,1,_binary 'Vs!ù\ÏÁ','2012-02-08 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-08 16:22:33',0,1,1,18000,NULL,3,2732,2738,2732,2738,1,1,0,'','Le Chat',8,'https://chat.mistral.ai/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2712,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(413,2,_binary '\Z|\Ê\Ô\ÛQu0','2012-02-08 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-08 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Le Chat',8,'https://chat.mistral.ai/','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(414,1,_binary '#s9Ò­ü\r','2012-02-09 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-09 11:22:33',0,1,0,0,NULL,1,2736,2731,2736,2731,1,1,0,NULL,'www.referrer2.com',3,'http://www.referrer2.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2714,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(415,1,_binary '#s9Ò­ü\r','2012-02-09 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-09 14:22:33',0,1,1,10800,NULL,2,2732,2731,2732,2731,1,1,0,'peace \",\" not war','Google',2,'http://google.com/search?q=peace+%22%2C%22+not+war','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2715,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(416,1,_binary '#s9Ò­ü\r','2012-02-09 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-09 16:22:33',0,1,1,18000,NULL,3,2732,2731,2732,2731,1,1,0,'','Gemini',8,'https://gemini.google.com/app','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2716,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(417,2,_binary '\â¦W\âNŒø','2012-02-09 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-09 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Gemini',8,'https://gemini.google.com/app','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(418,1,_binary '»©\äm\ê%\Ç','2012-02-10 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-10 11:22:33',0,1,0,0,NULL,1,2730,2735,2730,2735,1,1,0,NULL,'www.referrer1.com',3,'http://www.referrer1.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2718,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(419,1,_binary '»©\äm\ê%\Ç','2012-02-10 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-10 14:22:33',0,1,1,10800,NULL,2,2732,2735,2732,2735,1,1,0,'free > proprietary','Google',2,'http://google.com/search?q=free+%3E+proprietary','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2719,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(420,1,_binary '»©\äm\ê%\Ç','2012-02-10 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-10 16:22:33',0,1,1,18000,NULL,3,2732,2735,2732,2735,1,1,0,'','Claude',8,'https://claude.ai/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2720,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(421,2,_binary 'šZž±/µ','2012-02-10 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-10 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Claude',8,'https://claude.ai/','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(422,1,_binary 'zˆ\ð^¹ã¯Š','2012-02-11 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-11 11:22:33',0,1,0,0,NULL,1,2734,2737,2734,2737,1,1,0,NULL,'www.referrer0.com',3,'http://www.referrer0.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2722,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(423,1,_binary 'zˆ\ð^¹ã¯Š','2012-02-11 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-11 14:22:33',0,1,1,10800,NULL,2,2732,2737,2732,2737,1,1,0,'justice )(&^#%$ not \'\" corruption!','Google',2,'http://google.com/search?q=justice+%29%28%26%5E%23%25%24+NOT+%27%22+corruption%21','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2723,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(424,1,_binary 'zˆ\ð^¹ã¯Š','2012-02-11 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-11 16:22:33',0,1,1,18000,NULL,3,2732,2737,2732,2737,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2724,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(425,2,_binary '+\î!\á£9Hf','2012-02-11 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-11 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(426,1,_binary 'ù-µ\Ô\n“µ+','2012-02-12 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-12 11:22:33',0,1,0,0,NULL,1,2736,2738,2736,2738,1,1,0,NULL,'www.referrer4.com',3,'http://www.referrer4.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2726,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(427,1,_binary 'ù-µ\Ô\n“µ+','2012-02-12 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-12 14:22:33',0,1,1,10800,NULL,2,2732,2738,2732,2738,1,1,0,'peace \",\" not war','Google',2,'http://google.com/search?q=peace+%22%2C%22+not+war','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2727,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(428,1,_binary 'ù-µ\Ô\n“µ+','2012-02-12 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-12 16:22:33',0,1,1,18000,NULL,3,2732,2738,2732,2738,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/search?q=matomo','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2728,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(429,2,_binary '«n$O\ëe½','2012-02-12 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-12 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/search?q=matomo','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(430,1,_binary '&rQ5\Ñ\íc','2012-02-13 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-13 11:22:33',0,1,0,0,NULL,1,2730,2731,2730,2731,1,1,0,NULL,'www.referrer3.com',3,'http://www.referrer3.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2730,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(431,1,_binary '&rQ5\Ñ\íc','2012-02-13 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-13 14:22:33',0,1,1,10800,NULL,2,2732,2731,2732,2731,1,1,0,'free > proprietary','Google',2,'http://google.com/search?q=free+%3E+proprietary','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2731,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(432,1,_binary '&rQ5\Ñ\íc','2012-02-13 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-13 16:22:33',0,1,1,18000,NULL,3,2732,2731,2732,2731,1,1,0,'','ChatGPT',8,'https://matomo.chat.openai.com/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2732,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(433,2,_binary '_y[¹…©\Ì\à','2012-02-13 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-13 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','ChatGPT',8,'https://matomo.chat.openai.com/','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(434,1,_binary 'œ=S°“v‘','2012-02-14 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-14 11:22:33',0,1,0,0,NULL,1,2734,2735,2734,2735,1,1,0,NULL,'www.referrer2.com',3,'http://www.referrer2.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2734,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(435,1,_binary 'œ=S°“v‘','2012-02-14 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-14 14:22:33',0,1,1,10800,NULL,2,2732,2735,2732,2735,1,1,0,'justice )(&^#%$ not \'\" corruption!','Google',2,'http://google.com/search?q=justice+%29%28%26%5E%23%25%24+NOT+%27%22+corruption%21','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2735,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(436,1,_binary 'œ=S°“v‘','2012-02-14 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-14 16:22:33',0,1,1,18000,NULL,3,2732,2735,2732,2735,1,1,0,'','ChatGPT',8,'https://chat.openai.com/share/5485594657885584684','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2736,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(437,2,_binary 'š¨Z‡x\Ël\Â','2012-02-14 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-14 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','ChatGPT',8,'https://chat.openai.com/share/5485594657885584684','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(438,1,_binary '¦\r“ɦ&a�','2012-02-15 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-15 11:22:33',0,1,0,0,NULL,1,2736,2737,2736,2737,1,1,0,NULL,'www.referrer1.com',3,'http://www.referrer1.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2738,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(439,1,_binary '¦\r“ɦ&a�','2012-02-15 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-15 14:22:33',0,1,1,10800,NULL,2,2732,2737,2732,2737,1,1,0,'peace \",\" not war','Google',2,'http://google.com/search?q=peace+%22%2C%22+not+war','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2739,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(440,1,_binary '¦\r“ɦ&a�','2012-02-15 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-15 16:22:33',0,1,1,18000,NULL,3,2732,2737,2732,2737,1,1,0,'','ChatGPT',8,'https://chat.openai.com/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2740,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(441,2,_binary ' ü\Í) s¹','2012-02-15 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-15 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','ChatGPT',8,'https://chat.openai.com/','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(442,1,_binary '\á\ÆM¯y\å\å','2012-02-16 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-16 11:22:33',0,1,0,0,NULL,1,2730,2738,2730,2738,1,1,0,NULL,'www.referrer0.com',3,'http://www.referrer0.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2742,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(443,1,_binary '\á\ÆM¯y\å\å','2012-02-16 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-16 14:22:33',0,1,1,10800,NULL,2,2732,2738,2732,2738,1,1,0,'free > proprietary','Google',2,'http://google.com/search?q=free+%3E+proprietary','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2743,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(444,1,_binary '\á\ÆM¯y\å\å','2012-02-16 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-16 16:22:33',0,1,1,18000,NULL,3,2732,2738,2732,2738,1,1,0,'','Le Chat',8,'https://chat.mistral.ai/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2744,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(445,2,_binary 'u•M¤\ÜP\0(','2012-02-16 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-16 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Le Chat',8,'https://chat.mistral.ai/','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(446,1,_binary '\ã[\\/0f¶','2012-02-17 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-17 11:22:33',0,1,0,0,NULL,1,2734,2731,2734,2731,1,1,0,NULL,'www.referrer4.com',3,'http://www.referrer4.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2746,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(447,1,_binary '\ã[\\/0f¶','2012-02-17 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-17 14:22:33',0,1,1,10800,NULL,2,2732,2731,2732,2731,1,1,0,'justice )(&^#%$ not \'\" corruption!','Google',2,'http://google.com/search?q=justice+%29%28%26%5E%23%25%24+NOT+%27%22+corruption%21','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2747,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(448,1,_binary '\ã[\\/0f¶','2012-02-17 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-17 16:22:33',0,1,1,18000,NULL,3,2732,2731,2732,2731,1,1,0,'','Gemini',8,'https://gemini.google.com/app','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2748,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(449,2,_binary '\ð„\×M\Ð\Â','2012-02-17 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-17 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Gemini',8,'https://gemini.google.com/app','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(450,1,_binary 'º?�\ÍDK\Ûx','2012-02-18 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-18 11:22:33',0,1,0,0,NULL,1,2736,2735,2736,2735,1,1,0,NULL,'www.referrer3.com',3,'http://www.referrer3.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2750,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(451,1,_binary 'º?�\ÍDK\Ûx','2012-02-18 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-18 14:22:33',0,1,1,10800,NULL,2,2732,2735,2732,2735,1,1,0,'peace \",\" not war','Google',2,'http://google.com/search?q=peace+%22%2C%22+not+war','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2751,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(452,1,_binary 'º?�\ÍDK\Ûx','2012-02-18 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-18 16:22:33',0,1,1,18000,NULL,3,2732,2735,2732,2735,1,1,0,'','Claude',8,'https://claude.ai/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2752,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(453,2,_binary 'gn\ê©1ùŠ','2012-02-18 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-18 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Claude',8,'https://claude.ai/','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(454,1,_binary '\ôV{\ÕMF)C','2012-02-19 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-19 11:22:33',0,1,0,0,NULL,1,2730,2737,2730,2737,1,1,0,NULL,'www.referrer2.com',3,'http://www.referrer2.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2754,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(455,1,_binary '\ôV{\ÕMF)C','2012-02-19 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-19 14:22:33',0,1,1,10800,NULL,2,2732,2737,2732,2737,1,1,0,'free > proprietary','Google',2,'http://google.com/search?q=free+%3E+proprietary','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2755,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(456,1,_binary '\ôV{\ÕMF)C','2012-02-19 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-19 16:22:33',0,1,1,18000,NULL,3,2732,2737,2732,2737,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2756,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(457,2,_binary 'xŒAc\àÚ‘‚','2012-02-19 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-19 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(458,1,_binary 'ùʨƒdq\ï','2012-02-20 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-20 11:22:33',0,1,0,0,NULL,1,2734,2738,2734,2738,1,1,0,NULL,'www.referrer1.com',3,'http://www.referrer1.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2758,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(459,1,_binary 'ùʨƒdq\ï','2012-02-20 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-20 14:22:33',0,1,1,10800,NULL,2,2732,2738,2732,2738,1,1,0,'justice )(&^#%$ not \'\" corruption!','Google',2,'http://google.com/search?q=justice+%29%28%26%5E%23%25%24+NOT+%27%22+corruption%21','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2759,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(460,1,_binary 'ùʨƒdq\ï','2012-02-20 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-20 16:22:33',0,1,1,18000,NULL,3,2732,2738,2732,2738,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/search?q=matomo','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2760,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(461,2,_binary 'ú\'¼\ë\n%','2012-02-20 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-20 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/search?q=matomo','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(462,1,_binary 'u:\ëÒ‰8u','2012-02-21 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-21 11:22:33',0,1,0,0,NULL,1,2736,2731,2736,2731,1,1,0,NULL,'www.referrer0.com',3,'http://www.referrer0.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2762,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(463,1,_binary 'u:\ëÒ‰8u','2012-02-21 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-21 14:22:33',0,1,1,10800,NULL,2,2732,2731,2732,2731,1,1,0,'peace \",\" not war','Google',2,'http://google.com/search?q=peace+%22%2C%22+not+war','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2763,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(464,1,_binary 'u:\ëÒ‰8u','2012-02-21 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-21 16:22:33',0,1,1,18000,NULL,3,2732,2731,2732,2731,1,1,0,'','ChatGPT',8,'https://matomo.chat.openai.com/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2764,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(465,2,_binary '\ÍLL\Ýoo¹š','2012-02-21 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-21 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','ChatGPT',8,'https://matomo.chat.openai.com/','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(466,1,_binary 'ý§’s—\Ý\Ë_','2012-02-22 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-22 11:22:33',0,1,0,0,NULL,1,2730,2735,2730,2735,1,1,0,NULL,'www.referrer4.com',3,'http://www.referrer4.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2766,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(467,1,_binary 'ý§’s—\Ý\Ë_','2012-02-22 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-22 14:22:33',0,1,1,10800,NULL,2,2732,2735,2732,2735,1,1,0,'free > proprietary','Google',2,'http://google.com/search?q=free+%3E+proprietary','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2767,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(468,1,_binary 'ý§’s—\Ý\Ë_','2012-02-22 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-22 16:22:33',0,1,1,18000,NULL,3,2732,2735,2732,2735,1,1,0,'','ChatGPT',8,'https://chat.openai.com/share/5485594657885584684','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2768,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(469,2,_binary 'Ì‘D\ÒZ\ã','2012-02-22 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-22 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','ChatGPT',8,'https://chat.openai.com/share/5485594657885584684','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(470,1,_binary '=3ŒP\ß t','2012-02-23 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-23 11:22:33',0,1,0,0,NULL,1,2734,2737,2734,2737,1,1,0,NULL,'www.referrer3.com',3,'http://www.referrer3.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2770,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(471,1,_binary '=3ŒP\ß t','2012-02-23 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-23 14:22:33',0,1,1,10800,NULL,2,2732,2737,2732,2737,1,1,0,'justice )(&^#%$ not \'\" corruption!','Google',2,'http://google.com/search?q=justice+%29%28%26%5E%23%25%24+NOT+%27%22+corruption%21','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2771,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(472,1,_binary '=3ŒP\ß t','2012-02-23 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-23 16:22:33',0,1,1,18000,NULL,3,2732,2737,2732,2737,1,1,0,'','ChatGPT',8,'https://chat.openai.com/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2772,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(473,2,_binary 'r\óø2c»£','2012-02-23 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-23 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','ChatGPT',8,'https://chat.openai.com/','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(474,1,_binary 'Œ~f5\â·R4','2012-02-24 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-24 11:22:33',0,1,0,0,NULL,1,2736,2738,2736,2738,1,1,0,NULL,'www.referrer2.com',3,'http://www.referrer2.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2774,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(475,1,_binary 'Œ~f5\â·R4','2012-02-24 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-24 14:22:33',0,1,1,10800,NULL,2,2732,2738,2732,2738,1,1,0,'peace \",\" not war','Google',2,'http://google.com/search?q=peace+%22%2C%22+not+war','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2775,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(476,1,_binary 'Œ~f5\â·R4','2012-02-24 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-24 16:22:33',0,1,1,18000,NULL,3,2732,2738,2732,2738,1,1,0,'','Le Chat',8,'https://chat.mistral.ai/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2776,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(477,2,_binary '½u\Ä\Í\íÿ','2012-02-24 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-24 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Le Chat',8,'https://chat.mistral.ai/','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(478,1,_binary '\É\УޱŒ','2012-02-25 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-25 11:22:33',0,1,0,0,NULL,1,2730,2731,2730,2731,1,1,0,NULL,'www.referrer1.com',3,'http://www.referrer1.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2778,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(479,1,_binary '\É\УޱŒ','2012-02-25 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-25 14:22:33',0,1,1,10800,NULL,2,2732,2731,2732,2731,1,1,0,'free > proprietary','Google',2,'http://google.com/search?q=free+%3E+proprietary','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2779,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(480,1,_binary '\É\УޱŒ','2012-02-25 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-25 16:22:33',0,1,1,18000,NULL,3,2732,2731,2732,2731,1,1,0,'','Gemini',8,'https://gemini.google.com/app','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2780,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(481,2,_binary 'ü¦\ÔCŽ\Z','2012-02-25 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-25 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Gemini',8,'https://gemini.google.com/app','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(482,1,_binary 'ø>K\Z\ð#\ì<','2012-02-26 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-26 11:22:33',0,1,0,0,NULL,1,2734,2735,2734,2735,1,1,0,NULL,'www.referrer0.com',3,'http://www.referrer0.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2782,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(483,1,_binary 'ø>K\Z\ð#\ì<','2012-02-26 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-26 14:22:33',0,1,1,10800,NULL,2,2732,2735,2732,2735,1,1,0,'justice )(&^#%$ not \'\" corruption!','Google',2,'http://google.com/search?q=justice+%29%28%26%5E%23%25%24+NOT+%27%22+corruption%21','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2783,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(484,1,_binary 'ø>K\Z\ð#\ì<','2012-02-26 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-26 16:22:33',0,1,1,18000,NULL,3,2732,2735,2732,2735,1,1,0,'','Claude',8,'https://claude.ai/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2784,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(485,2,_binary '‹\õMþ-Ý®','2012-02-26 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-26 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Claude',8,'https://claude.ai/','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(486,1,_binary 'M›:Ô˜1d','2012-02-27 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-27 11:22:33',0,1,0,0,NULL,1,2736,2737,2736,2737,1,1,0,NULL,'www.referrer4.com',3,'http://www.referrer4.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2786,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(487,1,_binary 'M›:Ô˜1d','2012-02-27 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-27 14:22:33',0,1,1,10800,NULL,2,2732,2737,2732,2737,1,1,0,'peace \",\" not war','Google',2,'http://google.com/search?q=peace+%22%2C%22+not+war','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2787,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(488,1,_binary 'M›:Ô˜1d','2012-02-27 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-27 16:22:33',0,1,1,18000,NULL,3,2732,2737,2732,2737,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2788,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(489,2,_binary '† \Þwºq','2012-02-27 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-27 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(490,1,_binary 'F}\á<9\Ê','2012-02-28 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-28 11:22:33',0,1,0,0,NULL,1,2730,2738,2730,2738,1,1,0,NULL,'www.referrer3.com',3,'http://www.referrer3.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2790,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(491,1,_binary 'F}\á<9\Ê','2012-02-28 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-28 14:22:33',0,1,1,10800,NULL,2,2732,2738,2732,2738,1,1,0,'free > proprietary','Google',2,'http://google.com/search?q=free+%3E+proprietary','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2791,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(492,1,_binary 'F}\á<9\Ê','2012-02-28 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-28 16:22:33',0,1,1,18000,NULL,3,2732,2738,2732,2738,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/search?q=matomo','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2792,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(493,2,_binary '9 \Ò\ó„+p|','2012-02-28 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-02-28 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','Perplexity',8,'https://www.perplexity.ai/search?q=matomo','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(494,1,_binary 'y\÷\")Vÿ6','2012-02-29 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-02-29 11:22:33',0,1,0,0,NULL,1,2734,2731,2734,2731,1,1,0,NULL,'www.referrer2.com',3,'http://www.referrer2.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2794,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(495,1,_binary 'y\÷\")Vÿ6','2012-02-29 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-29 14:22:33',0,1,1,10800,NULL,2,2732,2731,2732,2731,1,1,0,'justice )(&^#%$ not \'\" corruption!','Google',2,'http://google.com/search?q=justice+%29%28%26%5E%23%25%24+NOT+%27%22+corruption%21','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2795,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(496,1,_binary 'y\÷\")Vÿ6','2012-02-29 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-02-29 16:22:33',0,1,1,18000,NULL,3,2732,2731,2732,2731,1,1,0,'','ChatGPT',8,'https://matomo.chat.openai.com/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2796,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(497,2,_binary '­µM<\î\ä\Ó','2012-02-29 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-02-29 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','ChatGPT',8,'https://matomo.chat.openai.com/','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(498,1,_binary '\É\æž9�\Ç','2012-03-01 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-03-01 11:22:33',0,1,0,0,NULL,1,2736,2735,2736,2735,1,1,0,NULL,'www.referrer1.com',3,'http://www.referrer1.com/theReferrerPage1.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2798,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(499,1,_binary '\É\æž9�\Ç','2012-03-01 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-03-01 14:22:33',0,1,1,10800,NULL,2,2732,2735,2732,2735,1,1,0,'peace \",\" not war','Google',2,'http://google.com/search?q=peace+%22%2C%22+not+war','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2799,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(500,1,_binary '\É\æž9�\Ç','2012-03-01 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-03-01 16:22:33',0,1,1,18000,NULL,3,2732,2735,2732,2735,1,1,0,'','ChatGPT',8,'https://chat.openai.com/share/5485594657885584684','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2800,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(501,2,_binary 'ÿr)\Ú_`','2012-03-01 11:22:33',_binary 'x»Ka\äü\á',_binary 'œ\0\0',1,NULL,'2012-03-01 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','ChatGPT',8,'https://chat.openai.com/share/5485594657885584684','','Presto','OP','12.00',1,'AP','iPod Touch',9,'IOS','4.3',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(502,1,_binary ' V*[º\"\×)','2012-03-02 11:28:33',_binary 'SC‚\nƒ\õR\Ë',_binary 'œ\0\0',1,NULL,'2012-03-02 11:22:33',0,1,0,0,NULL,1,2730,2737,2730,2737,1,1,0,NULL,'www.referrer0.com',3,'http://www.referrer0.com/theReferrerPage0.html','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,365,NULL,'xx',NULL,NULL,NULL,2802,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(503,1,_binary ' V*[º\"\×)','2012-03-02 14:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-03-02 14:22:33',0,1,1,10800,NULL,2,2732,2737,2732,2737,1,1,0,'free > proprietary','Google',2,'http://google.com/search?q=free+%3E+proprietary','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',10800,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2803,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(504,1,_binary ' V*[º\"\×)','2012-03-02 16:22:33',_binary 'PA\â‚ü#þ\ñ',_binary 'œ\0\0',1,NULL,'2012-03-02 16:22:33',0,1,1,18000,NULL,3,2732,2737,2732,2737,1,1,0,'','ChatGPT',8,'https://chat.openai.com/','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2804,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(505,2,_binary '‰\êW¸)°?0','2012-03-02 11:22:33',_binary '‰\Ò.>’l\åµ',_binary 'œ\0\0',1,NULL,'2012-03-02 11:22:33',0,0,0,0,NULL,1,2733,96,2733,96,1,1,0,'','ChatGPT',8,'https://chat.openai.com/','','Gecko','FF','6.0',1,'','generic desktop',0,'WIN','7',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(506,1,_binary 'Ÿ1\î=¿y[\Í','2010-01-03 23:55:00',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2010-01-03 23:55:00',0,1,0,0,NULL,1,2739,29,2739,29,1,1,0,NULL,'referrer.com',3,'http://referrer.com/page.htm?param=valuewith some spaces','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2806,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(507,1,_binary 'Ÿ1\î=¿y[\Í','2010-01-04 00:01:00',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2010-01-04 00:01:00',0,0,1,360,NULL,2,0,0,0,0,1,1,0,NULL,'referrer.com',3,'http://referrer.com/page.htm?param=valuewith some spaces','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',360,'1024x768',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2807,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(508,1,_binary '\öm³�,\n\Ê\Þ','2012-01-27 12:22:33',_binary 'f;ü8þ{\ì\é',_binary 'd4\0\0',1,NULL,'2012-01-27 12:22:33',0,1,0,0,NULL,1,2739,2740,2739,2740,1,1,0,NULL,NULL,1,'','fr','Presto','OP','9.63',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'800x300',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2808,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(509,1,_binary '\öm³�,\n\Ê\Þ','2012-01-29 11:22:33',_binary 'ˆ\ÕU8´‚',_binary 'd4\0\0',1,NULL,'2012-01-29 11:22:33',0,1,1,169200,NULL,2,2741,29,2741,29,1,1,0,'referrer.com','goal-matching-url-parameter',6,'http://referrer.com/Other_Page.htm','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',169200,'800x300',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2809,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(510,1,_binary '\öm³�,\n\Ê\Þ','2012-01-29 11:37:33',_binary 'ˆ\ÕU8´‚',_binary 'd4\0\0',1,NULL,'2012-01-29 11:28:33',0,1,1,169560,NULL,3,2742,2743,2744,2743,4,2,0,NULL,'referrer.com',3,'http://referrer.com/Other_Page.htm','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',360,'800x300',1,1,1,0,0,0,0,0,542,NULL,'xx',NULL,NULL,NULL,2813,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(511,1,_binary '\öm³�,\n\Ê\Þ','2012-01-30 11:22:33',_binary 'ˆ\ÕU8´‚',_binary 'd4\0\0',1,NULL,'2012-01-30 11:22:33',0,1,1,255600,NULL,4,2741,29,2741,29,1,1,0,'referrer.com','goal-matching-url-parameter',6,'https://referrer.com/Other_Page.htm','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',86040,'800x300',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2814,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(512,1,_binary '\öm³�,\n\Ê\Þ','2012-01-30 11:37:33',_binary 'ˆ\ÕU8´‚',_binary 'd4\0\0',1,NULL,'2012-01-30 11:28:33',0,1,1,255960,NULL,5,2742,2743,2744,2743,4,2,0,NULL,'referrer.com',3,'https://referrer.com/Other_Page.htm','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',360,'800x300',1,1,1,0,0,0,0,0,542,NULL,'xx',NULL,NULL,NULL,2818,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(513,1,_binary '\öm³�,\n\Ê\Þ','2012-01-31 11:22:33',_binary 'ˆ\ÕU8´‚',_binary 'd4\0\0',1,NULL,'2012-01-31 11:22:33',0,1,1,342000,NULL,6,2741,29,2741,29,1,1,0,'referrer.com','goal-matching-url-parameter',6,'http://referrer.com/Other_Page.htm','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',86040,'800x300',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2819,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(514,1,_binary '\öm³�,\n\Ê\Þ','2012-01-31 11:37:33',_binary 'ˆ\ÕU8´‚',_binary 'd4\0\0',1,NULL,'2012-01-31 11:28:33',0,1,1,342360,NULL,7,2742,2743,2744,2743,4,2,0,NULL,'referrer.com',3,'http://referrer.com/Other_Page.htm','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',360,'800x300',1,1,1,0,0,0,0,0,542,NULL,'xx',NULL,NULL,NULL,2823,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(515,1,_binary '\öm³�,\n\Ê\Þ','2012-02-01 11:37:33',_binary 'ˆ\ÕU8´‚',_binary 'd4\0\0',1,NULL,'2012-02-01 11:22:33',0,1,1,428400,NULL,8,2741,29,2744,2743,5,3,0,NULL,'referrer.com',3,'https://referrer.com/Other_Page.htm','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',86040,'800x300',1,1,1,0,0,0,0,0,902,NULL,'xx',NULL,NULL,NULL,2828,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(516,1,_binary '\öm³�,\n\Ê\Þ','2012-02-02 11:37:33',_binary 'ˆ\ÕU8´‚',_binary 'd4\0\0',1,NULL,'2012-02-02 11:22:33',0,1,1,514800,NULL,9,2741,29,2744,2743,5,3,0,NULL,'referrer.com',3,'http://referrer.com/Other_Page.htm','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',86400,'800x300',1,1,1,0,0,0,0,0,902,NULL,'xx',NULL,NULL,NULL,2833,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(517,1,_binary '\öm³�,\n\Ê\Þ','2012-02-03 11:37:33',_binary 'ˆ\ÕU8´‚',_binary 'd4\0\0',1,NULL,'2012-02-03 11:22:33',0,1,1,601200,NULL,10,2741,29,2744,2743,5,3,0,NULL,'referrer.com',3,'https://referrer.com/Other_Page.htm','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',86400,'800x300',1,1,1,0,0,0,0,0,902,NULL,'xx',NULL,NULL,NULL,2838,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(518,1,_binary '\öm³�,\n\Ê\Þ','2012-02-04 11:37:33',_binary 'ˆ\ÕU8´‚',_binary 'd4\0\0',1,NULL,'2012-02-04 11:22:33',0,1,1,687600,NULL,11,2741,29,2744,2743,5,3,0,NULL,'referrer.com',3,'http://referrer.com/Other_Page.htm','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',86400,'800x300',1,1,1,0,0,0,0,0,902,NULL,'xx',NULL,NULL,NULL,2843,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(519,1,_binary '\öm³�,\n\Ê\Þ','2012-02-05 11:22:33',_binary 'ˆ\ÕU8´‚',_binary 'd4\0\0',1,NULL,'2012-02-05 11:22:33',0,1,1,774000,NULL,12,2741,29,2741,29,1,1,0,'referrer.com','goal-matching-url-parameter',6,'https://referrer.com/Other_Page.htm','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',86400,'800x300',1,1,1,0,0,0,0,0,1,NULL,'xx',NULL,NULL,NULL,2844,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(520,1,_binary '\öm³�,\n\Ê\Þ','2012-02-05 11:37:33',_binary 'ˆ\ÕU8´‚',_binary 'd4\0\0',1,NULL,'2012-02-05 11:28:33',0,1,1,774360,NULL,13,2742,2743,2744,2743,4,2,0,NULL,'referrer.com',3,'https://referrer.com/Other_Page.htm','','','UNK','',NULL,'','',NULL,'UNK','UNK',0,'12:34:06',360,'800x300',1,1,1,0,0,0,0,0,542,NULL,'xx',NULL,NULL,NULL,2848,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(521,2,_binary '\ÏcµÄ°,š\ò','2012-01-28 11:22:33',_binary 't7¨¥Ÿqu',_binary 'œ\0\0',1,NULL,'2012-01-28 11:22:33',0,0,0,0,NULL,1,2745,2746,2745,2747,3,3,0,NULL,'only-homepage-referrer.com',3,'http://only-homepage-referrer.com/','fr','Trident','IE','8.0',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(522,1,_binary 'µ\\‚\ÑH�x%','2012-01-29 11:40:33',_binary '^E\Ýü19A6',_binary 'œ\0\0',1,NULL,'2012-01-29 11:22:33',0,1,0,0,NULL,1,2748,2749,2748,2749,1,1,0,NULL,'Google',2,'http://www.google.com/url?rct=j&q=&esrc=s&source=web&cd=1&url=http%3A%2F%2Fpiwik.org%2F','fr','','UNK','',NULL,'','',NULL,'BOT','UNK',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1084,NULL,'fr',NULL,NULL,NULL,2852,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(523,1,_binary 'µ\\‚\ÑH�x%','2012-01-29 13:22:33',_binary '^E\Ýü19A6',_binary 'œ\0\0',1,NULL,'2012-01-29 13:22:33',0,1,1,7200,NULL,2,0,2749,0,2749,1,1,0,'<>&\\\"the pdo extension is required for this adapter but the extension is not loaded','Google',2,'http://www.google.com.vn/url?rct=j&q=%3C%3E%26%5C%22the%20pdo%20extension%20is%20required%20for%20this%20adapter%20but%20the%20extension%20is%20not%20loaded&source=web&cd=4&url=http%3A%2F%2Fforum.piwik.org%2Fread.php%3F2%2C1011&cad=rja','fr','','UNK','',NULL,'','',NULL,'BOT','UNK',0,'12:34:06',7200,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2853,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(524,1,_binary 'L\à$\åEŠ','2012-01-30 11:34:36',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-30 11:28:33',0,1,0,0,NULL,1,2750,2751,2755,2753,4,4,0,'this keyword should be ranked','Google',2,'http://www.google.com/url?source=web&cd=1&url=http://piwik.org/&rct=j&q=this keyword should be ranked&sig2=BvKAdCtNixsmfNWXjsNyMw','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1111x222',1,1,1,0,0,0,0,0,365,NULL,'fr',NULL,NULL,NULL,2857,NULL,NULL,NULL,NULL,NULL,'VisitorType','LoggedIn','SET WITH EMPTY VALUE','','Value will be VERY long and truncated','abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrstuvwxyz----abcdefghijklmnopqrst',NULL,NULL,NULL,NULL),(525,1,_binary 'a\è\Ì-Qþ¢m','2012-01-30 12:28:33',_binary '\Õ—\"¤9ù',_binary 'œ\0\0',1,NULL,'2012-01-30 12:22:33',0,1,0,0,NULL,1,0,2751,2750,2751,1,1,0,NULL,NULL,1,'','fr','Gecko','FF','3.0',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1111x222',1,1,1,0,0,0,0,0,362,NULL,'fr',NULL,NULL,NULL,2858,NULL,NULL,NULL,NULL,NULL,'VisitorType','LoggedOut','Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz','abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz',NULL,NULL,NULL,NULL,NULL,NULL),(526,1,_binary 'a\è\Ì-Qþ¢m','2012-01-30 13:22:33',_binary '\Õ—\"¤9ù',_binary 'œ\0\0',1,NULL,'2012-01-30 13:22:33',0,0,1,3600,NULL,2,0,NULL,0,0,1,0,0,NULL,NULL,1,'','fr','Gecko','FF','3.0',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',3600,'1111x222',1,1,1,0,0,0,0,0,0,NULL,'fr',NULL,NULL,NULL,2859,NULL,NULL,NULL,NULL,NULL,'VisitorType','LoggedOut','Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz','abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz',NULL,NULL,NULL,NULL,NULL,NULL),(527,1,_binary '»†\ö–©Ÿ','2012-01-31 01:11:42',_binary '\ál\ò»®\ê,ˆ',_binary 'œ\0\0',1,NULL,'2012-01-31 01:11:42',2,1,0,0,NULL,1,2757,2758,2757,2758,1,1,0,'😡','Google',2,'http://www.google.com/search?q=😡','fr','Gecko','FF','3.6',1,'','generic desktop',0,'WIN','XP',0,'12:34:06',0,'1024x768',1,1,1,0,0,0,0,0,1,NULL,'fr',NULL,NULL,NULL,2860,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(528,1,_binary '0\ïj—\ö>¼','2013-04-07 10:00:00',_binary '\ÍI\ïY¿f ',_binary '}\0\0',0,NULL,'2013-04-07 10:00:00',0,1,0,0,NULL,1,0,2762,0,2762,1,1,0,NULL,NULL,1,'','','Trident','IE','7.0',1,'','generic desktop',0,'WIN','Vista',0,'10:00:00',0,'unknown',0,0,0,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,2861,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(529,1,_binary '\ro?R.�ú2','2013-04-06 11:00:00',_binary '\ÍI\ïY¿f ',_binary '}\0\0',0,NULL,'2013-04-06 11:00:00',0,1,0,0,NULL,1,0,2762,0,2762,1,1,0,NULL,NULL,1,'','','Trident','IE','7.0',1,'','generic desktop',0,'WIN','Vista',0,'11:00:00',0,'unknown',0,0,0,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,2862,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(530,1,_binary '\Í�<\÷\Î •','2013-04-05 12:00:00',_binary '\ÍI\ïY¿f ',_binary '}\0\0',0,NULL,'2013-04-05 12:00:00',0,1,0,0,NULL,1,0,2762,0,2762,1,1,0,NULL,NULL,1,'','','Trident','IE','7.0',1,'','generic desktop',0,'WIN','Vista',0,'12:00:00',0,'unknown',0,0,0,0,0,0,0,0,0,NULL,'xx',NULL,NULL,NULL,2863,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +/*!40000 ALTER TABLE `log_visit` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `logger_message` +-- + +DROP TABLE IF EXISTS `logger_message`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `logger_message` ( + `idlogger_message` int(10) unsigned NOT NULL AUTO_INCREMENT, + `tag` varchar(50) DEFAULT NULL, + `timestamp` timestamp NULL DEFAULT NULL, + `level` varchar(16) DEFAULT NULL, + `message` text, + PRIMARY KEY (`idlogger_message`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `logger_message` +-- + +LOCK TABLES `logger_message` WRITE; +/*!40000 ALTER TABLE `logger_message` DISABLE KEYS */; +/*!40000 ALTER TABLE `logger_message` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `option` +-- + +DROP TABLE IF EXISTS `option`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `option` ( + `option_name` varchar(191) NOT NULL, + `option_value` longtext NOT NULL, + `autoload` tinyint(4) NOT NULL DEFAULT '1', + PRIMARY KEY (`option_name`), + KEY `autoload` (`autoload`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `option` +-- + +LOCK TABLES `option` WRITE; +/*!40000 ALTER TABLE `option` DISABLE KEYS */; +INSERT INTO `option` VALUES ('04cp_report_to_invalidate_2_2012-02-16_1843','1',0),('0atT_report_to_invalidate_1_2012-01-14_2154','1',0),('0lfJ_report_to_invalidate_1_2012-02-03_1843','1',0),('0tyQ_report_to_invalidate_1_2012-08-09_1843','1',0),('1HoA_report_to_invalidate_1_2012-02-14_1843','1',0),('1_annotations','a:29:{i:0;a:4:{s:4:\"date\";s:10:\"2012-08-09\";s:4:\"note\";s:6:\"Note 1\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:1;a:4:{s:4:\"date\";s:10:\"2012-08-08\";s:4:\"note\";s:35:\"<script>_x(30)</script>\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:2;a:4:{s:4:\"date\";s:10:\"2012-08-10\";s:4:\"note\";s:32:\"{{_Vue.h.constructor`_x(31)`()}}\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:3;a:4:{s:4:\"date\";s:10:\"2011-12-01\";s:4:\"note\";s:35:\"0: Site 1 annotation for 2011-12-01\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:4;a:4:{s:4:\"date\";s:10:\"2011-12-02\";s:4:\"note\";s:35:\"1: Site 1 annotation for 2011-12-02\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:5;a:4:{s:4:\"date\";s:10:\"2011-12-08\";s:4:\"note\";s:35:\"2: Site 1 annotation for 2011-12-08\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:6;a:4:{s:4:\"date\";s:10:\"2011-12-09\";s:4:\"note\";s:35:\"3: Site 1 annotation for 2011-12-09\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:7;a:4:{s:4:\"date\";s:10:\"2011-12-15\";s:4:\"note\";s:35:\"4: Site 1 annotation for 2011-12-15\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:8;a:4:{s:4:\"date\";s:10:\"2011-12-16\";s:4:\"note\";s:35:\"5: Site 1 annotation for 2011-12-16\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:9;a:4:{s:4:\"date\";s:10:\"2011-12-22\";s:4:\"note\";s:35:\"6: Site 1 annotation for 2011-12-22\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:10;a:4:{s:4:\"date\";s:10:\"2011-12-23\";s:4:\"note\";s:35:\"7: Site 1 annotation for 2011-12-23\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:11;a:4:{s:4:\"date\";s:10:\"2011-12-29\";s:4:\"note\";s:35:\"8: Site 1 annotation for 2011-12-29\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:12;a:4:{s:4:\"date\";s:10:\"2011-12-30\";s:4:\"note\";s:35:\"9: Site 1 annotation for 2011-12-30\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:13;a:4:{s:4:\"date\";s:10:\"2012-01-05\";s:4:\"note\";s:36:\"10: Site 1 annotation for 2012-01-05\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:14;a:4:{s:4:\"date\";s:10:\"2012-01-06\";s:4:\"note\";s:36:\"11: Site 1 annotation for 2012-01-06\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:15;a:4:{s:4:\"date\";s:10:\"2012-01-12\";s:4:\"note\";s:36:\"12: Site 1 annotation for 2012-01-12\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:16;a:4:{s:4:\"date\";s:10:\"2012-01-13\";s:4:\"note\";s:36:\"13: Site 1 annotation for 2012-01-13\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:17;a:4:{s:4:\"date\";s:10:\"2012-01-19\";s:4:\"note\";s:36:\"14: Site 1 annotation for 2012-01-19\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:18;a:4:{s:4:\"date\";s:10:\"2012-01-20\";s:4:\"note\";s:36:\"15: Site 1 annotation for 2012-01-20\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:19;a:4:{s:4:\"date\";s:10:\"2012-01-26\";s:4:\"note\";s:36:\"16: Site 1 annotation for 2012-01-26\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:20;a:4:{s:4:\"date\";s:10:\"2012-01-27\";s:4:\"note\";s:36:\"17: Site 1 annotation for 2012-01-27\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:21;a:4:{s:4:\"date\";s:10:\"2012-02-02\";s:4:\"note\";s:36:\"18: Site 1 annotation for 2012-02-02\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:22;a:4:{s:4:\"date\";s:10:\"2012-02-03\";s:4:\"note\";s:36:\"19: Site 1 annotation for 2012-02-03\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:23;a:4:{s:4:\"date\";s:10:\"2012-02-09\";s:4:\"note\";s:36:\"20: Site 1 annotation for 2012-02-09\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:24;a:4:{s:4:\"date\";s:10:\"2012-02-10\";s:4:\"note\";s:36:\"21: Site 1 annotation for 2012-02-10\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:25;a:4:{s:4:\"date\";s:10:\"2012-02-16\";s:4:\"note\";s:36:\"22: Site 1 annotation for 2012-02-16\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:26;a:4:{s:4:\"date\";s:10:\"2012-02-17\";s:4:\"note\";s:36:\"23: Site 1 annotation for 2012-02-17\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:27;a:4:{s:4:\"date\";s:10:\"2012-02-23\";s:4:\"note\";s:36:\"24: Site 1 annotation for 2012-02-23\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:28;a:4:{s:4:\"date\";s:10:\"2012-02-24\";s:4:\"note\";s:36:\"25: Site 1 annotation for 2012-02-24\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}}',0),('2QD1_report_to_invalidate_1_2012-01-29_1843','1',0),('2_annotations','a:26:{i:0;a:4:{s:4:\"date\";s:10:\"2011-12-01\";s:4:\"note\";s:35:\"0: Site 2 annotation for 2011-12-01\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:1;a:4:{s:4:\"date\";s:10:\"2011-12-02\";s:4:\"note\";s:35:\"1: Site 2 annotation for 2011-12-02\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:2;a:4:{s:4:\"date\";s:10:\"2011-12-08\";s:4:\"note\";s:35:\"2: Site 2 annotation for 2011-12-08\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:3;a:4:{s:4:\"date\";s:10:\"2011-12-09\";s:4:\"note\";s:35:\"3: Site 2 annotation for 2011-12-09\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:4;a:4:{s:4:\"date\";s:10:\"2011-12-15\";s:4:\"note\";s:35:\"4: Site 2 annotation for 2011-12-15\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:5;a:4:{s:4:\"date\";s:10:\"2011-12-16\";s:4:\"note\";s:35:\"5: Site 2 annotation for 2011-12-16\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:6;a:4:{s:4:\"date\";s:10:\"2011-12-22\";s:4:\"note\";s:35:\"6: Site 2 annotation for 2011-12-22\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:7;a:4:{s:4:\"date\";s:10:\"2011-12-23\";s:4:\"note\";s:35:\"7: Site 2 annotation for 2011-12-23\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:8;a:4:{s:4:\"date\";s:10:\"2011-12-29\";s:4:\"note\";s:35:\"8: Site 2 annotation for 2011-12-29\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:9;a:4:{s:4:\"date\";s:10:\"2011-12-30\";s:4:\"note\";s:35:\"9: Site 2 annotation for 2011-12-30\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:10;a:4:{s:4:\"date\";s:10:\"2012-01-05\";s:4:\"note\";s:36:\"10: Site 2 annotation for 2012-01-05\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:11;a:4:{s:4:\"date\";s:10:\"2012-01-06\";s:4:\"note\";s:36:\"11: Site 2 annotation for 2012-01-06\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:12;a:4:{s:4:\"date\";s:10:\"2012-01-12\";s:4:\"note\";s:36:\"12: Site 2 annotation for 2012-01-12\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:13;a:4:{s:4:\"date\";s:10:\"2012-01-13\";s:4:\"note\";s:36:\"13: Site 2 annotation for 2012-01-13\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:14;a:4:{s:4:\"date\";s:10:\"2012-01-19\";s:4:\"note\";s:36:\"14: Site 2 annotation for 2012-01-19\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:15;a:4:{s:4:\"date\";s:10:\"2012-01-20\";s:4:\"note\";s:36:\"15: Site 2 annotation for 2012-01-20\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:16;a:4:{s:4:\"date\";s:10:\"2012-01-26\";s:4:\"note\";s:36:\"16: Site 2 annotation for 2012-01-26\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:17;a:4:{s:4:\"date\";s:10:\"2012-01-27\";s:4:\"note\";s:36:\"17: Site 2 annotation for 2012-01-27\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:18;a:4:{s:4:\"date\";s:10:\"2012-02-02\";s:4:\"note\";s:36:\"18: Site 2 annotation for 2012-02-02\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:19;a:4:{s:4:\"date\";s:10:\"2012-02-03\";s:4:\"note\";s:36:\"19: Site 2 annotation for 2012-02-03\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:20;a:4:{s:4:\"date\";s:10:\"2012-02-09\";s:4:\"note\";s:36:\"20: Site 2 annotation for 2012-02-09\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:21;a:4:{s:4:\"date\";s:10:\"2012-02-10\";s:4:\"note\";s:36:\"21: Site 2 annotation for 2012-02-10\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:22;a:4:{s:4:\"date\";s:10:\"2012-02-16\";s:4:\"note\";s:36:\"22: Site 2 annotation for 2012-02-16\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:23;a:4:{s:4:\"date\";s:10:\"2012-02-17\";s:4:\"note\";s:36:\"23: Site 2 annotation for 2012-02-17\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}i:24;a:4:{s:4:\"date\";s:10:\"2012-02-23\";s:4:\"note\";s:36:\"24: Site 2 annotation for 2012-02-23\";s:7:\"starred\";i:1;s:4:\"user\";s:14:\"superUserLogin\";}i:25;a:4:{s:4:\"date\";s:10:\"2012-02-24\";s:4:\"note\";s:36:\"25: Site 2 annotation for 2012-02-24\";s:7:\"starred\";i:0;s:4:\"user\";s:14:\"superUserLogin\";}}',0),('3RMc_report_to_invalidate_1_2012-01-08_2154','1',0),('3wuH_report_to_invalidate_2_2012-02-24_1843','1',0),('4LGQ_report_to_invalidate_1_2013-04-06_1841','1',0),('57xs_report_to_invalidate_1_2012-01-21_1842','1',0),('58Ai_report_to_invalidate_2_2012-03-02_1843','1',0),('6GYS_report_to_invalidate_2_2012-02-28_1843','1',0),('8NBB_report_to_invalidate_2_2012-01-26_1841','1',0),('8Rkb_report_to_invalidate_2_2012-02-11_1843','1',0),('9rJM_report_to_invalidate_2_2012-02-12_1843','1',0),('AIAssistantDefinitions','YToxMTp7czoxMToiY2hhdGdwdC5jb20iO3M6NzoiQ2hhdEdQVCI7czoxNToiY2hhdC5vcGVuYWkuY29tIjtzOjc6IkNoYXRHUFQiO3M6MTU6ImxhYnMub3BlbmFpLmNvbSI7czo3OiJDaGF0R1BUIjtzOjIxOiJjb3BpbG90Lm1pY3Jvc29mdC5jb20iO3M6NzoiQ29waWxvdCI7czoxNzoiZ2VtaW5pLmdvb2dsZS5jb20iO3M6NjoiR2VtaW5pIjtzOjE1OiJiYXJkLmdvb2dsZS5jb20iO3M6NjoiR2VtaW5pIjtzOjk6ImNsYXVkZS5haSI7czo2OiJDbGF1ZGUiO3M6NzoiaWFzay5haSI7czo0OiJpQXNrIjtzOjE1OiJjaGF0Lm1pc3RyYWwuYWkiO3M6NzoiTGUgQ2hhdCI7czo3OiJtZXRhLmFpIjtzOjc6Ik1ldGEgQUkiO3M6MTM6InBlcnBsZXhpdHkuYWkiO3M6MTA6IlBlcnBsZXhpdHkiO30=',0),('BemG_report_to_invalidate_2_2012-02-03_1843','1',0),('bORe_report_to_invalidate_2_2012-02-17_1843','1',0),('bwCX_report_to_invalidate_1_2012-02-06_1843','1',0),('ceyd_report_to_invalidate_1_2012-01-23_1841','1',0),('CHBC_report_to_invalidate_2_2012-02-26_1843','1',0),('CJ3n_report_to_invalidate_1_2012-02-17_1843','1',0),('D2cD_report_to_invalidate_1_2012-01-15_2154','1',0),('d2mb_report_to_invalidate_1_2012-01-26_1841','1',0),('d5AQ_report_to_invalidate_1_2012-02-19_1843','1',0),('DbCR_report_to_invalidate_1_2012-03-02_1843','1',0),('dco9_report_to_invalidate_2_2012-02-14_1843','1',0),('dnIE_report_to_invalidate_1_2012-02-27_1843','1',0),('dv63_report_to_invalidate_1_2012-01-25_1842','1',0),('dwi7_report_to_invalidate_1_2012-01-07_2154','1',0),('dwnT_report_to_invalidate_1_2012-01-16_1843','1',0),('EA36_report_to_invalidate_1_2012-02-28_1843','1',0),('eeTP_report_to_invalidate_1_2012-02-23_1843','1',0),('EFKy_report_to_invalidate_2_2012-02-18_1843','1',0),('EfOl_report_to_invalidate_1_2012-02-05_1843','1',0),('EjNX_report_to_invalidate_1_2012-01-27_1841','1',0),('EOT4_report_to_invalidate_2_2012-02-23_1843','1',0),('Fd1K_report_to_invalidate_2_2012-01-28_1841','1',0),('FEz1_report_to_invalidate_2_2012-02-10_1843','1',0),('fingerprint_salt_1_2010-01-03','{\"value\":\"7a2ra0f3daoly5hepv52jitp1usv9rl1\",\"time\":1754670779}',0),('fingerprint_salt_1_2010-01-04','{\"value\":\"2z8nz4i3kzpco6x79vfsbs4f08hl4lpy\",\"time\":1754670750}',0),('fingerprint_salt_1_2012-01-01','{\"value\":\"46vzb04bzopf3whpltzh781x282ft020\",\"time\":1754670722}',0),('fingerprint_salt_1_2012-01-02','{\"value\":\"de9jn723biro6ooksnnpisicf9n5bm48\",\"time\":1754670724}',0),('fingerprint_salt_1_2012-01-03','{\"value\":\"ka1zmo2jnzvgoiry51th8yb3zim6bsoi\",\"time\":1754670724}',0),('fingerprint_salt_1_2012-01-07','{\"value\":\"7dl1wtaargg990sontv7905fkvo726ch\",\"time\":1754670741}',0),('fingerprint_salt_1_2012-01-08','{\"value\":\"out3p7r2p1u2y8syczwnu57h5kyk88nk\",\"time\":1754670741}',0),('fingerprint_salt_1_2012-01-09','{\"value\":\"2sac1og16m9e1i56bsdo0fcczgwxgbm4\",\"time\":1754670741}',0),('fingerprint_salt_1_2012-01-10','{\"value\":\"2oo6gl9c2jd2yyov5ny8yuzgglba6kps\",\"time\":1754670741}',0),('fingerprint_salt_1_2012-01-11','{\"value\":\"m7d70akjp62bzw45ugowu1buwrhyula5\",\"time\":1754670725}',0),('fingerprint_salt_1_2012-01-12','{\"value\":\"ome7y9cz30pwo40njhn3rvy9jbx818dy\",\"time\":1754670741}',0),('fingerprint_salt_1_2012-01-13','{\"value\":\"298dc25gdn2lktmg2cl32gzdput5m3d3\",\"time\":1754670741}',0),('fingerprint_salt_1_2012-01-14','{\"value\":\"amut7amm18zm9unwici2bt9f0745191u\",\"time\":1754670741}',0),('fingerprint_salt_1_2012-01-15','{\"value\":\"ra2atfzu47izw5c6ez5cofk8gfbbeehc\",\"time\":1754670741}',0),('fingerprint_salt_1_2012-01-16','{\"value\":\"ptvcx1bdkof4tvkc15sjiwljzzdz56kk\",\"time\":1754670722}',0),('fingerprint_salt_1_2012-01-17','{\"value\":\"bitct183tzthpk2e28ttyyev1g7gbl1v\",\"time\":1754670722}',0),('fingerprint_salt_1_2012-01-18','{\"value\":\"2g5l5l3mjctcftb9lxpabd0lhtnc4wgy\",\"time\":1754670767}',0),('fingerprint_salt_1_2012-01-19','{\"value\":\"15exsil91ee33f4ibk8x7xminzi06ol4\",\"time\":1754670768}',0),('fingerprint_salt_1_2012-01-20','{\"value\":\"7n5sh2nvaygugkb2v1ji1ahiy6t8i6wi\",\"time\":1754670769}',0),('fingerprint_salt_1_2012-01-21','{\"value\":\"emnafvbkuiye7bchugou9d6imp43ow7o\",\"time\":1754670769}',0),('fingerprint_salt_1_2012-01-22','{\"value\":\"d2diyjpt4t7ap7org0r1f01zaxdkwf1j\",\"time\":1754670770}',0),('fingerprint_salt_1_2012-01-23','{\"value\":\"oojnehzsjr8kvh5e0mrtf0b83nrl47l6\",\"time\":1754670770}',0),('fingerprint_salt_1_2012-01-24','{\"value\":\"1nkbowb12afwgngskyb0diyfwem2f5wf\",\"time\":1754670771}',0),('fingerprint_salt_1_2012-01-25','{\"value\":\"lu9rx33rjrreok92ffr0pks4b9lakuwo\",\"time\":1754670774}',0),('fingerprint_salt_1_2012-01-26','{\"value\":\"jxd27il1v7ldh53yo30b378ej9ojgjcz\",\"time\":1754670768}',0),('fingerprint_salt_1_2012-01-27','{\"value\":\"ubp7zh84ubyevwrsk3karpu8wj7uyrot\",\"time\":1754670743}',0),('fingerprint_salt_1_2012-01-28','{\"value\":\"r3tc71i0fy6ia1poz3jg7ej067vs9ddk\",\"time\":1754670746}',0),('fingerprint_salt_1_2012-01-29','{\"value\":\"fcadl3gtw55ziwd7nustsw3jooh4pvez\",\"time\":1754670779}',0),('fingerprint_salt_1_2012-01-30','{\"value\":\"s4hxg4gzv12x0putjdz5uyho7d0zvzn0\",\"time\":1754670780}',0),('fingerprint_salt_1_2012-01-31','{\"value\":\"9z2a8vwbvrdv3bl7pe0fxswcdt0aurzs\",\"time\":1754670780}',0),('fingerprint_salt_1_2012-02-01','{\"value\":\"6kfumryljytfya2m54ty8pbo92vcihjy\",\"time\":1754670777}',0),('fingerprint_salt_1_2012-02-02','{\"value\":\"6nvk3vbrbwtzee5ma2k6mmtuuw3jd6ek\",\"time\":1754670777}',0),('fingerprint_salt_1_2012-02-03','{\"value\":\"2771uhj45i7sxxxn22t536rum5zkp22x\",\"time\":1754670777}',0),('fingerprint_salt_1_2012-02-04','{\"value\":\"mckxubgxtfdd6eaxy0er63izm45k2m3a\",\"time\":1754670777}',0),('fingerprint_salt_1_2012-02-05','{\"value\":\"r66xrway7x7s91wswyxs5d2vdnass2i8\",\"time\":1754670777}',0),('fingerprint_salt_1_2012-02-06','{\"value\":\"yla9kef4bthhmwc7i362x3u2rdcjwwxk\",\"time\":1754670777}',0),('fingerprint_salt_1_2012-02-07','{\"value\":\"8afpsxpsvwz7zmieihajek47hw18nouv\",\"time\":1754670777}',0),('fingerprint_salt_1_2012-02-08','{\"value\":\"ht6yg7gfrop928yvxu11m8wujyv3own5\",\"time\":1754670777}',0),('fingerprint_salt_1_2012-02-09','{\"value\":\"jrsswx0rsiyzv60jafafegwvjfwube73\",\"time\":1754670777}',0),('fingerprint_salt_1_2012-02-10','{\"value\":\"mad336njvdg3rbyoj0oal3nfysvtnoma\",\"time\":1754670777}',0),('fingerprint_salt_1_2012-02-11','{\"value\":\"5ykicyskn0bhc6s71pet98u1h9k5ntey\",\"time\":1754670777}',0),('fingerprint_salt_1_2012-02-12','{\"value\":\"zwojii1dxlajiw3xhpair3vuihcd9a9k\",\"time\":1754670777}',0),('fingerprint_salt_1_2012-02-13','{\"value\":\"o91ffcxej0ih8ily8gdpfapgxapejy6c\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-14','{\"value\":\"kys4c5zvhj0exhltu5ej7ae2h9pw7bl3\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-15','{\"value\":\"9drcgi844bcexd0ka3v93ajai06gfkvc\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-16','{\"value\":\"ckjd2tzfainpseco97s3wgoi4ne201f7\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-17','{\"value\":\"o43ftxexow8yh3320d4bj6bfl7ie6u77\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-18','{\"value\":\"je4byzd4bjcup8okakuu5meukb2b63v9\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-19','{\"value\":\"0y728jbpjlnmasxyff8bajehwis4pg0s\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-20','{\"value\":\"2pc2msf3s02l9a66vrw4pfkyk7duybt9\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-21','{\"value\":\"bkdedbefdos6wvaps7velncu6vgwgohn\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-22','{\"value\":\"7muov9c84edyfxuv762i2i0n1chjlsz0\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-23','{\"value\":\"wg9kadwm60m4gdizzokfwwjfgcz6j9lj\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-24','{\"value\":\"4bfsnfyg9gwdkakfutau8mlnzsg4bs01\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-25','{\"value\":\"s5oit8y1zxj02lce65bs8j3ljjllzk7a\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-26','{\"value\":\"6abgy7f99am6or1sbb3dkyh851fmo5fm\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-27','{\"value\":\"5um9vhgrv6i9ab861iu10grhzohx53b1\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-28','{\"value\":\"l6ai9fmukjmaj7rd0abej2jjd78pm5af\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-02-29','{\"value\":\"e48tyu2w3d7f8h90h7yvjy5y0anmo6bo\",\"time\":1754670778}',0),('fingerprint_salt_1_2012-03-01','{\"value\":\"303nhns3kcow84amljf5s17zaley6bb5\",\"time\":1754670779}',0),('fingerprint_salt_1_2012-03-02','{\"value\":\"4fn4rgtvy4vbktmh4jljcltl9zxyff2f\",\"time\":1754670779}',0),('fingerprint_salt_1_2012-08-09','{\"value\":\"ze9s3rtw9bo2id0f7ju3tovi4hsxmcz4\",\"time\":1754670707}',0),('fingerprint_salt_1_2012-08-10','{\"value\":\"44fo4nug6wr0navpw5y8fcthag79ncmk\",\"time\":1754670708}',0),('fingerprint_salt_1_2012-08-11','{\"value\":\"l1bl97dxp96wycv8vtw0epj2hrjxpxz6\",\"time\":1754670708}',0),('fingerprint_salt_1_2012-08-15','{\"value\":\"3uzmes3cw0nurb9ybxwbth80wptvkbpc\",\"time\":1754670711}',0),('fingerprint_salt_1_2012-08-19','{\"value\":\"hkh3u5ys16dhz6fi04zaonfh4u0kpy1r\",\"time\":1754670721}',0),('fingerprint_salt_1_2012-09-30','{\"value\":\"5ad94j72i2kshx1pbc506ra5g3hjc5b3\",\"time\":1754670718}',0),('fingerprint_salt_1_2013-04-05','{\"value\":\"v0umc6ifbspcin50ytggx2ba96eevgj6\",\"time\":1754670784}',0),('fingerprint_salt_1_2013-04-06','{\"value\":\"8d5w90644duk2h2o31pyhierf7417hgt\",\"time\":1754670784}',0),('fingerprint_salt_1_2013-04-07','{\"value\":\"k9xg81pnpst8hxvhi45hjupyr36jpkso\",\"time\":1754670784}',0),('fingerprint_salt_1_2014-03-12','{\"value\":\"pp5cx5y3y036ca84cpvn2k0k5co55h4e\",\"time\":1754670712}',0),('fingerprint_salt_1_2014-03-13','{\"value\":\"bvk40uoy9egl3dfepo3dbs4b8n2mf8z6\",\"time\":1754670712}',0),('fingerprint_salt_1_2015-02-03','{\"value\":\"kow62dnlyalsjh010kyzmaa6bxvy2jr5\",\"time\":1754670750}',0),('fingerprint_salt_1_2015-03-03','{\"value\":\"ybokxpb9ifz8xy3zevcgg3x02cyvmwld\",\"time\":1754670750}',0),('fingerprint_salt_1_2015-03-04','{\"value\":\"ri09khb40jtb8y0a78zrfec9hhhgr3d2\",\"time\":1754670755}',0),('fingerprint_salt_1_2015-08-02','{\"value\":\"snaze7gng12mwxja3wvd0eyosc80mh9e\",\"time\":1754670711}',0),('fingerprint_salt_1_2025-08-06','{\"value\":\"kkwjt9thl38zg3yscxv7v5myz761zfo0\",\"time\":1754670705}',0),('fingerprint_salt_1_2025-08-07','{\"value\":\"40h16jwtzxwf74bol9btfz6xtyb1wnps\",\"time\":1754670705}',0),('fingerprint_salt_1_2025-08-08','{\"value\":\"lxacfic0w35aosf1kok3a6c0vrfzb1ea\",\"time\":1754670705}',0),('fingerprint_salt_1_2025-08-09','{\"value\":\"7pzuzw79fj8t2i4ef0d2r5lb1w94n03y\",\"time\":1754670705}',0),('fingerprint_salt_2_2012-01-22','{\"value\":\"hjj0xtarg9guoa197p44gyhdxlgkxg65\",\"time\":1754670770}',0),('fingerprint_salt_2_2012-01-23','{\"value\":\"57yeg1bbhgjx49lvyaiu9vjuxmmn3riv\",\"time\":1754670771}',0),('fingerprint_salt_2_2012-01-25','{\"value\":\"f9mdonree7vxogkdg562whbbwpmlo0ta\",\"time\":1754670776}',0),('fingerprint_salt_2_2012-01-26','{\"value\":\"4d2tl7fuevu7uz9sh2r932o1tt81m956\",\"time\":1754670776}',0),('fingerprint_salt_2_2012-01-28','{\"value\":\"nfcifhb8kkdh1j4m6zcfdpabcxrrjagi\",\"time\":1754670780}',0),('fingerprint_salt_2_2012-02-01','{\"value\":\"t3fi01h85vkc9ubaitt5l7jromgrzhg3\",\"time\":1754670777}',0),('fingerprint_salt_2_2012-02-02','{\"value\":\"gyvxmpd22rr6hlrrm1aar0dwi0jl87dx\",\"time\":1754670777}',0),('fingerprint_salt_2_2012-02-03','{\"value\":\"wmf9442luzn1w4mz1ac53khljutz4fie\",\"time\":1754670777}',0),('fingerprint_salt_2_2012-02-04','{\"value\":\"v2htwh8nlkmosplnuo2z97tgc3oiiohv\",\"time\":1754670777}',0),('fingerprint_salt_2_2012-02-05','{\"value\":\"2c2mbthc4advpnx4lbamexmt38uo5ggc\",\"time\":1754670777}',0),('fingerprint_salt_2_2012-02-06','{\"value\":\"b5oyi370tu4c3t3854rbc59ttupeke4m\",\"time\":1754670777}',0),('fingerprint_salt_2_2012-02-07','{\"value\":\"fuw5rhrmb3wa7nzlki31k3tze8w2bpx9\",\"time\":1754670777}',0),('fingerprint_salt_2_2012-02-08','{\"value\":\"hsep7ffwunwhh06m21v3dwup4roglanr\",\"time\":1754670777}',0),('fingerprint_salt_2_2012-02-09','{\"value\":\"mm4xxs89dd1mp80uegu7cgm8u9cew1e6\",\"time\":1754670777}',0),('fingerprint_salt_2_2012-02-10','{\"value\":\"igyl9fxwkx5brncsacu2w4i7ph8k92hv\",\"time\":1754670777}',0),('fingerprint_salt_2_2012-02-11','{\"value\":\"jtpffsp8v5k6r4zc7jeaghfbe4mxkju0\",\"time\":1754670777}',0),('fingerprint_salt_2_2012-02-12','{\"value\":\"a9n419635npd4zuyut6516018b2pvpw4\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-13','{\"value\":\"ut7yd1y6a9ogwlhgtr2o2h4k9rc9eo37\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-14','{\"value\":\"w95atrp385i6h4lnixco5m0twrku829x\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-15','{\"value\":\"1g4h1t5rtcabnxl5v7rsetz9z5kaoyxl\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-16','{\"value\":\"90ebs85kueu5o3iiz1lg0rpcrmgv33b8\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-17','{\"value\":\"pbc8jtagxofn8msvk8p8ly6hngx19k18\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-18','{\"value\":\"s27iuz6u115wpa8b58bskw6mbet4mmbl\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-19','{\"value\":\"gufzvwaag5voty2etwbyd7yyk2xp3wdj\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-20','{\"value\":\"adg0utoj7ktg8reiwlzf80d91otvtm9z\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-21','{\"value\":\"cwrd47o6do0fv3uiek14vc8wokxe1ghk\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-22','{\"value\":\"ol3k5ynsaecmh3mftxhyzaxn81rdnuya\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-23','{\"value\":\"evm35233y90nfwrexw8cssunui7gbkjx\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-24','{\"value\":\"h1rmik098de4cxf7nhryhyajmja6tstr\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-25','{\"value\":\"reasmu0r8mrdczbr2ysris2xo6dtb2p9\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-26','{\"value\":\"jiesmar54no7tettnc1f5n2a4l02fxs5\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-27','{\"value\":\"nxc41jce6d3edae0nlri7ckk0hzrtu4y\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-28','{\"value\":\"bks1826trg0biy7ykafu1lbvin2g1f87\",\"time\":1754670778}',0),('fingerprint_salt_2_2012-02-29','{\"value\":\"ejz3azbiuea1n70xleekkosm91ype9pi\",\"time\":1754670779}',0),('fingerprint_salt_2_2012-03-01','{\"value\":\"gfnpkp7bd18g33kv0eh5vhg1o4cim267\",\"time\":1754670779}',0),('fingerprint_salt_2_2012-03-02','{\"value\":\"6nw46dbgiijsozyjasic08lfpy6cgh37\",\"time\":1754670779}',0),('fingerprint_salt_2_2012-08-11','{\"value\":\"emniuufv129pimjy012gn6r33z5r724j\",\"time\":1754670722}',0),('fingerprint_salt_2_2012-08-15','{\"value\":\"x7g1dk08pp4zrpt1j47ry3w17lajci3j\",\"time\":1754670711}',0),('fingerprint_salt_2_2025-08-06','{\"value\":\"snamtu3hszray14ptfnpcxwxrn3dukci\",\"time\":1754670705}',0),('fingerprint_salt_2_2025-08-07','{\"value\":\"vr9zw3vypk3a4hnyp87zs29icsnvggep\",\"time\":1754670705}',0),('fingerprint_salt_2_2025-08-08','{\"value\":\"ns554yyn1xkvvpjzbrilw4rs88a5skcd\",\"time\":1754670705}',0),('fingerprint_salt_2_2025-08-09','{\"value\":\"e35mzvvjrjkumhcc4ry8odz7dny3khzw\",\"time\":1754670705}',0),('fingerprint_salt_3_2012-01-22','{\"value\":\"1m0kctcsypkbrs0xd3m46jcdcz62yoxi\",\"time\":1754670771}',0),('fingerprint_salt_3_2012-01-23','{\"value\":\"16di325bip072u8akwpwcp693f84m02a\",\"time\":1754670771}',0),('fingerprint_salt_3_2012-08-15','{\"value\":\"gpo06r48s5i294nmvsknpa0056zixgxc\",\"time\":1754670712}',0),('fingerprint_salt_3_2014-03-12','{\"value\":\"nnc1ilw59pmm41rkw9t64l7b51xa7uxn\",\"time\":1754670716}',0),('fingerprint_salt_3_2014-03-13','{\"value\":\"5wvabd67vninhy0a3v57mxv35c0t0kfj\",\"time\":1754670716}',0),('fingerprint_salt_3_2015-08-02','{\"value\":\"zbuxwlxr3w53e3j8ziwcoanfp7g4u3em\",\"time\":1754670716}',0),('fingerprint_salt_3_2025-08-06','{\"value\":\"wi9fjtlawjng26tinws2zi6ldvjaattx\",\"time\":1754670705}',0),('fingerprint_salt_3_2025-08-07','{\"value\":\"j3jt7p900d9ngimdwbrbiwmyv33tgj9t\",\"time\":1754670705}',0),('fingerprint_salt_3_2025-08-08','{\"value\":\"bdvzdgcbdpj48upnl076u67bd2lzewul\",\"time\":1754670705}',0),('fingerprint_salt_3_2025-08-09','{\"value\":\"mw1xcwgr79v4cfmvuw2igwizy6xniea5\",\"time\":1754670705}',0),('fk1S_report_to_invalidate_1_2012-01-11_1841','1',0),('Fprr_report_to_invalidate_1_2012-01-30_1842','1',0),('gf97_report_to_invalidate_1_2014-03-12_1843','1',0),('h8oo_report_to_invalidate_1_2010-01-03_1842','1',0),('Hb1k_report_to_invalidate_1_2014-03-13_1841','1',0),('hCU4_report_to_invalidate_2_2012-02-22_1843','1',0),('HdwE_report_to_invalidate_1_2015-03-03_1841','1',0),('hQyt_report_to_invalidate_1_2012-02-24_1843','1',0),('hth9_report_to_invalidate_1_2012-02-21_1843','1',0),('huka_report_to_invalidate_2_2012-02-13_1843','1',0),('I9Qd_report_to_invalidate_2_2012-02-19_1843','1',0),('iCwJ_report_to_invalidate_2_2012-01-23_1843','1',0),('IETo_report_to_invalidate_2_2012-01-22_1842','1',0),('iIGN_report_to_invalidate_3_2014-03-12_1843','1',0),('iMZe_report_to_invalidate_1_2012-01-10_2154','1',0),('InbC_report_to_invalidate_1_2013-04-07_1841','1',0),('install_version','5.4.0-b5',0),('IVE6_report_to_invalidate_1_2012-02-10_1843','1',0),('IyYC_report_to_invalidate_1_2012-02-25_1843','1',0),('JaMO_report_to_invalidate_1_2015-03-04_1841','1',0),('jc8Y_report_to_invalidate_1_2012-01-12_2154','1',0),('jfu4_report_to_invalidate_1_2012-02-15_1843','1',0),('Ji0w_report_to_invalidate_2_2012-02-06_1843','1',0),('JLcM_report_to_invalidate_2_2012-08-11_2154','1',0),('KBmn_report_to_invalidate_1_2012-01-22_1843','1',0),('KHmb_report_to_invalidate_1_2012-02-16_1843','1',0),('kP0N_report_to_invalidate_1_2012-02-13_1843','1',0),('KpMI_report_to_invalidate_1_2012-02-11_1843','1',0),('kzsU_report_to_invalidate_1_2012-01-02_1843','1',0),('Ld3X_report_to_invalidate_2_2012-02-07_1843','1',0),('liM1_report_to_invalidate_1_2012-02-12_1843','1',0),('lIpP_report_to_invalidate_2_2012-02-09_1843','1',0),('lJrc_report_to_invalidate_1_2012-01-28_1843','1',0),('lmbl_report_to_invalidate_1_2012-08-15_1843','1',0),('LrLE_report_to_invalidate_2_2012-02-08_1843','1',0),('m6yA_report_to_invalidate_1_2012-08-11_1843','1',0),('MatomoUpdateHistory','5.4.0-b5,',0),('mgj8_report_to_invalidate_3_2012-08-15_1843','1',0),('MobileMessaging_DelegatedManagement','false',0),('mQTp_report_to_invalidate_1_2012-01-19_1843','1',0),('murO_report_to_invalidate_1_2012-02-09_1843','1',0),('n0FO_report_to_invalidate_2_2012-02-25_1843','1',0),('Nj1o_report_to_invalidate_1_2012-02-02_1843','1',0),('npa0_report_to_invalidate_1_2013-04-05_1841','1',0),('oCzD_report_to_invalidate_1_2012-08-10_1843','1',0),('oh3t_report_to_invalidate_2_2012-02-01_1843','1',0),('OHuK_report_to_invalidate_3_2014-03-13_1841','1',0),('P1di_report_to_invalidate_2_2012-02-02_1843','1',0),('piwikUrl','http://dev.matomo.io:80/tests/PHPUnit/proxy/',1),('Piwik\\Tests\\Fixtures\\OmniFixture.setUpFlag','1',0),('PrivacyManager.doNotTrackEnabled','0',0),('PrivacyManager.ipAddressMaskLength','2',0),('PrivacyManager.ipAnonymizerEnabled','1',0),('QcRl_report_to_invalidate_1_2012-03-01_1843','1',0),('QTc2_report_to_invalidate_2_2012-01-25_1842','1',0),('RcuS_report_to_invalidate_1_2012-02-01_1843','1',0),('ReArchiveList','a:1:{i:0;s:100:\"{\"idSites\":[\"1\"],\"pluginName\":null,\"report\":null,\"startDate\":1514764800,\"segment\":\"countryCode==jp\"}\";}',0),('RkyC_report_to_invalidate_1_2012-01-09_2154','1',0),('ryHD_report_to_invalidate_2_2012-02-20_1843','1',0),('rzW8_report_to_invalidate_1_2012-01-17_1842','1',0),('S1mh_report_to_invalidate_1_2012-02-20_1843','1',0),('SAE2_report_to_invalidate_1_2012-01-18_1841','1',0),('SearchEngineDefinitions','YTo2NTM6e3M6NDoiMS5jeiI7YTo0OntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxMzoiL3NcLyhbXlwvXSspLyI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6NToicy97a30iO3M6ODoiY2hhcnNldHMiO2E6MTp7aTowO3M6MTA6Imlzby04ODU5LTIiO31zOjQ6Im5hbWUiO3M6NDoiMS5jeiI7fXM6MTM6Ind3dy4xMTg3MDAuc2UiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTQ6InNvay5hc3B4P3E9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiMTE4IDcwMCI7fXM6MTc6ImZvcmV0YWcuMTE4NzAwLnNlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE0OiJzb2suYXNweD9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IjExOCA3MDAiO31zOjE2OiJ3ZWJiZW4uMTE4NzAwLnNlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE0OiJzb2suYXNweD9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IjExOCA3MDAiO31zOjE3OiJ3d3cuMTIzcGVvcGxlLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxMzoiL3NcLyhbXlwvXSspLyI7aToxO3M6MTE6InNlYXJjaF90ZXJtIjt9czo4OiJiYWNrbGluayI7czo1OiJzL3trfSI7czo0OiJuYW1lIjtzOjk6IjEyM3Blb3BsZSI7fXM6MTI6IjEyM3Blb3BsZS57fSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxMzoiL3NcLyhbXlwvXSspLyI7aToxO3M6MTE6InNlYXJjaF90ZXJtIjt9czo4OiJiYWNrbGluayI7czo1OiJzL3trfSI7czo0OiJuYW1lIjtzOjk6IjEyM3Blb3BsZSI7fXM6OToic28uMzYwLmNuIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjc6InM/cT17a30iO3M6ODoiY2hhcnNldHMiO2E6Mjp7aTowO3M6NToiVVRGLTgiO2k6MTtzOjY6ImdiMjMxMiI7fXM6NDoibmFtZSI7czo5OiIzNjBzZWFyY2giO31zOjEwOiJ3d3cuc28uY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjc6InM/cT17a30iO3M6ODoiY2hhcnNldHMiO2E6Mjp7aTowO3M6NToiVVRGLTgiO2k6MTtzOjY6ImdiMjMxMiI7fXM6NDoibmFtZSI7czo5OiIzNjBzZWFyY2giO31zOjg6Im0uc28uY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjc6InM/cT17a30iO3M6ODoiY2hhcnNldHMiO2E6Mjp7aTowO3M6NToiVVRGLTgiO2k6MTtzOjY6ImdiMjMxMiI7fXM6NDoibmFtZSI7czo5OiIzNjBzZWFyY2giO31zOjExOiJ3d3cuc291LmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo2OiI/cT17a30iO3M6ODoiY2hhcnNldHMiO2E6Mjp7aTowO3M6NToiVVRGLTgiO2k6MTtzOjY6ImdiMjMxMiI7fXM6NDoibmFtZSI7czo5OiIzNjBzZWFyY2giO31zOjEzOiJ3d3cuYWJhY2hvLmRlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjExOiJzdWNoZT9xPXtrfSI7czo0OiJuYW1lIjtzOjY6IkFiYWNobyI7fXM6MTQ6Ind3dy5hYmFjaG8uY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjExOiJzdWNoZT9xPXtrfSI7czo0OiJuYW1lIjtzOjY6IkFiYWNobyI7fXM6MTY6Ind3dy5hYmFjaG8uY28udWsiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTE6InN1Y2hlP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiQWJhY2hvIjt9czoxNzoid3d3LnNlLmFiYWNoby5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTE6InN1Y2hlP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiQWJhY2hvIjt9czoxNzoid3d3LnRyLmFiYWNoby5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTE6InN1Y2hlP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiQWJhY2hvIjt9czoxMzoid3d3LmFiYWNoby5hdCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMToic3VjaGU/cT17a30iO3M6NDoibmFtZSI7czo2OiJBYmFjaG8iO31zOjEzOiJ3d3cuYWJhY2hvLmZyIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjExOiJzdWNoZT9xPXtrfSI7czo0OiJuYW1lIjtzOjY6IkFiYWNobyI7fXM6MTM6Ind3dy5hYmFjaG8uZXMiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTE6InN1Y2hlP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiQWJhY2hvIjt9czoxMzoid3d3LmFiYWNoby5jaCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMToic3VjaGU/cT17a30iO3M6NDoibmFtZSI7czo2OiJBYmFjaG8iO31zOjEzOiJ3d3cuYWJhY2hvLml0IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjExOiJzdWNoZT9xPXtrfSI7czo0OiJuYW1lIjtzOjY6IkFiYWNobyI7fXM6OToiYWJjc29rLm5vIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IkFCQ3PDuGsiO31zOjE2OiJ2ZXJkZW4uYWJjc29rLm5vIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IkFCQ3PDuGsiO31zOjEyOiJ3d3cuYWNvb24uZGUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NzoiYmVncmlmZiI7fXM6ODoiYmFja2xpbmsiO3M6MzA6ImNnaS1iaW4vc2VhcmNoLmV4ZT9iZWdyaWZmPXtrfSI7czo0OiJuYW1lIjtzOjU6IkFjb29uIjt9czoyMDoiY2hlcmNoZXJmci5hZ3VlYS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTA6InMucHk/cT17a30iO3M6NDoibmFtZSI7czo1OiJBZ3VlYSI7fXM6MjM6Ind3dy5hbGxhdmVya3NhbWhldGVyLnNlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjQ6IldoYXQiO31zOjg6ImJhY2tsaW5rIjtzOjI2OiJTZWFyY2hSZXN1bHQuYXNweD9XaGF0PXtrfSI7czo0OiJuYW1lIjtzOjE2OiJBbGxhdmVya3NhbWhldGVyIjt9czo5OiJhbGV4YS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjU6IkFsZXhhIjt9czoyNToic2VhcmNoLnRvb2xiYXJzLmFsZXhhLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NToiQWxleGEiO31zOjIzOiJyZWNoZXJjaGVyLmFsaWNlYWRzbC5mciI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoyOiJxcyI7fXM6ODoiYmFja2xpbmsiO3M6MTY6Imdvb2dsZS5wbD9xcz17a30iO3M6NDoibmFtZSI7czoxMDoiQWxpY2UgQWRzbCI7fXM6NjoiYWxsLmJ5IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czozNjoiY2dpLWJpbi9zZWFyY2guY2dpP21vZGU9YnkmcXVlcnk9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiQWxsLmJ5Ijt9czoxNjoid3d3LmFsbGVza2xhci5kZSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJ3b3JkcyI7fXM6ODoiYmFja2xpbmsiO3M6MTA6Ij93b3Jkcz17a30iO3M6NDoibmFtZSI7czo5OiJBbGxlc2tsYXIiO31zOjE2OiJ3d3cuYWxsZXNrbGFyLmF0IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6IndvcmRzIjt9czo4OiJiYWNrbGluayI7czoxMDoiP3dvcmRzPXtrfSI7czo0OiJuYW1lIjtzOjk6IkFsbGVza2xhciI7fXM6MTY6Ind3dy5hbGxlc2tsYXIuY2giO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToid29yZHMiO31zOjg6ImJhY2tsaW5rIjtzOjEwOiI/d29yZHM9e2t9IjtzOjQ6Im5hbWUiO3M6OToiQWxsZXNrbGFyIjt9czoyMjoid3d3LmFsbHRoZWludGVybmV0LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo2OiI/cT17a30iO3M6NDoibmFtZSI7czoxNDoiQWxsVGhlSW50ZXJuZXQiO31zOjE3OiJ3d3cuYWxsdGhld2ViLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6OToiQWxsVGhlV2ViIjt9czoxMzoiYWxvaGFmaW5kLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMzoic2VhcmNoLz9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkFsb2hhRmluZCI7fXM6MTc6Ind3dy5hbHRhdmlzdGEuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiJ3ZWIvcmVzdWx0cz9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkFsdGFWaXN0YSI7fXM6MjA6InNlYXJjaC5hbHRhdmlzdGEuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiJ3ZWIvcmVzdWx0cz9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkFsdGFWaXN0YSI7fXM6MjI6Imxpc3RpbmdzLmFsdGF2aXN0YS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTc6IndlYi9yZXN1bHRzP3E9e2t9IjtzOjQ6Im5hbWUiO3M6OToiQWx0YVZpc3RhIjt9czoxMjoiYWx0YXZpc3RhLmRlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiJ3ZWIvcmVzdWx0cz9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkFsdGFWaXN0YSI7fXM6MTI6ImFsdGF2aXN0YS5mciI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNzoid2ViL3Jlc3VsdHM/cT17a30iO3M6NDoibmFtZSI7czo5OiJBbHRhVmlzdGEiO31zOjE2OiJ7fS5hbHRhdmlzdGEuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiJ3ZWIvcmVzdWx0cz9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkFsdGFWaXN0YSI7fXM6MTk6ImJlLW5sLmFsdGF2aXN0YS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTc6IndlYi9yZXN1bHRzP3E9e2t9IjtzOjQ6Im5hbWUiO3M6OToiQWx0YVZpc3RhIjt9czoxOToiYmUtZnIuYWx0YXZpc3RhLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNzoid2ViL3Jlc3VsdHM/cT17a30iO3M6NDoibmFtZSI7czo5OiJBbHRhVmlzdGEiO31zOjE0OiJzZWFyY2guYW9sLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo1OiJxdWVyeSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6ImFvbC9zZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czozOiJBT0wiO31zOjEzOiJzZWFyY2guYW9sLml0IjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjU6InF1ZXJ5IjtpOjE7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNjoiYW9sL3NlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFPTCI7fXM6MTc6ImFvbHNlYXJjaC5hb2wuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjU6InF1ZXJ5IjtpOjE7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNjoiYW9sL3NlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFPTCI7fXM6MjM6Ind3dy5hb2xyZWNoZXJjaGUuYW9sLmZyIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjU6InF1ZXJ5IjtpOjE7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNjoiYW9sL3NlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFPTCI7fXM6MjQ6Ind3dy5hb2xyZWNoZXJjaGVzLmFvbC5mciI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo1OiJxdWVyeSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6ImFvbC9zZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czozOiJBT0wiO31zOjIwOiJ3d3cuYW9saW1hZ2VzLmFvbC5mciI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo1OiJxdWVyeSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6ImFvbC9zZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czozOiJBT0wiO31zOjE4OiJhaW0uc2VhcmNoLmFvbC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6NToicXVlcnkiO2k6MTtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJhb2wvc2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQU9MIjt9czoyMDoid3d3LnJlY2hlcmNoZS5hb2wuZnIiO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6NToicXVlcnkiO2k6MTtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJhb2wvc2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQU9MIjt9czoxNjoicmVjaGVyY2hlLmFvbC5mciI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo1OiJxdWVyeSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6ImFvbC9zZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czozOiJBT0wiO31zOjE2OiJmaW5kLndlYi5hb2wuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjU6InF1ZXJ5IjtpOjE7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNjoiYW9sL3NlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFPTCI7fXM6MTY6InJlY2hlcmNoZS5hb2wuY2EiO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6NToicXVlcnkiO2k6MTtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJhb2wvc2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQU9MIjt9czoxOToiYW9sc2VhcmNoLmFvbC5jby51ayI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo1OiJxdWVyeSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6ImFvbC9zZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czozOiJBT0wiO31zOjE2OiJzZWFyY2guYW9sLmNvLnVrIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjU6InF1ZXJ5IjtpOjE7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNjoiYW9sL3NlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFPTCI7fXM6MTk6ImFvbHJlY2hlcmNoZS5hb2wuZnIiO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6NToicXVlcnkiO2k6MTtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJhb2wvc2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQU9MIjt9czoxNToic3VjaGVhb2wuYW9sLmRlIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjU6InF1ZXJ5IjtpOjE7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNjoiYW9sL3NlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFPTCI7fXM6MTI6InN1Y2hlLmFvbC5kZSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo1OiJxdWVyeSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6ImFvbC9zZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czozOiJBT0wiO31zOjE0OiJvMnN1Y2hlLmFvbC5kZSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo1OiJxdWVyeSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6ImFvbC9zZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czozOiJBT0wiO31zOjE1OiJzdWNoZS5hb2xzdmMuZGUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6NToicXVlcnkiO2k6MTtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJhb2wvc2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQU9MIjt9czoyMjoiYW9sYnVzcXVlZGEuYW9sLmNvbS5teCI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo1OiJxdWVyeSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6ImFvbC9zZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czozOiJBT0wiO31zOjE3OiJhbGljZXN1Y2hlLmFvbC5kZSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo1OiJxdWVyeSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6ImFvbC9zZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czozOiJBT0wiO31zOjE4OiJhbGljZXN1Y2hldC5hb2wuZGUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6NToicXVlcnkiO2k6MTtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJhb2wvc2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQU9MIjt9czoxNDoic3VjaGV0Mi5hb2wuZGUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6NToicXVlcnkiO2k6MTtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJhb2wvc2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQU9MIjt9czoyMzoic2VhcmNoLmhwLm15LmFvbC5jb20uYXUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6NToicXVlcnkiO2k6MTtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJhb2wvc2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQU9MIjt9czoxOToic2VhcmNoLmhwLm15LmFvbC5kZSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo1OiJxdWVyeSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6ImFvbC9zZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czozOiJBT0wiO31zOjE5OiJzZWFyY2guaHAubXkuYW9sLml0IjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjU6InF1ZXJ5IjtpOjE7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNjoiYW9sL3NlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFPTCI7fXM6MjQ6InNlYXJjaC1pbnRsLm5ldHNjYXBlLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo1OiJxdWVyeSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6ImFvbC9zZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czozOiJBT0wiO31zOjE2OiJkZS5hb2xzZWFyY2guY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czozOiJBT0wiO31zOjI0OiJhcG9sbG8ubHYvcG9ydGFsL3NlYXJjaC8iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6Mzg6Ij9jb2Y9Rk9SSUQlM0ExMSZxPXtrfSZzZWFyY2hfd2hlcmU9d3d3IjtzOjQ6Im5hbWUiO3M6OToiQXBvbGxvIGx2Ijt9czoxMDoiYXBvbGxvNy5kZSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MTEyOiJhN2RiL2luZGV4LnBocD9xdWVyeT17a30mZGVfc2hhcmVsb29rPXRydWUmZGVfYmluZz10cnVlJmRlX3dpdGNoPXRydWUmZGVfZ29vZ2xlPXRydWUmZGVfeWFob289dHJ1ZSZkZV9seWNvcz10cnVlIjtzOjQ6Im5hbWUiO3M6NzoiQXBvbGxvNyI7fXM6MTE6InNtLmFwb3J0LnJ1IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InIiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cj17a30iO3M6NDoibmFtZSI7czo1OiJBcG9ydCI7fXM6OToiYXJhbWEuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiJzZWFyY2gucGhwMz9xPXtrfSI7czo0OiJuYW1lIjtzOjU6IkFyYW1hIjt9czoxMjoid3d3LmFyY29yLmRlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjg6IktleXdvcmRzIjt9czo4OiJiYWNrbGluayI7czozNzoiY29udGVudC9zZWFyY2hyZXN1bHQuanNwP0tleXdvcmRzPXtrfSI7czo0OiJuYW1lIjtzOjU6IkFyY29yIjt9czoxNzoiYXJpYW5uYS5saWJlcm8uaXQiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjM1OiJzZWFyY2gvYWJpbi9pbnRlZ3JhdGEuY2dpP3F1ZXJ5PXtrfSI7czo0OiJuYW1lIjtzOjc6IkFyaWFubmEiO31zOjE1OiJ3d3cuYXJpYW5uYS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjM1OiJzZWFyY2gvYWJpbi9pbnRlZ3JhdGEuY2dpP3F1ZXJ5PXtrfSI7czo0OiJuYW1lIjtzOjc6IkFyaWFubmEiO31zOjc6ImFzay5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mzp7aTowO3M6MzoiYXNrIjtpOjE7czoxOiJxIjtpOjI7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFzayI7fXM6MTE6IndlYi5hc2suY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjM6ImFzayI7aToxO3M6MToicSI7aToyO3M6OToic2VhcmNoZm9yIjt9czo4OiJiYWNrbGluayI7czo5OiJ3ZWI/cT17a30iO3M6NDoibmFtZSI7czozOiJBc2siO31zOjExOiJpbnQuYXNrLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YTozOntpOjA7czozOiJhc2siO2k6MTtzOjE6InEiO2k6MjtzOjk6InNlYXJjaGZvciI7fXM6ODoiYmFja2xpbmsiO3M6OToid2ViP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQXNrIjt9czoxMToibXdzLmFzay5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mzp7aTowO3M6MzoiYXNrIjtpOjE7czoxOiJxIjtpOjI7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFzayI7fXM6MTQ6ImltYWdlcy5hc2suY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjM6ImFzayI7aToxO3M6MToicSI7aToyO3M6OToic2VhcmNoZm9yIjt9czo4OiJiYWNrbGluayI7czo5OiJ3ZWI/cT17a30iO3M6NDoibmFtZSI7czozOiJBc2siO31zOjE3OiJpbWFnZXMue30uYXNrLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YTozOntpOjA7czozOiJhc2siO2k6MTtzOjE6InEiO2k6MjtzOjk6InNlYXJjaGZvciI7fXM6ODoiYmFja2xpbmsiO3M6OToid2ViP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQXNrIjt9czoxNzoiYXNrLnJlZmVyZW5jZS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mzp7aTowO3M6MzoiYXNrIjtpOjE7czoxOiJxIjtpOjI7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFzayI7fXM6MTU6Ind3dy5hc2traWRzLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YTozOntpOjA7czozOiJhc2siO2k6MTtzOjE6InEiO2k6MjtzOjk6InNlYXJjaGZvciI7fXM6ODoiYmFja2xpbmsiO3M6OToid2ViP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQXNrIjt9czoxMjoiaXdvbi5hc2suY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjM6ImFzayI7aToxO3M6MToicSI7aToyO3M6OToic2VhcmNoZm9yIjt9czo4OiJiYWNrbGluayI7czo5OiJ3ZWI/cT17a30iO3M6NDoibmFtZSI7czozOiJBc2siO31zOjEzOiJ3d3cuYXNrLmNvLnVrIjthOjM6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjM6ImFzayI7aToxO3M6MToicSI7aToyO3M6OToic2VhcmNoZm9yIjt9czo4OiJiYWNrbGluayI7czo5OiJ3ZWI/cT17a30iO3M6NDoibmFtZSI7czozOiJBc2siO31zOjEwOiJ7fS5hc2suY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjM6ImFzayI7aToxO3M6MToicSI7aToyO3M6OToic2VhcmNoZm9yIjt9czo4OiJiYWNrbGluayI7czo5OiJ3ZWI/cT17a30iO3M6NDoibmFtZSI7czozOiJBc2siO31zOjEzOiJ3d3cucWJ5cmQuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjM6ImFzayI7aToxO3M6MToicSI7aToyO3M6OToic2VhcmNoZm9yIjt9czo4OiJiYWNrbGluayI7czo5OiJ3ZWI/cT17a30iO3M6NDoibmFtZSI7czozOiJBc2siO31zOjEyOiJ7fS5xYnlyZC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mzp7aTowO3M6MzoiYXNrIjtpOjE7czoxOiJxIjtpOjI7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFzayI7fXM6MjI6Ind3dy5zZWFyY2gtcmVzdWx0cy5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mzp7aTowO3M6MzoiYXNrIjtpOjE7czoxOiJxIjtpOjI7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFzayI7fXM6MjM6Ind3dzEuc2VhcmNoLXJlc3VsdHMuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjM6ImFzayI7aToxO3M6MToicSI7aToyO3M6OToic2VhcmNoZm9yIjt9czo4OiJiYWNrbGluayI7czo5OiJ3ZWI/cT17a30iO3M6NDoibmFtZSI7czozOiJBc2siO31zOjIyOiJpbnQuc2VhcmNoLXJlc3VsdHMuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjM6ImFzayI7aToxO3M6MToicSI7aToyO3M6OToic2VhcmNoZm9yIjt9czo4OiJiYWNrbGluayI7czo5OiJ3ZWI/cT17a30iO3M6NDoibmFtZSI7czozOiJBc2siO31zOjIxOiJ7fS5zZWFyY2gtcmVzdWx0cy5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mzp7aTowO3M6MzoiYXNrIjtpOjE7czoxOiJxIjtpOjI7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFzayI7fXM6MTQ6InNlYXJjaC5hc2suY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjM6ImFzayI7aToxO3M6MToicSI7aToyO3M6OToic2VhcmNoZm9yIjt9czo4OiJiYWNrbGluayI7czo5OiJ3ZWI/cT17a30iO3M6NDoibmFtZSI7czozOiJBc2siO31zOjE3OiJ7fS5zZWFyY2guYXNrLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YTozOntpOjA7czozOiJhc2siO2k6MTtzOjE6InEiO2k6MjtzOjk6InNlYXJjaGZvciI7fXM6ODoiYmFja2xpbmsiO3M6OToid2ViP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQXNrIjt9czoxNzoiYXZpcmEtaW50LmFzay5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mzp7aTowO3M6MzoiYXNrIjtpOjE7czoxOiJxIjtpOjI7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFzayI7fXM6MTI6InNlYXJjaHF1LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YTozOntpOjA7czozOiJhc2siO2k6MTtzOjE6InEiO2k6MjtzOjk6InNlYXJjaGZvciI7fXM6ODoiYmFja2xpbmsiO3M6OToid2ViP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiQXNrIjt9czoxNzoic2VhcmNoLnRiLmFzay5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mzp7aTowO3M6MzoiYXNrIjtpOjE7czoxOiJxIjtpOjI7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFzayI7fXM6MjU6Im5vcnRvbnNhZmUuc2VhcmNoLmFzay5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mzp7aTowO3M6MzoiYXNrIjtpOjE7czoxOiJxIjtpOjI7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFzayI7fXM6MjA6ImF2aXJhLnNlYXJjaC5hc2suY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjM6ImFzayI7aToxO3M6MToicSI7aToyO3M6OToic2VhcmNoZm9yIjt9czo4OiJiYWNrbGluayI7czo5OiJ3ZWI/cT17a30iO3M6NDoibmFtZSI7czozOiJBc2siO31zOjIxOiJpbnQuc2VhcmNoLnRiLmFzay5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mzp7aTowO3M6MzoiYXNrIjtpOjE7czoxOiJxIjtpOjI7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IkFzayI7fXM6MTY6InNlYXJjaC5hdmlyYS5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6Mzp7aTowO3M6MzoiYXNrIjtpOjE7czoxOiJxIjtpOjI7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjE4OiIjL3dlYi9yZXN1bHQ/cT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czoxNjoiQXZpcmEgU2FmZVNlYXJjaCI7fXM6MTY6InNlYXJjaC5hdmlyYS5uZXQiO2E6NDp7czo2OiJwYXJhbXMiO2E6Mzp7aTowO3M6MzoiYXNrIjtpOjE7czoxOiJxIjtpOjI7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjE4OiIjL3dlYi9yZXN1bHQ/cT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czoxNjoiQXZpcmEgU2FmZVNlYXJjaCI7fXM6MjA6InNhZmVzZWFyY2guYXZpcmEuY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjM6ImFzayI7aToxO3M6MToicSI7aToyO3M6OToic2VhcmNoZm9yIjt9czo4OiJiYWNrbGluayI7czoxODoiIy93ZWIvcmVzdWx0P3E9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjI6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6MTY6IkF2aXJhIFNhZmVTZWFyY2giO31zOjIyOiJzZWFyY2hhdGxhcy5jZW50cnVtLmN6IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjU6IkF0bGFzIjt9czoxNToic2VhcmNoLmF1b25lLmpwIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo4OiJjaGFyc2V0cyI7YTozOntpOjA7czo1OiJ1dGYtOCI7aToxO3M6NjoiZXVjLWpwIjtpOjI7czo1OiJtczkzMiI7fXM6NDoibmFtZSI7czo1OiJhdW9uZSI7fXM6MTg6InNwLXNlYXJjaC5hdW9uZS5qcCI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo2OiI/cT17a30iO3M6ODoiY2hhcnNldHMiO2E6Mzp7aTowO3M6NToidXRmLTgiO2k6MTtzOjY6ImV1Yy1qcCI7aToyO3M6NToibXM5MzIiO31zOjQ6Im5hbWUiO3M6NToiYXVvbmUiO31zOjIyOiJzcC13ZWIuc2VhcmNoLmF1b25lLmpwIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo4OiJjaGFyc2V0cyI7YTozOntpOjA7czo1OiJ1dGYtOCI7aToxO3M6NjoiZXVjLWpwIjtpOjI7czo1OiJtczkzMiI7fXM6NDoibmFtZSI7czo1OiJhdW9uZSI7fXM6MjQ6InNwLWltYWdlLnNlYXJjaC5hdW9uZS5qcCI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo2OiI/cT17a30iO3M6ODoiY2hhcnNldHMiO2E6Mzp7aTowO3M6NToidXRmLTgiO2k6MTtzOjY6ImV1Yy1qcCI7aToyO3M6NToibXM5MzIiO31zOjQ6Im5hbWUiO3M6MTI6ImF1b25lIEltYWdlcyI7fXM6MTg6Ind3dzIuYXVzdHJvbmF1dC5hdCI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjEwOiJBdXN0cm9uYXV0Ijt9czoxODoid3d3MS5hdXN0cm9uYXV0LmF0IjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6MTA6IkF1c3Ryb25hdXQiO31zOjE4OiJzZWFyY2guYmFieWxvbi5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicSI7aToxO3M6MTM6Ii9cL3dlYlwvKC4qKS8iO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IkJhYnlsb24iO31zOjI0OiJzZWFyY2hhc3Npc3QuYmFieWxvbi5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicSI7aToxO3M6MTM6Ii9cL3dlYlwvKC4qKS8iO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IkJhYnlsb24iO31zOjEzOiJ3d3cuYmFpZHUuY29tIjthOjU6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjI6IndkIjtpOjE7czo0OiJ3b3JkIjtpOjI7czoyOiJrdyI7fXM6ODoiYmFja2xpbmsiO3M6ODoicz93ZD17a30iO3M6ODoiY2hhcnNldHMiO2E6Mjp7aTowO3M6NToiVVRGLTgiO2k6MTtzOjY6ImdiMjMxMiI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo1OiJCYWlkdSI7fXM6MTQ6Ind3dzEuYmFpZHUuY29tIjthOjU6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjI6IndkIjtpOjE7czo0OiJ3b3JkIjtpOjI7czoyOiJrdyI7fXM6ODoiYmFja2xpbmsiO3M6ODoicz93ZD17a30iO3M6ODoiY2hhcnNldHMiO2E6Mjp7aTowO3M6NToiVVRGLTgiO2k6MTtzOjY6ImdiMjMxMiI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo1OiJCYWlkdSI7fXM6OToiYmFpZHUuY29tIjthOjU6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjI6IndkIjtpOjE7czo0OiJ3b3JkIjtpOjI7czoyOiJrdyI7fXM6ODoiYmFja2xpbmsiO3M6ODoicz93ZD17a30iO3M6ODoiY2hhcnNldHMiO2E6Mjp7aTowO3M6NToiVVRGLTgiO2k6MTtzOjY6ImdiMjMxMiI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo1OiJCYWlkdSI7fXM6MTE6Im0uYmFpZHUuY29tIjthOjU6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjI6IndkIjtpOjE7czo0OiJ3b3JkIjtpOjI7czoyOiJrdyI7fXM6ODoiYmFja2xpbmsiO3M6ODoicz93ZD17a30iO3M6ODoiY2hhcnNldHMiO2E6Mjp7aTowO3M6NToiVVRGLTgiO2k6MTtzOjY6ImdiMjMxMiI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo1OiJCYWlkdSI7fXM6MTU6Ind3dy5iYWlkdS5jby50aCI7YTo1OntzOjY6InBhcmFtcyI7YTozOntpOjA7czoyOiJ3ZCI7aToxO3M6NDoid29yZCI7aToyO3M6Mjoia3ciO31zOjg6ImJhY2tsaW5rIjtzOjg6InM/d2Q9e2t9IjtzOjg6ImNoYXJzZXRzIjthOjI6e2k6MDtzOjU6IlVURi04IjtpOjE7czo2OiJnYjIzMTIiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjI6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6NToiQmFpZHUiO31zOjE2OiJ6aGlkYW8uYmFpZHUuY29tIjthOjU6e3M6NjoicGFyYW1zIjthOjM6e2k6MDtzOjI6IndkIjtpOjE7czo0OiJ3b3JkIjtpOjI7czoyOiJrdyI7fXM6ODoiYmFja2xpbmsiO3M6ODoicz93ZD17a30iO3M6ODoiY2hhcnNldHMiO2E6Mjp7aTowO3M6NToiVVRGLTgiO2k6MTtzOjY6ImdiMjMxMiI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo1OiJCYWlkdSI7fXM6MTU6InRpZWJhLmJhaWR1LmNvbSI7YTo1OntzOjY6InBhcmFtcyI7YTozOntpOjA7czoyOiJ3ZCI7aToxO3M6NDoid29yZCI7aToyO3M6Mjoia3ciO31zOjg6ImJhY2tsaW5rIjtzOjg6InM/d2Q9e2t9IjtzOjg6ImNoYXJzZXRzIjthOjI6e2k6MDtzOjU6IlVURi04IjtpOjE7czo2OiJnYjIzMTIiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjI6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6NToiQmFpZHUiO31zOjE0OiJuZXdzLmJhaWR1LmNvbSI7YTo1OntzOjY6InBhcmFtcyI7YTozOntpOjA7czoyOiJ3ZCI7aToxO3M6NDoid29yZCI7aToyO3M6Mjoia3ciO31zOjg6ImJhY2tsaW5rIjtzOjg6InM/d2Q9e2t9IjtzOjg6ImNoYXJzZXRzIjthOjI6e2k6MDtzOjU6IlVURi04IjtpOjE7czo2OiJnYjIzMTIiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjI6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6NToiQmFpZHUiO31zOjI0OiJjZ2kuc2VhcmNoLmJpZ2xvYmUubmUuanAiO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjM6ImNnaS1iaW4vc2VhcmNoLXN0P3E9e2t9IjtzOjg6ImNoYXJzZXRzIjthOjM6e2k6MDtzOjU6InV0Zi04IjtpOjE7czo2OiJldWMtanAiO2k6MjtzOjU6Im1zOTMyIjt9czo0OiJuYW1lIjtzOjc6IkJpZ2xvYmUiO31zOjI3OiJpbWFnZXMuc2VhcmNoLmJpZ2xvYmUubmUuanAiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjM6ImNnaS1iaW4vc2VhcmNoLXN0P3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTQ6IkJpZ2xvYmUgSW1hZ2VzIjt9czo4OiJiaW5nLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJxIjtpOjE7czoxOiJRIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjM6e2k6MDtzOjEwOiIvXC9jclw/LiovIjtpOjE7czo0OiIvXiQvIjtpOjI7czoxOiIvIjt9czo0OiJuYW1lIjtzOjQ6IkJpbmciO31zOjExOiJ7fS5iaW5nLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJxIjtpOjE7czoxOiJRIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjM6e2k6MDtzOjEwOiIvXC9jclw/LiovIjtpOjE7czo0OiIvXiQvIjtpOjI7czoxOiIvIjt9czo0OiJuYW1lIjtzOjQ6IkJpbmciO31zOjE1OiJnbG9iYWwuYmluZy5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicSI7aToxO3M6MToiUSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YTozOntpOjA7czoxMDoiL1wvY3JcPy4qLyI7aToxO3M6NDoiL14kLyI7aToyO3M6MToiLyI7fXM6NDoibmFtZSI7czo0OiJCaW5nIjt9czoxMzoibXNuYmMubXNuLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJxIjtpOjE7czoxOiJRIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NDoiQmluZyI7fXM6MjE6ImRpemlvbmFyaW8uaXQubXNuLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJxIjtpOjE7czoxOiJRIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NDoiQmluZyI7fXM6MjM6ImVuY2ljbG9wZWRpYS5pdC5tc24uY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InEiO2k6MTtzOjE6IlEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo0OiJCaW5nIjt9czoxMjoiY2MuYmluZ2ouY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InEiO2k6MTtzOjE6IlEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo0OiJCaW5nIjt9czoyMjoiYmluZy5jb20vaW1hZ2VzL3NlYXJjaCI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJxIjtpOjE7czoxOiJRIjt9czo4OiJiYWNrbGluayI7czo2OiI/cT17a30iO3M6NDoibmFtZSI7czoxMToiQmluZyBJbWFnZXMiO31zOjI1OiJ7fS5iaW5nLmNvbS9pbWFnZXMvc2VhcmNoIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InEiO2k6MTtzOjE6IlEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjExOiJCaW5nIEltYWdlcyI7fXM6MTA6ImJsZWtrby5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicSI7aToxO3M6MTI6Ii9cL3dzXC8oLiopLyI7fXM6ODoiYmFja2xpbmsiO3M6Njoid3Mve2t9IjtzOjQ6Im5hbWUiO3M6NjoiYmxla2tvIjt9czoxODoid3d3LmJsb2dkaWdnZXIuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6MTA6IkJsb2dkaWdnZXIiO31zOjE3OiJ3d3cuYmxvZ3B1bHNlLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6InNlYXJjaD9xdWVyeT17a30iO3M6NDoibmFtZSI7czo5OiJCbG9ncHVsc2UiO31zOjE3OiJzZWFyY2guYmx1ZXdpbi5jaCI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxMDoic2VhcmNoVGVybSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTg6InYyL2luZGV4LnBocD9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IkJsdWV3aW4iO31zOjE2OiJzZWFyY2guYnJhdmUuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo1OiJCcmF2ZSI7fXM6MTI6IndlYi5jYW5vZS5jYSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6ODoiQ2Fub2UuY2EiO31zOjE3OiJzZWFyY2guY2VudHJ1bS5jeiI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo2OiI/cT17a30iO3M6NDoibmFtZSI7czo3OiJDZW50cnVtIjt9czoxNzoibW9yZmVvLmNlbnRydW0uY3oiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6NjoiP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiQ2VudHJ1bSI7fXM6MTU6Ind3dy5jaGFydGVyLm5ldCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoyMjoic2VhcmNoL2luZGV4LnBocD9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IkNoYXJ0ZXIiO31zOjE2OiJjbGFyby1zZWFyY2guY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjEyOiJDbGFybyBTZWFyY2giO31zOjE1OiJjaGF0Lm9wZW5haS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MDp7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo3OiJDaGF0R1BUIjt9czoxMToiY2hhdGdwdC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MDp7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo3OiJDaGF0R1BUIjt9czoxNjoicGVzcXVpc2EuY2xpeC5wdCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo4OiJxdWVzdGlvbiI7fXM6ODoiYmFja2xpbmsiO3M6Mzg6InJlc3VsdGFkby5odG1sP2luPU11bmRpYWwmcXVlc3Rpb249e2t9IjtzOjQ6Im5hbWUiO3M6NDoiQ2xpeCI7fXM6MTA6ImNvY2NvYy5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJzZWFyY2gjcXVlcnk9e2t9IjtzOjQ6Im5hbWUiO3M6MTE6IkPhu5FjIEPhu5FjIjt9czoxODoic2VhcmNoLmNvbWNhc3QubmV0IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IkNvbWNhc3QiO31zOjE2OiJ3ZWJzZWFyY2guY3MuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoxOToiY3Mvc2VhcmNoP3F1ZXJ5PXtrfSI7czo0OiJuYW1lIjtzOjM1OiJDb21wdXNlcnZlLmNvbSAoRW5oYW5jZWQgYnkgR29vZ2xlKSI7fXM6MTg6InNlYXJjaC5jb25kdWl0LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxODoiUmVzdWx0cy5hc3B4P3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTE6IkNvbmR1aXQuY29tIjt9czoyNToiaW1hZ2VzLnNlYXJjaC5jb25kdWl0LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxODoiUmVzdWx0cy5hc3B4P3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTE6IkNvbmR1aXQuY29tIjt9czoxNToid3d3LmNyYXdsZXIuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjI2OiJzZWFyY2gvcmVzdWx0czEuYXNweD9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IkNyYXdsZXIiO31zOjEyOiJ3d3cuY3VpbC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjQ6IkN1aWwiO31zOjE3OiJkYWVtb24tc2VhcmNoLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNzoiZXhwbG9yZS93ZWI/cT17a30iO3M6NDoibmFtZSI7czoxMzoiRGFlbW9uIHNlYXJjaCI7fXM6MjA6Im15LmRhZW1vbi1zZWFyY2guY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiJleHBsb3JlL3dlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjEzOiJEYWVtb24gc2VhcmNoIjt9czoxOToid3d3LmRhc29lcnRsaWNoZS5kZSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoyOiJrdyI7fXM6NDoibmFtZSI7czoxMjoiRGFzT2VydGxpY2hlIjt9czoyMDoid3d3Mi5kYXNvZXJ0bGljaGUuZGUiO2E6Mjp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MjoicGgiO2k6MTtzOjI6Imt3Ijt9czo0OiJuYW1lIjtzOjEyOiJEYXNPZXJ0bGljaGUiO31zOjIyOiJ3d3cxLmRhc3RlbGVmb25idWNoLmRlIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjI6Imt3Ijt9czo0OiJuYW1lIjtzOjE0OiJEYXNUZWxlZm9uYnVjaCI7fXM6MTU6InNlYXJjaC5kYXVtLm5ldCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NDoiRGF1bSI7fXM6MTU6Im90c2luZy5kZWxmaS5lZSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMDoiZmluZD9xPXtrfSI7czo0OiJuYW1lIjtzOjg6IkRlbGZpIEVFIjt9czoxNDoic21hcnQuZGVsZmkubHYiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTA6ImZpbmQ/cT17a30iO3M6NDoibmFtZSI7czo4OiJEZWxmaSBsdiI7fXM6ODoiZGlnZy5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicyI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9zPXtrfSI7czo0OiJuYW1lIjtzOjQ6IkRpZ2ciO31zOjEwOiJmci5kaXIuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjM6InJlcSI7fXM6NDoibmFtZSI7czo3OiJkaXIuY29tIjt9czoyMDoic2VhcmNoLmRpc2Nvbm5lY3QubWUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MDp7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6MTp7aTowO3M6NDoiLy4qLyI7fXM6NDoibmFtZSI7czoxNjoiRGlzY29ubmVjdFNlYXJjaCI7fXM6ODoiZG1vei5vcmciO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Njoic2VhcmNoIjt9czo0OiJuYW1lIjtzOjQ6ImRtb3oiO31zOjE2OiJlZGl0b3JzLmRtb3oub3JnIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjY6InNlYXJjaCI7fXM6NDoibmFtZSI7czo0OiJkbW96Ijt9czoxNDoiZHVja2R1Y2tnby5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6MTp7aTowO3M6NDoiLy4qLyI7fXM6ODoiYmFja2xpbmsiO3M6NjoiP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTA6IkR1Y2tEdWNrR28iO31zOjE2OiJyLmR1Y2tkdWNrZ28uY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjE6e2k6MDtzOjQ6Ii8uKi8iO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjEwOiJEdWNrRHVja0dvIjt9czoyMDoic2VhcmNoLmVhcnRobGluay5uZXQiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkVhcnRobGluayI7fXM6MTA6ImVjb3NpYS5vcmciO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YToyOntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjt9czo0OiJuYW1lIjtzOjY6IkVjb3NpYSI7fXM6MTQ6Ind3dy5lY29zaWEub3JnIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo2OiJFY29zaWEiO31zOjE4OiJhcmlhZG5hLmVsbXVuZG8uZXMiO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6NDoibmFtZSI7czo4OiJFbCBNdW5kbyI7fXM6MTI6Ind3dy5lbmlyby5zZSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJxIjtpOjE7czoxMToic2VhcmNoX3dvcmQiO31zOjg6ImJhY2tsaW5rIjtzOjExOiJxdWVyeT9xPXtrfSI7czo0OiJuYW1lIjtzOjU6IkVuaXJvIjt9czoxNzoid3d3LmVudGlyZXdlYi5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6OToid2ViP3E9e2t9IjtzOjQ6Im5hbWUiO3M6OToiRW50aXJld2ViIjt9czo1OiJlby5zdCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo3OiJ4X3F1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czozMDoiY2dpLWJpbi9lb2xvc3QuY2dpP3hfcXVlcnk9e2t9IjtzOjQ6Im5hbWUiO3M6MjoiZW8iO31zOjEzOiJlcGljc2VhcmNoLmluIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEzOiJzZWFyY2gvP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTM6IkVwaWNTZWFyY2guaW4iO31zOjE3OiJ3d3cuZXBpY3NlYXJjaC5pbiI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMzoic2VhcmNoLz9xPXtrfSI7czo0OiJuYW1lIjtzOjEzOiJFcGljU2VhcmNoLmluIjt9czoxMzoid3d3LmV1cmlwLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMzoic2VhcmNoLz9xPXtrfSI7czo0OiJuYW1lIjtzOjU6IkV1cmlwIjt9czoxNjoid3d3LmV1cm9zZWVrLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo2OiJzdHJpbmciO31zOjg6ImJhY2tsaW5rIjtzOjI4OiJzeXN0ZW0vc2VhcmNoLmNnaT9zdHJpbmc9e2t9IjtzOjQ6Im5hbWUiO3M6ODoiRXVyb3NlZWsiO31zOjE4OiJ3d3cuZXZlcnljbGljay5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Nzoia2V5d29yZCI7fXM6NDoibmFtZSI7czoxMDoiRXZlcnljbGljayI7fXM6MTQ6Ind3dy5leGFsZWFkLmZyIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJzZWFyY2gvcmVzdWx0cz9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IkV4YWxlYWQiO31zOjE1OiJ3d3cuZXhhbGVhZC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6InNlYXJjaC9yZXN1bHRzP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiRXhhbGVhZCI7fXM6MTY6InNlYXJjaC5leGNpdGUuaXQiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTA6IndlYi8/cT17a30iO3M6NDoibmFtZSI7czo2OiJFeGNpdGUiO31zOjE2OiJzZWFyY2guZXhjaXRlLmZyIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEwOiJ3ZWIvP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiRXhjaXRlIjt9czoxNjoic2VhcmNoLmV4Y2l0ZS5kZSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMDoid2ViLz9xPXtrfSI7czo0OiJuYW1lIjtzOjY6IkV4Y2l0ZSI7fXM6MTk6InNlYXJjaC5leGNpdGUuY28udWsiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTA6IndlYi8/cT17a30iO3M6NDoibmFtZSI7czo2OiJFeGNpdGUiO31zOjE2OiJzZWFyY2guZXhjaXRlLmVzIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEwOiJ3ZWIvP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiRXhjaXRlIjt9czoxNjoic2VhcmNoLmV4Y2l0ZS5ubCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMDoid2ViLz9xPXtrfSI7czo0OiJuYW1lIjtzOjY6IkV4Y2l0ZSI7fXM6MTY6Im1zeG1sLmV4Y2l0ZS5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6NDE6Ii9cL1teXC9dK1wvd3NcL3Jlc3VsdHNcL1teXC9dK1wvKFteXC9dKykvIjtpOjE7czoxOiJxIjt9czo0OiJuYW1lIjtzOjY6IkV4Y2l0ZSI7fXM6MTY6Ind3dy5leGNpdGUuY28uanAiO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Njoic2VhcmNoIjt9czo4OiJiYWNrbGluayI7czoyMDoic2VhcmNoLmd3P3NlYXJjaD17a30iO3M6ODoiY2hhcnNldHMiO2E6MTp7aTowO3M6OToiU0hJRlRfSklTIjt9czo0OiJuYW1lIjtzOjY6IkV4Y2l0ZSI7fXM6MTY6Ind3dy5mYWNlYm9vay5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTM6InNlYXJjaC8/cT17a30iO3M6NDoibmFtZSI7czo4OiJGYWNlYm9vayI7fXM6MjU6Ind3dy5mYXN0YnJvd3NlcnNlYXJjaC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjY6InJlc3VsdHMvcmVzdWx0cy5hc3B4P3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTk6IkZhc3QgQnJvd3NlciBTZWFyY2giO31zOjE3OiJ3d3cuZmluZGh1cnRpZy5kayI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo5OiJ3ZWI/cT17a30iO3M6NDoibmFtZSI7czoxMDoiRmluZGh1cnRpZyI7fXM6MTU6Ind3dy5maXJlYmFsbC5kZSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMzoic2VhcmNoLz9xPXtrfSI7czo0OiJuYW1lIjtzOjg6IkZpcmViYWxsIjt9czoxMjoiZmlyZWJhbGwuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEzOiJzZWFyY2gvP3E9e2t9IjtzOjQ6Im5hbWUiO3M6ODoiRmlyZWJhbGwiO31zOjE4OiJ3d3cuZmlyc3RzZmluZC5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MzoicXJ5Ijt9czo0OiJuYW1lIjtzOjEwOiJGaXJzdHNmaW5kIjt9czoxNToid3d3LmZpeHN1Y2hlLmRlIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6ODoiRml4c3VjaGUiO31zOjExOiJ3d3cuZmxpeC5kZSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo3OiJrZXl3b3JkIjt9czo0OiJuYW1lIjtzOjc6IkZsaXguZGUiO31zOjE3OiJzZWFyY2guZm9vb29vLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMDoid2ViLz9xPXtrfSI7czo0OiJuYW1lIjtzOjY6IkZvb29vbyI7fXM6MTI6ImZvcmVzdGxlLm9yZyI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNjoic2VhcmNoLnBocD9xPXtrfSI7czo0OiJuYW1lIjtzOjg6IkZvcmVzdGxlIjt9czoxNToie30uZm9yZXN0bGUub3JnIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJzZWFyY2gucGhwP3E9e2t9IjtzOjQ6Im5hbWUiO3M6ODoiRm9yZXN0bGUiO31zOjEzOiJmb3Jlc3RsZS5tb2JpIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJzZWFyY2gucGhwP3E9e2t9IjtzOjQ6Im5hbWUiO3M6ODoiRm9yZXN0bGUiO31zOjIyOiJyZWNoZXJjaGUuZnJhbmNpdGUuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjQ6Im5hbWUiO31zOjQ6Im5hbWUiO3M6ODoiRnJhbmNpdGUiO31zOjE0OiJzZWFyY2guZnJlZS5mciI7YToyOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJxIjtpOjE7czoyOiJxcyI7fXM6NDoibmFtZSI7czo0OiJGcmVlIjt9czoxNzoic2VhcmNoMS0yLmZyZWUuZnIiO2E6Mjp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicSI7aToxO3M6MjoicXMiO31zOjQ6Im5hbWUiO3M6NDoiRnJlZSI7fXM6MTc6InNlYXJjaDEtMS5mcmVlLmZyIjthOjI6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InEiO2k6MTtzOjI6InFzIjt9czo0OiJuYW1lIjtzOjQ6IkZyZWUiO31zOjIwOiJzZWFyY2guZnJlZWNhdXNlLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJwIjt9czo4OiJiYWNrbGluayI7czo2OiI/cD17a30iO3M6NDoibmFtZSI7czo5OiJGcmVlQ2F1c2UiO31zOjE2OiJzdWNoZS5mcmVlbmV0LmRlIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjU6InF1ZXJ5IjtpOjE7czo4OiJLZXl3b3JkcyI7fXM6ODoiYmFja2xpbmsiO3M6MTY6InN1Y2hlLz9xdWVyeT17a30iO3M6NDoibmFtZSI7czo3OiJGcmVlbmV0Ijt9czoxNDoiZnJpZW5kZmVlZC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjEwOiJGcmllbmRGZWVkIjt9czoxOToic2VhcmNoLmZyb250aWVyLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMzoic2VhcmNoLz9xPXtrfSI7czo0OiJuYW1lIjtzOjg6IkZyb250aWVyIjt9czoxODoiZ2Fpcy5jcy5jY3UuZWR1LnR3IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJzZWFyY2gucGhwP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NDoiR0FJUyI7fXM6MTc6InNlYXJjaC5nZW5pZW8uY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6IiZxPXtrfSI7czo0OiJuYW1lIjtzOjY6IkdlbmllbyI7fXM6OToiZ2VvbmEubmV0IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo1OiJHZW9uYSI7fXM6MTA6ImdpYmlydS5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTg6InJlc3VsdHMuaHRtbD9xPXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YToyOntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjt9czo0OiJuYW1lIjtzOjY6IkdpYmlydSI7fXM6MTQ6Ind3dy5naWJpcnUuY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE4OiJyZXN1bHRzLmh0bWw/cT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo2OiJHaWJpcnUiO31zOjE3OiJ3d3cuZ2lnYWJsYXN0LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6OToiR2lnYWJsYXN0Ijt9czoxNzoiZGlyLmdpZ2FibGFzdC5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6NDoibmFtZSI7czoyMToiR2lnYWJsYXN0IChEaXJlY3RvcnkpIjt9czoxNzoid3d3LmduYWRlbm1lZXIuZGUiO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Nzoia2V5d29yZCI7fXM6NDoibmFtZSI7czoxMDoiR25hZGVubWVlciI7fXM6MTM6Ind3dy5nb21lby5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6ODoiS2V5d29yZHMiO2k6MTtzOjIwOiIvXC9zZWFyY2hcLyhbXlwvXSspLyI7fXM6ODoiYmFja2xpbmsiO3M6MTE6Ii9zZWFyY2gve2t9IjtzOjQ6Im5hbWUiO3M6NToiR29tZW8iO31zOjE2OiJzZWFyY2guZ29vLm5lLmpwIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjI6Ik1UIjt9czo4OiJiYWNrbGluayI7czoxNDoid2ViLmpzcD9NVD17a30iO3M6NDoibmFtZSI7czozOiJnb28iO31zOjE5OiJvY25zZWFyY2guZ29vLm5lLmpwIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjI6Ik1UIjt9czo4OiJiYWNrbGluayI7czoxNDoid2ViLmpzcD9NVD17a30iO3M6NDoibmFtZSI7czozOiJnb28iO31zOjEwOiJnb29nbGUuY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjQ6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO2k6MjtzOjE3OiIvXC9zZWFyY2goXD8uKik/LyI7aTozO3M6MTE6Ii9cL3VybFw/LiovIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czo5OiJnb29nbGUue30iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6NDp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7aToyO3M6MTc6Ii9cL3NlYXJjaChcPy4qKT8vIjtpOjM7czoxMToiL1wvdXJsXD8uKi8iO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjIwOiJlbmNyeXB0ZWQuZ29vZ2xlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czoxMzoiaGlkZGVua2V5d29yZCI7YTo0OntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjtpOjI7czoxNzoiL1wvc2VhcmNoKFw/LiopPy8iO2k6MztzOjExOiIvXC91cmxcPy4qLyI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MTU6Ind3dzIuZ29vZ2xlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czoxMzoiaGlkZGVua2V5d29yZCI7YTo0OntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjtpOjI7czoxNzoiL1wvc2VhcmNoKFw/LiopPy8iO2k6MztzOjExOiIvXC91cmxcPy4qLyI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MTU6ImlwdjYuZ29vZ2xlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czoxMzoiaGlkZGVua2V5d29yZCI7YTo0OntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjtpOjI7czoxNzoiL1wvc2VhcmNoKFw/LiopPy8iO2k6MztzOjExOiIvXC91cmxcPy4qLyI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MTM6ImdvLmdvb2dsZS5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6NDp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7aToyO3M6MTc6Ii9cL3NlYXJjaChcPy4qKT8vIjtpOjM7czoxMToiL1wvdXJsXD8uKi8iO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjEzOiJ3d3dnb29nbGUuY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjQ6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO2k6MjtzOjE3OiIvXC9zZWFyY2goXD8uKik/LyI7aTozO3M6MTE6Ii9cL3VybFw/LiovIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxMjoid3d3Z29vZ2xlLnt9IjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjQ6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO2k6MjtzOjE3OiIvXC9zZWFyY2goXD8uKik/LyI7aTozO3M6MTE6Ii9cL3VybFw/LiovIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxMDoiZ29nb2xlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czoxMzoiaGlkZGVua2V5d29yZCI7YTo0OntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjtpOjI7czoxNzoiL1wvc2VhcmNoKFw/LiopPy8iO2k6MztzOjExOiIvXC91cmxcPy4qLyI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6OToiZ29nb2xlLnt9IjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjQ6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO2k6MjtzOjE3OiIvXC9zZWFyY2goXD8uKik/LyI7aTozO3M6MTE6Ii9cL3VybFw/LiovIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxMDoiZ3BwZ2xlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czoxMzoiaGlkZGVua2V5d29yZCI7YTo0OntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjtpOjI7czoxNzoiL1wvc2VhcmNoKFw/LiopPy8iO2k6MztzOjExOiIvXC91cmxcPy4qLyI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6OToiZ3BwZ2xlLnt9IjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjQ6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO2k6MjtzOjE3OiIvXC9zZWFyY2goXD8uKik/LyI7aTozO3M6MTE6Ii9cL3VybFw/LiovIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxMDoiZ29vZ2VsLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czoxMzoiaGlkZGVua2V5d29yZCI7YTo0OntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjtpOjI7czoxNzoiL1wvc2VhcmNoKFw/LiopPy8iO2k6MztzOjExOiIvXC91cmxcPy4qLyI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6OToiZ29vZ2VsLnt9IjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjQ6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO2k6MjtzOjE3OiIvXC9zZWFyY2goXD8uKik/LyI7aTozO3M6MTE6Ii9cL3VybFw/LiovIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxNDoic2VhcmNoLmF2Zy5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6NDp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7aToyO3M6MTc6Ii9cL3NlYXJjaChcPy4qKT8vIjtpOjM7czoxMToiL1wvdXJsXD8uKi8iO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjE1OiJpc2VhcmNoLmF2Zy5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6NDp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7aToyO3M6MTc6Ii9cL3NlYXJjaChcPy4qKT8vIjtpOjM7czoxMToiL1wvdXJsXD8uKi8iO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjM5OiJjb20uZ29vZ2xlLmFuZHJvaWQuZ29vZ2xlcXVpY2tzZWFyY2hib3giO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6MTp7aTowO3M6NDoiLy4qLyI7fXM6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjczOiJhbmRyb2lkLWFwcC8vY29tLmdvb2dsZS5hbmRyb2lkLmdvb2dsZXF1aWNrc2VhcmNoYm94L2h0dHBzL3d3dy5nb29nbGUuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjE6e2k6MDtzOjQ6Ii8uKi8iO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxNzoic2VhcmNoLmNoZWRvdC5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NDoidGV4dCI7fXM6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjExOiJ3d3cuY25uLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjEzOiJkYXJrb29nbGUuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MjA6InNlYXJjaC5kYXJrb29nbGUuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MTc6InNlYXJjaC5mb3h0YWIuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MjI6Ind3dy5nb29vZnVsbHNlYXJjaC5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6ODoiS2V5d29yZHMiO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxNToic2VhcmNoLmhpeW8uY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjg6IktleXdvcmRzIjt9czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MjI6InNlYXJjaC5pbmNyZWRpbWFpbC5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6ODoiS2V5d29yZHMiO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoyMzoic2VhcmNoMS5pbmNyZWRpbWFpbC5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6ODoiS2V5d29yZHMiO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoyMzoic2VhcmNoMi5pbmNyZWRpbWFpbC5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6ODoiS2V5d29yZHMiO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoyMzoic2VhcmNoMy5pbmNyZWRpbWFpbC5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6ODoiS2V5d29yZHMiO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoyMzoic2VhcmNoNC5pbmNyZWRpbWFpbC5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6ODoiS2V5d29yZHMiO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxODoic2VhcmNoLnN3ZWV0aW0uY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjg6IktleXdvcmRzIjt9czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MTQ6Ind3dy5mYXN0d2ViLml0IjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjg6IktleXdvcmRzIjt9czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MTU6InNlYXJjaC5qdW5vLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjE0OiJzZWFyY2guenVtLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjExOiJmaW5kLnRkYy5kayI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjEwOiJpdC5sdW5hLnR2IjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MjU6InNlYXJjaHJlc3VsdHMudmVyaXpvbi5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxODoic2VhcmNoLndhbGxhLmNvLmlsIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MTU6InNlYXJjaC5hbG90LmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjEzOiJzdWNoZS5nbXgubmV0IjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YToyOntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjt9czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MTQ6InNlYXJjaC5nbXguY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YToyOntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjt9czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MjE6InNlYXJjaC5pbmNyZWRpYmFyLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNjoic2VhcmNoLnBocD9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MjA6Ind3dy5kZWx0YS1zZWFyY2guY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoyMToid3d3MS5kZWx0YS1zZWFyY2guY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxNToic2VhcmNoLjF1bmQxLmRlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MTQ6InN1Y2hlLjF1bmQxLmRlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MjA6InNlYXJjaC56b25lYWxhcm0uY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MTY6InN0YXJ0Lmxlbm92by5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjI6InNlYXJjaC9pbmRleC5waHA/cT17a30iO3M6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjc6Indvdy5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjI6InNlYXJjaC9pbmRleC5waHA/cT17a30iO3M6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjEwOiJ7fS53b3cuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjIyOiJzZWFyY2gvaW5kZXgucGhwP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxODoic2VhcmNoLmxlb25hcmRvLml0IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjIyOiJzZWFyY2gvaW5kZXgucGhwP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxOToid3d3Lm9wdHVzem9vLmNvbS5hdSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoyMjoic2VhcmNoL2luZGV4LnBocD9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MjU6InNlYXJjaC5kb2xwaGluLWJyb3dzZXIuanAiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjI6InNlYXJjaC9pbmRleC5waHA/cT17a30iO3M6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjE4OiJuZXRsYXZpcy5hemlvbmUuanAiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjI6InNlYXJjaC9pbmRleC5waHA/cT17a30iO3M6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjEzOiJzZWFyY2gubmFuLnNvIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjIyOiJzZWFyY2gvaW5kZXgucGhwP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxOToiY2dpMi5uaW50ZW5kby5jby5qcCI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJnc2MucSI7fXM6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjIzOiJzZWFyY2guc210LmRvY29tby5uZS5qcCI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoyOiJNVCI7fXM6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjI5OiJpbWFnZS5zZWFyY2guc210LmRvY29tby5uZS5qcCI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoyOiJNVCI7fXM6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjEwOiJnZnNvc28uY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoyNToic2VhcmNoZXMuc2FmZWhvbWVwYWdlLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MjE6InNlYXJjaGVzLmYtc2VjdXJlLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6InNlYXJjaD9xdWVyeT17a30iO3M6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjE5OiJzZWFyY2guZi1zZWN1cmUuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoxNjoic2VhcmNoP3F1ZXJ5PXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MzA6IndlYmNhY2hlLmdvb2dsZXVzZXJjb250ZW50LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo0OToiL1wvc2VhcmNoXD9xPWNhY2hlOig/OltBLVphLXowLTldKyk6W14rXSsoW14mXSspLyI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MTk6Im1vbnVtZW50YnJvd3Nlci5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6NjoiP3E9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjI6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxMzoic2VhcmNoLmJ0LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJwIjt9czo4OiJiYWNrbGluayI7czoxMjoicmVzdWx0P3A9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxMDoic3RhcnRhYi5tZSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMzoic2VhcmNoLz9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MTM6InNlYXJjaC5hYnYuYmciO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6InNlYXJjaC5waHA/cT17a30iO3M6NDoibmFtZSI7czo2OiJHb29nbGUiO31zOjE4OiJzZWFyY2gueGZpbml0eS5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MTA6InNlYXJjaFRlcm0iO31zOjQ6Im5hbWUiO3M6NjoiR29vZ2xlIjt9czoxNDoid3d3LmthZGF6YS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikdvb2dsZSI7fXM6MjE6ImJsb2dzZWFyY2guZ29vZ2xlLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNjoiYmxvZ3NlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjE3OiJHb29nbGUgQmxvZ3NlYXJjaCI7fXM6MjA6ImJsb2dzZWFyY2guZ29vZ2xlLnt9IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJibG9nc2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTc6Ikdvb2dsZSBCbG9nc2VhcmNoIjt9czoxNDoiZ29vZ2xlLmNvbS9jc2UiO2E6Mjp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicSI7aToxO3M6NToicXVlcnkiO31zOjQ6Im5hbWUiO3M6MjA6Ikdvb2dsZSBDdXN0b20gU2VhcmNoIjt9czoxMzoiZ29vZ2xlLnt9L2NzZSI7YToyOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJxIjtpOjE7czo1OiJxdWVyeSI7fXM6NDoibmFtZSI7czoyMDoiR29vZ2xlIEN1c3RvbSBTZWFyY2giO31zOjE0OiJjc2UuZ29vZ2xlLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJxIjtpOjE7czo1OiJxdWVyeSI7fXM6NDoibmFtZSI7czoyMDoiR29vZ2xlIEN1c3RvbSBTZWFyY2giO31zOjEzOiJjc2UuZ29vZ2xlLnt9IjthOjI6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InEiO2k6MTtzOjU6InF1ZXJ5Ijt9czo0OiJuYW1lIjtzOjIwOiJHb29nbGUgQ3VzdG9tIFNlYXJjaCI7fXM6MTc6Imdvb2dsZS5jb20vY3VzdG9tIjthOjI6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InEiO2k6MTtzOjU6InF1ZXJ5Ijt9czo0OiJuYW1lIjtzOjIwOiJHb29nbGUgQ3VzdG9tIFNlYXJjaCI7fXM6MTY6Imdvb2dsZS57fS9jdXN0b20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicSI7aToxO3M6NToicXVlcnkiO31zOjQ6Im5hbWUiO3M6MjA6Ikdvb2dsZSBDdXN0b20gU2VhcmNoIjt9czoxNzoiaW1hZ2VzLmdvb2dsZS5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6MTp7aTowO3M6NDoiLy4qLyI7fXM6ODoiYmFja2xpbmsiO3M6MTI6ImltYWdlcz9xPXtrfSI7czo0OiJuYW1lIjtzOjEzOiJHb29nbGUgSW1hZ2VzIjt9czoxNjoiaW1hZ2VzLmdvb2dsZS57fSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czoxMzoiaGlkZGVua2V5d29yZCI7YToxOntpOjA7czo0OiIvLiovIjt9czo4OiJiYWNrbGluayI7czoxMjoiaW1hZ2VzP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTM6Ikdvb2dsZSBJbWFnZXMiO31zOjE3OiJnb29nbGUuY29tL2ltZ3JlcyI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czoxMzoiaGlkZGVua2V5d29yZCI7YToxOntpOjA7czo0OiIvLiovIjt9czo4OiJiYWNrbGluayI7czoxMjoiaW1hZ2VzP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTM6Ikdvb2dsZSBJbWFnZXMiO31zOjE2OiJnb29nbGUue30vaW1ncmVzIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjE6e2k6MDtzOjQ6Ii8uKi8iO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJpbWFnZXM/cT17a30iO3M6NDoibmFtZSI7czoxMzoiR29vZ2xlIEltYWdlcyI7fXM6MTU6Im1hcHMuZ29vZ2xlLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMDoibWFwcz9xPXtrfSI7czo0OiJuYW1lIjtzOjExOiJHb29nbGUgTWFwcyI7fXM6MTQ6Im1hcHMuZ29vZ2xlLnt9IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEwOiJtYXBzP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTE6Ikdvb2dsZSBNYXBzIjt9czoxNToibmV3cy5nb29nbGUuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6MTE6Ikdvb2dsZSBOZXdzIjt9czoxNDoibmV3cy5nb29nbGUue30iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6NDoibmFtZSI7czoxMToiR29vZ2xlIE5ld3MiO31zOjE4OiJzY2hvbGFyLmdvb2dsZS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTM6InNjaG9sYXI/cT17a30iO3M6NDoibmFtZSI7czoxNDoiR29vZ2xlIFNjaG9sYXIiO31zOjE3OiJzY2hvbGFyLmdvb2dsZS57fSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMzoic2Nob2xhcj9xPXtrfSI7czo0OiJuYW1lIjtzOjE0OiJHb29nbGUgU2Nob2xhciI7fXM6MTk6Imdvb2dsZS5jb20vcHJvZHVjdHMiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTU6Ij9xPXtrfSZ0Ym09c2hvcCI7czo0OiJuYW1lIjtzOjE1OiJHb29nbGUgU2hvcHBpbmciO31zOjE4OiJnb29nbGUue30vcHJvZHVjdHMiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTU6Ij9xPXtrfSZ0Ym09c2hvcCI7czo0OiJuYW1lIjtzOjE1OiJHb29nbGUgU2hvcHBpbmciO31zOjI2OiJnb29nbGVzeW5kaWNhdGVkc2VhcmNoLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjI0OiJHb29nbGUgc3luZGljYXRlZCBzZWFyY2giO31zOjIwOiJ0cmFuc2xhdGUuZ29vZ2xlLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjE5OiJHb29nbGUgVHJhbnNsYXRpb25zIjt9czoxNjoidmlkZW8uZ29vZ2xlLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoyMDoic2VhcmNoP3E9e2t9JnRibT12aWQiO3M6NDoibmFtZSI7czoxMjoiR29vZ2xlIFZpZGVvIjt9czoxNToid3d3LmdveWVsbG93LmRlIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjM6Ik1ETiI7fXM6NDoibmFtZSI7czoxMToiR29ZZWxsb3cuZGUiO31zOjE2OiJ3d3cuZ3VsZXNpZGVyLm5vIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6MTA6Ikd1bGUgU2lkZXIiO31zOjE0OiJ3d3cuaGFvc291LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo3OiJzP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiSGFvc291Ijt9czoxNjoid3d3LmhpZ2hiZWFtLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNzoiU2VhcmNoLmFzcHg/cT17a30iO3M6NDoibmFtZSI7czo4OiJIaWdoQmVhbSI7fXM6MTg6InJlcS5oaXQtcGFyYWRlLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoyOiJwNyI7fXM6ODoiYmFja2xpbmsiO3M6Mjg6ImdlbmVyYWwvcmVjaGVyY2hlLmFzcD9wNz17a30iO3M6NDoibmFtZSI7czoxMDoiSGl0LVBhcmFkZSI7fXM6MjA6ImNsYXNzLmhpdC1wYXJhZGUuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjI6InA3Ijt9czo4OiJiYWNrbGluayI7czoyODoiZ2VuZXJhbC9yZWNoZXJjaGUuYXNwP3A3PXtrfSI7czo0OiJuYW1lIjtzOjEwOiJIaXQtUGFyYWRlIjt9czoxODoid3d3LmhpdC1wYXJhZGUuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjI6InA3Ijt9czo4OiJiYWNrbGluayI7czoyODoiZ2VuZXJhbC9yZWNoZXJjaGUuYXNwP3A3PXtrfSI7czo0OiJuYW1lIjtzOjEwOiJIaXQtUGFyYWRlIjt9czo5OiJob2xtZXMuZ2UiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6InNlYXJjaC5odG0/cT17a30iO3M6NDoibmFtZSI7czo2OiJIb2xtZXMiO31zOjE1OiJ3d3cuaG9vc2Vlay5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6OToicmVjaGVyY2hlIjt9czo4OiJiYWNrbGluayI7czoxNzoid2ViP3JlY2hlcmNoZT17a30iO3M6NDoibmFtZSI7czo3OiJIb29zZWVrIjt9czoxNDoid3d3LmhvdGJvdC5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjQ6Im5hbWUiO3M6NjoiSG90Ym90Ijt9czoxNToic3RhcnQuaXBsYXkuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjI0OiJzZWFyY2hyZXN1bHRzLmFzcHg/cT17a30iO3M6NDoibmFtZSI7czo2OiJJLXBsYXkiO31zOjE5OiJibG9ncy5pY2Vyb2NrZXQuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo5OiJJY2Vyb2NrZXQiO31zOjExOiJ3d3cuaWNxLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoyNDoic2VhcmNoL3Jlc3VsdHMucGhwP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiSUNRIjt9czoxNDoic2VhcmNoLmljcS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjQ6InNlYXJjaC9yZXN1bHRzLnBocD9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IklDUSI7fXM6MTE6Ind3dy5pbHNlLm5sIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjEwOiJzZWFyY2hfZm9yIjt9czo4OiJiYWNrbGluayI7czoxNToiP3NlYXJjaF9mb3I9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiSWxzZSBOTCI7fXM6MTY6InNlYXJjaC5pbWVzaC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicSI7aToxO3M6Mjoic2kiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjU6ImlNZXNoIjt9czoxNDoid3d3Mi5pbmJveC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjY6InNlYXJjaC9yZXN1bHRzMS5hc3B4P3E9e2t9IjtzOjQ6Im5hbWUiO3M6NToiSW5ib3giO31zOjEzOiJpbmZvc3BhY2UuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiIvc2VhcmNoL3dlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MTE6ImRvZ3BpbGUuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiIvc2VhcmNoL3dlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MTM6InRhdHRvb2RsZS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTc6Ii9zZWFyY2gvd2ViP3E9e2t9IjtzOjQ6Im5hbWUiO3M6OToiSW5mb1NwYWNlIjt9czoxNToibWV0YWNyYXdsZXIuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiIvc2VhcmNoL3dlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MTI6IndlYmZldGNoLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNzoiL3NlYXJjaC93ZWI/cT17a30iO3M6NDoibmFtZSI7czo5OiJJbmZvU3BhY2UiO31zOjE0OiJ3ZWJjcmF3bGVyLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNzoiL3NlYXJjaC93ZWI/cT17a30iO3M6NDoibmFtZSI7czo5OiJJbmZvU3BhY2UiO31zOjE2OiJzZWFyY2gua2l3ZWUuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiIvc2VhcmNoL3dlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MjA6InNlYXJjaGVzLnZpLXZpZXcuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiIvc2VhcmNoL3dlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MjM6InNlYXJjaC53ZWJzc2VhcmNoZXMuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiIvc2VhcmNoL3dlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MjM6InNlYXJjaC5mYmRvd25sb2FkZXIuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiIvc2VhcmNoL3dlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MjM6InNlYXJjaGVzMy5nbG9ib3Nvc28uY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiIvc2VhcmNoL3dlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MjE6IndzZHNvbGQuaW5mb3NwYWNlLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo0MToiL1wvW15cL10rXC93c1wvcmVzdWx0c1wvW15cL10rXC8oW15cL10rKS8iO31zOjg6ImJhY2tsaW5rIjtzOjYyOiJwZW1vbml0b3Job3N0ZWQvd3MvcmVzdWx0cy9XZWIve2t9LzEvNDE3L1RvcE5hdmlnYXRpb24vU291cmNlLyI7czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MTY6InNlYXJjaC5hdmFzdC5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6NDoibmFtZSI7czo5OiJJbmZvU3BhY2UiO31zOjE5OiJpc2VhcmNoLmJhYnlsb24uY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6OToiSW5mb1NwYWNlIjt9czoxOToic3RhcnQuZmFjZW1vb2RzLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJzIjt9czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MTg6InN0YXJ0LmZ1bm1vb2RzLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MTk6InNlYXJjaC5tYWdlbnRpYy5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6NDoibmFtZSI7czo5OiJJbmZvU3BhY2UiO31zOjI3OiJzZWFyY2guc2VhcmNoY29tcGxldGlvbi5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6NDoibmFtZSI7czo5OiJJbmZvU3BhY2UiO31zOjI2OiJ3d3cuc2VhcmNobW9iaWxlb25saW5lLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MjE6ImlzZWFyY2guZ2xhcnlzb2Z0LmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MTg6InNlYXJjaC5jaGF0enVtLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MTc6ImhvbWUuc3BlZWRiaXQuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6OToiSW5mb1NwYWNlIjt9czoxMzoic2VhcmNoLmIxLm9yZyI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MTI6InNlYXJjaHlhLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MjA6InNlYXJjaC5oYW5keWNhZmUuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6OToiSW5mb1NwYWNlIjt9czoxMzoic2VhcmNoLnY5LmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MTg6InNlYXJjaC5pbWluZW50LmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjk6IkluZm9TcGFjZSI7fXM6MjM6InV0b3JyZW50Lmluc3BzZWFyY2guY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6OToiSW5mb1NwYWNlIjt9czoyMToiZ292b21lLmluc3BzZWFyY2guY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6OToiSW5mb1NwYWNlIjt9czoyMToid3d3Lmdvb2dsZS5pbnRlcmlhLnBsIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzenVrYWo/cT17a30iO3M6NDoibmFtZSI7czo3OiJJbnRlcmlhIjt9czoxNToid3d3Lmlzb2RlbGVuLnNlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjg6IktleXdvcmRzIjt9czo4OiJiYWNrbGluayI7czoyNDoic29rcmVzdWx0YXQ/S2V5d29yZHM9e2t9IjtzOjQ6Im5hbWUiO3M6ODoiSXNvZGVsZW4iO31zOjExOiJpeHF1aWNrLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjE6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7fXM6NDoibmFtZSI7czo3OiJJeFF1aWNrIjt9czoxODoid3d3LmV1Lml4cXVpY2suY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoyMDoiZG8vYXNlYXJjaD9xdWVyeT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6MTp7aTowO3M6MTE6Ii9kby9hc2VhcmNoIjt9czo0OiJuYW1lIjtzOjc6Ikl4UXVpY2siO31zOjEwOiJpeHF1aWNrLmRlIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoyMDoiZG8vYXNlYXJjaD9xdWVyeT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6MTp7aTowO3M6MTE6Ii9kby9hc2VhcmNoIjt9czo0OiJuYW1lIjtzOjc6Ikl4UXVpY2siO31zOjE0OiJ3d3cuaXhxdWljay5kZSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjE6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7fXM6NDoibmFtZSI7czo3OiJJeFF1aWNrIjt9czoxNDoidXMuaXhxdWljay5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJkby9hc2VhcmNoP3F1ZXJ5PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YToxOntpOjA7czoxMToiL2RvL2FzZWFyY2giO31zOjQ6Im5hbWUiO3M6NzoiSXhRdWljayI7fXM6MTc6InMxLnVzLml4cXVpY2suY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoyMDoiZG8vYXNlYXJjaD9xdWVyeT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6MTp7aTowO3M6MTE6Ii9kby9hc2VhcmNoIjt9czo0OiJuYW1lIjtzOjc6Ikl4UXVpY2siO31zOjE3OiJzMi51cy5peHF1aWNrLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjE6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7fXM6NDoibmFtZSI7czo3OiJJeFF1aWNrIjt9czoxNzoiczMudXMuaXhxdWljay5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJkby9hc2VhcmNoP3F1ZXJ5PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YToxOntpOjA7czoxMToiL2RvL2FzZWFyY2giO31zOjQ6Im5hbWUiO3M6NzoiSXhRdWljayI7fXM6MTc6InM0LnVzLml4cXVpY2suY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoyMDoiZG8vYXNlYXJjaD9xdWVyeT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6MTp7aTowO3M6MTE6Ii9kby9hc2VhcmNoIjt9czo0OiJuYW1lIjtzOjc6Ikl4UXVpY2siO31zOjE3OiJzNS51cy5peHF1aWNrLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjE6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7fXM6NDoibmFtZSI7czo3OiJJeFF1aWNrIjt9czoxNDoiZXUuaXhxdWljay5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJkby9hc2VhcmNoP3F1ZXJ5PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YToxOntpOjA7czoxMToiL2RvL2FzZWFyY2giO31zOjQ6Im5hbWUiO3M6NzoiSXhRdWljayI7fXM6MTc6InM4LWV1Lml4cXVpY2suY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoyMDoiZG8vYXNlYXJjaD9xdWVyeT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6MTp7aTowO3M6MTE6Ii9kby9hc2VhcmNoIjt9czo0OiJuYW1lIjtzOjc6Ikl4UXVpY2siO31zOjE2OiJzMS1ldS5peHF1aWNrLmRlIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoyMDoiZG8vYXNlYXJjaD9xdWVyeT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6MTp7aTowO3M6MTE6Ii9kby9hc2VhcmNoIjt9czo0OiJuYW1lIjtzOjc6Ikl4UXVpY2siO31zOjE4OiJzMi1ldTQuaXhxdWljay5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJkby9hc2VhcmNoP3F1ZXJ5PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YToxOntpOjA7czoxMToiL2RvL2FzZWFyY2giO31zOjQ6Im5hbWUiO3M6NzoiSXhRdWljayI7fXM6MTg6InM1LWV1NC5peHF1aWNrLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjE6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7fXM6NDoibmFtZSI7czo3OiJJeFF1aWNrIjt9czoxMzoianVuZ2xla2V5LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6Mzc6InNlYXJjaC5waHA/cXVlcnk9e2t9JnR5cGU9d2ViJmxhbmc9ZW4iO3M6NDoibmFtZSI7czoxMDoiSnVuZ2xlIEtleSI7fXM6MTI6Imp1bmdsZWtleS5mciI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6Mzc6InNlYXJjaC5waHA/cXVlcnk9e2t9JnR5cGU9d2ViJmxhbmc9ZW4iO3M6NDoibmFtZSI7czoxMDoiSnVuZ2xlIEtleSI7fXM6MjA6Ind3dy5qdW5nbGUtc3BpZGVyLmRlIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6MTM6Ikp1bmdsZSBTcGlkZXIiO31zOjI0OiJ3d3cuanVuaW9yc2FmZXNlYXJjaC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjE4OiJKdW5pb3IgU2FmZSBTZWFyY2giO31zOjEyOiJqeXhvLjExODguY3oiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6Nzoicz9xPXtrfSI7czo0OiJuYW1lIjtzOjQ6Ikp5eG8iO31zOjE2OiJrOXNhZmVzZWFyY2guY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJzZWFyY2guanNwP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTQ6Iks5IFNhZmUgU2VhcmNoIjt9czoxNDoid3d3LmthdGF3ZWIuaXQiO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6NDoibmFtZSI7czo3OiJLYXRhd2ViIjt9czoxNDoid3d3LmtlbnNhcS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6OToid2ViP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiS2Vuc2FxIjt9czo5OiJrdmFzaXIubm8iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicSI7aToxO3M6MTE6InNlYXJjaF93b3JkIjt9czo4OiJiYWNrbGluayI7czoxMDoiYWxsZT9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikt2YXNpciI7fXM6MTM6Ind3dy5rdmFzaXIubm8iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicSI7aToxO3M6MTE6InNlYXJjaF93b3JkIjt9czo4OiJiYWNrbGluayI7czoxMDoiYWxsZT9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ikt2YXNpciI7fXM6MTM6Ind3dy50b2lsZS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjI4OiJMYSBUb2lsZSBEdSBRdcOpYmVjIChHb29nbGUpIjt9czoxMzoid2ViLnRvaWxlLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6Mjg6IkxhIFRvaWxlIER1IFF1w6liZWMgKEdvb2dsZSkiO31zOjg6ImxhYmFuLnZuIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiJzZWFyY2guaHRtbD9xPXtrfSI7czo0OiJuYW1lIjtzOjU6IkxhYmFuIjt9czoxMjoid3d3LmxhdG5lLmx2IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE1OiJzaWV0cy5waHA/cT17a30iO3M6NDoibmFtZSI7czo1OiJMYXRuZSI7fXM6MTU6InNlYXJjaC5saWxvLm9yZyI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNzoicmVzdWx0cy5waHA/cT17a30iO3M6NDoibmFtZSI7czo0OiJMaWxvIjt9czo1OiJsby5zdCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo3OiJ4X3F1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czozMDoiY2dpLWJpbi9lb2xvc3QuY2dpP3hfcXVlcnk9e2t9IjtzOjQ6Im5hbWUiO3M6NToiTG8uc3QiO31zOjE4OiJ3d3cubG9jYWxtb3hpZS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTA6InNlcnA/cT17a30iO3M6NDoibmFtZSI7czoxMToiTG9jYWwgTW94aWUiO31zOjE1OiJ3d3cubG9va2FueS5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MzY6Ii8oPzpzZWFyY2h8aW1hZ2VzfHZpZGVvcylcLyhbXlwvXSspLyI7fXM6NDoibmFtZSI7czo3OiJMb29rQW55Ijt9czoxOToic2VhcmNoLmxvb2tzZWVrLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNzoic2VhcmNoMi5waHA/cT17a30iO3M6NDoibmFtZSI7czo4OiJMb29rc2VlayI7fXM6MTc6Ind3dy5sb29rc21hcnQuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjM6ImtleSI7fXM6NDoibmFtZSI7czo5OiJMb29rc21hcnQiO31zOjE2OiJzZWFyY2gubHljb3MuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoxMDoiP3F1ZXJ5PXtrfSI7czo0OiJuYW1lIjtzOjU6Ikx5Y29zIjt9czo4OiJseWNvcy57fSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MTA6Ij9xdWVyeT17a30iO3M6NDoibmFtZSI7czo1OiJMeWNvcyI7fXM6MTQ6Ind3dy5tYWFpbG0uY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InRla3N0Ijt9czo0OiJuYW1lIjtzOjEwOiJtYWFpbG0uY29tIjt9czoxMDoiZ28ubWFpbC5ydSI7YTo1OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxODoic2VhcmNoP3JjaD1lJnE9e2t9IjtzOjg6ImNoYXJzZXRzIjthOjI6e2k6MDtzOjU6IlVURi04IjtpOjE7czoxMjoid2luZG93cy0xMjUxIjt9czoxMzoiaGlkZGVua2V5d29yZCI7YTozOntpOjA7czoxOToiL3JlZGlyXD8uKnJlZGlyPS4qLyI7aToxO3M6NDoiL14kLyI7aToyO3M6MToiLyI7fXM6NDoibmFtZSI7czo2OiJNYWlscnUiO31zOjEzOiJ3d3cubWFtbWEuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoxNjoicmVzdWx0LnBocD9xPXtrfSI7czo0OiJuYW1lIjtzOjU6Ik1hbW1hIjt9czoxNzoibWFtbWE3NS5tYW1tYS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJyZXN1bHQucGhwP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NToiTWFtbWEiO31zOjE3OiJ3d3cubWVpbmVzdGFkdC5kZSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJ3b3JkcyI7fXM6NDoibmFtZSI7czoxMzoiTWVpbmVzdGFkdC5kZSI7fXM6NzoibWV0YS51YSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNjoic2VhcmNoLmFzcD9xPXtrfSI7czo0OiJuYW1lIjtzOjc6Ik1ldGEudWEiO31zOjE3OiJzMS5tZXRhY3Jhd2xlci5kZSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czozOiJxcnkiO31zOjg6ImJhY2tsaW5rIjtzOjg6Ij9xcnk9e2t9IjtzOjQ6Im5hbWUiO3M6MTQ6Ik1ldGFDcmF3bGVyIERFIjt9czoxNzoiczIubWV0YWNyYXdsZXIuZGUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MzoicXJ5Ijt9czo4OiJiYWNrbGluayI7czo4OiI/cXJ5PXtrfSI7czo0OiJuYW1lIjtzOjE0OiJNZXRhQ3Jhd2xlciBERSI7fXM6MTc6InMzLm1ldGFjcmF3bGVyLmRlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjM6InFyeSI7fXM6ODoiYmFja2xpbmsiO3M6ODoiP3FyeT17a30iO3M6NDoibmFtZSI7czoxNDoiTWV0YUNyYXdsZXIgREUiO31zOjI1OiJtZXRhLnJyem4udW5pLWhhbm5vdmVyLmRlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjc6ImVpbmdhYmUiO31zOjg6ImJhY2tsaW5rIjtzOjM0OiJtZXRhL2NnaS1iaW4vbWV0YS5nZXIxP2VpbmdhYmU9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiTWV0YWdlciI7fXM6MTQ6Ind3dy5tZXRhZ2VyLmRlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjc6ImVpbmdhYmUiO31zOjg6ImJhY2tsaW5rIjtzOjM0OiJtZXRhL2NnaS1iaW4vbWV0YS5nZXIxP2VpbmdhYmU9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiTWV0YWdlciI7fXM6MTA6Im1ldGFnZXIuZGUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NzoiZWluZ2FiZSI7fXM6ODoiYmFja2xpbmsiO3M6MzQ6Im1ldGEvY2dpLWJpbi9tZXRhLmdlcjE/ZWluZ2FiZT17a30iO3M6NDoibmFtZSI7czo3OiJNZXRhZ2VyIjt9czoxMToibWV0YWdlcjIuZGUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjI6InNlYXJjaC9pbmRleC5waHA/cT17a30iO3M6NDoibmFtZSI7czo4OiJNZXRhZ2VyMiI7fXM6MTk6Ind3dy5taXN0ZXItd29uZy5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6ODoia2V5d29yZHMiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJzZWFyY2gvP2tleXdvcmRzPXtrfSI7czo0OiJuYW1lIjtzOjExOiJNaXN0ZXIgV29uZyI7fXM6MTg6Ind3dy5taXN0ZXItd29uZy5kZSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo4OiJrZXl3b3JkcyI7fXM6ODoiYmFja2xpbmsiO3M6MjA6InNlYXJjaC8/a2V5d29yZHM9e2t9IjtzOjQ6Im5hbWUiO3M6MTE6Ik1pc3RlciBXb25nIjt9czoxNDoid3d3Lm1vamVlay5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjY6Ik1vamVlayI7fXM6MjI6Ind3dy5tb25zdGVyY3Jhd2xlci5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MzoicXJ5Ijt9czo0OiJuYW1lIjtzOjE0OiJNb25zdGVyY3Jhd2xlciI7fXM6MTM6Ind3dy5tb3pib3QuZnIiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTc6InJlc3VsdHMucGhwP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoibW96Ym90Ijt9czoxNjoid3d3Lm1vemJvdC5jby51ayI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNzoicmVzdWx0cy5waHA/cT17a30iO3M6NDoibmFtZSI7czo2OiJtb3pib3QiO31zOjE0OiJ3d3cubW96Ym90LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNzoicmVzdWx0cy5waHA/cT17a30iO3M6NDoibmFtZSI7czo2OiJtb3pib3QiO31zOjIzOiJ3d3cubXlwcml2YXRlc2VhcmNoLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTU6Ik15UHJpdmF0ZVNlYXJjaCI7fXM6MjU6InNlYXJjaHNlcnZpY2UubXlzcGFjZS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MzoicXJ5Ijt9czo4OiJiYWNrbGluayI7czo1NjoiaW5kZXguY2ZtP2Z1c2VhY3Rpb249c2l0ZXNlYXJjaC5yZXN1bHRzJnR5cGU9V2ViJnFyeT17a30iO3M6NDoibmFtZSI7czo3OiJNeVNwYWNlIjt9czoxNjoid3d3Lm15c2VhcmNoLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo5OiJzZWFyY2hmb3IiO2k6MTtzOjk6InNlYXJjaEZvciI7fXM6ODoiYmFja2xpbmsiO3M6MzM6InNlYXJjaC9Bam1haW4uamh0bWw/c2VhcmNoZm9yPXtrfSI7czo0OiJuYW1lIjtzOjExOiJNeVdlYlNlYXJjaCI7fXM6MTg6Im1zMTE0Lm15c2VhcmNoLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo5OiJzZWFyY2hmb3IiO2k6MTtzOjk6InNlYXJjaEZvciI7fXM6ODoiYmFja2xpbmsiO3M6MzM6InNlYXJjaC9Bam1haW4uamh0bWw/c2VhcmNoZm9yPXtrfSI7czo0OiJuYW1lIjtzOjExOiJNeVdlYlNlYXJjaCI7fXM6MTg6Im1zMTQ2Lm15c2VhcmNoLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo5OiJzZWFyY2hmb3IiO2k6MTtzOjk6InNlYXJjaEZvciI7fXM6ODoiYmFja2xpbmsiO3M6MzM6InNlYXJjaC9Bam1haW4uamh0bWw/c2VhcmNoZm9yPXtrfSI7czo0OiJuYW1lIjtzOjExOiJNeVdlYlNlYXJjaCI7fXM6MjE6ImtmLm15c2VhcmNoLm15d2F5LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo5OiJzZWFyY2hmb3IiO2k6MTtzOjk6InNlYXJjaEZvciI7fXM6ODoiYmFja2xpbmsiO3M6MzM6InNlYXJjaC9Bam1haW4uamh0bWw/c2VhcmNoZm9yPXtrfSI7czo0OiJuYW1lIjtzOjExOiJNeVdlYlNlYXJjaCI7fXM6MjE6ImtpLm15c2VhcmNoLm15d2F5LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czo5OiJzZWFyY2hmb3IiO2k6MTtzOjk6InNlYXJjaEZvciI7fXM6ODoiYmFja2xpbmsiO3M6MzM6InNlYXJjaC9Bam1haW4uamh0bWw/c2VhcmNoZm9yPXtrfSI7czo0OiJuYW1lIjtzOjExOiJNeVdlYlNlYXJjaCI7fXM6MTY6InNlYXJjaC5teXdheS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6OToic2VhcmNoZm9yIjtpOjE7czo5OiJzZWFyY2hGb3IiO31zOjg6ImJhY2tsaW5rIjtzOjMzOiJzZWFyY2gvQWptYWluLmpodG1sP3NlYXJjaGZvcj17a30iO3M6NDoibmFtZSI7czoxMToiTXlXZWJTZWFyY2giO31zOjIyOiJzZWFyY2gubXl3ZWJzZWFyY2guY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjk6InNlYXJjaGZvciI7aToxO3M6OToic2VhcmNoRm9yIjt9czo4OiJiYWNrbGluayI7czozMzoic2VhcmNoL0FqbWFpbi5qaHRtbD9zZWFyY2hmb3I9e2t9IjtzOjQ6Im5hbWUiO3M6MTE6Ik15V2ViU2VhcmNoIjt9czoxMjoid3d3Lm5hamRpLnNpIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJzZWFyY2guanNwP3E9e2t9IjtzOjQ6Im5hbWUiO3M6ODoiTmFqZGkuc2kiO31zOjE1OiJzZWFyY2gubmF0ZS5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjE6InNlYXJjaC9hbGwuaHRtbD9xPXtrfSI7czo4OiJjaGFyc2V0cyI7YToxOntpOjA7czo2OiJFVUMtS1IiO31zOjQ6Im5hbWUiO3M6NDoiTmF0ZSI7fXM6MTY6InNlYXJjaC5uYXZlci5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIyOiJzZWFyY2gubmF2ZXI/cXVlcnk9e2t9IjtzOjQ6Im5hbWUiO3M6NToiTmF2ZXIiO31zOjIzOiJrby5zZWFyY2gubmVlZDJmaW5kLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo5OiJzZWFyY2hmb3IiO31zOjg6ImJhY2tsaW5rIjtzOjMzOiJzZWFyY2gvQUptYWluLmpodG1sP3NlYXJjaGZvcj17a30iO3M6NDoibmFtZSI7czoxMDoiTmVlZHRvZmluZCI7fXM6MTE6Ind3dy5uZXRpLmVlIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoyNDoiY2dpLWJpbi9vdHNpbmc/cXVlcnk9e2t9IjtzOjg6ImNoYXJzZXRzIjthOjE6e2k6MDtzOjEwOiJpc28tODg1OS0xIjt9czo0OiJuYW1lIjtzOjQ6Ik5ldGkiO31zOjE2OiJzZWFyY2gubmlmdHkuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InEiO2k6MTtzOjQ6IlRleHQiO31zOjg6ImJhY2tsaW5rIjtzOjIyOiJ3ZWJzZWFyY2gvc2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NToiTmlmdHkiO31zOjIzOiJzZWFyY2guYXpieS5mbXdvcmxkLm5ldCI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJxIjtpOjE7czo0OiJUZXh0Ijt9czo4OiJiYWNrbGluayI7czoyMjoid2Vic2VhcmNoL3NlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjU6Ik5pZnR5Ijt9czoyMToidmlkZW9zZWFyY2gubmlmdHkuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjI6Imt3Ijt9czo4OiJiYWNrbGluayI7czoxMzoic2VhcmNoP2t3PXtrfSI7czo0OiJuYW1lIjtzOjEyOiJOaWZ0eSBWaWRlb3MiO31zOjg6Im5pZ21hLnJ1IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InMiO31zOjg6ImJhY2tsaW5rIjtzOjE1OiJpbmRleC5waHA/cz17a30iO3M6NDoibmFtZSI7czo1OiJOaWdtYSI7fXM6MTQ6InN6dWthai5vbmV0LnBsIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjI6InF0Ijt9czo4OiJiYWNrbGluayI7czoxNzoicXVlcnkuaHRtbD9xdD17a30iO3M6NDoibmFtZSI7czo3OiJPbmV0LnBsIjt9czo5OiJvbmxpbmUubm8iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjI6Imdvb2dsZS9pbmRleC5qc3A/cT17a30iO3M6NDoibmFtZSI7czo5OiJPbmxpbmUubm8iO31zOjE5OiJ3d3cub25seS1zZWFyY2guY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjEwOiJPbmx5U2VhcmNoIjt9czoxMToid3d3LjE4ODEubm8iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToiUXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJNdWx0aS8/UXVlcnk9e2t9IjtzOjQ6Im5hbWUiO3M6MTc6Ik9wcGx5c25pbmdlbiAxODgxIjt9czoxNToiYnVzY2Eub3JhbmdlLmVzIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo2OiJPcmFuZ2UiO31zOjIwOiJsZW1vdGV1ci5rZS52b2lsYS5mciI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoyOiJrdyI7fXM6ODoiYmFja2xpbmsiO3M6NzoiP2t3PXtrfSI7czo0OiJuYW1lIjtzOjY6Ik9yYW5nZSI7fXM6MTg6ImxlbW90ZXVyLm9yYW5nZS5mciI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoyOiJrdyI7fXM6ODoiYmFja2xpbmsiO3M6NzoiP2t3PXtrfSI7czo0OiJuYW1lIjtzOjY6Ik9yYW5nZSI7fXM6MTY6Ind3dy5wYXBlcmJhbGwuZGUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTQ6InN1Y2hlL3MvP3E9e2t9IjtzOjQ6Im5hbWUiO3M6OToiUGFwZXJiYWxsIjt9czoyMToiZXh0ZXJuLnBlb3BsZWNoZWNrLmRlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE0OiJsaW5rLnBocD9xPXtrfSI7czo0OiJuYW1lIjtzOjExOiJQZW9wbGVDaGVjayI7fXM6MTk6InNlYXJjaC5wZW9wbGVwYy5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjg6IlBlb3BsZVBDIjt9czoxNzoid3d3LnBlcnBsZXhpdHkuYWkiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6InNlYXJjaD9zPW8mcT17a30iO3M6NDoibmFtZSI7czoxMDoiUGVycGxleGl0eSI7fXM6MTc6Ind3dy5waWNzZWFyY2guY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE1OiJpbmRleC5jZ2k/cT17a30iO3M6NDoibmFtZSI7czo5OiJQaWNzZWFyY2giO31zOjE0OiJ3d3cucGxhem9vLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjY6IlBsYXpvbyI7fXM6MTU6InBsdXNuZXR3b3JrLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo2OiI/cT17a30iO3M6NDoibmFtZSI7czoxMToiUGx1c05ldHdvcmsiO31zOjg6InBvaXNrLnJ1IjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjQ6InRleHQiO31zOjg6ImJhY2tsaW5rIjtzOjIyOiJjZ2ktYmluL3BvaXNrP3RleHQ9e2t9IjtzOjg6ImNoYXJzZXRzIjthOjE6e2k6MDtzOjEyOiJ3aW5kb3dzLTEyNTEiO31zOjQ6Im5hbWUiO3M6ODoiUG9pc2suUnUiO31zOjEzOiJwcmVzZWFyY2guY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo5OiJQcmVzZWFyY2giO31zOjEzOiJzZWFyY2gucWlwLnJ1IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoxNjoic2VhcmNoP3F1ZXJ5PXtrfSI7czo0OiJuYW1lIjtzOjY6InFpcC5ydSI7fXM6MTQ6Ind3dy5xdWFsaWdvLmF0IjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6NzoiUXVhbGlnbyI7fXM6MTQ6Ind3dy5xdWFsaWdvLmNoIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6NzoiUXVhbGlnbyI7fXM6MTQ6Ind3dy5xdWFsaWdvLmRlIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6NzoiUXVhbGlnbyI7fXM6MTQ6Ind3dy5xdWFsaWdvLm5sIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6NzoiUXVhbGlnbyI7fXM6MTM6Ind3dy5xd2FudC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo1OiJRd2FudCI7fXM6MTQ6ImxpdGUucXdhbnQuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjI6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6NToiUXdhbnQiO31zOjIzOiJ3ZWJzZWFyY2gucmFrdXRlbi5jby5qcCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoyOiJxdCI7fXM6ODoiYmFja2xpbmsiO3M6MTI6IldlYklTP3F0PXtrfSI7czo0OiJuYW1lIjtzOjc6IlJha3V0ZW4iO31zOjE1OiJub3ZhLnJhbWJsZXIucnUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6NToicXVlcnkiO2k6MTtzOjU6IndvcmRzIjt9czo4OiJiYWNrbGluayI7czoxNjoic2VhcmNoP3F1ZXJ5PXtrfSI7czo0OiJuYW1lIjtzOjc6IlJhbWJsZXIiO31zOjE2OiJ3d3cucmlrc2RlbGVuLnNlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjQ6IldoYXQiO31zOjg6ImJhY2tsaW5rIjtzOjI2OiJTZWFyY2hSZXN1bHQuYXNweD9XaGF0PXtrfSI7czo0OiJuYW1lIjtzOjk6IlJpa3NkZWxlbiI7fXM6MTM6InNlYXJjaC5yci5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6NjoiP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTE6IlJvYWQgUnVubmVyIjt9czoxMToicnBtZmluZC5uZXQiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjM1OiJsaW51eC9ycG0yaHRtbC9zZWFyY2gucGhwP3F1ZXJ5PXtrfSI7czo0OiJuYW1lIjtzOjc6InJwbWZpbmQiO31zOjE1OiJmcjIucnBtZmluZC5uZXQiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjM1OiJsaW51eC9ycG0yaHRtbC9zZWFyY2gucGhwP3F1ZXJ5PXtrfSI7czo0OiJuYW1lIjtzOjc6InJwbWZpbmQiO31zOjE2OiJwZXNxdWlzYS5zYXBvLnB0IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjQ6IlNhcG8iO31zOjk6InNjb3VyLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoyMjoiL3NlYXJjaFwvW15cL10rXC8oLiopLyI7fXM6ODoiYmFja2xpbmsiO3M6MTQ6InNlYXJjaC93ZWIve2t9IjtzOjQ6Im5hbWUiO3M6OToiU2NvdXIuY29tIjt9czoxMzoid3d3LnNlYXJjaC5jaCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo2OiI/cT17a30iO3M6NDoibmFtZSI7czo5OiJTZWFyY2guY2giO31zOjE0OiJ3d3cuc2VhcmNoLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTA6IlNlYXJjaC5jb20iO31zOjE0OiJzZWFyY2hhbG90LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo2OiI/cT17a30iO3M6NDoibmFtZSI7czoxMDoiU2VhcmNoYWxvdCI7fXM6MjA6Ind3dy5zZWFyY2hjYW52YXMuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjEyOiJTZWFyY2hDYW52YXMiO31zOjE0OiJzZWFyY2hsb2NrLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czoxMzoiaGlkZGVua2V5d29yZCI7YToxOntpOjA7czo0OiIvLiovIjt9czo0OiJuYW1lIjtzOjEwOiJTZWFyY2hMb2NrIjt9czoyMjoicmVzdWx0cy5zZWFyY2hsb2NrLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czoxMzoiaGlkZGVua2V5d29yZCI7YToxOntpOjA7czo0OiIvLiovIjt9czo0OiJuYW1lIjtzOjEwOiJTZWFyY2hMb2NrIjt9czoxNzoid3d3LnNlYXJjaHkuY28udWsiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6ImluZGV4Lmh0bWw/cT17a30iO3M6NDoibmFtZSI7czo3OiJTZWFyY2h5Ijt9czoxNjoic2VhcmNoLnNlZXNhYS5qcCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoyNToiL1wvKFteXC9dKylcL2luZGV4XC5odG1sLyI7fXM6ODoiYmFja2xpbmsiO3M6MTQ6IntrfS9pbmRleC5odG1sIjtzOjQ6Im5hbWUiO3M6NjoiU2VlU2FhIjt9czoxMzoiYmcuc2V0b296LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6InNlYXJjaD9xdWVyeT17a30iO3M6NDoibmFtZSI7czo2OiJTZXRvb3oiO31zOjEzOiJkYS5zZXRvb3ouY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoxNjoic2VhcmNoP3F1ZXJ5PXtrfSI7czo0OiJuYW1lIjtzOjY6IlNldG9veiI7fXM6MTM6ImVsLnNldG9vei5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJzZWFyY2g/cXVlcnk9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiU2V0b296Ijt9czoxMzoiZmEuc2V0b296LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6InNlYXJjaD9xdWVyeT17a30iO3M6NDoibmFtZSI7czo2OiJTZXRvb3oiO31zOjEzOiJ1ci5zZXRvb3ouY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoxNjoic2VhcmNoP3F1ZXJ5PXtrfSI7czo0OiJuYW1lIjtzOjY6IlNldG9veiI7fXM6MTM6Int9LnNldG9vei5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJzZWFyY2g/cXVlcnk9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiU2V0b296Ijt9czoxNjoic2VhcmNoLnNlem5hbS5jeiI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo2OiI/cT17a30iO3M6NDoibmFtZSI7czo2OiJTZXpuYW0iO31zOjE1OiJ2aWRlYS5zZXpuYW0uY3oiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6NjoiP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTI6IlNlem5hbSBWaWRlYSI7fXM6MTY6Ind3dy5zaGFyZWxvb2suZnIiO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Nzoia2V5d29yZCI7fXM6NDoibmFtZSI7czo5OiJTaGFyZWxvb2siO31zOjEzOiJ3d3cuc2t5bmV0LmJlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjMxOiJzZXJ2aWNlcy9yZWNoZXJjaGUvZ29vZ2xlP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiU2t5bmV0Ijt9czo3OiJtLnNtLmNuIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjc6InM/cT17a30iO3M6NDoibmFtZSI7czo1OiJzbS5jbiI7fXM6MTA6InNvLm0uc20uY24iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6Nzoicz9xPXtrfSI7czo0OiJuYW1lIjtzOjU6InNtLmNuIjt9czoxMDoibS5zcC5zbS5jbiI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo3OiJzP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NToic20uY24iO31zOjEwOiJ5ei5tLnNtLmNuIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjc6InM/cT17a30iO3M6NDoibmFtZSI7czo1OiJzbS5jbiI7fXM6MTE6InF1YXJrLnNtLmNuIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjc6InM/cT17a30iO3M6NDoibmFtZSI7czo1OiJzbS5jbiI7fXM6OToid3d3LnNtLmRlIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjU6InNtLmRlIjt9czoyNjoic2VhcmNoLnNtYXJ0YWRkcmVzc2Jhci5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicyI7fXM6ODoiYmFja2xpbmsiO3M6NjoiP3M9e2t9IjtzOjQ6Im5hbWUiO3M6MTU6IlNtYXJ0QWRkcmVzc2JhciI7fXM6MjQ6InNlYXJjaC5zbWFydHNob3BwaW5nLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czozOiJrd2QiO2k6MTtzOjg6ImtleXdvcmRzIjt9czo4OiJiYWNrbGluayI7czo4OiI/a3dkPXtrfSI7czo0OiJuYW1lIjtzOjEzOiJTbWFydFNob3BwaW5nIjt9czoxNDoic2VhcmNoLnNuYXAuZG8iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6NjoiP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiU25hcC5kbyI7fXM6MTY6Ind3dy5zby1uZXQubmUuanAiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIxOiJzZWFyY2gvd2ViLz9xdWVyeT17a30iO3M6NDoibmFtZSI7czo2OiJTby1uZXQiO31zOjE4OiJ2aWRlby5zby1uZXQubmUuanAiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Mjoia3ciO31zOjg6ImJhY2tsaW5rIjtzOjE0OiJzZWFyY2gvP2t3PXtrfSI7czo0OiJuYW1lIjtzOjEzOiJTby1uZXQgVmlkZW9zIjt9czoxOToic2VhcmNoLnNvZnRvbmljLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoyMToiZGVmYXVsdC9kZWZhdWx0P3E9e2t9IjtzOjQ6Im5hbWUiO3M6ODoiU29mdG9uaWMiO31zOjEzOiJ3d3cuc29nb3UuY29tIjthOjU6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoxMzoid2ViP3F1ZXJ5PXtrfSI7czo4OiJjaGFyc2V0cyI7YToxOntpOjA7czo2OiJnYjIzMTIiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjM6e2k6MDtzOjE0OiIvbGlua1w/dXJsPS4qLyI7aToxO3M6NDoiL14kLyI7aToyO3M6MToiLyI7fXM6NDoibmFtZSI7czo1OiJTb2dvdSI7fXM6OToic29nb3UuY29tIjthOjU6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoxMzoid2ViP3F1ZXJ5PXtrfSI7czo4OiJjaGFyc2V0cyI7YToxOntpOjA7czo2OiJnYjIzMTIiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjM6e2k6MDtzOjE0OiIvbGlua1w/dXJsPS4qLyI7aToxO3M6NDoiL14kLyI7aToyO3M6MToiLyI7fXM6NDoibmFtZSI7czo1OiJTb2dvdSI7fXM6MTE6Im0uc29nb3UuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjc6ImtleXdvcmQiO31zOjQ6Im5hbWUiO3M6NToiU29nb3UiO31zOjEzOiJ3YXAuc29nb3UuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjc6ImtleXdvcmQiO31zOjQ6Im5hbWUiO3M6NToiU29nb3UiO31zOjE3OiJlbmdsaXNoLnNvZ291LmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo3OiJrZXl3b3JkIjt9czo0OiJuYW1lIjtzOjU6IlNvZ291Ijt9czoxMjoid3d3LnNvc28uY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InciO31zOjg6ImJhY2tsaW5rIjtzOjc6InE/dz17a30iO3M6ODoiY2hhcnNldHMiO2E6MTp7aTowO3M6NjoiZ2IyMzEyIjt9czo0OiJuYW1lIjtzOjQ6IlNvc28iO31zOjE0OiJ3d3cuc3B1dG5pay5ydSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiU3B1dG5payI7fXM6MTM6InN0YXJ0cGFnZS5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJkby9hc2VhcmNoP3F1ZXJ5PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YTo1OntpOjA7czoxMToiL2RvL2FzZWFyY2giO2k6MTtzOjEwOiIvZG8vc2VhcmNoIjtpOjI7czoxMDoiL3NwL3NlYXJjaCI7aTozO3M6NDoiL14kLyI7aTo0O3M6MToiLyI7fXM6NDoibmFtZSI7czo5OiJTdGFydFBhZ2UiO31zOjIxOiJjbGFzc2ljLnN0YXJ0cGFnZS5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJkby9hc2VhcmNoP3F1ZXJ5PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YTo1OntpOjA7czoxMToiL2RvL2FzZWFyY2giO2k6MTtzOjEwOiIvZG8vc2VhcmNoIjtpOjI7czoxMDoiL3NwL3NlYXJjaCI7aTozO3M6NDoiL14kLyI7aTo0O3M6MToiLyI7fXM6NDoibmFtZSI7czo5OiJTdGFydFBhZ2UiO31zOjE3OiJ3d3cuc3RhcnRwYWdlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjU6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7aToxO3M6MTA6Ii9kby9zZWFyY2giO2k6MjtzOjEwOiIvc3Avc2VhcmNoIjtpOjM7czo0OiIvXiQvIjtpOjQ7czoxOiIvIjt9czo0OiJuYW1lIjtzOjk6IlN0YXJ0UGFnZSI7fXM6MTY6ImV1LnN0YXJ0cGFnZS5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJkby9hc2VhcmNoP3F1ZXJ5PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YTo1OntpOjA7czoxMToiL2RvL2FzZWFyY2giO2k6MTtzOjEwOiIvZG8vc2VhcmNoIjtpOjI7czoxMDoiL3NwL3NlYXJjaCI7aTozO3M6NDoiL14kLyI7aTo0O3M6MToiLyI7fXM6NDoibmFtZSI7czo5OiJTdGFydFBhZ2UiO31zOjE4OiJzNi1ldTUuaXhxdWljay5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJkby9hc2VhcmNoP3F1ZXJ5PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YTo1OntpOjA7czoxMToiL2RvL2FzZWFyY2giO2k6MTtzOjEwOiIvZG8vc2VhcmNoIjtpOjI7czoxMDoiL3NwL3NlYXJjaCI7aTozO3M6NDoiL14kLyI7aTo0O3M6MToiLyI7fXM6NDoibmFtZSI7czo5OiJTdGFydFBhZ2UiO31zOjIwOiJzMi1ldTQuc3RhcnRwYWdlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjU6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7aToxO3M6MTA6Ii9kby9zZWFyY2giO2k6MjtzOjEwOiIvc3Avc2VhcmNoIjtpOjM7czo0OiIvXiQvIjtpOjQ7czoxOiIvIjt9czo0OiJuYW1lIjtzOjk6IlN0YXJ0UGFnZSI7fXM6MjA6InM2LWV1NC5zdGFydHBhZ2UuY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoyMDoiZG8vYXNlYXJjaD9xdWVyeT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6NTp7aTowO3M6MTE6Ii9kby9hc2VhcmNoIjtpOjE7czoxMDoiL2RvL3NlYXJjaCI7aToyO3M6MTA6Ii9zcC9zZWFyY2giO2k6MztzOjQ6Ii9eJC8iO2k6NDtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6OToiU3RhcnRQYWdlIjt9czoyMDoiczctZXU0LnN0YXJ0cGFnZS5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJkby9hc2VhcmNoP3F1ZXJ5PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YTo1OntpOjA7czoxMToiL2RvL2FzZWFyY2giO2k6MTtzOjEwOiIvZG8vc2VhcmNoIjtpOjI7czoxMDoiL3NwL3NlYXJjaCI7aTozO3M6NDoiL14kLyI7aTo0O3M6MToiLyI7fXM6NDoibmFtZSI7czo5OiJTdGFydFBhZ2UiO31zOjIwOiJzMS1ldTUuc3RhcnRwYWdlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjU6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7aToxO3M6MTA6Ii9kby9zZWFyY2giO2k6MjtzOjEwOiIvc3Avc2VhcmNoIjtpOjM7czo0OiIvXiQvIjtpOjQ7czoxOiIvIjt9czo0OiJuYW1lIjtzOjk6IlN0YXJ0UGFnZSI7fXM6MjA6InMyLWV1NS5zdGFydHBhZ2UuY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoyMDoiZG8vYXNlYXJjaD9xdWVyeT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6NTp7aTowO3M6MTE6Ii9kby9hc2VhcmNoIjtpOjE7czoxMDoiL2RvL3NlYXJjaCI7aToyO3M6MTA6Ii9zcC9zZWFyY2giO2k6MztzOjQ6Ii9eJC8iO2k6NDtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6OToiU3RhcnRQYWdlIjt9czoyMDoiczQtZXU1LnN0YXJ0cGFnZS5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJkby9hc2VhcmNoP3F1ZXJ5PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YTo1OntpOjA7czoxMToiL2RvL2FzZWFyY2giO2k6MTtzOjEwOiIvZG8vc2VhcmNoIjtpOjI7czoxMDoiL3NwL3NlYXJjaCI7aTozO3M6NDoiL14kLyI7aTo0O3M6MToiLyI7fXM6NDoibmFtZSI7czo5OiJTdGFydFBhZ2UiO31zOjIwOiJzNS1ldTUuc3RhcnRwYWdlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjU6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7aToxO3M6MTA6Ii9kby9zZWFyY2giO2k6MjtzOjEwOiIvc3Avc2VhcmNoIjtpOjM7czo0OiIvXiQvIjtpOjQ7czoxOiIvIjt9czo0OiJuYW1lIjtzOjk6IlN0YXJ0UGFnZSI7fXM6MjA6InM2LWV1NS5zdGFydHBhZ2UuY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoyMDoiZG8vYXNlYXJjaD9xdWVyeT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6NTp7aTowO3M6MTE6Ii9kby9hc2VhcmNoIjtpOjE7czoxMDoiL2RvL3NlYXJjaCI7aToyO3M6MTA6Ii9zcC9zZWFyY2giO2k6MztzOjQ6Ii9eJC8iO2k6NDtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6OToiU3RhcnRQYWdlIjt9czoyMDoiczctZXU1LnN0YXJ0cGFnZS5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJkby9hc2VhcmNoP3F1ZXJ5PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YTo1OntpOjA7czoxMToiL2RvL2FzZWFyY2giO2k6MTtzOjEwOiIvZG8vc2VhcmNoIjtpOjI7czoxMDoiL3NwL3NlYXJjaCI7aTozO3M6NDoiL14kLyI7aTo0O3M6MToiLyI7fXM6NDoibmFtZSI7czo5OiJTdGFydFBhZ2UiO31zOjIwOiJzOC1ldTUuc3RhcnRwYWdlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjU6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7aToxO3M6MTA6Ii9kby9zZWFyY2giO2k6MjtzOjEwOiIvc3Avc2VhcmNoIjtpOjM7czo0OiIvXiQvIjtpOjQ7czoxOiIvIjt9czo0OiJuYW1lIjtzOjk6IlN0YXJ0UGFnZSI7fXM6MjE6InMxMC1ldTUuc3RhcnRwYWdlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjU6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7aToxO3M6MTA6Ii9kby9zZWFyY2giO2k6MjtzOjEwOiIvc3Avc2VhcmNoIjtpOjM7czo0OiIvXiQvIjtpOjQ7czoxOiIvIjt9czo0OiJuYW1lIjtzOjk6IlN0YXJ0UGFnZSI7fXM6MjE6InMxMS1ldTUuc3RhcnRwYWdlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjU6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7aToxO3M6MTA6Ii9kby9zZWFyY2giO2k6MjtzOjEwOiIvc3Avc2VhcmNoIjtpOjM7czo0OiIvXiQvIjtpOjQ7czoxOiIvIjt9czo0OiJuYW1lIjtzOjk6IlN0YXJ0UGFnZSI7fXM6MjE6InMxMi1ldTUuc3RhcnRwYWdlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjU6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7aToxO3M6MTA6Ii9kby9zZWFyY2giO2k6MjtzOjEwOiIvc3Avc2VhcmNoIjtpOjM7czo0OiIvXiQvIjtpOjQ7czoxOiIvIjt9czo0OiJuYW1lIjtzOjk6IlN0YXJ0UGFnZSI7fXM6MjE6InMxMy1ldTUuc3RhcnRwYWdlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjU6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7aToxO3M6MTA6Ii9kby9zZWFyY2giO2k6MjtzOjEwOiIvc3Avc2VhcmNoIjtpOjM7czo0OiIvXiQvIjtpOjQ7czoxOiIvIjt9czo0OiJuYW1lIjtzOjk6IlN0YXJ0UGFnZSI7fXM6MjE6InMxNC1ldTUuc3RhcnRwYWdlLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImRvL2FzZWFyY2g/cXVlcnk9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjU6e2k6MDtzOjExOiIvZG8vYXNlYXJjaCI7aToxO3M6MTA6Ii9kby9zZWFyY2giO2k6MjtzOjEwOiIvc3Avc2VhcmNoIjtpOjM7czo0OiIvXiQvIjtpOjQ7czoxOiIvIjt9czo0OiJuYW1lIjtzOjk6IlN0YXJ0UGFnZSI7fXM6MjY6InN0YXJ0Z29vZ2xlLnN0YXJ0cGFnaW5hLm5sIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InEiO2k6MTtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czo2OiI/cT17a30iO3M6NDoibmFtZSI7czoyMDoiU3RhcnRwYWdpbmEgKEdvb2dsZSkiO31zOjE3OiJ3d3cuc3RhcnRzaWRlbi5ubyI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoyMDoic29rL2luZGV4Lmh0bWw/cT17a30iO3M6NDoibmFtZSI7czoxMDoiU3RhcnRzaWRlbiI7fXM6MTM6InN0YXJ0c2lkZW4ubm8iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjA6InNvay9pbmRleC5odG1sP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTA6IlN0YXJ0c2lkZW4iO31zOjEwOiJzdHJhY3QuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo2OiJTdHJhY3QiO31zOjEwOiJzdWNoZS5pbmZvIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjg6IktleXdvcmRzIjt9czo4OiJiYWNrbGluayI7czoyMjoic3VjaGUucGhwP0tleXdvcmRzPXtrfSI7czo0OiJuYW1lIjtzOjEwOiJTdWNoZS5pbmZvIjt9czoyMDoid3d3LnN1Y2htYXNjaGluZS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Nzoic3VjaHN0ciI7fXM6ODoiYmFja2xpbmsiO3M6MjY6ImNnaS1iaW4vd28uY2dpP3N1Y2hzdHI9e2t9IjtzOjQ6Im5hbWUiO3M6MTY6IlN1Y2htYXNjaGluZS5jb20iO31zOjE1OiJ3d3cuc3VjaG5hc2UuZGUiO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6NDoibmFtZSI7czo4OiJTdWNobmFzZSI7fXM6MTQ6InN1cmZjYW55b24uY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6MTE6IlN1cmYgQ2FueW9uIjt9czoxNDoic3dpZ2dsZS5vcmcudWsiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6NjoiP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiU3dpZ2dsZSI7fXM6MTM6InN3aXNzY293cy5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjEzOiJ3ZWI/cXVlcnk9e2t9IjtzOjQ6Im5hbWUiO3M6OToiU3dpc3Njb3dzIjt9czoxNzoic3VjaGUudC1vbmxpbmUuZGUiO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6NTE6ImZhc3QtY2dpL3RzYz9tYW5kYW50PXRvaSZjb250ZXh0PWludGVybmV0LXRhYiZxPXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YToyOntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjt9czo0OiJuYW1lIjtzOjg6IlQtT25saW5lIjt9czoyMDoiYnJpc2JhbmUudC1vbmxpbmUuZGUiO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6NTE6ImZhc3QtY2dpL3RzYz9tYW5kYW50PXRvaSZjb250ZXh0PWludGVybmV0LXRhYiZxPXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YToyOntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjt9czo0OiJuYW1lIjtzOjg6IlQtT25saW5lIjt9czoyODoibmF2aWdhdGlvbnNoaWxmZS50LW9ubGluZS5kZSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czozODoiZHRhZy9kbnMvcmVzdWx0cz9tb2RlPXNlYXJjaF90b3AmcT17a30iO3M6NDoibmFtZSI7czo4OiJULU9ubGluZSI7fXM6MTU6Ind3dy50YWxpbWJhLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo2OiJzZWFyY2giO31zOjg6ImJhY2tsaW5rIjtzOjM2OiJpbmRleC5waHA/cGFnZT1zZWFyY2gvd2ViJnNlYXJjaD17a30iO3M6NDoibmFtZSI7czo3OiJ0YWxpbWJhIjt9czoxODoid3d3LnRhbGt0YWxrLmNvLnVrIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoyOToic2VhcmNoL3Jlc3VsdHMuaHRtbD9xdWVyeT17a30iO3M6NDoibmFtZSI7czo4OiJUYWxrVGFsayI7fXM6MTA6InRhcm1vdC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTA6ImFyYS8/cT17a30iO3M6NDoibmFtZSI7czo2OiJUYXJtb3QiO31zOjE0OiJ0ZWNobm9yYXRpLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czozOToic2VhcmNoP3JldHVybj1zaXRlcyZhdXRob3JpdHk9YWxsJnE9e2t9IjtzOjQ6Im5hbWUiO3M6MTA6IlRlY2hub3JhdGkiO31zOjEzOiJ3d3cudGVvbWEuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjU6IlRlb21hIjt9czoxNzoiYnVzY2Fkb3IudGVycmEuZXMiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjM2OiJEZWZhdWx0LmFzcHg/c291cmNlPVNlYXJjaCZxdWVyeT17a30iO3M6NDoibmFtZSI7czo1OiJUZXJyYSI7fXM6MTc6ImJ1c2NhZG9yLnRlcnJhLmNsIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czozNjoiRGVmYXVsdC5hc3B4P3NvdXJjZT1TZWFyY2gmcXVlcnk9e2t9IjtzOjQ6Im5hbWUiO3M6NToiVGVycmEiO31zOjIxOiJidXNjYWRvci50ZXJyYS5jb20uYnIiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjM2OiJEZWZhdWx0LmFzcHg/c291cmNlPVNlYXJjaCZxdWVyeT17a30iO3M6NDoibmFtZSI7czo1OiJUZXJyYSI7fXM6MTc6InNlYXJjaC50aXNjYWxpLml0IjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InEiO2k6MTtzOjM6ImtleSI7fXM6ODoiYmFja2xpbmsiO3M6NjoiP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiVGlzY2FsaSI7fXM6MjE6InNlYXJjaC1keW4udGlzY2FsaS5pdCI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJxIjtpOjE7czozOiJrZXkiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IlRpc2NhbGkiO31zOjE4OiJobGVkYW5pLnRpc2NhbGkuY3oiO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjQ6Im5hbWUiO3M6NzoiVGlzY2FsaSI7fXM6MTM6Ind3dy50aXh1bWEuZGUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Mjoic2MiO31zOjg6ImJhY2tsaW5rIjtzOjM2OiJpbmRleC5waHA/bXA9c2VhcmNoJnN0cD0mc2M9e2t9JnRnPTAiO3M6NDoibmFtZSI7czo2OiJUaXh1bWEiO31zOjE5OiJ3d3cudG9vbGJhcmhvbWUuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiJzZWFyY2guYXNweD9xPXtrfSI7czo0OiJuYW1lIjtzOjExOiJUb29sYmFyaG9tZSI7fXM6MjI6InZzaGFyZS50b29sYmFyaG9tZS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTc6InNlYXJjaC5hc3B4P3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTE6IlRvb2xiYXJob21lIjt9czoxNjoid3d3LnRvcHByZWlzZS5jaCI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo2OiJzZWFyY2giO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJpbmRleC5waHA/c2VhcmNoPXtrfSI7czo4OiJjaGFyc2V0cyI7YToxOntpOjA7czoxMDoiSVNPLTg4NTktMSI7fXM6NDoibmFtZSI7czoxMjoiVG9wcHJlaXNlLmNoIjt9czoxMjoidG9wcHJlaXNlLmNoIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjY6InNlYXJjaCI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImluZGV4LnBocD9zZWFyY2g9e2t9IjtzOjg6ImNoYXJzZXRzIjthOjE6e2k6MDtzOjEwOiJJU08tODg1OS0xIjt9czo0OiJuYW1lIjtzOjEyOiJUb3BwcmVpc2UuY2giO31zOjE1OiJmci50b3BwcmVpc2UuY2giO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Njoic2VhcmNoIjt9czo4OiJiYWNrbGluayI7czoyMDoiaW5kZXgucGhwP3NlYXJjaD17a30iO3M6ODoiY2hhcnNldHMiO2E6MTp7aTowO3M6MTA6IklTTy04ODU5LTEiO31zOjQ6Im5hbWUiO3M6MTI6IlRvcHByZWlzZS5jaCI7fXM6MTU6ImRlLnRvcHByZWlzZS5jaCI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo2OiJzZWFyY2giO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJpbmRleC5waHA/c2VhcmNoPXtrfSI7czo4OiJjaGFyc2V0cyI7YToxOntpOjA7czoxMDoiSVNPLTg4NTktMSI7fXM6NDoibmFtZSI7czoxMjoiVG9wcHJlaXNlLmNoIjt9czoxNToiZW4udG9wcHJlaXNlLmNoIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjY6InNlYXJjaCI7fXM6ODoiYmFja2xpbmsiO3M6MjA6ImluZGV4LnBocD9zZWFyY2g9e2t9IjtzOjg6ImNoYXJzZXRzIjthOjE6e2k6MDtzOjEwOiJJU08tODg1OS0xIjt9czo0OiJuYW1lIjtzOjEyOiJUb3BwcmVpc2UuY2giO31zOjE0OiJ0dXNrc2VhcmNoLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MTE6IlRVU0sgU2VhcmNoIjt9czoxNToid3d3LnRyb3V2ZXouY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo0OiJuYW1lIjtzOjExOiJUcm91dmV6LmNvbSI7fXM6MTk6Ind3dy50cm92YXJhcGlkby5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTY6InJlc3VsdC5waHA/cT17a30iO3M6NDoibmFtZSI7czoxMToiVHJvdmFSYXBpZG8iO31zOjIyOiJ3d3cudHJ1c3RlZC1zZWFyY2guY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InciO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/dz17a30iO3M6NDoibmFtZSI7czoxNDoiVHJ1c3RlZCBTZWFyY2giO31zOjE5OiJzZWFyY2gudHJ1c3RuYXYuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjg6IlRydXN0bmF2Ijt9czoxNToid3d3LnR3aW5nbHkuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo3OiJUd2luZ2x5Ijt9czoxNjoiYnVzY2EudW9sLmNvbS5iciI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMToiL3dlYi8/cT17a30iO3M6NDoibmFtZSI7czoxMDoidW9sLmNvbS5iciI7fXM6MTE6Ind3dy51cmwub3JnIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjExOiI/bD1kZSZxPXtrfSI7czo0OiJuYW1lIjtzOjEzOiJVUkwuT1JHYW56aWVyIjt9czoxMzoid3d3LnZpbmRlbi5ubCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czo2OiI/cT17a30iO3M6NDoibmFtZSI7czo2OiJWaW5kZW4iO31zOjEzOiJ3d3cudmluZGV4Lm5sIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjEwOiJzZWFyY2hfZm9yIjt9czo4OiJiYWNrbGluayI7czoxOToiL3dlYj9zZWFyY2hfZm9yPXtrfSI7czo0OiJuYW1lIjtzOjY6IlZpbmRleCI7fXM6MTY6InNlYXJjaC52aW5kZXgubmwiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MTA6InNlYXJjaF9mb3IiO31zOjg6ImJhY2tsaW5rIjtzOjE5OiIvd2ViP3NlYXJjaF9mb3I9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiVmluZGV4Ijt9czoxOToicmljZXJjYS52aXJnaWxpby5pdCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoyOiJxcyI7fXM6ODoiYmFja2xpbmsiO3M6MTQ6InJpY2VyY2E/cXM9e2t9IjtzOjQ6Im5hbWUiO3M6ODoiVmlyZ2lsaW8iO31zOjI3OiJyaWNlcmNhaW1tYWdpbmkudmlyZ2lsaW8uaXQiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MjoicXMiO31zOjg6ImJhY2tsaW5rIjtzOjE0OiJyaWNlcmNhP3FzPXtrfSI7czo0OiJuYW1lIjtzOjg6IlZpcmdpbGlvIjt9czoyNDoicmljZXJjYXZpZGVvLnZpcmdpbGlvLml0IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjI6InFzIjt9czo4OiJiYWNrbGluayI7czoxNDoicmljZXJjYT9xcz17a30iO3M6NDoibmFtZSI7czo4OiJWaXJnaWxpbyI7fXM6MjM6InJpY2VyY2FuZXdzLnZpcmdpbGlvLml0IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjI6InFzIjt9czo4OiJiYWNrbGluayI7czoxNDoicmljZXJjYT9xcz17a30iO3M6NDoibmFtZSI7czo4OiJWaXJnaWxpbyI7fXM6MTg6Im1vYmlsZS52aXJnaWxpby5pdCI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czozOiJxcnMiO31zOjQ6Im5hbWUiO3M6ODoiVmlyZ2lsaW8iO31zOjE4OiJzZWFyY2gua2Uudm9pbGEuZnIiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicmRhdGEiO31zOjg6ImJhY2tsaW5rIjtzOjE3OiJTL3ZvaWxhP3JkYXRhPXtrfSI7czo0OiJuYW1lIjtzOjU6IlZvaWxhIjt9czoxNToid3d3LmxlbW90ZXVyLmZyIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InJkYXRhIjt9czo4OiJiYWNrbGluayI7czoxNzoiUy92b2lsYT9yZGF0YT17a30iO3M6NDoibmFtZSI7czo1OiJWb2lsYSI7fXM6MTI6IndlYi52b2xueS5jeiI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo2OiJzZWFyY2giO31zOjg6ImJhY2tsaW5rIjtzOjIwOiJmdWxsdGV4dC8/c2VhcmNoPXtrfSI7czo4OiJjaGFyc2V0cyI7YToxOntpOjA7czoxMjoid2luZG93cy0xMjUwIjt9czo0OiJuYW1lIjtzOjU6IlZvbG55Ijt9czoxNzoid3d3LndhbGhlbGxvLmluZm8iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Mzoia2V5Ijt9czo4OiJiYWNrbGluayI7czoxNDoic2VhcmNoP2tleT17a30iO3M6NDoibmFtZSI7czo4OiJXYWxoZWxsbyI7fXM6MTY6Ind3dy53YWxoZWxsby5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Mzoia2V5Ijt9czo4OiJiYWNrbGluayI7czoxNDoic2VhcmNoP2tleT17a30iO3M6NDoibmFtZSI7czo4OiJXYWxoZWxsbyI7fXM6MTU6Ind3dy53YWxoZWxsby5kZSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czozOiJrZXkiO31zOjg6ImJhY2tsaW5rIjtzOjE0OiJzZWFyY2g/a2V5PXtrfSI7czo0OiJuYW1lIjtzOjg6IldhbGhlbGxvIjt9czoxNToid3d3LndhbGhlbGxvLm5sIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjM6ImtleSI7fXM6ODoiYmFja2xpbmsiO3M6MTQ6InNlYXJjaD9rZXk9e2t9IjtzOjQ6Im5hbWUiO3M6ODoiV2FsaGVsbG8iO31zOjEyOiJzdWNoZS53ZWIuZGUiO2E6NDp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6Mjoic3UiO2k6MTtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE4OiJzZWFyY2gvd2ViLz9zdT17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo2OiJXZWIuZGUiO31zOjE0OiJtLnN1Y2hlLndlYi5kZSI7YTo0OntzOjY6InBhcmFtcyI7YToyOntpOjA7czoyOiJzdSI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTg6InNlYXJjaC93ZWIvP3N1PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YToyOntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjt9czo0OiJuYW1lIjtzOjY6IldlYi5kZSI7fXM6MTA6Ind3dy53ZWIubmwiO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6OToiem9la3dvb3JkIjt9czo0OiJuYW1lIjtzOjY6IldlYi5ubCI7fXM6MTU6Ind3dy53ZWJvcmFtYS5mciI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJRVUVSWSI7fXM6NDoibmFtZSI7czo4OiJ3ZWJvcmFtYSI7fXM6MTc6Ind3dy53ZWJzZWFyY2guY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjM6InFrdyI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MjY6InNlYXJjaC9yZXN1bHRzMi5hc3B4P3E9e2t9IjtzOjQ6Im5hbWUiO3M6OToiV2ViU2VhcmNoIjt9czoxMjoiZnIud2Vkb28uY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjc6ImtleXdvcmQiO31zOjQ6Im5hbWUiO3M6NToiV2Vkb28iO31zOjEyOiJlbi53ZWRvby5jb20iO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Nzoia2V5d29yZCI7fXM6NDoibmFtZSI7czo1OiJXZWRvbyI7fXM6MTI6ImVzLndlZG9vLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo3OiJrZXl3b3JkIjt9czo0OiJuYW1lIjtzOjU6IldlZG9vIjt9czoxNzoic2VhcmNoLndpbmFtcC5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTk6InNlYXJjaC9zZWFyY2g/cT17a30iO3M6NDoibmFtZSI7czo2OiJXaW5hbXAiO31zOjEyOiJzenVrYWoud3AucGwiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Njoic3p1a2FqIjt9czo4OiJiYWNrbGluayI7czo0MjoiaHR0cDovL3N6dWthai53cC5wbC9zenVrYWouaHRtbD9zenVrYWo9e2t9IjtzOjQ6Im5hbWUiO3M6MTY6IldpcnR1YWxuYSBQb2xza2EiO31zOjEyOiJ3d3cud2l0Y2guZGUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6Njoic2VhcmNoIjt9czo4OiJiYWNrbGluayI7czozMzoic2VhcmNoLXJlc3VsdC5waHA/Y249MCZzZWFyY2g9e2t9IjtzOjQ6Im5hbWUiO3M6NToiV2l0Y2giO31zOjEzOiJ3d3cud29vcGllLmpwIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjI6Imt3Ijt9czo4OiJiYWNrbGluayI7czoxMzoic2VhcmNoP2t3PXtrfSI7czo0OiJuYW1lIjtzOjY6Ildvb3BpZSI7fXM6MTM6InNlYXJjaC53d3cuZWUiO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjQ6Im5hbWUiO3M6MTA6Ind3dyB2w6RyYXYiO31zOjE5OiJ3d3cueC1yZWNoZXJjaGUuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjQ6Ik1PVFMiO31zOjg6ImJhY2tsaW5rIjtzOjI2OiJjZ2ktYmluL3dlYnNlYXJjaD9NT1RTPXtrfSI7czo0OiJuYW1lIjtzOjExOiJYLVJlY2hlcmNoZSI7fXM6MTY6InNlYXJjaC55YWhvby5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicCI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9wPXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YTozOntpOjA7czo5OiIvXC9yXC8uKi8iO2k6MTtzOjQ6Ii9eJC8iO2k6MjtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6NjoiWWFob28hIjt9czoyNToibWFsYXlzaWEuc2VhcmNoLnlhaG9vLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJwIjtpOjE7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3A9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjM6e2k6MDtzOjk6Ii9cL3JcLy4qLyI7aToxO3M6NDoiL14kLyI7aToyO3M6MToiLyI7fXM6NDoibmFtZSI7czo2OiJZYWhvbyEiO31zOjE5OiJ7fS5zZWFyY2gueWFob28uY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InAiO2k6MTtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cD17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mzp7aTowO3M6OToiL1wvclwvLiovIjtpOjE7czo0OiIvXiQvIjtpOjI7czoxOiIvIjt9czo0OiJuYW1lIjtzOjY6IllhaG9vISI7fXM6MTQ6ImNhZGUueWFob28uY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InAiO2k6MTtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cD17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mzp7aTowO3M6OToiL1wvclwvLiovIjtpOjE7czo0OiIvXiQvIjtpOjI7czoxOiIvIjt9czo0OiJuYW1lIjtzOjY6IllhaG9vISI7fXM6MjQ6ImVzcGFub2wuc2VhcmNoLnlhaG9vLmNvbSI7YTo0OntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJwIjtpOjE7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3A9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjM6e2k6MDtzOjk6Ii9cL3JcLy4qLyI7aToxO3M6NDoiL14kLyI7aToyO3M6MToiLyI7fXM6NDoibmFtZSI7czo2OiJZYWhvbyEiO31zOjE5OiJxYy5zZWFyY2gueWFob28uY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InAiO2k6MTtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cD17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mzp7aTowO3M6OToiL1wvclwvLiovIjtpOjE7czo0OiIvXiQvIjtpOjI7czoxOiIvIjt9czo0OiJuYW1lIjtzOjY6IllhaG9vISI7fXM6MTY6Im9uZS5jbi55YWhvby5jb20iO2E6NDp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicCI7aToxO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9wPXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YTozOntpOjA7czo5OiIvXC9yXC8uKi8iO2k6MTtzOjQ6Ii9eJC8iO2k6MjtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6NjoiWWFob28hIjt9czoxODoici5zZWFyY2gueWFob28uY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjA6e31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjE6e2k6MDtzOjQ6Ii8uKi8iO31zOjQ6Im5hbWUiO3M6NjoiWWFob28hIjt9czoxNDoid3d3LmNlcmNhdG8uaXQiO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6NDoibmFtZSI7czo2OiJZYWhvbyEiO31zOjE5OiJzZWFyY2gub2ZmZXJib3guY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6NjoiWWFob28hIjt9czoxNToid3d3LmJlbmVmaW5kLmRlIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjQ6Im5hbWUiO3M6NjoiWWFob28hIjt9czoxNjoieXMubWlyb3N0YXJ0LmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjY6IllhaG9vISI7fXM6Mjc6InNlYXJjaC55YWhvby5jb20vc2VhcmNoL2RpciI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJwIjt9czo4OiJiYWNrbGluayI7czo2OiI/cD17a30iO3M6NDoibmFtZSI7czoxNjoiWWFob28hIERpcmVjdG9yeSI7fXM6MjM6ImltYWdlcy5zZWFyY2gueWFob28uY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InAiO2k6MTtzOjI6InZhIjt9czo4OiJiYWNrbGluayI7czoxOToic2VhcmNoL2ltYWdlcz9wPXtrfSI7czo0OiJuYW1lIjtzOjEzOiJZYWhvbyEgSW1hZ2VzIjt9czoxOToie30uaW1hZ2VzLnlhaG9vLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJwIjtpOjE7czoyOiJ2YSI7fXM6ODoiYmFja2xpbmsiO3M6MTk6InNlYXJjaC9pbWFnZXM/cD17a30iO3M6NDoibmFtZSI7czoxMzoiWWFob28hIEltYWdlcyI7fXM6MjE6ImNhZGUuaW1hZ2VzLnlhaG9vLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJwIjtpOjE7czoyOiJ2YSI7fXM6ODoiYmFja2xpbmsiO3M6MTk6InNlYXJjaC9pbWFnZXM/cD17a30iO3M6NDoibmFtZSI7czoxMzoiWWFob28hIEltYWdlcyI7fXM6MjQ6ImVzcGFub2wuaW1hZ2VzLnlhaG9vLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJwIjtpOjE7czoyOiJ2YSI7fXM6ODoiYmFja2xpbmsiO3M6MTk6InNlYXJjaC9pbWFnZXM/cD17a30iO3M6NDoibmFtZSI7czoxMzoiWWFob28hIEltYWdlcyI7fXM6MTk6InFjLmltYWdlcy55YWhvby5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicCI7aToxO3M6MjoidmEiO31zOjg6ImJhY2tsaW5rIjtzOjE5OiJzZWFyY2gvaW1hZ2VzP3A9e2t9IjtzOjQ6Im5hbWUiO3M6MTM6IllhaG9vISBJbWFnZXMiO31zOjE4OiJzZWFyY2gueWFob28uY28uanAiO2E6NTp7czo2OiJwYXJhbXMiO2E6Mjp7aTowO3M6MToicCI7aToxO3M6MjoidnAiO31zOjg6ImJhY2tsaW5rIjtzOjEyOiJzZWFyY2g/cD17a30iO3M6ODoiY2hhcnNldHMiO2E6Mzp7aTowO3M6NToidXRmLTgiO2k6MTtzOjY6ImV1Yy1qcCI7aToyO3M6NToibXM5MzIiO31zOjEzOiJoaWRkZW5rZXl3b3JkIjthOjM6e2k6MDtzOjk6Ii9cL3JcLy4qLyI7aToxO3M6NDoiL14kLyI7aToyO3M6MToiLyI7fXM6NDoibmFtZSI7czoxMjoiWWFob28hIEphcGFuIjt9czoxMzoianAuaGFvMTIzLmNvbSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo1OiJxdWVyeSI7fXM6NDoibmFtZSI7czoxMjoiWWFob28hIEphcGFuIjt9czoxNjoiaG9tZS5raW5nc29mdC5qcCI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo3OiJrZXl3b3JkIjt9czo0OiJuYW1lIjtzOjEyOiJZYWhvbyEgSmFwYW4iO31zOjE3OiJqd3NlYXJjaC5qd29yZC5qcCI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjEyOiJZYWhvbyEgSmFwYW4iO31zOjI0OiJpbWFnZS5zZWFyY2gueWFob28uY28uanAiO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicCI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9wPXtrfSI7czo4OiJjaGFyc2V0cyI7YTozOntpOjA7czo1OiJ1dGYtOCI7aToxO3M6NjoiZXVjLWpwIjtpOjI7czo1OiJtczkzMiI7fXM6NDoibmFtZSI7czoxOToiWWFob28hIEphcGFuIEltYWdlcyI7fXM6MjQ6InZpZGVvLnNlYXJjaC55YWhvby5jby5qcCI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJwIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3A9e2t9IjtzOjg6ImNoYXJzZXRzIjthOjM6e2k6MDtzOjU6InV0Zi04IjtpOjE7czo2OiJldWMtanAiO2k6MjtzOjU6Im1zOTMyIjt9czo0OiJuYW1lIjtzOjE5OiJZYWhvbyEgSmFwYW4gVmlkZW9zIjt9czoxNDoic2VhcmNoLnlhbS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToiayI7fXM6ODoiYmFja2xpbmsiO3M6MzI6IlNlYXJjaC9XZWIvP1NlYXJjaFR5cGU9d2ViJms9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiWWFtIjt9czo5OiJ5YW5kZXgucnUiO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NDoidGV4dCI7fXM6ODoiYmFja2xpbmsiO3M6MTk6InlhbmRzZWFyY2g/dGV4dD17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo2OiJZYW5kZXgiO31zOjEwOiJ5YW5kZXguY29tIjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjQ6InRleHQiO31zOjg6ImJhY2tsaW5rIjtzOjE5OiJ5YW5kc2VhcmNoP3RleHQ9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjI6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6NjoiWWFuZGV4Ijt9czo5OiJ5YW5kZXgue30iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NDoidGV4dCI7fXM6ODoiYmFja2xpbmsiO3M6MTk6InlhbmRzZWFyY2g/dGV4dD17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo2OiJZYW5kZXgiO31zOjEzOiJ3d3cueWFuZGV4Lnt9IjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjQ6InRleHQiO31zOjg6ImJhY2tsaW5rIjtzOjE5OiJ5YW5kc2VhcmNoP3RleHQ9e2t9IjtzOjEzOiJoaWRkZW5rZXl3b3JkIjthOjI6e2k6MDtzOjQ6Ii9eJC8iO2k6MTtzOjE6Ii8iO31zOjQ6Im5hbWUiO3M6NjoiWWFuZGV4Ijt9czoxNDoiY2xjay55YW5kZXgue30iO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NDoidGV4dCI7fXM6ODoiYmFja2xpbmsiO3M6MTk6InlhbmRzZWFyY2g/dGV4dD17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo2OiJZYW5kZXgiO31zOjExOiJtLnlhbmRleC57fSI7YTo0OntzOjY6InBhcmFtcyI7YToxOntpOjA7czo0OiJ0ZXh0Ijt9czo4OiJiYWNrbGluayI7czoxOToieWFuZHNlYXJjaD90ZXh0PXtrfSI7czoxMzoiaGlkZGVua2V5d29yZCI7YToyOntpOjA7czo0OiIvXiQvIjtpOjE7czoxOiIvIjt9czo0OiJuYW1lIjtzOjY6IllhbmRleCI7fXM6NToieWEucnUiO2E6NDp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NDoidGV4dCI7fXM6ODoiYmFja2xpbmsiO3M6MTk6InlhbmRzZWFyY2g/dGV4dD17a30iO3M6MTM6ImhpZGRlbmtleXdvcmQiO2E6Mjp7aTowO3M6NDoiL14kLyI7aToxO3M6MToiLyI7fXM6NDoibmFtZSI7czo2OiJZYW5kZXgiO31zOjE0OiJ5YWJzLnlhbmRleC57fSI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjY6IllhbmRleCI7fXM6MTY6ImltYWdlcy55YW5kZXgucnUiO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NDoidGV4dCI7fXM6ODoiYmFja2xpbmsiO3M6MTk6InlhbmRzZWFyY2g/dGV4dD17a30iO3M6NDoibmFtZSI7czoxMzoiWWFuZGV4IEltYWdlcyI7fXM6MTc6ImltYWdlcy55YW5kZXguY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjQ6InRleHQiO31zOjg6ImJhY2tsaW5rIjtzOjE5OiJ5YW5kc2VhcmNoP3RleHQ9e2t9IjtzOjQ6Im5hbWUiO3M6MTM6IllhbmRleCBJbWFnZXMiO31zOjE2OiJpbWFnZXMueWFuZGV4Lnt9IjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjQ6InRleHQiO31zOjg6ImJhY2tsaW5rIjtzOjE5OiJ5YW5kc2VhcmNoP3RleHQ9e2t9IjtzOjQ6Im5hbWUiO3M6MTM6IllhbmRleCBJbWFnZXMiO31zOjEyOiJ3d3cueWFzbmkuZGUiO2E6Mjp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjQ6Im5hbWUiO3M6NToiWWFzbmkiO31zOjEzOiJ3d3cueWFzbmkuY29tIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo0OiJuYW1lIjtzOjU6Illhc25pIjt9czoxNToid3d3Lnlhc25pLmNvLnVrIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo0OiJuYW1lIjtzOjU6Illhc25pIjt9czoxMjoid3d3Lnlhc25pLmNoIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo0OiJuYW1lIjtzOjU6Illhc25pIjt9czoxMjoid3d3Lnlhc25pLmF0IjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjU6InF1ZXJ5Ijt9czo0OiJuYW1lIjtzOjU6Illhc25pIjt9czoxNDoid3d3LnlhdGVkby5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicSI7fXM6ODoiYmFja2xpbmsiO3M6MTk6InNlYXJjaC9wcm9maWw/cT17a30iO3M6NDoibmFtZSI7czo2OiJZYXRlZG8iO31zOjEzOiJ3d3cueWF0ZWRvLmZyIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjE5OiJzZWFyY2gvcHJvZmlsP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NjoiWWF0ZWRvIjt9czoxMjoieWVsbG93bWFwLmRlIjthOjI6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6IiAiO31zOjQ6Im5hbWUiO3M6OToiWWVsbG93bWFwIjt9czo3OiJ5ZXAuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjk6IndlYj9xPXtrfSI7czo0OiJuYW1lIjtzOjM6IlllcCI7fXM6MTY6InNlYXJjaC55aXBweS5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NToicXVlcnkiO31zOjg6ImJhY2tsaW5rIjtzOjE2OiJzZWFyY2g/cXVlcnk9e2t9IjtzOjQ6Im5hbWUiO3M6NToiWWlwcHkiO31zOjE1OiJ3d3cueW9uZ3ppbi5jb20iO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6NDoid29yZCI7fXM6ODoiYmFja2xpbmsiO3M6MjM6InBhZ2Uvc2VhcmNoLmRvP3dvcmQ9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiWW9uZ3ppbiI7fXM6NzoieW91LmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6MzoiWW91Ijt9czoxMzoid3d3LnlvdWdvby5mciI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo4OiJiYWNrbGluayI7czoxNjoiP2N4PXNlYXJjaCZxPXtrfSI7czo0OiJuYW1lIjtzOjY6IllvdUdvbyI7fXM6MTU6Ind3dy56YXBtZXRhLmNvbSI7YTozOntzOjY6InBhcmFtcyI7YToyOntpOjA7czoxOiJxIjtpOjE7czo1OiJxdWVyeSI7fXM6ODoiYmFja2xpbmsiO3M6MTI6InNlYXJjaD9xPXtrfSI7czo0OiJuYW1lIjtzOjc6IlphcE1ldGEiO31zOjEwOiJ6YXBtZXRhLnt9IjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InEiO2k6MTtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiWmFwTWV0YSI7fXM6MTQ6Int9LnphcG1ldGEuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InEiO2k6MTtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiWmFwTWV0YSI7fXM6MjA6Ind3dy56YXBtZXRhc2VhcmNoLnt9IjthOjM6e3M6NjoicGFyYW1zIjthOjI6e2k6MDtzOjE6InEiO2k6MTtzOjU6InF1ZXJ5Ijt9czo4OiJiYWNrbGluayI7czoxMjoic2VhcmNoP3E9e2t9IjtzOjQ6Im5hbWUiO3M6NzoiWmFwTWV0YSI7fXM6MTQ6InAuemhvbmdzb3UuY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InciO31zOjg6ImJhY2tsaW5rIjtzOjc6InA/dz17a30iO3M6NDoibmFtZSI7czo4OiJaaG9uZ3NvdSI7fXM6MTI6Ind3dzMuem9lay5ubCI7YToyOntzOjY6InBhcmFtcyI7YToxOntpOjA7czoxOiJxIjt9czo0OiJuYW1lIjtzOjQ6IlpvZWsiO31zOjEzOiJ3d3cuem9la2VuLm5sIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo0OiJuYW1lIjtzOjY6IlpvZWtlbiI7fXM6OToiem9vaG9vLmN6IjthOjQ6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjE6InEiO31zOjg6ImJhY2tsaW5rIjtzOjY6Ij9xPXtrfSI7czo4OiJjaGFyc2V0cyI7YToxOntpOjA7czoxMjoid2luZG93cy0xMjUwIjt9czo0OiJuYW1lIjtzOjY6Ilpvb2hvbyI7fXM6MTM6Ind3dy56b3puYW0uc2siO2E6Mzp7czo2OiJwYXJhbXMiO2E6MTp7aTowO3M6MToicyI7fXM6ODoiYmFja2xpbmsiO3M6MjU6ImhsYWRhai5mY2dpP3M9e2t9JmNvPXN2ZXQiO3M6NDoibmFtZSI7czo2OiJab3puYW0iO31zOjEzOiJ3d3cuenh1c28uY29tIjthOjM6e3M6NjoicGFyYW1zIjthOjE6e2k6MDtzOjI6IndkIjt9czo4OiJiYWNrbGluayI7czoxMDoicmkvP3dkPXtrfSI7czo0OiJuYW1lIjtzOjU6Ilp4dXNvIjt9czo4OiJrd3pmLm5ldCI7YTozOntzOjY6InBhcmFtcyI7YToxOntpOjA7czo2OiJzZWFyY2giO31zOjg6ImJhY2tsaW5rIjtzOjExOiIjc2VhcmNoPXtrfSI7czo0OiJuYW1lIjtzOjE2OiLrrLvsp4Drp4gg6rKA7IOJIjt9fQ==',0),('SgSM_report_to_invalidate_1_2010-01-04_2154','1',0),('SitesManager_ExcludedIpsGlobal','145.5.3.4',0),('SitesManager_ExcludedUserAgentsGlobal','globalexcludeduseragent',0),('SitesManager_SearchCategoryParameters','gcat',0),('SitesManager_SearchKeywordParameters','gkwd',0),('SocialDefinitions','YToyMDg6e3M6OToiYmFkb28uY29tIjtzOjU6IkJhZG9vIjtzOjg6ImJlYm8uY29tIjtzOjQ6IkJlYm8iO3M6MTI6ImJpbGliaWxpLmNvbSI7czo4OiJiaWxpYmlsaSI7czoxNToiYmxhY2twbGFuZXQuY29tIjtzOjExOiJCbGFja1BsYW5ldCI7czo4OiJic2t5LmFwcCI7czo3OiJCbHVlc2t5IjtzOjExOiJza3lmZWVkLmFwcCI7czo3OiJCbHVlc2t5IjtzOjExOiJidXp6bmV0LmNvbSI7czo3OiJCdXp6bmV0IjtzOjE0OiJjbGFzc21hdGVzLmNvbSI7czoxNDoiQ2xhc3NtYXRlcy5jb20iO3M6MTg6Imdsb2JhbC5jeXdvcmxkLmNvbSI7czo3OiJDeXdvcmxkIjtzOjEwOiJkb3V5aW4uY29tIjtzOjY6IkRvdXlpbiI7czo5OiJkb3V5dS5jb20iO3M6NToiRG91eXUiO3M6MTQ6ImdhaWFvbmxpbmUuY29tIjtzOjExOiJHYWlhIE9ubGluZSI7czo4OiJnZW5pLmNvbSI7czo4OiJHZW5pLmNvbSI7czoxMDoiZ2l0aHViLmNvbSI7czo2OiJHaXRIdWIiO3M6MTU6InBsdXMuZ29vZ2xlLmNvbSI7czo5OiJHb29nbGUlMkIiO3M6MTQ6InVybC5nb29nbGUuY29tIjtzOjk6Ikdvb2dsZSUyQiI7czoyODoiY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMucGx1cyI7czo5OiJHb29nbGUlMkIiO3M6MTA6ImRvdWJhbi5jb20iO3M6NjoiRG91YmFuIjtzOjEyOiJkcmliYmJsZS5jb20iO3M6ODoiRHJpYmJibGUiO3M6MTI6ImZhY2Vib29rLmNvbSI7czo4OiJGYWNlYm9vayI7czo1OiJmYi5tZSI7czo4OiJGYWNlYm9vayI7czoxNDoibS5mYWNlYm9vay5jb20iO3M6ODoiRmFjZWJvb2siO3M6MTQ6ImwuZmFjZWJvb2suY29tIjtzOjg6IkZhY2Vib29rIjtzOjExOiJmZXRsaWZlLmNvbSI7czo3OiJGZXRsaWZlIjtzOjEwOiJmbGlja3IuY29tIjtzOjY6IkZsaWNrciI7czoxMjoiZmxpeHN0ZXIuY29tIjtzOjg6IkZsaXhzdGVyIjtzOjExOiJmb3RvbG9nLmNvbSI7czo3OiJGb3RvbG9nIjtzOjE0OiJmb3Vyc3F1YXJlLmNvbSI7czoxMDoiRm91cnNxdWFyZSI7czoxOToiZnJpZW5kc3JldW5pdGVkLmNvbSI7czoxNjoiRnJpZW5kcyBSZXVuaXRlZCI7czoxNDoiZnJpZW5kc3Rlci5jb20iO3M6MTA6IkZyaWVuZHN0ZXIiO3M6NzoiZ3JlZS5qcCI7czo0OiJncmVlIjtzOjk6ImhhYmJvLmNvbSI7czo1OiJIYWJvbyI7czoyMDoibmV3cy55Y29tYmluYXRvci5jb20iO3M6MTE6IkhhY2tlciBOZXdzIjtzOjc6ImhpNS5jb20iO3M6MzoiaGk1IjtzOjg6Imh1eWEuY29tIjtzOjQ6Ikh1eWEiO3M6ODoiaHl2ZXMubmwiO3M6NToiSHl2ZXMiO3M6OToiaWRlbnRpLmNhIjtzOjk6ImlkZW50aS5jYSI7czoxMzoiaW5zdGFncmFtLmNvbSI7czo5OiJJbnN0YWdyYW0iO3M6MTU6ImwuaW5zdGFncmFtLmNvbSI7czo5OiJJbnN0YWdyYW0iO3M6MTA6ImxhbmctOC5jb20iO3M6NjoibGFuZy04IjtzOjc6Imxhc3QuZm0iO3M6NzoiTGFzdC5mbSI7czo5OiJsYXN0Zm0ucnUiO3M6NzoiTGFzdC5mbSI7czo5OiJsYXN0Zm0uZGUiO3M6NzoiTGFzdC5mbSI7czo5OiJsYXN0Zm0uZXMiO3M6NzoiTGFzdC5mbSI7czo5OiJsYXN0Zm0uZnIiO3M6NzoiTGFzdC5mbSI7czo5OiJsYXN0Zm0uaXQiO3M6NzoiTGFzdC5mbSI7czo5OiJsYXN0Zm0uanAiO3M6NzoiTGFzdC5mbSI7czo5OiJsYXN0Zm0ucGwiO3M6NzoiTGFzdC5mbSI7czoxMzoibGFzdGZtLmNvbS5iciI7czo3OiJMYXN0LmZtIjtzOjk6Imxhc3RmbS5zZSI7czo3OiJMYXN0LmZtIjtzOjEzOiJsYXN0Zm0uY29tLnRyIjtzOjc6Ikxhc3QuZm0iO3M6MTI6ImxpbmtlZGluLmNvbSI7czo4OiJMaW5rZWRJbiI7czo3OiJsbmtkLmluIjtzOjg6IkxpbmtlZEluIjtzOjE2OiJsaW5rZWRpbi5hbmRyb2lkIjtzOjg6IkxpbmtlZEluIjtzOjE0OiJsaXZlam91cm5hbC5ydSI7czoxMToiTGl2ZUpvdXJuYWwiO3M6MTU6ImxpdmVqb3VybmFsLmNvbSI7czoxMToiTGl2ZUpvdXJuYWwiO3M6MTU6Im1hc3RvZG9uLnNvY2lhbCI7czo4OiJNYXN0b2RvbiI7czoxNDoibWFzdG9kb24uY2xvdWQiO3M6ODoiTWFzdG9kb24iO3M6MTk6Im1hc3RvZG9uLnRlY2hub2xvZ3kiO3M6ODoiTWFzdG9kb24iO3M6MTI6Im1hc3RvZG9uLnh5eiI7czo4OiJNYXN0b2RvbiI7czoxMToibWFzdG9kb24uYXQiO3M6ODoiTWFzdG9kb24iO3M6MTI6Im1hc3RvZG9uLmFydCI7czo4OiJNYXN0b2RvbiI7czo4OiJtYW1vdC5mciI7czo4OiJNYXN0b2RvbiI7czo5OiJwYXdvby5uZXQiO3M6ODoiTWFzdG9kb24iO3M6ODoibXN0ZG4uaW8iO3M6ODoiTWFzdG9kb24iO3M6ODoibXN0ZG4uanAiO3M6ODoiTWFzdG9kb24iO3M6MTI6ImZyaWVuZHMubmljbyI7czo4OiJNYXN0b2RvbiI7czoxOToicm8tbWFzdG9kb24ucHV5by5qcCI7czo4OiJNYXN0b2RvbiI7czo4OiJxdWV5Lm9yZyI7czo4OiJNYXN0b2RvbiI7czoxMjoiYm90c2luLnNwYWNlIjtzOjg6Ik1hc3RvZG9uIjtzOjE2OiJzb2NpYWwudGNobmNzLmRlIjtzOjg6Ik1hc3RvZG9uIjtzOjc6ImtuemsubWUiO3M6ODoiTWFzdG9kb24iO3M6MTM6Im1hc3RvZG9udC5jYXQiO3M6ODoiTWFzdG9kb24iO3M6MTg6ImJpdGNvaW5oYWNrZXJzLm9yZyI7czo4OiJNYXN0b2RvbiI7czoxMzoiZm9zc3RvZG9uLm9yZyI7czo4OiJNYXN0b2RvbiI7czoxMjoiY2hhb3Muc29jaWFsIjtzOjg6Ik1hc3RvZG9uIjtzOjExOiJjeWJyZS5zcGFjZSI7czo4OiJNYXN0b2RvbiI7czoxMDoidmlzLnNvY2lhbCI7czo4OiJNYXN0b2RvbiI7czoxMToidHlwby5zb2NpYWwiO3M6ODoiTWFzdG9kb24iO3M6MTY6ImZyb250LWVuZC5zb2NpYWwiO3M6ODoiTWFzdG9kb24iO3M6MTI6ImhhY2h5ZGVybS5pbyI7czo4OiJNYXN0b2RvbiI7czoxNToibWFzdG9kb24ub25saW5lIjtzOjg6Ik1hc3RvZG9uIjtzOjEzOiJuZXdzaWUuc29jaWFsIjtzOjg6Ik1hc3RvZG9uIjtzOjEyOiJtc3Rkbi5zb2NpYWwiO3M6ODoiTWFzdG9kb24iO3M6MTU6ImluZGlld2ViLnNvY2lhbCI7czo4OiJNYXN0b2RvbiI7czoxMToic2ZiYS5zb2NpYWwiO3M6ODoiTWFzdG9kb24iO3M6NjoibWFzLnRvIjtzOjg6Ik1hc3RvZG9uIjtzOjExOiJtc3Rkbi5wYXJ0eSI7czo4OiJNYXN0b2RvbiI7czo0OiJjLmltIjtzOjg6Ik1hc3RvZG9uIjtzOjE0OiJtYXN0b2RvbmFwcC51ayI7czo4OiJNYXN0b2RvbiI7czoxNjoidW5pdmVyc2VvZG9uLmNvbSI7czo4OiJNYXN0b2RvbiI7czoxODoic29jaWFsLnZpdmFsZGkubmV0IjtzOjg6Ik1hc3RvZG9uIjtzOjExOiJvaGFpLnNvY2lhbCI7czo4OiJNYXN0b2RvbiI7czoxNDoidG9vdC5jb21tdW5pdHkiO3M6ODoiTWFzdG9kb24iO3M6ODoibWFzdG8uYWkiO3M6ODoiTWFzdG9kb24iO3M6MTM6Im1hc3RvZG9uLnNjb3QiO3M6ODoiTWFzdG9kb24iO3M6MTQ6Im1hc3RvZG9uLndvcmxkIjtzOjg6Ik1hc3RvZG9uIjtzOjExOiJtYXN0b2Rvbi5ueiI7czo4OiJNYXN0b2RvbiI7czoxNToiZ3JhcGhpY3Muc29jaWFsIjtzOjg6Ik1hc3RvZG9uIjtzOjI0OiJvcmcuam9pbm1hc3RvZG9uLmFuZHJvaWQiO3M6ODoiTWFzdG9kb24iO3M6MTI6Im1hc3RvZG9uLmV1cyI7czo4OiJNYXN0b2RvbiI7czoxODoibWFzdG9kb24uamFsZ2kuZXVzIjtzOjg6Ik1hc3RvZG9uIjtzOjc6InRrbS5ldXMiO3M6ODoiTWFzdG9kb24iO3M6MTA6Im1laW52ei5uZXQiO3M6NjoiTWVpblZaIjtzOjEyOiJtaXNzZXZhbi5jb20iO3M6ODoiTWlzc0V2YW4iO3M6NzoibWl4aS5qcCI7czo0OiJNaXhpIjtzOjEwOiJtb2lrcnVnLnJ1IjtzOjEwOiJNb2lLcnVnLnJ1IjtzOjEyOiJtdWx0aXBseS5jb20iO3M6ODoiTXVsdGlwbHkiO3M6MTA6Im15Lm1haWwucnUiO3M6MTA6Im15Lm1haWwucnUiO3M6MTQ6Im15aGVyaXRhZ2UuY29tIjtzOjEwOiJNeUhlcml0YWdlIjtzOjk6Im15bGlmZS5ydSI7czo2OiJNeUxpZmUiO3M6MTE6Im15c3BhY2UuY29tIjtzOjc6Ik15c3BhY2UiO3M6MTQ6Im15eWVhcmJvb2suY29tIjtzOjEwOiJteVllYXJib29rIjtzOjU6Im5rLnBsIjtzOjE0OiJOYXN6YS1rbGFzYS5wbCI7czoxMDoibmV0bG9nLmNvbSI7czo2OiJOZXRsb2ciO3M6MTI6Im5pY292aWRlby5qcCI7czo4OiJOaWNvbmljbyI7czoxNjoib2Rub2tsYXNzbmlraS5ydSI7czoxMzoiT2Rub2tsYXNzbmlraSI7czo5OiJvcmt1dC5jb20iO3M6NToiT3JrdXQiO3M6MTI6InF6b25lLnFxLmNvbSI7czo1OiJPem9uZSI7czoxMToicGVlcGV0aC5jb20iO3M6NzoiUGVlcGV0aCI7czoxMzoicGludGVyZXN0LmNvbSI7czo5OiJQaW50ZXJlc3QiO3M6MTI6InBpbnRlcmVzdC5jYSI7czo5OiJQaW50ZXJlc3QiO3M6MTI6InBpbnRlcmVzdC5jaCI7czo5OiJQaW50ZXJlc3QiO3M6MTU6InBpbnRlcmVzdC5jby51ayI7czo5OiJQaW50ZXJlc3QiO3M6MTY6InBpbnRlcmVzdC5jb20uYXUiO3M6OToiUGludGVyZXN0IjtzOjEyOiJwaW50ZXJlc3QuZGUiO3M6OToiUGludGVyZXN0IjtzOjEyOiJwaW50ZXJlc3QuZGsiO3M6OToiUGludGVyZXN0IjtzOjEyOiJwaW50ZXJlc3QuZXMiO3M6OToiUGludGVyZXN0IjtzOjEyOiJwaW50ZXJlc3QuZnIiO3M6OToiUGludGVyZXN0IjtzOjEyOiJwaW50ZXJlc3QuaWUiO3M6OToiUGludGVyZXN0IjtzOjE0OiJwaW50ZXJlc3QuaW5mbyI7czo5OiJQaW50ZXJlc3QiO3M6MTI6InBpbnRlcmVzdC5qcCI7czo5OiJQaW50ZXJlc3QiO3M6MTI6InBpbnRlcmVzdC5ueiI7czo5OiJQaW50ZXJlc3QiO3M6MTI6InBpbnRlcmVzdC5wdCI7czo5OiJQaW50ZXJlc3QiO3M6MTI6InBpbnRlcmVzdC5zZSI7czo5OiJQaW50ZXJlc3QiO3M6MTY6ImF0LnBpbnRlcmVzdC5jb20iO3M6OToiUGludGVyZXN0IjtzOjE2OiJjaC5waW50ZXJlc3QuY29tIjtzOjk6IlBpbnRlcmVzdCI7czoxNjoiY2wucGludGVyZXN0LmNvbSI7czo5OiJQaW50ZXJlc3QiO3M6MTY6ImNvLnBpbnRlcmVzdC5jb20iO3M6OToiUGludGVyZXN0IjtzOjE2OiJkay5waW50ZXJlc3QuY29tIjtzOjk6IlBpbnRlcmVzdCI7czoxNjoiZXMucGludGVyZXN0LmNvbSI7czo5OiJQaW50ZXJlc3QiO3M6MTY6Imh1LnBpbnRlcmVzdC5jb20iO3M6OToiUGludGVyZXN0IjtzOjE2OiJpZC5waW50ZXJlc3QuY29tIjtzOjk6IlBpbnRlcmVzdCI7czoxNjoiaWUucGludGVyZXN0LmNvbSI7czo5OiJQaW50ZXJlc3QiO3M6MTY6ImluLnBpbnRlcmVzdC5jb20iO3M6OToiUGludGVyZXN0IjtzOjE2OiJpdC5waW50ZXJlc3QuY29tIjtzOjk6IlBpbnRlcmVzdCI7czoxNjoia3IucGludGVyZXN0LmNvbSI7czo5OiJQaW50ZXJlc3QiO3M6MTY6Im14LnBpbnRlcmVzdC5jb20iO3M6OToiUGludGVyZXN0IjtzOjE2OiJubC5waW50ZXJlc3QuY29tIjtzOjk6IlBpbnRlcmVzdCI7czoxNjoibnoucGludGVyZXN0LmNvbSI7czo5OiJQaW50ZXJlc3QiO3M6MTY6InBoLnBpbnRlcmVzdC5jb20iO3M6OToiUGludGVyZXN0IjtzOjE2OiJwdC5waW50ZXJlc3QuY29tIjtzOjk6IlBpbnRlcmVzdCI7czoxNjoicnUucGludGVyZXN0LmNvbSI7czo5OiJQaW50ZXJlc3QiO3M6MTY6InNlLnBpbnRlcmVzdC5jb20iO3M6OToiUGludGVyZXN0IjtzOjE1OiJwaXhlbGZlZC5zb2NpYWwiO3M6ODoiUGl4ZWxmZWQiO3M6MTE6InBpeGVsZmVkLmRlIjtzOjg6IlBpeGVsZmVkIjtzOjk6InB4bG1vLmNvbSI7czo4OiJQaXhlbGZlZCI7czoxMjoibWV0YXBpeGwuY29tIjtzOjg6IlBpeGVsZmVkIjtzOjE0OiJwaXgudG9vdC53YWxlcyI7czo4OiJQaXhlbGZlZCI7czoxMjoicGl4ZWxmZWQudW5vIjtzOjg6IlBpeGVsZmVkIjtzOjk6InBpeGV5Lm9yZyI7czo4OiJQaXhlbGZlZCI7czo5OiJwbGF4by5jb20iO3M6NToiUGxheG8iO3M6MTA6InJlZGRpdC5jb20iO3M6NjoicmVkZGl0IjtzOjEzOiJucC5yZWRkaXQuY29tIjtzOjY6InJlZGRpdCI7czoxNDoicGF5LnJlZGRpdC5jb20iO3M6NjoicmVkZGl0IjtzOjIwOiJjb20ucmVkZGl0LmZyb250cGFnZSI7czo2OiJyZWRkaXQiO3M6MTA6InJlbnJlbi5jb20iO3M6NjoiUmVucmVuIjtzOjExOiJza3lyb2NrLmNvbSI7czo3OiJTa3lyb2NrIjtzOjEyOiJzbmFwY2hhdC5jb20iO3M6ODoiU25hcGNoYXQiO3M6MTA6InNvbmljby5jb20iO3M6MTA6IlNvbmljby5jb20iO3M6MTQ6InNvdW5kY2xvdWQuY29tIjtzOjEwOiJTb3VuZENsb3VkIjtzOjc6ImdhdGUuc2MiO3M6MTA6IlNvdW5kQ2xvdWQiO3M6MTc6InN0YWNrb3ZlcmZsb3cuY29tIjtzOjEzOiJTdGFja092ZXJmbG93IjtzOjExOiJzdHVkaXZ6Lm5ldCI7czo3OiJTdHVkaVZaIjtzOjE2OiJsb2dpbi50YWdnZWQuY29tIjtzOjY6IlRhZ2dlZCI7czoxMToidGFyaW5nYS5uZXQiO3M6ODoiVGFyaW5nYSEiO3M6MTY6IndlYi50ZWxlZ3JhbS5vcmciO3M6ODoiVGVsZWdyYW0iO3M6MjI6Im9yZy50ZWxlZ3JhbS5tZXNzZW5nZXIiO3M6ODoiVGVsZWdyYW0iO3M6MTE6InRocmVhZHMubmV0IjtzOjc6IlRocmVhZHMiO3M6MTM6ImwudGhyZWFkcy5uZXQiO3M6NzoiVGhyZWFkcyI7czoxMDoidGlrdG9rLmNvbSI7czo2OiJUaWtUb2siO3M6MTA6InR1ZW50aS5jb20iO3M6NjoiVHVlbnRpIjtzOjEwOiJ0dW1ibHIuY29tIjtzOjY6InR1bWJsciI7czoxMToidC51bWJsci5jb20iO3M6NjoidHVtYmxyIjtzOjE0OiJ0d2l0Y2FzdGluZy50diI7czo4OiJUd2l0Y2FzdCI7czoxMToidHdpdHRlci5jb20iO3M6NzoiVHdpdHRlciI7czo0OiJ0LmNvIjtzOjc6IlR3aXR0ZXIiO3M6NToieC5jb20iO3M6NzoiVHdpdHRlciI7czoxNToic291cmNlZm9yZ2UubmV0IjtzOjExOiJTb3VyY2Vmb3JnZSI7czoxNToic3R1bWJsZXVwb24uY29tIjtzOjExOiJTdHVtYmxlVXBvbiI7czo2OiJ2ay5jb20iO3M6OToiVmtvbnRha3RlIjtzOjEyOiJ2a29udGFrdGUucnUiO3M6OToiVmtvbnRha3RlIjtzOjExOiJ5b3V0dWJlLmNvbSI7czo3OiJZb3VUdWJlIjtzOjg6InlvdXR1LmJlIjtzOjc6IllvdVR1YmUiO3M6ODoidjJleC5jb20iO3M6NDoiVjJFWCI7czoxMDoidmlhZGVvLmNvbSI7czo2OiJWaWFkZW8iO3M6OToidmltZW8uY29tIjtzOjU6IlZpbWVvIjtzOjE1OiJ2a3J1Z3VkcnV6ZWkucnUiO3M6MTU6InZrcnVndWRydXplaS5ydSI7czo4OiJ3YXluLmNvbSI7czo0OiJXQVlOIjtzOjk6IndlaWJvLmNvbSI7czo1OiJXZWlibyI7czo0OiJ0LmNuIjtzOjU6IldlaWJvIjtzOjEyOiJ3ZWV3b3JsZC5jb20iO3M6ODoiV2VlV29ybGQiO3M6MTQ6ImxvZ2luLmxpdmUuY29tIjtzOjE5OiJXaW5kb3dzIExpdmUgU3BhY2VzIjtzOjEzOiJ3b3JrcGxhY2UuY29tIjtzOjk6IldvcmtwbGFjZSI7czoxNToibC53b3JrcGxhY2UuY29tIjtzOjk6IldvcmtwbGFjZSI7czoxNjoibG0ud29ya3BsYWNlLmNvbSI7czo5OiJXb3JrcGxhY2UiO3M6OToieGFuZ2EuY29tIjtzOjU6IlhhbmdhIjtzOjg6InhpbmcuY29tIjtzOjQ6IlhJTkciO30=',0),('t2kn_report_to_invalidate_2_2012-02-15_1843','1',0),('tagmanager_salt','00c501c4c1e6907e3345F4oXJUXm!?-ipSPh7O7U',0),('te29_report_to_invalidate_1_2012-02-07_1843','1',0),('Tests.forcedNowTimestamp','1754670702',0),('Tests.xssEntries','[\"twig-(site name)\",\"twig-(goal name)\",\"twig-(goal description)\",\"vuejs-(Piwik test two)\",\"vuejs-(second goal)\",\"vuejs-(goal description)\",\"twig-(pageurl)\",\"twig-(page title)\",\"twig-(referrerUrl)\",\"twig-(keyword)\",\"twig-(customdimension)\",\"twig-(customvarname)\",\"twig-(customvarval)\",\"twig-(userid)\",\"twig-(lang)\",\"twig-(city)\",\"twig-(region)\",\"twig-(country)\",\"vuejs-(pageurl)\",\"vuejs-(page title)\",\"vuejs-(referrerUrl)\",\"vuejs-(keyword)\",\"vuejs-(customdimension)\",\"vuejs-(customvarname)\",\"vuejs-(customvarval)\",\"vuejs-(userid)\",\"vuejs-(lang)\",\"vuejs-(city)\",\"vuejs-(region)\",\"vuejs-(country)\",\"twig-(annotation)\",\"vuejs-(Annotation note 3)\"]',0),('TUhv_report_to_invalidate_1_2012-01-13_2154','1',0),('Tzix_report_to_invalidate_1_2012-02-29_1843','1',0),('u7Bg_report_to_invalidate_3_2012-01-23_1842','1',0),('U953_report_to_invalidate_1_2012-01-20_1842','1',0),('UpdateCheck_LastCheckFailed','',0),('UpdateCheck_LastTimeChecked','1754670706',1),('UpdateCheck_LatestVersion','5.3.2',0),('uS6d_report_to_invalidate_1_2012-02-18_1843','1',0),('usercountry.location_provider','mock_provider',0),('usercountry.switchtoisoregions','1',0),('useridsalt','Y56aZLjXKY2EA7xk1lWX_6y8C_r63l6XcGAjRDDX',1),('Utbw_report_to_invalidate_2_2012-02-05_1843','1',0),('uwf9_report_to_invalidate_3_2012-01-22_1843','1',0),('V5vG_report_to_invalidate_1_2012-08-19_1842','1',0),('version_Actions','5.4.0-b5',1),('version_Annotations','5.4.0-b5',1),('version_AnonymousPiwikUsageMeasurement','5.0.2',1),('version_API','5.4.0-b5',1),('version_Bandwidth','5.0.3',1),('version_BulkTracking','5.4.0-b5',1),('version_Contents','5.4.0-b5',1),('version_core','5.4.0-b5',1),('version_CoreAdminHome','5.4.0-b5',1),('version_CoreConsole','5.4.0-b5',1),('version_CoreHome','5.4.0-b5',1),('version_CorePluginsAdmin','5.4.0-b5',1),('version_CoreUpdater','5.4.0-b5',1),('version_CoreVisualizations','5.4.0-b5',1),('version_CoreVue','5.4.0-b5',1),('version_CustomAlerts','5.0.7',1),('version_CustomDimensions','5.4.0-b5',1),('version_CustomJsTracker','5.4.0-b5',1),('version_CustomVariables','5.0.4',1),('version_Dashboard','5.4.0-b5',1),('version_DBStats','5.4.0-b5',1),('version_DevicePlugins','5.4.0-b5',1),('version_DevicesDetection','5.4.0-b5',1),('version_Diagnostics','5.4.0-b5',1),('version_Ecommerce','5.4.0-b5',1),('version_Events','5.4.0-b5',1),('version_ExampleAPI','1.0',1),('version_ExampleCommand','0.1.0',1),('version_ExamplePlugin','0.1.0',1),('version_ExampleSettingsPlugin','0.1.0',1),('version_ExampleUI','1.0.1',1),('version_FeatureFlags','5.4.0-b5',1),('version_Feedback','5.4.0-b5',1),('version_GeoIp2','5.4.0-b5',1),('version_Goals','5.4.0-b5',1),('version_Heartbeat','5.4.0-b5',1),('version_ImageGraph','5.4.0-b5',1),('version_Insights','5.4.0-b5',1),('version_Installation','5.4.0-b5',1),('version_Intl','5.4.0-b5',1),('version_IntranetMeasurable','5.4.0-b5',1),('version_JsTrackerInstallCheck','5.4.0-b5',1),('version_LanguagesManager','5.4.0-b5',1),('version_Live','5.4.0-b5',1),('version_Login','5.4.0-b5',1),('version_LogViewer','5.0.4',1),('version_log_conversion.pageviews_before','SMALLINT UNSIGNED DEFAULT NULL',1),('version_log_conversion.revenue','float default NULL',1),('version_log_link_visit_action.bandwidth','BIGINT(15) UNSIGNED DEFAULT NULL',1),('version_log_link_visit_action.idaction_content_interaction','INTEGER(10) UNSIGNED DEFAULT NULL',1),('version_log_link_visit_action.idaction_content_name','INTEGER(10) UNSIGNED DEFAULT NULL',1),('version_log_link_visit_action.idaction_content_piece','INTEGER(10) UNSIGNED DEFAULT NULL',1),('version_log_link_visit_action.idaction_content_target','INTEGER(10) UNSIGNED DEFAULT NULL',1),('version_log_link_visit_action.idaction_event_action','INTEGER(10) UNSIGNED DEFAULT NULL',1),('version_log_link_visit_action.idaction_event_category','INTEGER(10) UNSIGNED DEFAULT NULL',1),('version_log_link_visit_action.idaction_name','INTEGER(10) UNSIGNED',1),('version_log_link_visit_action.idaction_product_cat','INT(10) UNSIGNED NULL',1),('version_log_link_visit_action.idaction_product_cat2','INT(10) UNSIGNED NULL',1),('version_log_link_visit_action.idaction_product_cat3','INT(10) UNSIGNED NULL',1),('version_log_link_visit_action.idaction_product_cat4','INT(10) UNSIGNED NULL',1),('version_log_link_visit_action.idaction_product_cat5','INT(10) UNSIGNED NULL',1),('version_log_link_visit_action.idaction_product_name','INT(10) UNSIGNED NULL',1),('version_log_link_visit_action.idaction_product_sku','INT(10) UNSIGNED NULL',1),('version_log_link_visit_action.idaction_url','INTEGER(10) UNSIGNED DEFAULT NULL',1),('version_log_link_visit_action.idpageview','CHAR(6) NULL DEFAULT NULL',1),('version_log_link_visit_action.product_price','DOUBLE NULL',1),('version_log_link_visit_action.search_cat','VARCHAR(200) NULL',1),('version_log_link_visit_action.search_count','INTEGER(10) UNSIGNED NULL',1),('version_log_link_visit_action.server_time','DATETIME NOT NULL',1),('version_log_link_visit_action.time_dom_completion','MEDIUMINT(10) UNSIGNED NULL',1),('version_log_link_visit_action.time_dom_processing','MEDIUMINT(10) UNSIGNED NULL',1),('version_log_link_visit_action.time_network','MEDIUMINT(10) UNSIGNED NULL',1),('version_log_link_visit_action.time_on_load','MEDIUMINT(10) UNSIGNED NULL',1),('version_log_link_visit_action.time_server','MEDIUMINT(10) UNSIGNED NULL',1),('version_log_link_visit_action.time_spent_ref_action','INTEGER(10) UNSIGNED NULL',1),('version_log_link_visit_action.time_transfer','MEDIUMINT(10) UNSIGNED NULL',1),('version_log_visit.config_browser_engine','VARCHAR(10) NULL',1),('version_log_visit.config_browser_name','VARCHAR(40) NULL1',1),('version_log_visit.config_browser_version','VARCHAR(20) NULL',1),('version_log_visit.config_client_type','TINYINT( 1 ) NULL DEFAULT NULL1',1),('version_log_visit.config_cookie','TINYINT(1) NULL',1),('version_log_visit.config_device_brand','VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL1',1),('version_log_visit.config_device_model','VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL1',1),('version_log_visit.config_device_type','TINYINT( 100 ) NULL DEFAULT NULL1',1),('version_log_visit.config_flash','TINYINT(1) NULL',1),('version_log_visit.config_java','TINYINT(1) NULL',1),('version_log_visit.config_os','CHAR(3) NULL',1),('version_log_visit.config_os_version','VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL',1),('version_log_visit.config_pdf','TINYINT(1) NULL',1),('version_log_visit.config_quicktime','TINYINT(1) NULL',1),('version_log_visit.config_realplayer','TINYINT(1) NULL',1),('version_log_visit.config_resolution','VARCHAR(18) NULL',1),('version_log_visit.config_silverlight','TINYINT(1) NULL',1),('version_log_visit.config_windowsmedia','TINYINT(1) NULL',1),('version_log_visit.location_browser_lang','VARCHAR(20) NULL',1),('version_log_visit.location_city','varchar(255) DEFAULT NULL1',1),('version_log_visit.location_country','CHAR(3) NULL1',1),('version_log_visit.location_latitude','decimal(9, 6) DEFAULT NULL1',1),('version_log_visit.location_longitude','decimal(9, 6) DEFAULT NULL1',1),('version_log_visit.location_region','char(3) DEFAULT NULL1',1),('version_log_visit.profilable','TINYINT(1) NULL',1),('version_log_visit.referer_keyword','VARCHAR(255) NULL1',1),('version_log_visit.referer_name','VARCHAR(255) NULL1',1),('version_log_visit.referer_type','TINYINT(1) UNSIGNED NULL1',1),('version_log_visit.referer_url','VARCHAR(1500) NULL',1),('version_log_visit.user_id','VARCHAR(200) NULL',1),('version_log_visit.visitor_count_visits','INT(11) UNSIGNED NOT NULL DEFAULT 01',1),('version_log_visit.visitor_localtime','TIME NULL',1),('version_log_visit.visitor_returning','TINYINT(1) NULL1',1),('version_log_visit.visitor_seconds_since_first','INT(11) UNSIGNED NULL1',1),('version_log_visit.visitor_seconds_since_last','INT(11) UNSIGNED NULL',1),('version_log_visit.visitor_seconds_since_order','INT(11) UNSIGNED NULL1',1),('version_log_visit.visit_entry_idaction_name','INTEGER(10) UNSIGNED NULL',1),('version_log_visit.visit_entry_idaction_url','INTEGER(11) UNSIGNED NULL DEFAULT NULL',1),('version_log_visit.visit_exit_idaction_name','INTEGER(10) UNSIGNED NULL',1),('version_log_visit.visit_exit_idaction_url','INTEGER(10) UNSIGNED NULL DEFAULT 0',1),('version_log_visit.visit_first_action_time','DATETIME NOT NULL',1),('version_log_visit.visit_goal_buyer','TINYINT(1) NULL',1),('version_log_visit.visit_goal_converted','TINYINT(1) NULL',1),('version_log_visit.visit_total_actions','INT(11) UNSIGNED NULL',1),('version_log_visit.visit_total_events','INT(11) UNSIGNED NULL',1),('version_log_visit.visit_total_interactions','MEDIUMINT UNSIGNED DEFAULT 0',1),('version_log_visit.visit_total_searches','SMALLINT(5) UNSIGNED NULL',1),('version_log_visit.visit_total_time','INT(11) UNSIGNED NOT NULL',1),('version_Marketplace','5.4.0-b5',1),('version_MobileMessaging','5.4.0-b5',1),('version_Monolog','5.4.0-b5',1),('version_Morpheus','5.4.0-b5',1),('version_MultiSites','5.4.0-b5',1),('version_Overlay','5.4.0-b5',1),('version_PagePerformance','5.4.0-b5',1),('version_PrivacyManager','5.4.0-b5',1),('version_ProfessionalServices','5.4.0-b5',1),('version_Proxy','5.4.0-b5',1),('version_QueuedTracking','5.1.2',1),('version_Referrers','5.4.0-b5',1),('version_Resolution','5.4.0-b5',1),('version_RssWidget','1.0',1),('version_ScheduledReports','5.4.0-b5',1),('version_SecurityInfo','5.0.4',1),('version_SegmentEditor','5.4.0-b5',1),('version_SEO','5.4.0-b5',1),('version_SitesManager','5.4.0-b5',1),('version_TagManager','5.4.0-b5',1),('version_TasksTimetable','5.0.2',1),('version_TestRunner','0.1.0',1),('version_Tour','5.4.0-b5',1),('version_TrackingSpamPrevention','5.0.8',1),('version_Transitions','5.4.0-b5',1),('version_TreemapVisualization','5.0.4',1),('version_TwoFactorAuth','5.4.0-b5',1),('version_UserCountry','5.4.0-b5',1),('version_UserCountryMap','5.4.0-b5',1),('version_UserId','5.4.0-b5',1),('version_UserLanguage','5.4.0-b5',1),('version_UsersManager','5.4.0-b5',1),('version_VisitFrequency','5.4.0-b5',1),('version_VisitorGenerator','5.1.1',1),('version_VisitorInterest','5.4.0-b5',1),('version_VisitsSummary','5.4.0-b5',1),('version_VisitTime','5.4.0-b5',1),('version_WebsiteMeasurable','5.4.0-b5',1),('version_Widgetize','5.4.0-b5',1),('vF22_report_to_invalidate_2_2012-02-27_1843','1',0),('Vx5H_report_to_invalidate_1_2012-09-30_1841','1',0),('vxu7_report_to_invalidate_1_2015-02-03_1842','1',0),('WMoY_report_to_invalidate_2_2012-08-15_1842','1',0),('wNtE_report_to_invalidate_1_2012-01-01_1841','1',0),('XaMs_report_to_invalidate_2_2012-02-29_1843','1',0),('xbD0_report_to_invalidate_1_2012-02-26_1843','1',0),('xIxQ_report_to_invalidate_1_2012-01-24_1841','1',0),('xj2E_report_to_invalidate_2_2012-02-04_1843','1',0),('XkbZ_report_to_invalidate_2_2012-02-21_1843','1',0),('XZ2d_report_to_invalidate_1_2012-02-22_1843','1',0),('YCav_report_to_invalidate_1_2012-02-08_1843','1',0),('yCFm_report_to_invalidate_1_2012-01-31_1841','1',0),('YKpJ_report_to_invalidate_1_2012-01-03_1841','1',0),('zexa_report_to_invalidate_2_2012-03-01_1843','1',0),('Zw0x_report_to_invalidate_1_2012-02-04_1843','1',0); +/*!40000 ALTER TABLE `option` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `plugin_setting` +-- + +DROP TABLE IF EXISTS `plugin_setting`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `plugin_setting` ( + `plugin_name` varchar(60) NOT NULL, + `setting_name` varchar(255) NOT NULL, + `setting_value` longtext NOT NULL, + `json_encoded` tinyint(3) unsigned NOT NULL DEFAULT '0', + `user_login` varchar(100) NOT NULL DEFAULT '', + `idplugin_setting` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`idplugin_setting`), + KEY `plugin_name` (`plugin_name`,`user_login`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `plugin_setting` +-- + +LOCK TABLES `plugin_setting` WRITE; +/*!40000 ALTER TABLE `plugin_setting` DISABLE KEYS */; +/*!40000 ALTER TABLE `plugin_setting` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `privacy_logdata_anonymizations` +-- + +DROP TABLE IF EXISTS `privacy_logdata_anonymizations`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `privacy_logdata_anonymizations` ( + `idlogdata_anonymization` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `idsites` text, + `date_start` datetime NOT NULL, + `date_end` datetime NOT NULL, + `anonymize_ip` tinyint(1) unsigned NOT NULL DEFAULT '0', + `anonymize_location` tinyint(1) unsigned NOT NULL DEFAULT '0', + `anonymize_userid` tinyint(1) unsigned NOT NULL DEFAULT '0', + `unset_visit_columns` text NOT NULL, + `unset_link_visit_action_columns` text NOT NULL, + `output` mediumtext, + `scheduled_date` datetime DEFAULT NULL, + `job_start_date` datetime DEFAULT NULL, + `job_finish_date` datetime DEFAULT NULL, + `requester` varchar(100) NOT NULL DEFAULT '', + PRIMARY KEY (`idlogdata_anonymization`), + KEY `job_start_date` (`job_start_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `privacy_logdata_anonymizations` +-- + +LOCK TABLES `privacy_logdata_anonymizations` WRITE; +/*!40000 ALTER TABLE `privacy_logdata_anonymizations` DISABLE KEYS */; +/*!40000 ALTER TABLE `privacy_logdata_anonymizations` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `queuedtracking_queue` +-- + +DROP TABLE IF EXISTS `queuedtracking_queue`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `queuedtracking_queue` ( + `queue_key` varchar(70) NOT NULL, + `queue_value` varchar(255) DEFAULT NULL, + `expiry_time` bigint(20) unsigned DEFAULT '9999999999', + PRIMARY KEY (`queue_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `queuedtracking_queue` +-- + +LOCK TABLES `queuedtracking_queue` WRITE; +/*!40000 ALTER TABLE `queuedtracking_queue` DISABLE KEYS */; +/*!40000 ALTER TABLE `queuedtracking_queue` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `report` +-- + +DROP TABLE IF EXISTS `report`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `report` ( + `idreport` int(11) NOT NULL AUTO_INCREMENT, + `idsite` int(11) NOT NULL, + `login` varchar(100) NOT NULL, + `description` varchar(255) NOT NULL, + `idsegment` int(11) DEFAULT NULL, + `period` varchar(10) NOT NULL, + `hour` tinyint(4) NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL, + `format` varchar(10) NOT NULL, + `reports` text NOT NULL, + `parameters` text, + `ts_created` timestamp NULL DEFAULT NULL, + `ts_last_sent` timestamp NULL DEFAULT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + `evolution_graph_within_period` tinyint(4) NOT NULL DEFAULT '0', + `evolution_graph_period_n` int(11) NOT NULL, + `period_param` varchar(10) DEFAULT NULL, + PRIMARY KEY (`idreport`) +) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `report` +-- + +LOCK TABLES `report` WRITE; +/*!40000 ALTER TABLE `report` DISABLE KEYS */; +INSERT INTO `report` VALUES (1,1,'superUserLogin','Mail Test report with déscription and some 🚀 $peciäl characters $%&-~°^\'\"@#*ß§²³',NULL,'day',0,'email','html','[\"MultiSites_getAll\",\"VisitsSummary_get\",\"UserCountry_getCountry\",\"UserCountry_getContinent\",\"UserCountry_getRegion\",\"UserLanguage_getLanguage\",\"UserCountry_getCity\",\"UserLanguage_getLanguageCode\",\"DevicesDetection_getType\",\"DevicesDetection_getModel\",\"DevicesDetection_getBrand\",\"Resolution_getResolution\",\"DevicesDetection_getOsVersions\",\"DevicesDetection_getBrowsers\",\"DevicesDetection_getBrowserVersions\",\"Resolution_getConfiguration\",\"DevicesDetection_getOsFamilies\",\"DevicesDetection_getBrowserEngines\",\"DevicePlugins_getPlugin\",\"VisitTime_getVisitInformationPerLocalTime\",\"VisitTime_getVisitInformationPerServerTime\",\"VisitTime_getByDayOfWeek\",\"UserId_getUsers\",\"CustomVariables_getCustomVariables\",\"Actions_get\",\"Bandwidth_get\",\"Actions_getPageUrls\",\"Actions_getEntryPageUrls\",\"Actions_getEntryPageTitles\",\"Actions_getExitPageUrls\",\"Actions_getExitPageTitles\",\"Actions_getPageTitles\",\"Actions_getSiteSearchKeywords\",\"Actions_getPageUrlsFollowingSiteSearch\",\"Actions_getSiteSearchNoResultKeywords\",\"Actions_getPageTitlesFollowingSiteSearch\",\"Actions_getSiteSearchCategories\",\"Actions_getOutlinks\",\"Actions_getDownloads\",\"Events_getCategory\",\"Events_getAction\",\"Events_getName\",\"Contents_getContentNames\",\"Contents_getContentPieces\",\"VisitorInterest_getNumberOfVisitsPerVisitDuration\",\"VisitorInterest_getNumberOfVisitsPerPage\",\"VisitorInterest_getNumberOfVisitsByVisitCount\",\"VisitorInterest_getNumberOfVisitsByDaysSinceLast\",\"VisitFrequency_get\",\"PagePerformance_get\",\"Referrers_get\",\"Referrers_getReferrerType\",\"Referrers_getAll\",\"Referrers_getKeywords\",\"Referrers_getSearchEngines\",\"Referrers_getWebsites\",\"Referrers_getSocials\",\"Referrers_getAIAssistants\",\"Referrers_getCampaigns\",\"Goals_get_idGoal--ecommerceOrder\",\"Goals_getVisitsUntilConversion_idGoal--ecommerceOrder\",\"Goals_getDaysToConversion_idGoal--ecommerceOrder\",\"Goals_get_idGoal--ecommerceAbandonedCart\",\"Goals_getVisitsUntilConversion_idGoal--ecommerceAbandonedCart\",\"Goals_getDaysToConversion_idGoal--ecommerceAbandonedCart\",\"Goals_getItemsName\",\"Goals_getItemsSku\",\"Goals_getItemsCategory\",\"Goals_get\",\"Goals_getVisitsUntilConversion\",\"Goals_getDaysToConversion\",\"Goals_get_idGoal--0\",\"Goals_getVisitsUntilConversion_idGoal--0\",\"Goals_getDaysToConversion_idGoal--0\",\"Goals_get_idGoal--1\",\"Goals_getVisitsUntilConversion_idGoal--1\",\"Goals_getDaysToConversion_idGoal--1\",\"Goals_get_idGoal--2\",\"Goals_getVisitsUntilConversion_idGoal--2\",\"Goals_getDaysToConversion_idGoal--2\",\"Goals_get_idGoal--3\",\"Goals_getVisitsUntilConversion_idGoal--3\",\"Goals_getDaysToConversion_idGoal--3\",\"Goals_get_idGoal--4\",\"Goals_getVisitsUntilConversion_idGoal--4\",\"Goals_getDaysToConversion_idGoal--4\",\"Goals_get_idGoal--5\",\"Goals_getVisitsUntilConversion_idGoal--5\",\"Goals_getDaysToConversion_idGoal--5\",\"ExampleUI_getTemperatures\",\"ExampleUI_getTemperaturesEvolution\",\"ExampleUI_getPlanetRatios\",\"ExampleUI_getPlanetRatiosWithLogos\"]','{\"displayFormat\":4,\"emailMe\":true,\"evolutionGraph\":false}','2025-08-08 14:32:55',NULL,0,0,30,NULL),(2,1,'superUserLogin','SMS Test report, one website',NULL,'day',0,'mobile','sms','[\"MultiSites_getOne\"]','{\"phoneNumbers\":[]}','2025-08-08 14:32:55',NULL,0,0,30,NULL),(3,1,'superUserLogin','SMS Test report, all websites',NULL,'day',0,'mobile','sms','[\"MultiSites_getAll\"]','{\"phoneNumbers\":[]}','2025-08-08 14:32:55',NULL,0,0,30,NULL),(4,1,'superUserLogin','Mail Test report',NULL,'day',0,'email','html','[\"MultiSites_getAll\",\"VisitsSummary_get\",\"UserCountry_getCountry\",\"UserCountry_getContinent\",\"UserCountry_getRegion\",\"UserLanguage_getLanguage\",\"UserCountry_getCity\",\"UserLanguage_getLanguageCode\",\"DevicesDetection_getType\",\"DevicesDetection_getModel\",\"DevicesDetection_getBrand\",\"Resolution_getResolution\",\"DevicesDetection_getOsVersions\",\"DevicesDetection_getBrowsers\",\"DevicesDetection_getBrowserVersions\",\"Resolution_getConfiguration\",\"DevicesDetection_getOsFamilies\",\"DevicesDetection_getBrowserEngines\",\"DevicePlugins_getPlugin\",\"VisitTime_getVisitInformationPerLocalTime\",\"VisitTime_getVisitInformationPerServerTime\",\"VisitTime_getByDayOfWeek\",\"UserId_getUsers\",\"CustomVariables_getCustomVariables\",\"Actions_get\",\"Bandwidth_get\",\"Actions_getPageUrls\",\"Actions_getEntryPageUrls\",\"Actions_getEntryPageTitles\",\"Actions_getExitPageUrls\",\"Actions_getExitPageTitles\",\"Actions_getPageTitles\",\"Actions_getSiteSearchKeywords\",\"Actions_getPageUrlsFollowingSiteSearch\",\"Actions_getSiteSearchNoResultKeywords\",\"Actions_getPageTitlesFollowingSiteSearch\",\"Actions_getSiteSearchCategories\",\"Actions_getOutlinks\",\"Actions_getDownloads\",\"Events_getCategory\",\"Events_getAction\",\"Events_getName\",\"Contents_getContentNames\",\"Contents_getContentPieces\",\"VisitorInterest_getNumberOfVisitsPerVisitDuration\",\"VisitorInterest_getNumberOfVisitsPerPage\",\"VisitorInterest_getNumberOfVisitsByVisitCount\",\"VisitorInterest_getNumberOfVisitsByDaysSinceLast\",\"VisitFrequency_get\",\"PagePerformance_get\",\"Referrers_get\",\"Referrers_getReferrerType\",\"Referrers_getAll\",\"Referrers_getKeywords\",\"Referrers_getSearchEngines\",\"Referrers_getWebsites\",\"Referrers_getSocials\",\"Referrers_getAIAssistants\",\"Referrers_getCampaigns\",\"Goals_get_idGoal--ecommerceOrder\",\"Goals_getVisitsUntilConversion_idGoal--ecommerceOrder\",\"Goals_getDaysToConversion_idGoal--ecommerceOrder\",\"Goals_get_idGoal--ecommerceAbandonedCart\",\"Goals_getVisitsUntilConversion_idGoal--ecommerceAbandonedCart\",\"Goals_getDaysToConversion_idGoal--ecommerceAbandonedCart\",\"Goals_getItemsName\",\"Goals_getItemsSku\",\"Goals_getItemsCategory\",\"Goals_get\",\"Goals_getVisitsUntilConversion\",\"Goals_getDaysToConversion\",\"Goals_get_idGoal--0\",\"Goals_getVisitsUntilConversion_idGoal--0\",\"Goals_getDaysToConversion_idGoal--0\",\"Goals_get_idGoal--1\",\"Goals_getVisitsUntilConversion_idGoal--1\",\"Goals_getDaysToConversion_idGoal--1\",\"Goals_get_idGoal--2\",\"Goals_getVisitsUntilConversion_idGoal--2\",\"Goals_getDaysToConversion_idGoal--2\",\"Goals_get_idGoal--3\",\"Goals_getVisitsUntilConversion_idGoal--3\",\"Goals_getDaysToConversion_idGoal--3\",\"Goals_get_idGoal--4\",\"Goals_getVisitsUntilConversion_idGoal--4\",\"Goals_getDaysToConversion_idGoal--4\",\"Goals_get_idGoal--5\",\"Goals_getVisitsUntilConversion_idGoal--5\",\"Goals_getDaysToConversion_idGoal--5\",\"ExampleUI_getTemperatures\",\"ExampleUI_getTemperaturesEvolution\",\"ExampleUI_getPlanetRatios\",\"ExampleUI_getPlanetRatiosWithLogos\"]','{\"displayFormat\":3,\"emailMe\":true,\"evolutionGraph\":false}','2025-08-08 14:32:55',NULL,0,0,30,NULL),(5,1,'superUserLogin','Mail Test report (previous default)',NULL,'day',0,'email','html','[\"Actions_getPageTitles\"]','{\"displayFormat\":2,\"evolutionGraph\":true,\"emailMe\":true}','2025-08-08 14:32:55',NULL,0,0,30,NULL),(6,1,'superUserLogin','Mail Test report (previous10)',NULL,'day',0,'email','html','[\"Actions_getPageTitles\"]','{\"displayFormat\":2,\"evolutionGraph\":true,\"emailMe\":true}','2025-08-08 14:32:55',NULL,0,0,10,NULL),(7,1,'superUserLogin','Mail Test report (each in period)',NULL,'week',0,'email','html','[\"Actions_getPageTitles\"]','{\"displayFormat\":2,\"evolutionGraph\":true,\"emailMe\":true}','2025-08-08 14:32:55',NULL,0,1,30,NULL),(8,1,'superUserLogin','Mail Test report with déscription and some 🚀 $peciäl characters $%&-~°^\'\"@#*ß§²³',NULL,'day',0,'email','html','[\"MultiSites_getAll\",\"VisitsSummary_get\",\"UserCountry_getCountry\",\"UserCountry_getContinent\",\"UserCountry_getRegion\",\"UserLanguage_getLanguage\",\"UserCountry_getCity\",\"UserLanguage_getLanguageCode\",\"DevicesDetection_getType\",\"DevicesDetection_getModel\",\"DevicesDetection_getBrand\",\"Resolution_getResolution\",\"DevicesDetection_getOsVersions\",\"DevicesDetection_getBrowsers\",\"DevicesDetection_getBrowserVersions\",\"Resolution_getConfiguration\",\"DevicesDetection_getOsFamilies\",\"DevicesDetection_getBrowserEngines\",\"DevicePlugins_getPlugin\",\"VisitTime_getVisitInformationPerLocalTime\",\"VisitTime_getVisitInformationPerServerTime\",\"VisitTime_getByDayOfWeek\",\"UserId_getUsers\",\"CustomVariables_getCustomVariables\",\"Actions_get\",\"Bandwidth_get\",\"Actions_getPageUrls\",\"Actions_getEntryPageUrls\",\"Actions_getEntryPageTitles\",\"Actions_getExitPageUrls\",\"Actions_getExitPageTitles\",\"Actions_getPageTitles\",\"Actions_getSiteSearchKeywords\",\"Actions_getPageUrlsFollowingSiteSearch\",\"Actions_getSiteSearchNoResultKeywords\",\"Actions_getPageTitlesFollowingSiteSearch\",\"Actions_getSiteSearchCategories\",\"Actions_getOutlinks\",\"Actions_getDownloads\",\"Events_getCategory\",\"Events_getAction\",\"Events_getName\",\"Contents_getContentNames\",\"Contents_getContentPieces\",\"VisitorInterest_getNumberOfVisitsPerVisitDuration\",\"VisitorInterest_getNumberOfVisitsPerPage\",\"VisitorInterest_getNumberOfVisitsByVisitCount\",\"VisitorInterest_getNumberOfVisitsByDaysSinceLast\",\"VisitFrequency_get\",\"PagePerformance_get\",\"Referrers_get\",\"Referrers_getReferrerType\",\"Referrers_getAll\",\"Referrers_getKeywords\",\"Referrers_getSearchEngines\",\"Referrers_getWebsites\",\"Referrers_getSocials\",\"Referrers_getAIAssistants\",\"Referrers_getCampaigns\",\"Goals_get_idGoal--ecommerceOrder\",\"Goals_getVisitsUntilConversion_idGoal--ecommerceOrder\",\"Goals_getDaysToConversion_idGoal--ecommerceOrder\",\"Goals_get_idGoal--ecommerceAbandonedCart\",\"Goals_getVisitsUntilConversion_idGoal--ecommerceAbandonedCart\",\"Goals_getDaysToConversion_idGoal--ecommerceAbandonedCart\",\"Goals_getItemsName\",\"Goals_getItemsSku\",\"Goals_getItemsCategory\",\"Goals_get\",\"Goals_getVisitsUntilConversion\",\"Goals_getDaysToConversion\",\"Goals_get_idGoal--0\",\"Goals_getVisitsUntilConversion_idGoal--0\",\"Goals_getDaysToConversion_idGoal--0\",\"Goals_get_idGoal--1\",\"Goals_getVisitsUntilConversion_idGoal--1\",\"Goals_getDaysToConversion_idGoal--1\",\"Goals_get_idGoal--2\",\"Goals_getVisitsUntilConversion_idGoal--2\",\"Goals_getDaysToConversion_idGoal--2\",\"Goals_get_idGoal--3\",\"Goals_getVisitsUntilConversion_idGoal--3\",\"Goals_getDaysToConversion_idGoal--3\",\"Goals_get_idGoal--4\",\"Goals_getVisitsUntilConversion_idGoal--4\",\"Goals_getDaysToConversion_idGoal--4\",\"Goals_get_idGoal--5\",\"Goals_getVisitsUntilConversion_idGoal--5\",\"Goals_getDaysToConversion_idGoal--5\",\"ExampleUI_getTemperatures\",\"ExampleUI_getTemperaturesEvolution\",\"ExampleUI_getPlanetRatios\",\"ExampleUI_getPlanetRatiosWithLogos\"]','{\"displayFormat\":4,\"emailMe\":true,\"evolutionGraph\":false}','2025-08-08 14:32:59',NULL,0,0,30,NULL),(9,1,'superUserLogin','SMS Test report, one website',NULL,'day',0,'mobile','sms','[\"MultiSites_getOne\"]','{\"phoneNumbers\":[]}','2025-08-08 14:32:59',NULL,0,0,30,NULL),(10,1,'superUserLogin','SMS Test report, all websites',NULL,'day',0,'mobile','sms','[\"MultiSites_getAll\"]','{\"phoneNumbers\":[]}','2025-08-08 14:32:59',NULL,0,0,30,NULL),(11,1,'superUserLogin','Mail Test report',NULL,'day',0,'email','html','[\"MultiSites_getAll\",\"VisitsSummary_get\",\"UserCountry_getCountry\",\"UserCountry_getContinent\",\"UserCountry_getRegion\",\"UserLanguage_getLanguage\",\"UserCountry_getCity\",\"UserLanguage_getLanguageCode\",\"DevicesDetection_getType\",\"DevicesDetection_getModel\",\"DevicesDetection_getBrand\",\"Resolution_getResolution\",\"DevicesDetection_getOsVersions\",\"DevicesDetection_getBrowsers\",\"DevicesDetection_getBrowserVersions\",\"Resolution_getConfiguration\",\"DevicesDetection_getOsFamilies\",\"DevicesDetection_getBrowserEngines\",\"DevicePlugins_getPlugin\",\"VisitTime_getVisitInformationPerLocalTime\",\"VisitTime_getVisitInformationPerServerTime\",\"VisitTime_getByDayOfWeek\",\"UserId_getUsers\",\"CustomVariables_getCustomVariables\",\"Actions_get\",\"Bandwidth_get\",\"Actions_getPageUrls\",\"Actions_getEntryPageUrls\",\"Actions_getEntryPageTitles\",\"Actions_getExitPageUrls\",\"Actions_getExitPageTitles\",\"Actions_getPageTitles\",\"Actions_getSiteSearchKeywords\",\"Actions_getPageUrlsFollowingSiteSearch\",\"Actions_getSiteSearchNoResultKeywords\",\"Actions_getPageTitlesFollowingSiteSearch\",\"Actions_getSiteSearchCategories\",\"Actions_getOutlinks\",\"Actions_getDownloads\",\"Events_getCategory\",\"Events_getAction\",\"Events_getName\",\"Contents_getContentNames\",\"Contents_getContentPieces\",\"VisitorInterest_getNumberOfVisitsPerVisitDuration\",\"VisitorInterest_getNumberOfVisitsPerPage\",\"VisitorInterest_getNumberOfVisitsByVisitCount\",\"VisitorInterest_getNumberOfVisitsByDaysSinceLast\",\"VisitFrequency_get\",\"PagePerformance_get\",\"Referrers_get\",\"Referrers_getReferrerType\",\"Referrers_getAll\",\"Referrers_getKeywords\",\"Referrers_getSearchEngines\",\"Referrers_getWebsites\",\"Referrers_getSocials\",\"Referrers_getAIAssistants\",\"Referrers_getCampaigns\",\"Goals_get_idGoal--ecommerceOrder\",\"Goals_getVisitsUntilConversion_idGoal--ecommerceOrder\",\"Goals_getDaysToConversion_idGoal--ecommerceOrder\",\"Goals_get_idGoal--ecommerceAbandonedCart\",\"Goals_getVisitsUntilConversion_idGoal--ecommerceAbandonedCart\",\"Goals_getDaysToConversion_idGoal--ecommerceAbandonedCart\",\"Goals_getItemsName\",\"Goals_getItemsSku\",\"Goals_getItemsCategory\",\"Goals_get\",\"Goals_getVisitsUntilConversion\",\"Goals_getDaysToConversion\",\"Goals_get_idGoal--0\",\"Goals_getVisitsUntilConversion_idGoal--0\",\"Goals_getDaysToConversion_idGoal--0\",\"Goals_get_idGoal--1\",\"Goals_getVisitsUntilConversion_idGoal--1\",\"Goals_getDaysToConversion_idGoal--1\",\"Goals_get_idGoal--2\",\"Goals_getVisitsUntilConversion_idGoal--2\",\"Goals_getDaysToConversion_idGoal--2\",\"Goals_get_idGoal--3\",\"Goals_getVisitsUntilConversion_idGoal--3\",\"Goals_getDaysToConversion_idGoal--3\",\"Goals_get_idGoal--4\",\"Goals_getVisitsUntilConversion_idGoal--4\",\"Goals_getDaysToConversion_idGoal--4\",\"Goals_get_idGoal--5\",\"Goals_getVisitsUntilConversion_idGoal--5\",\"Goals_getDaysToConversion_idGoal--5\",\"ExampleUI_getTemperatures\",\"ExampleUI_getTemperaturesEvolution\",\"ExampleUI_getPlanetRatios\",\"ExampleUI_getPlanetRatiosWithLogos\"]','{\"displayFormat\":3,\"emailMe\":true,\"evolutionGraph\":false}','2025-08-08 14:32:59',NULL,0,0,30,NULL),(12,1,'superUserLogin','Mail Test report (previous default)',NULL,'day',0,'email','html','[\"Actions_getPageTitles\"]','{\"displayFormat\":2,\"evolutionGraph\":true,\"emailMe\":true}','2025-08-08 14:32:59',NULL,0,0,30,NULL),(13,1,'superUserLogin','Mail Test report (previous10)',NULL,'day',0,'email','html','[\"Actions_getPageTitles\"]','{\"displayFormat\":2,\"evolutionGraph\":true,\"emailMe\":true}','2025-08-08 14:32:59',NULL,0,0,10,NULL),(14,1,'superUserLogin','Mail Test report (each in period)',NULL,'week',0,'email','html','[\"Actions_getPageTitles\"]','{\"displayFormat\":2,\"evolutionGraph\":true,\"emailMe\":true}','2025-08-08 14:32:59',NULL,0,1,30,NULL); +/*!40000 ALTER TABLE `report` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `report_subscriptions` +-- + +DROP TABLE IF EXISTS `report_subscriptions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `report_subscriptions` ( + `idreport` int(11) NOT NULL, + `token` varchar(100) DEFAULT NULL, + `email` varchar(100) NOT NULL, + `ts_subscribed` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `ts_unsubscribed` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`idreport`,`email`), + UNIQUE KEY `unique_token` (`token`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `report_subscriptions` +-- + +LOCK TABLES `report_subscriptions` WRITE; +/*!40000 ALTER TABLE `report_subscriptions` DISABLE KEYS */; +/*!40000 ALTER TABLE `report_subscriptions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `segment` +-- + +DROP TABLE IF EXISTS `segment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `segment` ( + `idsegment` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `definition` text NOT NULL, + `hash` char(32) DEFAULT NULL, + `login` varchar(100) NOT NULL, + `enable_all_users` tinyint(4) NOT NULL DEFAULT '0', + `enable_only_idsite` int(11) DEFAULT NULL, + `auto_archive` tinyint(4) NOT NULL DEFAULT '0', + `ts_created` timestamp NULL DEFAULT NULL, + `ts_last_edit` timestamp NULL DEFAULT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`idsegment`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `segment` +-- + +LOCK TABLES `segment` WRITE; +/*!40000 ALTER TABLE `segment` DISABLE KEYS */; +INSERT INTO `segment` VALUES (1,'goalsByCountry','countryCode==jp','dde599c52709bf37cb633c72b55a0bd4','superUserLogin',1,1,1,'2025-08-08 14:32:44',NULL,0); +/*!40000 ALTER TABLE `segment` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sequence` +-- + +DROP TABLE IF EXISTS `sequence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `sequence` ( + `name` varchar(120) NOT NULL, + `value` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sequence` +-- + +LOCK TABLES `sequence` WRITE; +/*!40000 ALTER TABLE `sequence` DISABLE KEYS */; +/*!40000 ALTER TABLE `sequence` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `session` +-- + +DROP TABLE IF EXISTS `session`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `session` ( + `id` varchar(191) NOT NULL, + `modified` int(11) DEFAULT NULL, + `lifetime` int(11) DEFAULT NULL, + `data` mediumtext, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `session` +-- + +LOCK TABLES `session` WRITE; +/*!40000 ALTER TABLE `session` DISABLE KEYS */; +/*!40000 ALTER TABLE `session` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `site` +-- + +DROP TABLE IF EXISTS `site`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `site` ( + `idsite` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `description` varchar(255) NOT NULL DEFAULT '', + `main_url` varchar(255) NOT NULL, + `ts_created` timestamp NULL DEFAULT NULL, + `ecommerce` tinyint(4) DEFAULT '0', + `sitesearch` tinyint(4) DEFAULT '1', + `sitesearch_keyword_parameters` text NOT NULL, + `sitesearch_category_parameters` text NOT NULL, + `timezone` varchar(50) NOT NULL, + `currency` char(3) NOT NULL, + `exclude_unknown_urls` tinyint(1) DEFAULT '0', + `excluded_ips` text NOT NULL, + `excluded_parameters` text NOT NULL, + `excluded_user_agents` text NOT NULL, + `excluded_referrers` text NOT NULL, + `group` varchar(250) NOT NULL, + `type` varchar(255) NOT NULL, + `keep_url_fragment` tinyint(4) NOT NULL DEFAULT '0', + `creator_login` varchar(100) DEFAULT NULL, + PRIMARY KEY (`idsite`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `site` +-- + +LOCK TABLES `site` WRITE; +/*!40000 ALTER TABLE `site` DISABLE KEYS */; +INSERT INTO `site` VALUES (1,'<script>_x(0)</script>','','http://site.com','2012-01-05 10:22:33',1,1,'','','UTC','USD',0,'','','','','','website',0,'superUserLogin'),(2,'{{_Vue.h.constructor`_x(3)`()}}','','http://example-site-two.com','2012-01-05 10:22:33',0,1,'','','UTC','USD',0,'','','','','','website',0,'superUserLogin'),(3,'Piwik test three','','http://example-site-three.com','2012-01-05 10:22:33',0,1,'','','UTC','USD',0,'','','','','','website',0,'superUserLogin'); +/*!40000 ALTER TABLE `site` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `site_setting` +-- + +DROP TABLE IF EXISTS `site_setting`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `site_setting` ( + `idsite` int(10) unsigned NOT NULL, + `plugin_name` varchar(60) NOT NULL, + `setting_name` varchar(255) NOT NULL, + `setting_value` longtext NOT NULL, + `json_encoded` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idsite_setting` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`idsite_setting`), + KEY `idsite` (`idsite`,`plugin_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `site_setting` +-- + +LOCK TABLES `site_setting` WRITE; +/*!40000 ALTER TABLE `site_setting` DISABLE KEYS */; +/*!40000 ALTER TABLE `site_setting` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `site_url` +-- + +DROP TABLE IF EXISTS `site_url`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `site_url` ( + `idsite` int(10) unsigned NOT NULL, + `url` varchar(190) NOT NULL, + PRIMARY KEY (`idsite`,`url`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `site_url` +-- + +LOCK TABLES `site_url` WRITE; +/*!40000 ALTER TABLE `site_url` DISABLE KEYS */; +/*!40000 ALTER TABLE `site_url` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `tagmanager_container` +-- + +DROP TABLE IF EXISTS `tagmanager_container`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tagmanager_container` ( + `idcontainer` varchar(8) NOT NULL, + `idsite` int(11) unsigned NOT NULL, + `context` varchar(10) NOT NULL, + `name` varchar(255) NOT NULL, + `description` varchar(1000) NOT NULL DEFAULT '', + `ignoreGtmDataLayer` tinyint(1) unsigned NOT NULL DEFAULT '0', + `activelySyncGtmDataLayer` tinyint(1) unsigned NOT NULL DEFAULT '1', + `isTagFireLimitAllowedInPreviewMode` tinyint(1) unsigned NOT NULL DEFAULT '0', + `status` varchar(10) NOT NULL, + `created_date` datetime NOT NULL, + `updated_date` datetime NOT NULL, + `deleted_date` datetime DEFAULT NULL, + PRIMARY KEY (`idcontainer`), + KEY `idsite` (`idsite`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `tagmanager_container` +-- + +LOCK TABLES `tagmanager_container` WRITE; +/*!40000 ALTER TABLE `tagmanager_container` DISABLE KEYS */; +INSERT INTO `tagmanager_container` VALUES ('Eo5obX2F',1,'web','Default Container','This container was auto generated when the website was created.',0,0,0,'active','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),('PjvK0LUv',3,'web','Default Container','This container was auto generated when the website was created.',0,0,0,'active','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),('XOxLVRCn',2,'web','Default Container','This container was auto generated when the website was created.',0,0,0,'active','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL); +/*!40000 ALTER TABLE `tagmanager_container` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `tagmanager_container_release` +-- + +DROP TABLE IF EXISTS `tagmanager_container_release`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tagmanager_container_release` ( + `idcontainerrelease` bigint(20) NOT NULL AUTO_INCREMENT, + `idcontainer` varchar(8) NOT NULL, + `idcontainerversion` bigint(20) unsigned NOT NULL, + `idsite` int(11) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `environment` varchar(40) NOT NULL, + `release_login` varchar(100) NOT NULL, + `release_date` datetime NOT NULL, + `deleted_date` datetime DEFAULT NULL, + PRIMARY KEY (`idcontainerrelease`), + KEY `idsite` (`idsite`,`idcontainer`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `tagmanager_container_release` +-- + +LOCK TABLES `tagmanager_container_release` WRITE; +/*!40000 ALTER TABLE `tagmanager_container_release` DISABLE KEYS */; +INSERT INTO `tagmanager_container_release` VALUES (1,'Eo5obX2F',1,1,'active','live','superUserLogin','2025-08-08 16:31:45',NULL),(2,'XOxLVRCn',3,2,'active','live','superUserLogin','2025-08-08 16:31:45',NULL),(3,'PjvK0LUv',5,3,'active','live','superUserLogin','2025-08-08 16:31:45',NULL); +/*!40000 ALTER TABLE `tagmanager_container_release` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `tagmanager_container_version` +-- + +DROP TABLE IF EXISTS `tagmanager_container_version`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tagmanager_container_version` ( + `idcontainerversion` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `idcontainer` varchar(8) NOT NULL, + `idsite` int(11) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `revision` mediumint(8) unsigned NOT NULL DEFAULT '1', + `name` varchar(255) NOT NULL DEFAULT '', + `description` varchar(1000) NOT NULL DEFAULT '', + `created_date` datetime NOT NULL, + `updated_date` datetime NOT NULL, + `deleted_date` datetime DEFAULT NULL, + PRIMARY KEY (`idcontainerversion`), + KEY `idcontainer` (`idcontainer`), + KEY `idsite` (`idsite`,`idcontainer`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `tagmanager_container_version` +-- + +LOCK TABLES `tagmanager_container_version` WRITE; +/*!40000 ALTER TABLE `tagmanager_container_version` DISABLE KEYS */; +INSERT INTO `tagmanager_container_version` VALUES (1,'Eo5obX2F',1,'active',0,'','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(2,'Eo5obX2F',1,'active',1,'0.1.0 - Auto generated','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(3,'XOxLVRCn',2,'active',0,'','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(4,'XOxLVRCn',2,'active',1,'0.1.0 - Auto generated','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(5,'PjvK0LUv',3,'active',0,'','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(6,'PjvK0LUv',3,'active',1,'0.1.0 - Auto generated','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL); +/*!40000 ALTER TABLE `tagmanager_container_version` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `tagmanager_tag` +-- + +DROP TABLE IF EXISTS `tagmanager_tag`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tagmanager_tag` ( + `idtag` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `idcontainerversion` bigint(20) unsigned NOT NULL, + `idsite` int(11) unsigned NOT NULL, + `type` varchar(50) NOT NULL, + `name` varchar(255) NOT NULL, + `description` varchar(1000) NOT NULL, + `status` varchar(10) NOT NULL, + `parameters` mediumtext NOT NULL, + `fire_trigger_ids` text NOT NULL, + `block_trigger_ids` text NOT NULL, + `fire_limit` varchar(20) NOT NULL DEFAULT 'unlimited', + `priority` smallint(5) unsigned NOT NULL, + `fire_delay` mediumint(8) unsigned NOT NULL DEFAULT '0', + `start_date` datetime DEFAULT NULL, + `end_date` datetime DEFAULT NULL, + `created_date` datetime NOT NULL, + `updated_date` datetime NOT NULL, + `deleted_date` datetime DEFAULT NULL, + PRIMARY KEY (`idtag`), + KEY `idsite` (`idsite`,`idcontainerversion`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `tagmanager_tag` +-- + +LOCK TABLES `tagmanager_tag` WRITE; +/*!40000 ALTER TABLE `tagmanager_tag` DISABLE KEYS */; +INSERT INTO `tagmanager_tag` VALUES (1,1,1,'Matomo','Matomo Analytics','','active','{\"matomoConfig\":\"{{Matomo Configuration}}\"}','[1]','','unlimited',999,0,NULL,NULL,'2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(2,2,1,'Matomo','Matomo Analytics','','active','{\"matomoConfig\":\"{{Matomo Configuration}}\",\"trackingType\":\"pageview\",\"idGoal\":\"\",\"goalCustomRevenue\":\"\",\"documentTitle\":\"\",\"customUrl\":\"\",\"isEcommerceView\":false,\"productSKU\":\"\",\"productName\":\"\",\"categoryName\":\"\",\"price\":\"\",\"eventCategory\":\"\",\"eventAction\":\"\",\"eventName\":\"\",\"eventValue\":\"\",\"customDimensions\":[],\"areCustomDimensionsSticky\":false}','[2]','','unlimited',999,0,NULL,NULL,'2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(3,3,2,'Matomo','Matomo Analytics','','active','{\"matomoConfig\":\"{{Matomo Configuration}}\"}','[3]','','unlimited',999,0,NULL,NULL,'2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(4,4,2,'Matomo','Matomo Analytics','','active','{\"matomoConfig\":\"{{Matomo Configuration}}\",\"trackingType\":\"pageview\",\"idGoal\":\"\",\"goalCustomRevenue\":\"\",\"documentTitle\":\"\",\"customUrl\":\"\",\"isEcommerceView\":false,\"productSKU\":\"\",\"productName\":\"\",\"categoryName\":\"\",\"price\":\"\",\"eventCategory\":\"\",\"eventAction\":\"\",\"eventName\":\"\",\"eventValue\":\"\",\"customDimensions\":[],\"areCustomDimensionsSticky\":false}','[4]','','unlimited',999,0,NULL,NULL,'2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(5,5,3,'Matomo','Matomo Analytics','','active','{\"matomoConfig\":\"{{Matomo Configuration}}\"}','[5]','','unlimited',999,0,NULL,NULL,'2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(6,6,3,'Matomo','Matomo Analytics','','active','{\"matomoConfig\":\"{{Matomo Configuration}}\",\"trackingType\":\"pageview\",\"idGoal\":\"\",\"goalCustomRevenue\":\"\",\"documentTitle\":\"\",\"customUrl\":\"\",\"isEcommerceView\":false,\"productSKU\":\"\",\"productName\":\"\",\"categoryName\":\"\",\"price\":\"\",\"eventCategory\":\"\",\"eventAction\":\"\",\"eventName\":\"\",\"eventValue\":\"\",\"customDimensions\":[],\"areCustomDimensionsSticky\":false}','[6]','','unlimited',999,0,NULL,NULL,'2025-08-08 16:31:45','2025-08-08 16:31:45',NULL); +/*!40000 ALTER TABLE `tagmanager_tag` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `tagmanager_trigger` +-- + +DROP TABLE IF EXISTS `tagmanager_trigger`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tagmanager_trigger` ( + `idtrigger` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `idcontainerversion` bigint(20) unsigned NOT NULL, + `idsite` int(11) unsigned NOT NULL, + `type` varchar(50) NOT NULL, + `name` varchar(255) NOT NULL, + `description` varchar(1000) NOT NULL, + `status` varchar(10) NOT NULL, + `parameters` mediumtext NOT NULL, + `conditions` mediumtext NOT NULL, + `created_date` datetime NOT NULL, + `updated_date` datetime NOT NULL, + `deleted_date` datetime DEFAULT NULL, + PRIMARY KEY (`idtrigger`), + KEY `idsite` (`idsite`,`idcontainerversion`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `tagmanager_trigger` +-- + +LOCK TABLES `tagmanager_trigger` WRITE; +/*!40000 ALTER TABLE `tagmanager_trigger` DISABLE KEYS */; +INSERT INTO `tagmanager_trigger` VALUES (1,1,1,'PageView','Pageview','','active','','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(2,2,1,'PageView','Pageview','','active','','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(3,3,2,'PageView','Pageview','','active','','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(4,4,2,'PageView','Pageview','','active','','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(5,5,3,'PageView','Pageview','','active','','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(6,6,3,'PageView','Pageview','','active','','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL); +/*!40000 ALTER TABLE `tagmanager_trigger` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `tagmanager_variable` +-- + +DROP TABLE IF EXISTS `tagmanager_variable`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tagmanager_variable` ( + `idvariable` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `idcontainerversion` bigint(20) unsigned NOT NULL, + `idsite` int(11) unsigned NOT NULL, + `type` varchar(50) NOT NULL, + `name` varchar(255) NOT NULL, + `description` varchar(1000) NOT NULL, + `status` varchar(10) NOT NULL, + `parameters` mediumtext NOT NULL, + `lookup_table` mediumtext NOT NULL, + `default_value` text, + `created_date` datetime NOT NULL, + `updated_date` datetime NOT NULL, + `deleted_date` datetime DEFAULT NULL, + PRIMARY KEY (`idvariable`), + KEY `idsite` (`idsite`,`idcontainerversion`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `tagmanager_variable` +-- + +LOCK TABLES `tagmanager_variable` WRITE; +/*!40000 ALTER TABLE `tagmanager_variable` DISABLE KEYS */; +INSERT INTO `tagmanager_variable` VALUES (1,1,1,'MatomoConfiguration','Matomo Configuration','','active','','','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(2,2,1,'MatomoConfiguration','Matomo Configuration','','active','{\"matomoUrl\":\"\\/\\/dev.matomo.io:80\\/tests\\/PHPUnit\\/proxy\\/\",\"idSite\":\"1\",\"enableLinkTracking\":true,\"enableFileTracking\":false,\"enableCrossDomainLinking\":false,\"crossDomainLinkingTimeout\":180,\"enableDoNotTrack\":false,\"disablePerformanceTracking\":false,\"enableJSErrorTracking\":false,\"enableHeartBeatTimer\":false,\"heartBeatTime\":15,\"trackAllContentImpressions\":false,\"trackVisibleContentImpressions\":false,\"trackBots\":false,\"disableCookies\":false,\"requireConsent\":false,\"requireCookieConsent\":false,\"customCookieTimeOutEnable\":false,\"customCookieTimeOut\":393,\"referralCookieTimeOut\":182,\"sessionCookieTimeOut\":30,\"setSecureCookie\":false,\"cookieDomain\":\"\",\"cookieNamePrefix\":\"_pk_\",\"cookiePath\":\"\",\"cookieSameSite\":\"Lax\",\"disableBrowserFeatureDetection\":false,\"disableCampaignParameters\":false,\"domains\":[],\"alwaysUseSendBeacon\":false,\"disableAlwaysUseSendBeacon\":false,\"userId\":\"\",\"customDimensions\":[],\"registerAsDefaultTracker\":true,\"bundleTracker\":true,\"jsEndpoint\":\"matomo.js\",\"jsEndpointCustom\":\"custom.js\",\"trackingEndpoint\":\"matomo.php\",\"trackingEndpointCustom\":\"custom.php\",\"appendToTrackingUrl\":\"\",\"forceRequestMethod\":false,\"requestMethod\":\"GET\",\"requestContentType\":\"application\\/x-www-form-urlencoded; charset=UTF-8\",\"customRequestProcessing\":\"\",\"customData\":[],\"setDownloadExtensions\":\"\",\"addDownloadExtensions\":\"\",\"removeDownloadExtensions\":\"\",\"setIgnoreClasses\":\"\",\"setReferrerUrl\":\"\",\"setApiUrl\":\"\",\"setPageViewId\":\"\",\"setExcludedReferrers\":\"\",\"setDownloadClasses\":\"\",\"setLinkClasses\":\"\",\"setCampaignNameKey\":\"\",\"setCampaignKeywordKey\":\"\",\"setConsentGiven\":false,\"rememberConsentGiven\":false,\"rememberConsentGivenForHours\":\"\",\"forgetConsentGiven\":false,\"discardHashTag\":false,\"setExcludedQueryParams\":\"\",\"setConversionAttributionFirstReferrer\":false,\"setDoNotTrack\":false,\"setLinkTrackingTimer\":\"\",\"killFrame\":false,\"setCountPreRendered\":false,\"setRequestQueueInterval\":\"\"}','','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(3,3,2,'MatomoConfiguration','Matomo Configuration','','active','','','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(4,4,2,'MatomoConfiguration','Matomo Configuration','','active','{\"matomoUrl\":\"\\/\\/dev.matomo.io:80\\/tests\\/PHPUnit\\/proxy\\/\",\"idSite\":\"2\",\"enableLinkTracking\":true,\"enableFileTracking\":false,\"enableCrossDomainLinking\":false,\"crossDomainLinkingTimeout\":180,\"enableDoNotTrack\":false,\"disablePerformanceTracking\":false,\"enableJSErrorTracking\":false,\"enableHeartBeatTimer\":false,\"heartBeatTime\":15,\"trackAllContentImpressions\":false,\"trackVisibleContentImpressions\":false,\"trackBots\":false,\"disableCookies\":false,\"requireConsent\":false,\"requireCookieConsent\":false,\"customCookieTimeOutEnable\":false,\"customCookieTimeOut\":393,\"referralCookieTimeOut\":182,\"sessionCookieTimeOut\":30,\"setSecureCookie\":false,\"cookieDomain\":\"\",\"cookieNamePrefix\":\"_pk_\",\"cookiePath\":\"\",\"cookieSameSite\":\"Lax\",\"disableBrowserFeatureDetection\":false,\"disableCampaignParameters\":false,\"domains\":[],\"alwaysUseSendBeacon\":false,\"disableAlwaysUseSendBeacon\":false,\"userId\":\"\",\"customDimensions\":[],\"registerAsDefaultTracker\":true,\"bundleTracker\":true,\"jsEndpoint\":\"matomo.js\",\"jsEndpointCustom\":\"custom.js\",\"trackingEndpoint\":\"matomo.php\",\"trackingEndpointCustom\":\"custom.php\",\"appendToTrackingUrl\":\"\",\"forceRequestMethod\":false,\"requestMethod\":\"GET\",\"requestContentType\":\"application\\/x-www-form-urlencoded; charset=UTF-8\",\"customRequestProcessing\":\"\",\"customData\":[],\"setDownloadExtensions\":\"\",\"addDownloadExtensions\":\"\",\"removeDownloadExtensions\":\"\",\"setIgnoreClasses\":\"\",\"setReferrerUrl\":\"\",\"setApiUrl\":\"\",\"setPageViewId\":\"\",\"setExcludedReferrers\":\"\",\"setDownloadClasses\":\"\",\"setLinkClasses\":\"\",\"setCampaignNameKey\":\"\",\"setCampaignKeywordKey\":\"\",\"setConsentGiven\":false,\"rememberConsentGiven\":false,\"rememberConsentGivenForHours\":\"\",\"forgetConsentGiven\":false,\"discardHashTag\":false,\"setExcludedQueryParams\":\"\",\"setConversionAttributionFirstReferrer\":false,\"setDoNotTrack\":false,\"setLinkTrackingTimer\":\"\",\"killFrame\":false,\"setCountPreRendered\":false,\"setRequestQueueInterval\":\"\"}','','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(5,5,3,'MatomoConfiguration','Matomo Configuration','','active','','','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL),(6,6,3,'MatomoConfiguration','Matomo Configuration','','active','{\"matomoUrl\":\"\\/\\/dev.matomo.io:80\\/tests\\/PHPUnit\\/proxy\\/\",\"idSite\":\"3\",\"enableLinkTracking\":true,\"enableFileTracking\":false,\"enableCrossDomainLinking\":false,\"crossDomainLinkingTimeout\":180,\"enableDoNotTrack\":false,\"disablePerformanceTracking\":false,\"enableJSErrorTracking\":false,\"enableHeartBeatTimer\":false,\"heartBeatTime\":15,\"trackAllContentImpressions\":false,\"trackVisibleContentImpressions\":false,\"trackBots\":false,\"disableCookies\":false,\"requireConsent\":false,\"requireCookieConsent\":false,\"customCookieTimeOutEnable\":false,\"customCookieTimeOut\":393,\"referralCookieTimeOut\":182,\"sessionCookieTimeOut\":30,\"setSecureCookie\":false,\"cookieDomain\":\"\",\"cookieNamePrefix\":\"_pk_\",\"cookiePath\":\"\",\"cookieSameSite\":\"Lax\",\"disableBrowserFeatureDetection\":false,\"disableCampaignParameters\":false,\"domains\":[],\"alwaysUseSendBeacon\":false,\"disableAlwaysUseSendBeacon\":false,\"userId\":\"\",\"customDimensions\":[],\"registerAsDefaultTracker\":true,\"bundleTracker\":true,\"jsEndpoint\":\"matomo.js\",\"jsEndpointCustom\":\"custom.js\",\"trackingEndpoint\":\"matomo.php\",\"trackingEndpointCustom\":\"custom.php\",\"appendToTrackingUrl\":\"\",\"forceRequestMethod\":false,\"requestMethod\":\"GET\",\"requestContentType\":\"application\\/x-www-form-urlencoded; charset=UTF-8\",\"customRequestProcessing\":\"\",\"customData\":[],\"setDownloadExtensions\":\"\",\"addDownloadExtensions\":\"\",\"removeDownloadExtensions\":\"\",\"setIgnoreClasses\":\"\",\"setReferrerUrl\":\"\",\"setApiUrl\":\"\",\"setPageViewId\":\"\",\"setExcludedReferrers\":\"\",\"setDownloadClasses\":\"\",\"setLinkClasses\":\"\",\"setCampaignNameKey\":\"\",\"setCampaignKeywordKey\":\"\",\"setConsentGiven\":false,\"rememberConsentGiven\":false,\"rememberConsentGivenForHours\":\"\",\"forgetConsentGiven\":false,\"discardHashTag\":false,\"setExcludedQueryParams\":\"\",\"setConversionAttributionFirstReferrer\":false,\"setDoNotTrack\":false,\"setLinkTrackingTimer\":\"\",\"killFrame\":false,\"setCountPreRendered\":false,\"setRequestQueueInterval\":\"\"}','','','2025-08-08 16:31:45','2025-08-08 16:31:45',NULL); +/*!40000 ALTER TABLE `tagmanager_variable` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `tracking_failure` +-- + +DROP TABLE IF EXISTS `tracking_failure`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tracking_failure` ( + `idsite` bigint(20) unsigned NOT NULL, + `idfailure` smallint(5) unsigned NOT NULL, + `date_first_occurred` datetime NOT NULL, + `request_url` mediumtext NOT NULL, + PRIMARY KEY (`idsite`,`idfailure`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `tracking_failure` +-- + +LOCK TABLES `tracking_failure` WRITE; +/*!40000 ALTER TABLE `tracking_failure` DISABLE KEYS */; +/*!40000 ALTER TABLE `tracking_failure` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `twofactor_recovery_code` +-- + +DROP TABLE IF EXISTS `twofactor_recovery_code`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `twofactor_recovery_code` ( + `idrecoverycode` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `login` varchar(100) NOT NULL, + `recovery_code` varchar(40) NOT NULL, + PRIMARY KEY (`idrecoverycode`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `twofactor_recovery_code` +-- + +LOCK TABLES `twofactor_recovery_code` WRITE; +/*!40000 ALTER TABLE `twofactor_recovery_code` DISABLE KEYS */; +/*!40000 ALTER TABLE `twofactor_recovery_code` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `usage_measurement_profiles` +-- + +DROP TABLE IF EXISTS `usage_measurement_profiles`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `usage_measurement_profiles` ( + `creation_date` datetime NOT NULL, + `category` varchar(200) NOT NULL, + `name` varchar(200) NOT NULL, + `action` varchar(200) NOT NULL, + `count` int(10) unsigned NOT NULL DEFAULT '0', + `wall_time` bigint(20) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`category`(64),`name`(64),`action`(63)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `usage_measurement_profiles` +-- + +LOCK TABLES `usage_measurement_profiles` WRITE; +/*!40000 ALTER TABLE `usage_measurement_profiles` DISABLE KEYS */; +INSERT INTO `usage_measurement_profiles` VALUES ('2025-08-08 16:32:43','API','API','API.getSegmentsMetadata',1,54),('2025-08-08 16:32:43','API','CustomDimensions','CustomDimensions.getConfiguredCustomDimensions',1,1),('2025-08-08 16:31:44','API','CustomDimensions','CustomDimensions.getConfiguredCustomDimensionsHavingScope',3,3),('2025-08-08 16:32:43','API','Dashboard','Dashboard.getDashboards',2,3),('2025-08-08 16:32:55','API','Goals','Goals.getGoals',60,60),('2025-08-08 16:32:55','API','LanguagesManager','LanguagesManager.getLanguageForUser',14,14),('2025-08-08 16:32:55','API','LanguagesManager','LanguagesManager.setLanguageForUser',1,1),('2025-08-08 16:31:45','API','LanguagesManager','LanguagesManager.uses12HourClockForUser',1,1),('2025-08-08 16:31:51','API','SitesManager','SitesManager.getAllSites',4,4),('2025-08-08 16:31:46','API','SitesManager','SitesManager.getSiteFromId',15,15),('2025-08-08 16:32:02','API','SitesManager','SitesManager.updateSite',93,720),('2025-08-08 16:31:45','API','TagManager','TagManager.addContainer',3,51),('2025-08-08 16:31:45','API','TagManager','TagManager.addContainerTag',6,48),('2025-08-08 16:31:45','API','TagManager','TagManager.addContainerTrigger',6,35),('2025-08-08 16:31:45','API','TagManager','TagManager.addContainerVariable',6,39),('2025-08-08 16:31:45','API','TagManager','TagManager.createContainerVersion',3,49),('2025-08-08 16:31:45','API','TagManager','TagManager.createDefaultContainerForSite',3,258),('2025-08-08 16:31:45','API','TagManager','TagManager.getAvailableEnvironments',6,6),('2025-08-08 16:31:45','API','TagManager','TagManager.publishContainerVersion',3,46),('2025-08-08 16:31:51','API','UsersManager','UsersManager.createAppSpecificTokenAuth',8,515); +/*!40000 ALTER TABLE `usage_measurement_profiles` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user` +-- + +DROP TABLE IF EXISTS `user`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user` ( + `login` varchar(100) NOT NULL, + `password` varchar(255) NOT NULL, + `email` varchar(100) NOT NULL, + `twofactor_secret` varchar(40) NOT NULL DEFAULT '', + `superuser_access` tinyint(2) unsigned NOT NULL DEFAULT '0', + `date_registered` timestamp NULL DEFAULT NULL, + `ts_password_modified` timestamp NULL DEFAULT NULL, + `idchange_last_viewed` int(10) unsigned DEFAULT NULL, + `invited_by` varchar(100) DEFAULT NULL, + `invite_token` varchar(191) DEFAULT NULL, + `invite_link_token` varchar(191) DEFAULT NULL, + `invite_expired_at` timestamp NULL DEFAULT NULL, + `invite_accept_at` timestamp NULL DEFAULT NULL, + `ts_changes_shown` timestamp NULL DEFAULT NULL, + `ts_last_seen` timestamp NULL DEFAULT NULL, + `ts_inactivity_notified` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`login`), + UNIQUE KEY `uniq_email` (`email`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user` +-- + +LOCK TABLES `user` WRITE; +/*!40000 ALTER TABLE `user` DISABLE KEYS */; +INSERT INTO `user` VALUES ('superUserLogin','$2y$10$fs3DQbaGaNBlt1txzQxCMu1rLF7pBeATFxoSgOzTuTdTKmX.hQ1aK','hello@example.org','',1,'2025-08-08 14:32:49','2025-08-08 14:32:49',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +/*!40000 ALTER TABLE `user` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_dashboard` +-- + +DROP TABLE IF EXISTS `user_dashboard`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user_dashboard` ( + `login` varchar(100) NOT NULL, + `iddashboard` int(11) NOT NULL, + `name` varchar(100) DEFAULT NULL, + `layout` text NOT NULL, + PRIMARY KEY (`login`,`iddashboard`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_dashboard` +-- + +LOCK TABLES `user_dashboard` WRITE; +/*!40000 ALTER TABLE `user_dashboard` DISABLE KEYS */; +/*!40000 ALTER TABLE `user_dashboard` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_language` +-- + +DROP TABLE IF EXISTS `user_language`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user_language` ( + `login` varchar(100) NOT NULL, + `language` varchar(10) NOT NULL, + `use_12_hour_clock` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`login`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_language` +-- + +LOCK TABLES `user_language` WRITE; +/*!40000 ALTER TABLE `user_language` DISABLE KEYS */; +INSERT INTO `user_language` VALUES ('superUserLogin','en',0); +/*!40000 ALTER TABLE `user_language` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_token_auth` +-- + +DROP TABLE IF EXISTS `user_token_auth`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user_token_auth` ( + `idusertokenauth` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `login` varchar(100) NOT NULL, + `description` varchar(100) NOT NULL, + `password` varchar(191) NOT NULL, + `hash_algo` varchar(30) NOT NULL, + `system_token` tinyint(1) NOT NULL DEFAULT '0', + `last_used` datetime DEFAULT NULL, + `date_created` datetime NOT NULL, + `date_expired` datetime DEFAULT NULL, + `secure_only` tinyint(2) unsigned NOT NULL DEFAULT '0', + `ts_rotation_notified` datetime DEFAULT NULL, + `ts_expiration_warning_notified` datetime DEFAULT NULL, + PRIMARY KEY (`idusertokenauth`), + UNIQUE KEY `uniq_password` (`password`) +) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_token_auth` +-- + +LOCK TABLES `user_token_auth` WRITE; +/*!40000 ALTER TABLE `user_token_auth` DISABLE KEYS */; +INSERT INTO `user_token_auth` VALUES (20,'superUserLogin','Admin user token','eb973daa92d0a9ce0f6136aba871d2969dd3526b8d90cf7c4bb41f3ed32af01b29e68ddc6b87ae60635feba97e42f86bf1a880f9dd5da717371e6c9007d403e4','sha512',0,'2025-08-08 16:32:49','2025-08-08 16:32:49',NULL,0,NULL,NULL),(21,'superUserLogin','omnifixture token','18e9c4546225890aa7a6933cef60fd7a23773bfb16fa6a40d73e1a5103453bea323259af6f14df5c96fc24f595d82aef01cfddb5c59024541190a141287da5ab','sha512',0,NULL,'2025-08-08 16:33:04',NULL,0,NULL,NULL); +/*!40000 ALTER TABLE `user_token_auth` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2025-08-08 18:33:05 diff --git a/tests/resources/README b/tests/resources/README new file mode 100644 index 0000000000000000000000000000000000000000..98528064c68964a4e85112c49fa8998708b43ba6 --- /dev/null +++ b/tests/resources/README @@ -0,0 +1 @@ +See tests/README.md for help diff --git a/tests/resources/Updater/core/0.3.php b/tests/resources/Updater/core/0.3.php new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/tests/resources/Updater/core/0.3.php @@ -0,0 +1 @@ + diff --git a/tests/resources/Updater/testpluginUpdates/0.0.1.php b/tests/resources/Updater/testpluginUpdates/0.0.1.php new file mode 100644 index 0000000000000000000000000000000000000000..f585d95c4e105710cc64daf853f23b1984cadd9a --- /dev/null +++ b/tests/resources/Updater/testpluginUpdates/0.0.1.php @@ -0,0 +1 @@ +should not be loaded diff --git a/tests/resources/Updater/testpluginUpdates/0.1.php b/tests/resources/Updater/testpluginUpdates/0.1.php new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/tests/resources/Updater/testpluginUpdates/0.1.php @@ -0,0 +1 @@ + diff --git a/tests/resources/Updater/testpluginUpdates/0.1beta2.php b/tests/resources/Updater/testpluginUpdates/0.1beta2.php new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/tests/resources/Updater/testpluginUpdates/0.1beta2.php @@ -0,0 +1 @@ + diff --git a/tests/resources/Updater/testpluginUpdates/0.5.php b/tests/resources/Updater/testpluginUpdates/0.5.php new file mode 100644 index 0000000000000000000000000000000000000000..291b5e5a93b93d9fab5fdf4f890335ba2ee9311e --- /dev/null +++ b/tests/resources/Updater/testpluginUpdates/0.5.php @@ -0,0 +1,13 @@ +