Merge lp:~vlad-lesin/percona-server/i_s-innodb-changed-pages into lp:~laurynas-biveinis/percona-server/xtradb-changed-page-tracking

Proposed by Vlad Lesin on 2012-07-18
Status: Work in progress
Proposed branch: lp:~vlad-lesin/percona-server/i_s-innodb-changed-pages
Merge into: lp:~laurynas-biveinis/percona-server/xtradb-changed-page-tracking
Diff against target: 9440 lines (+1148/-3792)
68 files modified
Makefile (+1/-5)
Percona-Server/mysql-test/r/information_schema.result (+13/-13)
Percona-Server/mysql-test/r/information_schema_db.result (+3/-3)
Percona-Server/mysql-test/r/mysqlshow.result (+6/-6)
Percona-Server/mysql-test/r/percona_server_variables_debug.result (+1/-0)
Percona-Server/mysql-test/r/percona_server_variables_release.result (+1/-0)
Percona-Server/mysql-test/suite/innodb_plugin/r/percona_bug_951588.result (+12/-0)
Percona-Server/mysql-test/suite/innodb_plugin/r/percona_bug_999147.result (+10/-0)
Percona-Server/mysql-test/suite/innodb_plugin/r/percona_changed_pages.result (+41/-0)
Percona-Server/mysql-test/suite/innodb_plugin/r/percona_changed_pages_empty.result (+2/-0)
Percona-Server/mysql-test/suite/innodb_plugin/r/percona_skip_innodb_i_s.result (+94/-0)
Percona-Server/mysql-test/suite/innodb_plugin/t/percona_bug_951588.test (+29/-0)
Percona-Server/mysql-test/suite/innodb_plugin/t/percona_bug_999147-master.opt (+1/-0)
Percona-Server/mysql-test/suite/innodb_plugin/t/percona_bug_999147.test (+29/-0)
Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages-master.opt (+1/-0)
Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages.test (+103/-0)
Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages_empty-master.opt (+1/-0)
Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages_empty.test (+8/-0)
Percona-Server/mysql-test/suite/innodb_plugin/t/percona_skip_innodb_i_s-master.opt (+1/-0)
Percona-Server/mysql-test/suite/innodb_plugin/t/percona_skip_innodb_i_s.test (+21/-0)
Percona-Server/sql/handler.cc (+2/-0)
Percona-Server/sql/log_event.cc (+42/-3)
Percona-Server/sql/signal_handler.cc (+6/-4)
Percona-Server/sql/sql_show.cc (+10/-4)
Percona-Server/storage/innodb_plugin/Makefile.am (+0/-1)
Percona-Server/storage/innodb_plugin/buf/buf0lru.c (+37/-3)
Percona-Server/storage/innodb_plugin/dict/dict0dict.c (+0/-6)
Percona-Server/storage/innodb_plugin/fil/fil0fil.c (+4/-1)
Percona-Server/storage/innodb_plugin/handler/ha_innodb.cc (+9/-1)
Percona-Server/storage/innodb_plugin/handler/handler0alter.cc (+2/-0)
Percona-Server/storage/innodb_plugin/handler/i_s.cc (+308/-159)
Percona-Server/storage/innodb_plugin/handler/i_s.h (+1/-1)
Percona-Server/storage/innodb_plugin/handler/innodb_patch_info.h (+0/-51)
Percona-Server/storage/innodb_plugin/include/log0online.h (+60/-0)
Percona-Server/storage/innodb_plugin/include/srv0srv.h (+3/-0)
Percona-Server/storage/innodb_plugin/log/log0online.c (+160/-1)
Percona-Server/storage/innodb_plugin/row/row0mysql.c (+1/-1)
Percona-Server/storage/innodb_plugin/srv/srv0srv.c (+2/-0)
build/debian/control (+1/-1)
build/debian/rules (+1/-1)
build/percona-server.spec (+2/-2)
build/percona-shared-compat.spec (+1/-1)
doc/Makefile (+13/-0)
doc/source/conf.py (+3/-3)
doc/source/diagnostics/innodb_stats.rst (+2/-3)
doc/source/diagnostics/misc_info_schema_tables.rst (+1/-1)
doc/source/diagnostics/mysql_syslog.rst (+1/-1)
doc/source/diagnostics/slow_extended.rst (+2/-2)
doc/source/flexibility/buff_read_ahead_area.rst (+1/-1)
doc/source/flexibility/mysqlbinlog_change_db.rst (+55/-9)
doc/source/installation/apt_repo.rst (+13/-2)
doc/source/management/innodb_expand_import.rst (+4/-1)
doc/source/management/innodb_fast_index_creation.rst (+1/-22)
doc/source/management/innodb_lru_dump_restore.rst (+1/-1)
doc/source/percona-theme/layout.html (+0/-503)
doc/source/percona-theme/searchbox.html (+0/-22)
doc/source/percona-theme/static/default.css_t (+0/-433)
doc/source/percona-theme/static/jquery.min.js (+0/-154)
doc/source/percona-theme/static/percona.com.css (+0/-1849)
doc/source/percona-theme/static/percona.com.js (+0/-269)
doc/source/percona-theme/static/sidebar.js (+0/-151)
doc/source/percona-theme/theme.conf (+0/-32)
doc/source/release-notes/Percona-Server-5.1.63-13.4.rst (+15/-0)
doc/source/reliability/innodb_corrupt_table_action.rst (+0/-23)
doc/source/reliability/innodb_recovery_update_relay_log.rst (+2/-2)
doc/source/scalability/innodb_expand_undo_slots.rst (+2/-2)
doc/source/scalability/innodb_extra_rseg.rst (+2/-0)
lrusort.py (+0/-38)
To merge this branch: bzr merge lp:~vlad-lesin/percona-server/i_s-innodb-changed-pages
Reviewer Review Type Date Requested Status
Laurynas Biveinis 2012-07-18 Needs Fixing on 2012-07-19
Review via email: mp+115502@code.launchpad.net

Description of the change

Trying once more. The initial branch is lp:~laurynas-biveinis/percona-server/xtradb-changed-page-tracking .

Remade the test. Now it creates redo log records twice as much as the redo log size. As the 1st half is guaranteed to be tracked it checks if the number of tracked pages is greater than or equal to the number of first half. Also it checks if innodb-file-per-table is set and a new table is created and inserted to, then part of the records must have space id equal to the new table space id and "low" page ids;

To post a comment you must log in.
Download full text (3.8 KiB)

Some feature design and code questions. Maybe not all of them need to
be resolved right now.

- We need to know somehow if the current run is complete, i.e. if we
  query some LSN interval, the last block we read should have the last
  block bit set, if we silently output partial data, the user will not
  know if he should re-query the last part of LSN interval or not. I
  am not sure what would be the best way. Another column for last
  block bit flag? That would be quite clumsy for users to use.

- Likewise I am not sure what should we do about corrupted blocks in
  the middle of requested LSN intervals (and maybe missing LSN
  interval data too). Another boolean column "this block is continuous
  from the previous block"?

- In any case I guess we should diagnose bad block checksums we
  encounter to the error log at least. That's easy, but it raises the
  issue of what would happen if the I_S query would attempt to read the
  last bitmap block while it's being written. Currently such block
  would be ignored correctly, but in this case we would get false
  errors. I think we should introduce a log online mutex for the last
  written block protection. Acquire it in the log writer around the
  block write + sync. Acquire it (and immediatelly release) in the
  log iterator right before the read when (offset == file size - 1
  block).

General comments:

- Please submit an MP against lp:percona-server/5.1, as the current
  target branch has been merged.

- I guess the current code did not implement the index condition
  pushdown yet?

- There is no decision on the I_S table row count limit system
  variable in the blueprint, but the code has it, please update the
  blueprint.

- Please add tests for LSNs too. Unfortunately, their values are not
  that predictable, so the basic test would be to check that start lsn
  < end lsn.

- Please add tests for the index condition pushdown, i.e. where
  start_lsn > ... and end_lsn < .... The lsn values for this test can
  be taken from the 1st query on I_S, and get the e.g. MIN, MAX, and
  median values of the tracked interval.

- The new system var requires a new sys_var/var_name-basic.test. In
  the current branch, isn't sys_vars/all_vars test failing due to that
  test being missing?

- Code formatting issues (I know, these are very pedantic): the
  /*=====*/ under function names should match the function name
  length. The function arg comments should start with /*!< in: or /*!<
  out: or /*!< in/out:

- Indentation issue around diff lines 308--312: both args and code
  should be indented by 1 tab. Likewise in many other places in
  log0online.c etc.. Also there should be 1 tab between var type and
  name in the local var declarations.

- (srv_changed_pages_limit ? output_rows_num < srv_changed_pages_limit
  : TRUE) can be simplified to (!srv_changed_pages_limit ||
  output_rows_num < srv_changed_pages_limit)

- Maybe log_online_bitmap_iterator_init should set the rest of the
  fields it does not touch now to some safe values?

- No need for the comment in diff lines 618--620, 646--648, it should
  be enough to mention it once in log0online.c next to the first file
  name printing place.

-...

Read more...

review: Needs Fixing
Vlad Lesin (vlad-lesin) wrote :

> Some feature design and code questions. Maybe not all of them need to
> be resolved right now.
>
> - We need to know somehow if the current run is complete, i.e. if we
> query some LSN interval, the last block we read should have the last
> block bit set, if we silently output partial data, the user will not
> know if he should re-query the last part of LSN interval or not. I
> am not sure what would be the best way. Another column for last
> block bit flag? That would be quite clumsy for users to use.

Maybe it's better to wait until log tracking thread completely write all blocks for certain lsn interval?

About holes. We could to have another I_S for holes and bad blocks recognition. Another option you described below:

> - Likewise I am not sure what should we do about corrupted blocks in
> the middle of requested LSN intervals (and maybe missing LSN
> interval data too). Another boolean column "this block is continuous
> from the previous block"?

It's easy to recognize bad blocks just ckecksum checking. And we could read lsn interval completely before output which allows us to recognize not completely written lsn intervals checking "last block" flag at the end of interval. We could use linked list of changed pages inside of iterator instead of just one page to hold lsn range.

> - In any case I guess we should diagnose bad block checksums we
> encounter to the error log at least. That's easy, but it raises the
> issue of what would happen if the I_S query would attempt to read the
> last bitmap block while it's being written. Currently such block
> would be ignored correctly, but in this case we would get false
> errors. I think we should introduce a log online mutex for the last
> written block protection. Acquire it in the log writer around the
> block write + sync. Acquire it (and immediatelly release) in the
> log iterator right before the read when (offset == file size - 1
> block).

Yes, mutex would help us to avoid reading not completely written blocks. But what about partially written lsn intervals? Maybe that mutex should protect the whole interval writing? Not only one block?

> - What is the purpose of LOG_BITMAP_ITERATOR_* macros? Except for
> LOG_BITMAP_ITERATOR_PAGE_NUM

The purpose is to hide implementation of iterator. We can change the content of iterator and some work logic not changing the code which uses the iterator.

> > - We need to know somehow if the current run is complete, i.e. if we
> > query some LSN interval, the last block we read should have the last
> > block bit set, if we silently output partial data, the user will not
> > know if he should re-query the last part of LSN interval or not. I
> > am not sure what would be the best way. Another column for last
> > block bit flag? That would be quite clumsy for users to use.
>
> Maybe it's better to wait until log tracking thread completely write all
> blocks for certain lsn interval?

Such wait could be very long on a busy server that starves the log following thread.

> About holes. We could to have another I_S for holes and bad blocks
> recognition.

Can you describe in more detail how you imagine this another I_S table?

> Another option you described below:
>
> > - Likewise I am not sure what should we do about corrupted blocks in
> > the middle of requested LSN intervals (and maybe missing LSN
> > interval data too). Another boolean column "this block is continuous
> > from the previous block"?
>
> It's easy to recognize bad blocks just ckecksum checking. And we could read
> lsn interval completely before output which allows us to recognize not
> completely written lsn intervals checking "last block" flag at the end of
> interval. We could use linked list of changed pages inside of iterator instead
> of just one page to hold lsn range.

But the issue is not the detection of bad or missing data, but rather what to do when this situation happens.

> > - In any case I guess we should diagnose bad block checksums we
> > encounter to the error log at least. That's easy, but it raises the
> > issue of what would happen if the I_S query would attempt to read the
> > last bitmap block while it's being written. Currently such block
> > would be ignored correctly, but in this case we would get false
> > errors. I think we should introduce a log online mutex for the last
> > written block protection. Acquire it in the log writer around the
> > block write + sync. Acquire it (and immediatelly release) in the
> > log iterator right before the read when (offset == file size - 1
> > block).
>
> Yes, mutex would help us to avoid reading not completely written blocks. But
> what about partially written lsn intervals? Maybe that mutex should protect
> the whole interval writing? Not only one block?

It probably depends on what we decide to do for the above questions.

> > - What is the purpose of LOG_BITMAP_ITERATOR_* macros? Except for
> > LOG_BITMAP_ITERATOR_PAGE_NUM
>
> The purpose is to hide implementation of iterator. We can change the content
> of iterator and some work logic not changing the code which uses the iterator.

Ah, I see, thanks. I assumed this was not the case, because the struct itself was in a header file.

Vlad Lesin (vlad-lesin) wrote :

> But the issue is not the detection of bad or missing data, but rather what to
> do when this situation happens.

Ok, let's back to the purpose of the table at all. As I understood, the purpose is to have some statisticts to see how it's going on, maybe to anylize something. This table is not for precise calculations, as I understood, it is for estimations. At the other hand It would be usefull to see if there is something wrong with bitmap files in information schema. So I propose to leave the table as is. The name of the table is "Changed pages". It shows changed tables. It doesn't guarantee real time information mapping by design. I don't think it is really important to show the last written blocks or lsn intervals if they are not completely written at the moment of table generation. As for holes or bad blocks we could just ignore them due to purpose of this table.

But I propose to have two addiditional tables. One for bad blocks (previous page id, previous lsn range, bitmap file name, start bad block offset, number of bad blocks). And one for holes (start lsn, end lsn, bitmap file name, number of written blocks).

Vlad Lesin (vlad-lesin) wrote :
Download full text (4.0 KiB)

> General comments:
>
> - Please submit an MP against lp:percona-server/5.1, as the current
> target branch has been merged.
Done.

> - I guess the current code did not implement the index condition
> pushdown yet?

It does.
 if (cond && !cond->val_int())
  continue;

cond->val_int() traverses the condition tree and calculates condition value using fields values stored earlier.

But we discussed it would be useful to recognize
"START_LSN >some_value_1 and END_LSN < some_value_2"
expression to prevent scanning the rest of bitmap file(s)
after reaching the upper limit.

In progress.

> - There is no decision on the I_S table row count limit system
> variable in the blueprint, but the code has it, please update the
> blueprint.

Done.

> - Please add tests for LSNs too. Unfortunately, their values are not
> that predictable, so the basic test would be to check that start lsn
> < end lsn.
 Done.

> - Please add tests for the index condition pushdown, i.e. where
> start_lsn > ... and end_lsn < .... The lsn values for this test can
> be taken from the 1st query on I_S, and get the e.g. MIN, MAX, and
> median values of the tracked interval.

The condition can be any, not only start_lsn >... and end_lsn <... .
And the size of the table is limited with that condition. As I understood
the main purpose of condition pushdown for this table is to limit memory size
for storing temporary table. How can we test that size? Beside that the condition
is checked twice. The first is during table generation and the second is during
query execution. So it may be situation when we get right query execution result
but pushdown doesn't work and the table were completely stored in memory before
output. So how it can be tested?

I'm afraid I don't understand your idea. Do you offer to make several queries with the
following "where" expressions?
1) start_lsn > 0 and end_lsn < ($max_lsn/2)
2) start_lsn > 0 and end_lsn < $max_lsn
3) ($max_lsn/2) >= 0 and end_lsn < ($max_lsn)

If yes, what expected results should be?

> - The new system var requires a new sys_var/var_name-basic.test. In
> the current branch, isn't sys_vars/all_vars test failing due to that
> test being missing?

I think my mistake is in wrong naming of the variable type. It isn't a system
variable, it's plugin variable. Jenkins build didn't show any problems with variable tests.
And I saw another innodb_* variables without tests in sys_var test suite.

> - Code formatting issues (I know, these are very pedantic): the
> /*=====*/ under function names should match the function name
> length. The function arg comments should start with /*!< in: or /*!<
> out: or /*!< in/out:
Done.

> - Indentation issue around diff lines 308--312: both args and code
> should be indented by 1 tab. Likewise in many other places in
> log0online.c etc.. Also there should be 1 tab between var type and
> name in the local var declarations.
Done.

> - (srv_changed_pages_limit ? output_rows_num < srv_changed_pages_limit
> : TRUE) can be simplified to (!srv_changed_pages_limit ||
> output_rows_num < srv_changed_pages_limit)
Done.

> - Maybe log_online_bitmap_iterator_init should set the r...

Read more...

> Ok, let's back to the purpose of the table at all. As I understood, the
> purpose is to have some statisticts to see how it's going on, maybe to anylize
> something. This table is not for precise calculations, as I understood, it is
> for estimations. At the other hand It would be usefull to see if there is
> something wrong with bitmap files in information schema. So I propose to leave
> the table as is. The name of the table is "Changed pages". It shows changed
> tables. It doesn't guarantee real time information mapping by design. I don't
> think it is really important to show the last written blocks or lsn intervals
> if they are not completely written at the moment of table generation. As for
> holes or bad blocks we could just ignore them due to purpose of this table.

Yes, this is a good idea.

> But I propose to have two addiditional tables. One for bad blocks (previous
> page id, previous lsn range, bitmap file name, start bad block offset, number
> of bad blocks). And one for holes (start lsn, end lsn, bitmap file name,
> number of written blocks).

Looks OK, but 1) I wonder if we have to distinguish between a hole and a bad block, 2) is it that important for the user to have this info queriable through I_S because the main table is "best effort" only. Please check with Vadim.

> > - Please add tests for the index condition pushdown, i.e. where
> > start_lsn > ... and end_lsn < .... The lsn values for this test can
> > be taken from the 1st query on I_S, and get the e.g. MIN, MAX, and
> > median values of the tracked interval.
>
> The condition can be any, not only start_lsn >... and end_lsn <... .
> And the size of the table is limited with that condition. As I understood
> the main purpose of condition pushdown for this table is to limit memory size
> for storing temporary table. How can we test that size? Beside that the
> condition
> is checked twice. The first is during table generation and the second is
> during
> query execution. So it may be situation when we get right query execution
> result
> but pushdown doesn't work and the table were completely stored in memory
> before
> output. So how it can be tested?

Yes, it is impossible to test completely. Maybe let's add a WHERE start_lsn > .. AND end_lsn < ... query to tests but don't call it an ICP test. But perhaps it's not useful at all.

> I'm afraid I don't understand your idea. Do you offer to make several queries
> with the
> following "where" expressions?
> 1) start_lsn > 0 and end_lsn < ($max_lsn/2)
> 2) start_lsn > 0 and end_lsn < $max_lsn
> 3) ($max_lsn/2) >= 0 and end_lsn < ($max_lsn)

I had 1) in mind.

> If yes, what expected results should be?

Well, about anything. That limits the usefulness, I agree.

Vlad Lesin (vlad-lesin) wrote :

> > - I guess the current code did not implement the index condition
> > pushdown yet?
>
> It does.
> if (cond && !cond->val_int())
> continue;
>
> cond->val_int() traverses the condition tree and calculates condition value
> using fields values stored earlier.
>
> But we discussed it would be useful to recognize
> "START_LSN >some_value_1 and END_LSN < some_value_2"
> expression to prevent scanning the rest of bitmap file(s)
> after reaching the upper limit.
>
> In progress.

The main trouble is we need common mysql code to implement this. For example to traverse
condition tree we need to know the type of Items, but they are defined in sql/item*.h.

So we could place the function which traverses condition tree to recognize our pattern
in common mysql code somewhere near calc_lookup_values_from_cond() and use it as
external function in handler/i_s.cc but I doubt it's a good solution.

At the other hand we could make it common enough to be placed in common code like
calc_lookup_values_from_cond().

I mean we could parse the following patterns:
 - some_expression & cmp
 - cmp & some_expression
 - cmp & cmp
 - cmp
where cmp is:
 - some_field (<|<=) uint_value
 - uint_value (>|>=) some_field
 - some_field (<|<=) uint_value
 - uint_value (>|>=) some_field
to the following structure:
{
  string field_name1;
  uint field_value1;
  string field_name2;
  string field_value2;
}

And the purpose of the function would be to get maximum field
value after which there is not sense to scan table/file/something else.
As the code is common enough to be used not only for our I_S table generation
it could be placed to the common mysql code.

Any opinions/ideas?

Vlad Lesin (vlad-lesin) wrote :

> I wonder if we have to distinguish between a hole and a bad
> block.

I think the distinguish is in units of measuring.
Bad block is a page range while hole is lsn range.

> The main trouble is we need common mysql code to implement this. For example
> to traverse
> condition tree we need to know the type of Items, but they are defined in
> sql/item*.h.

I believe it's OK to include sql/*.h in the innodb handler/ source files. But then it needs checking if InnoDB built as a plugin can link to all the symbols it needs.

> So we could place the function which traverses condition tree to recognize our
> pattern
> in common mysql code somewhere near calc_lookup_values_from_cond() and use it
> as
> external function in handler/i_s.cc but I doubt it's a good solution.
>
> At the other hand we could make it common enough to be placed in common code
> like
> calc_lookup_values_from_cond().

If the above works, then I think let's keep it local to i_s.cc at first for now.

> I mean we could parse the following patterns:
> - some_expression & cmp
> - cmp & some_expression
> - cmp & cmp
> - cmp
> where cmp is:
> - some_field (<|<=) uint_value
> - uint_value (>|>=) some_field
> - some_field (<|<=) uint_value
> - uint_value (>|>=) some_field
> to the following structure:
> {
> string field_name1;
> uint field_value1;
> string field_name2;
> string field_value2;
> }
>
> And the purpose of the function would be to get maximum field
> value after which there is not sense to scan table/file/something else.

Looks good. I'd tweak the top-most recognized pattern to be
term & term & ... & term
Where
term can be a "cmp", as defined above, or anything else (ignored)
Then maintain a lower and upper bound for the range and go through each cmp looking if it enables to reduce the range.

458. By Vlad Lesin on 2012-08-15

This is implementation if INFORMATION_SCHEMA.INNODB_CHANGED_PAGES table.
Blueprint for this feature can be found here:

https://blueprints.launchpad.net/percona-server/+spec/innodb-changed-pages-table

The table is generated from bitmap file which is written by log tracking thread
which parses and writes bitmap blocks after checkpoint happens. Thus the table
contain only information that was written by log tracking thread, it doesn't
contain realtime data.

Information schema tables are in-memory tables, so it can require a lot of
memory to store the whole INFORMATION_SCHEMA.INNODB_CHANGED_PAGES table. There
are two mechanisms to limit the size of the table. The first is condition
pushdown. It means the table will contain only data which corresponds to
condition in "WHERE" SQL clause. And the second is innodb_changed_pages_limit
system variable which limits the number of rows in the table(0 - unlimited).

Unmerged revisions

458. By Vlad Lesin on 2012-08-15

This is implementation if INFORMATION_SCHEMA.INNODB_CHANGED_PAGES table.
Blueprint for this feature can be found here:

https://blueprints.launchpad.net/percona-server/+spec/innodb-changed-pages-table

The table is generated from bitmap file which is written by log tracking thread
which parses and writes bitmap blocks after checkpoint happens. Thus the table
contain only information that was written by log tracking thread, it doesn't
contain realtime data.

Information schema tables are in-memory tables, so it can require a lot of
memory to store the whole INFORMATION_SCHEMA.INNODB_CHANGED_PAGES table. There
are two mechanisms to limit the size of the table. The first is condition
pushdown. It means the table will contain only data which corresponds to
condition in "WHERE" SQL clause. And the second is innodb_changed_pages_limit
system variable which limits the number of rows in the table(0 - unlimited).

457. By Hrvoje Matijakovic on 2012-07-12

* merged lp:~hrvojem/percona-server/bug1013968-5.1

456. By Stewart Smith on 2012-07-02

merge innodb changed page tracking

455. By Stewart Smith on 2012-07-02

merge removal of lrusort.py

454. By Stewart Smith on 2012-07-02

merge fix for Bug #896439: Server started with skip-innodb crashes on SELECT * FROM INNODB_TABLE_STATS or INNODB_INDEX_STATS

453. By Stewart Smith on 2012-07-02

merge: Remove the very out of date XTRADB_ENHANCEMENTS INFORMATION_SCHEMA table. It's out of date so cannot be any use to anybody.

452. By Stewart Smith on 2012-07-02

merge fix for bug 951588 (Querying I_S.GLOBAL_TEMPORARY_TABLES or
TEMPORARY_TABLES crashes threads working with temp tables)

451. By Stewart Smith on 2012-07-02

merge fix for crash on table import from MySQL 5.0

450. By Hrvoje Matijakovic on 2012-06-26

* merged lp:~hrvojem/percona-server/theme-makefile-5.1

449. By Alexey Kopytov on 2012-06-25

Bug #890623: Using innodb_use_sys_stats_table=1 leads to warning "
failed to store 2 stats entries of db/table/field to
SYS_STATS system table"

Removed the annoying warning in case the SYS_STAT record being updated
does not exist.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Makefile'
2--- Makefile 2012-05-09 04:14:12 +0000
3+++ Makefile 2012-08-15 14:13:58 +0000
4@@ -6,7 +6,7 @@
5 KEWPIE ?=kewpie
6 BASEDIR = $(CURDIR)
7
8-all: main install-lic misc handlersocket maatkit-udf autorun
9+all: main install-lic handlersocket maatkit-udf autorun
10 @echo ""
11 @echo "Percona Server source code is ready"
12 @echo "Now change directory to $(PERCONA_SERVER) define variables as show below"
13@@ -41,10 +41,6 @@
14
15 main: prepare
16
17-misc:
18- @echo "Installing other files"
19- install -m 644 lrusort.py $(PERCONA_SERVER)/scripts
20-
21 clean:
22 rm -rf $(PERCONA_SERVER) $(PERCONA_SERVER_SHORT_1)
23
24
25=== modified file 'Percona-Server/mysql-test/r/information_schema.result'
26--- Percona-Server/mysql-test/r/information_schema.result 2011-11-24 02:00:56 +0000
27+++ Percona-Server/mysql-test/r/information_schema.result 2012-08-15 14:13:58 +0000
28@@ -81,9 +81,9 @@
29 VIEWS
30 INNODB_BUFFER_POOL_PAGES_INDEX
31 INNODB_RSEG
32-INNODB_LOCKS
33+INNODB_CHANGED_PAGES
34 INNODB_BUFFER_POOL_PAGES
35-XTRADB_ENHANCEMENTS
36+INNODB_TABLE_STATS
37 INNODB_TRX
38 XTRADB_ADMIN_COMMAND
39 INNODB_LOCK_WAITS
40@@ -96,7 +96,7 @@
41 INNODB_SYS_INDEXES
42 INNODB_BUFFER_POOL_PAGES_BLOB
43 INNODB_CMPMEM_RESET
44-INNODB_TABLE_STATS
45+INNODB_LOCKS
46 columns_priv
47 db
48 event
49@@ -901,8 +901,8 @@
50 TEMPORARY_TABLES TABLE_NAME select
51 TABLE_STATISTICS TABLE_NAME select
52 VIEWS TABLE_NAME select
53+INNODB_TABLE_STATS table_name select
54 INNODB_INDEX_STATS table_name select
55-INNODB_TABLE_STATS table_name select
56 delete from mysql.user where user='mysqltest_4';
57 delete from mysql.db where user='mysqltest_4';
58 flush privileges;
59@@ -1333,9 +1333,9 @@
60 VIEWS TABLE_SCHEMA
61 INNODB_BUFFER_POOL_PAGES_INDEX index_id
62 INNODB_RSEG rseg_id
63-INNODB_LOCKS lock_id
64+INNODB_CHANGED_PAGES space_id
65 INNODB_BUFFER_POOL_PAGES page_type
66-XTRADB_ENHANCEMENTS name
67+INNODB_TABLE_STATS table_schema
68 INNODB_TRX trx_id
69 XTRADB_ADMIN_COMMAND result_message
70 INNODB_LOCK_WAITS requesting_trx_id
71@@ -1348,7 +1348,7 @@
72 INNODB_SYS_INDEXES TABLE_ID
73 INNODB_BUFFER_POOL_PAGES_BLOB space_id
74 INNODB_CMPMEM_RESET page_size
75-INNODB_TABLE_STATS table_schema
76+INNODB_LOCKS lock_id
77 SELECT t.table_name, c1.column_name
78 FROM information_schema.tables t
79 INNER JOIN
80@@ -1402,9 +1402,9 @@
81 VIEWS TABLE_SCHEMA
82 INNODB_BUFFER_POOL_PAGES_INDEX index_id
83 INNODB_RSEG rseg_id
84-INNODB_LOCKS lock_id
85+INNODB_CHANGED_PAGES space_id
86 INNODB_BUFFER_POOL_PAGES page_type
87-XTRADB_ENHANCEMENTS name
88+INNODB_TABLE_STATS table_schema
89 INNODB_TRX trx_id
90 XTRADB_ADMIN_COMMAND result_message
91 INNODB_LOCK_WAITS requesting_trx_id
92@@ -1417,15 +1417,15 @@
93 INNODB_SYS_INDEXES TABLE_ID
94 INNODB_BUFFER_POOL_PAGES_BLOB space_id
95 INNODB_CMPMEM_RESET page_size
96-INNODB_TABLE_STATS table_schema
97+INNODB_LOCKS lock_id
98 SELECT MAX(table_name) FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test');
99 MAX(table_name)
100-XTRADB_ENHANCEMENTS
101+XTRADB_ADMIN_COMMAND
102 SELECT table_name from information_schema.tables
103 WHERE table_name=(SELECT MAX(table_name)
104 FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test'));
105 table_name
106-XTRADB_ENHANCEMENTS
107+XTRADB_ADMIN_COMMAND
108 DROP TABLE IF EXISTS bug23037;
109 DROP FUNCTION IF EXISTS get_value;
110 SELECT COLUMN_NAME, MD5(COLUMN_DEFAULT), LENGTH(COLUMN_DEFAULT) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='bug23037';
111@@ -1500,6 +1500,7 @@
112 INNODB_BUFFER_POOL_PAGES information_schema.INNODB_BUFFER_POOL_PAGES 1
113 INNODB_BUFFER_POOL_PAGES_BLOB information_schema.INNODB_BUFFER_POOL_PAGES_BLOB 1
114 INNODB_BUFFER_POOL_PAGES_INDEX information_schema.INNODB_BUFFER_POOL_PAGES_INDEX 1
115+INNODB_CHANGED_PAGES information_schema.INNODB_CHANGED_PAGES 1
116 INNODB_CMP information_schema.INNODB_CMP 1
117 INNODB_CMPMEM information_schema.INNODB_CMPMEM 1
118 INNODB_CMPMEM_RESET information_schema.INNODB_CMPMEM_RESET 1
119@@ -1536,7 +1537,6 @@
120 USER_PRIVILEGES information_schema.USER_PRIVILEGES 1
121 USER_STATISTICS information_schema.USER_STATISTICS 1
122 VIEWS information_schema.VIEWS 1
123-XTRADB_ENHANCEMENTS information_schema.XTRADB_ENHANCEMENTS 1
124 create table t1(f1 int);
125 create view v1 as select f1+1 as a from t1;
126 create table t2 (f1 int, f2 int);
127
128=== modified file 'Percona-Server/mysql-test/r/information_schema_db.result'
129--- Percona-Server/mysql-test/r/information_schema_db.result 2011-11-24 02:00:56 +0000
130+++ Percona-Server/mysql-test/r/information_schema_db.result 2012-08-15 14:13:58 +0000
131@@ -43,9 +43,9 @@
132 VIEWS
133 INNODB_BUFFER_POOL_PAGES_INDEX
134 INNODB_RSEG
135-INNODB_LOCKS
136+INNODB_CHANGED_PAGES
137 INNODB_BUFFER_POOL_PAGES
138-XTRADB_ENHANCEMENTS
139+INNODB_TABLE_STATS
140 INNODB_TRX
141 XTRADB_ADMIN_COMMAND
142 INNODB_LOCK_WAITS
143@@ -58,7 +58,7 @@
144 INNODB_SYS_INDEXES
145 INNODB_BUFFER_POOL_PAGES_BLOB
146 INNODB_CMPMEM_RESET
147-INNODB_TABLE_STATS
148+INNODB_LOCKS
149 show tables from INFORMATION_SCHEMA like 'T%';
150 Tables_in_information_schema (T%)
151 TABLES
152
153=== modified file 'Percona-Server/mysql-test/r/mysqlshow.result'
154--- Percona-Server/mysql-test/r/mysqlshow.result 2011-11-24 02:00:56 +0000
155+++ Percona-Server/mysql-test/r/mysqlshow.result 2012-08-15 14:13:58 +0000
156@@ -117,9 +117,9 @@
157 | VIEWS |
158 | INNODB_BUFFER_POOL_PAGES_INDEX |
159 | INNODB_RSEG |
160-| INNODB_LOCKS |
161+| INNODB_CHANGED_PAGES |
162 | INNODB_BUFFER_POOL_PAGES |
163-| XTRADB_ENHANCEMENTS |
164+| INNODB_TABLE_STATS |
165 | INNODB_TRX |
166 | XTRADB_ADMIN_COMMAND |
167 | INNODB_LOCK_WAITS |
168@@ -132,7 +132,7 @@
169 | INNODB_SYS_INDEXES |
170 | INNODB_BUFFER_POOL_PAGES_BLOB |
171 | INNODB_CMPMEM_RESET |
172-| INNODB_TABLE_STATS |
173+| INNODB_LOCKS |
174 +---------------------------------------+
175 Database: INFORMATION_SCHEMA
176 +---------------------------------------+
177@@ -176,9 +176,9 @@
178 | VIEWS |
179 | INNODB_BUFFER_POOL_PAGES_INDEX |
180 | INNODB_RSEG |
181-| INNODB_LOCKS |
182+| INNODB_CHANGED_PAGES |
183 | INNODB_BUFFER_POOL_PAGES |
184-| XTRADB_ENHANCEMENTS |
185+| INNODB_TABLE_STATS |
186 | INNODB_TRX |
187 | XTRADB_ADMIN_COMMAND |
188 | INNODB_LOCK_WAITS |
189@@ -191,7 +191,7 @@
190 | INNODB_SYS_INDEXES |
191 | INNODB_BUFFER_POOL_PAGES_BLOB |
192 | INNODB_CMPMEM_RESET |
193-| INNODB_TABLE_STATS |
194+| INNODB_LOCKS |
195 +---------------------------------------+
196 Wildcard: inf_rmation_schema
197 +--------------------+
198
199=== modified file 'Percona-Server/mysql-test/r/percona_server_variables_debug.result'
200--- Percona-Server/mysql-test/r/percona_server_variables_debug.result 2012-06-14 09:16:03 +0000
201+++ Percona-Server/mysql-test/r/percona_server_variables_debug.result 2012-08-15 14:13:58 +0000
202@@ -86,6 +86,7 @@
203 INNODB_BUFFER_POOL_SHM_CHECKSUM
204 INNODB_BUFFER_POOL_SHM_KEY
205 INNODB_BUFFER_POOL_SIZE
206+INNODB_CHANGED_PAGES_LIMIT
207 INNODB_CHANGE_BUFFERING
208 INNODB_CHECKPOINT_AGE_TARGET
209 INNODB_CHECKSUMS
210
211=== modified file 'Percona-Server/mysql-test/r/percona_server_variables_release.result'
212--- Percona-Server/mysql-test/r/percona_server_variables_release.result 2012-06-14 09:16:03 +0000
213+++ Percona-Server/mysql-test/r/percona_server_variables_release.result 2012-08-15 14:13:58 +0000
214@@ -84,6 +84,7 @@
215 INNODB_BUFFER_POOL_SHM_CHECKSUM
216 INNODB_BUFFER_POOL_SHM_KEY
217 INNODB_BUFFER_POOL_SIZE
218+INNODB_CHANGED_PAGES_LIMIT
219 INNODB_CHANGE_BUFFERING
220 INNODB_CHECKPOINT_AGE_TARGET
221 INNODB_CHECKSUMS
222
223=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/r/percona_bug_951588.result'
224--- Percona-Server/mysql-test/suite/innodb_plugin/r/percona_bug_951588.result 1970-01-01 00:00:00 +0000
225+++ Percona-Server/mysql-test/suite/innodb_plugin/r/percona_bug_951588.result 2012-08-15 14:13:58 +0000
226@@ -0,0 +1,12 @@
227+DROP TABLE IF EXISTS t1;
228+CREATE TEMPORARY TABLE t1 (a INT) ENGINE=InnoDB;
229+INSERT INTO t1 VALUES (1), (2), (3);
230+SET DEBUG_SYNC= 'start_ha_write_row SIGNAL write_in_progress WAIT_FOR i_s_completed';
231+ALTER TABLE t1 ADD COLUMN b VARCHAR(10);
232+SET DEBUG_SYNC= 'now WAIT_FOR write_in_progress';
233+SELECT COUNT(*) FROM INFORMATION_SCHEMA.GLOBAL_TEMPORARY_TABLES;
234+COUNT(*)
235+2
236+SET DEBUG_SYNC= 'now SIGNAL i_s_completed';
237+DROP TABLE t1;
238+SET DEBUG_SYNC='reset';
239
240=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/r/percona_bug_999147.result'
241--- Percona-Server/mysql-test/suite/innodb_plugin/r/percona_bug_999147.result 1970-01-01 00:00:00 +0000
242+++ Percona-Server/mysql-test/suite/innodb_plugin/r/percona_bug_999147.result 2012-08-15 14:13:58 +0000
243@@ -0,0 +1,10 @@
244+DROP TABLE IF EXISTS t1;
245+SET SESSION expand_fast_index_creation=ON;
246+CREATE TEMPORARY TABLE t1 (a INT, b INT, INDEX(a)) ENGINE=InnoDB;
247+SET debug="+d,crash_innodb_add_index_after";
248+ALTER TABLE t1 ADD INDEX (b);
249+ERROR HY000: Lost connection to MySQL server during query
250+SELECT NAME FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;
251+NAME
252+SYS_FOREIGN
253+SYS_FOREIGN_COLS
254
255=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/r/percona_changed_pages.result'
256--- Percona-Server/mysql-test/suite/innodb_plugin/r/percona_changed_pages.result 1970-01-01 00:00:00 +0000
257+++ Percona-Server/mysql-test/suite/innodb_plugin/r/percona_changed_pages.result 2012-08-15 14:13:58 +0000
258@@ -0,0 +1,41 @@
259+SELECT @@innodb_track_changed_pages;
260+@@innodb_track_changed_pages
261+1
262+SET @OLD_INNODB_CHANGED_PAGES_LIMIT = @@GLOBAL.INNODB_CHANGED_PAGES_LIMIT;
263+SET GLOBAL INNODB_CHANGED_PAGES_LIMIT = 0;
264+CREATE TABLE T1 (F1 CHAR(255)) ENGINE=INNODB;
265+SET @t1_space_id =
266+(SELECT SPACE
267+FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES
268+WHERE
269+INFORMATION_SCHEMA.INNODB_SYS_TABLES.SCHEMA='test' AND
270+INFORMATION_SCHEMA.INNODB_SYS_TABLES.NAME='T1');
271+SET GLOBAL INNODB_CHANGED_PAGES_LIMIT = 0;
272+SELECT COUNT(DISTINCT PAGE_ID) >= (1024000/16384)
273+FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES
274+WHERE SPACE_ID = @t1_space_id;
275+COUNT(DISTINCT PAGE_ID) >= (1024000/16384)
276+1
277+SELECT MAX(PAGE_ID) < (3*1024000/16384)
278+FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES
279+WHERE SPACE_ID = @t1_space_id;
280+MAX(PAGE_ID) < (3*1024000/16384)
281+1
282+SELECT COUNT(*)
283+FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES
284+WHERE START_LSN >= END_LSN;
285+COUNT(*)
286+0
287+SELECT COUNT(*) = @cond_test_pages_count
288+FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES
289+WHERE
290+END_LSN > (@cond_test_lsn - 1) AND
291+END_LSN < (@cond_test_lsn + 1);
292+COUNT(*) = @cond_test_pages_count
293+1
294+SET GLOBAL INNODB_CHANGED_PAGES_LIMIT = 1;
295+SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES;
296+COUNT(*)
297+1
298+SET GLOBAL INNODB_CHANGED_PAGES_LIMIT = @OLD_INNODB_CHANGED_PAGES_LIMIT;
299+DROP TABLE T1;
300
301=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/r/percona_changed_pages_empty.result'
302--- Percona-Server/mysql-test/suite/innodb_plugin/r/percona_changed_pages_empty.result 1970-01-01 00:00:00 +0000
303+++ Percona-Server/mysql-test/suite/innodb_plugin/r/percona_changed_pages_empty.result 2012-08-15 14:13:58 +0000
304@@ -0,0 +1,2 @@
305+SELECT * FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES;
306+space_id page_id start_lsn end_lsn
307
308=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/r/percona_skip_innodb_i_s.result'
309--- Percona-Server/mysql-test/suite/innodb_plugin/r/percona_skip_innodb_i_s.result 1970-01-01 00:00:00 +0000
310+++ Percona-Server/mysql-test/suite/innodb_plugin/r/percona_skip_innodb_i_s.result 2012-08-15 14:13:58 +0000
311@@ -0,0 +1,94 @@
312+SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='INFORMATION_SCHEMA' AND TABLE_NAME LIKE 'INNODB%' ORDER BY TABLE_NAME;
313+TABLE_NAME
314+INNODB_BUFFER_POOL_PAGES
315+INNODB_BUFFER_POOL_PAGES_BLOB
316+INNODB_BUFFER_POOL_PAGES_INDEX
317+INNODB_CHANGED_PAGES
318+INNODB_CMP
319+INNODB_CMPMEM
320+INNODB_CMPMEM_RESET
321+INNODB_CMP_RESET
322+INNODB_INDEX_STATS
323+INNODB_LOCKS
324+INNODB_LOCK_WAITS
325+INNODB_RSEG
326+INNODB_SYS_INDEXES
327+INNODB_SYS_STATS
328+INNODB_SYS_TABLES
329+INNODB_TABLE_STATS
330+INNODB_TRX
331+SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='INFORMATION_SCHEMA' AND TABLE_NAME LIKE 'XTRADB%' ORDER BY TABLE_NAME;
332+TABLE_NAME
333+XTRADB_ADMIN_COMMAND
334+SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_POOL_PAGES_INDEX;
335+index_id space_id page_no n_recs data_size hashed access_time modified dirty old lru_position fix_count flush_type
336+Warnings:
337+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_BUFFER_POOL_PAGES_INDEX but the InnoDB storage engine is not installed
338+SELECT * FROM INFORMATION_SCHEMA.INNODB_RSEG;
339+rseg_id space_id zip_size page_no max_size curr_size
340+Warnings:
341+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_RSEG but the InnoDB storage engine is not installed
342+SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP;
343+page_size compress_ops compress_ops_ok compress_time uncompress_ops uncompress_time
344+Warnings:
345+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_CMP but the InnoDB storage engine is not installed
346+SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
347+trx_id trx_state trx_started trx_requested_lock_id trx_wait_started trx_weight trx_mysql_thread_id trx_query
348+Warnings:
349+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_TRX but the InnoDB storage engine is not installed
350+SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
351+requesting_trx_id requested_lock_id blocking_trx_id blocking_lock_id
352+Warnings:
353+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_LOCK_WAITS but the InnoDB storage engine is not installed
354+SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
355+lock_id lock_trx_id lock_mode lock_type lock_table lock_index lock_space lock_page lock_rec lock_data
356+Warnings:
357+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_LOCKS but the InnoDB storage engine is not installed
358+SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP_RESET;
359+page_size compress_ops compress_ops_ok compress_time uncompress_ops uncompress_time
360+Warnings:
361+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_CMP_RESET but the InnoDB storage engine is not installed
362+SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_POOL_PAGES;
363+page_type space_id page_no lru_position fix_count flush_type
364+Warnings:
365+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_BUFFER_POOL_PAGES but the InnoDB storage engine is not installed
366+SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;
367+SCHEMA NAME ID N_COLS TYPE MIX_ID MIX_LEN CLUSTER_NAME SPACE
368+Warnings:
369+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_SYS_TABLES but the InnoDB storage engine is not installed
370+SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_POOL_PAGES_INDEX;
371+index_id space_id page_no n_recs data_size hashed access_time modified dirty old lru_position fix_count flush_type
372+Warnings:
373+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_BUFFER_POOL_PAGES_INDEX but the InnoDB storage engine is not installed
374+SELECT * FROM INFORMATION_SCHEMA.INNODB_CMPMEM;
375+page_size pages_used pages_free relocation_ops relocation_time
376+Warnings:
377+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_CMPMEM but the InnoDB storage engine is not installed
378+SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_POOL_PAGES_BLOB;
379+space_id page_no compressed part_len next_page_no lru_position fix_count flush_type
380+Warnings:
381+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_BUFFER_POOL_PAGES_BLOB but the InnoDB storage engine is not installed
382+SELECT * FROM INFORMATION_SCHEMA.INNODB_CMPMEM_RESET;
383+page_size pages_used pages_free relocation_ops relocation_time
384+Warnings:
385+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_CMPMEM_RESET but the InnoDB storage engine is not installed
386+SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS;
387+table_schema table_name rows clust_size other_size modified
388+Warnings:
389+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_TABLE_STATS but the InnoDB storage engine is not installed
390+SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_STATS;
391+INDEX_ID KEY_COLS DIFF_VALS NON_NULL_VALS
392+Warnings:
393+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_SYS_STATS but the InnoDB storage engine is not installed
394+SELECT * FROM INFORMATION_SCHEMA.INNODB_INDEX_STATS;
395+table_schema table_name index_name fields row_per_keys index_size leaf_pages
396+Warnings:
397+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_INDEX_STATS but the InnoDB storage engine is not installed
398+SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES;
399+TABLE_ID ID NAME N_FIELDS TYPE SPACE PAGE_NO
400+Warnings:
401+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_SYS_INDEXES but the InnoDB storage engine is not installed
402+SELECT * FROM INFORMATION_SCHEMA.XTRADB_ADMIN_COMMAND;
403+result_message
404+Warnings:
405+Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.XTRADB_ADMIN_COMMAND but the InnoDB storage engine is not installed
406
407=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/t/percona_bug_951588.test'
408--- Percona-Server/mysql-test/suite/innodb_plugin/t/percona_bug_951588.test 1970-01-01 00:00:00 +0000
409+++ Percona-Server/mysql-test/suite/innodb_plugin/t/percona_bug_951588.test 2012-08-15 14:13:58 +0000
410@@ -0,0 +1,29 @@
411+# Test for bug 951588 (Querying I_S.TEMPORARY_TABLES crashes parallel threads working on temp tables)
412+
413+--source include/have_innodb_plugin.inc
414+--source include/have_debug_sync.inc
415+
416+--disable_warnings
417+DROP TABLE IF EXISTS t1;
418+--enable_warnings
419+
420+CREATE TEMPORARY TABLE t1 (a INT) ENGINE=InnoDB;
421+INSERT INTO t1 VALUES (1), (2), (3);
422+
423+SET DEBUG_SYNC= 'start_ha_write_row SIGNAL write_in_progress WAIT_FOR i_s_completed';
424+send ALTER TABLE t1 ADD COLUMN b VARCHAR(10);
425+
426+connect (conn2,localhost,root,,);
427+connection conn2;
428+
429+SET DEBUG_SYNC= 'now WAIT_FOR write_in_progress';
430+SELECT COUNT(*) FROM INFORMATION_SCHEMA.GLOBAL_TEMPORARY_TABLES;
431+SET DEBUG_SYNC= 'now SIGNAL i_s_completed';
432+
433+disconnect conn2;
434+connection default;
435+reap;
436+
437+DROP TABLE t1;
438+
439+SET DEBUG_SYNC='reset';
440
441=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/t/percona_bug_999147-master.opt'
442--- Percona-Server/mysql-test/suite/innodb_plugin/t/percona_bug_999147-master.opt 1970-01-01 00:00:00 +0000
443+++ Percona-Server/mysql-test/suite/innodb_plugin/t/percona_bug_999147-master.opt 2012-08-15 14:13:58 +0000
444@@ -0,0 +1,1 @@
445+--skip-stack-trace --skip-core-file --innodb-file-per-table=1
446
447=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/t/percona_bug_999147.test'
448--- Percona-Server/mysql-test/suite/innodb_plugin/t/percona_bug_999147.test 1970-01-01 00:00:00 +0000
449+++ Percona-Server/mysql-test/suite/innodb_plugin/t/percona_bug_999147.test 2012-08-15 14:13:58 +0000
450@@ -0,0 +1,29 @@
451+# Test for Percona Server bug 999147 (A crash that leaves behind an
452+# InnoDB temporary table with indexes results in an unbootable server)
453+# https://bugs.launchpad.net/percona-server/+bug/999147
454+
455+-- source include/not_embedded.inc
456+-- source include/not_valgrind.inc
457+-- source include/not_crashrep.inc
458+-- source include/have_debug.inc
459+-- source include/have_innodb.inc
460+
461+--disable_warnings
462+DROP TABLE IF EXISTS t1;
463+--enable_warnings
464+
465+SET SESSION expand_fast_index_creation=ON;
466+
467+CREATE TEMPORARY TABLE t1 (a INT, b INT, INDEX(a)) ENGINE=InnoDB;
468+
469+--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
470+
471+SET debug="+d,crash_innodb_add_index_after";
472+--error 2013
473+ALTER TABLE t1 ADD INDEX (b);
474+
475+--enable_reconnect
476+
477+--source include/wait_until_connected_again.inc
478+
479+SELECT NAME FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;
480
481=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages-master.opt'
482--- Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages-master.opt 1970-01-01 00:00:00 +0000
483+++ Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages-master.opt 2012-08-15 14:13:58 +0000
484@@ -0,0 +1,1 @@
485+--innodb_track_changed_pages=TRUE --innodb_log_file_size=1M --innodb-file-per-table
486
487=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages.test'
488--- Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages.test 1970-01-01 00:00:00 +0000
489+++ Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages.test 2012-08-15 14:13:58 +0000
490@@ -0,0 +1,103 @@
491+###########################################
492+# Test for I_S.INNODB_CHANGED_PAGES table #
493+###########################################
494+
495+--source include/have_innodb_plugin.inc
496+
497+SELECT @@innodb_track_changed_pages;
498+
499+SET @OLD_INNODB_CHANGED_PAGES_LIMIT = @@GLOBAL.INNODB_CHANGED_PAGES_LIMIT;
500+
501+SET GLOBAL INNODB_CHANGED_PAGES_LIMIT = 0;
502+
503+CREATE TABLE T1 (F1 CHAR(255)) ENGINE=INNODB;
504+SET @t1_space_id =
505+ (SELECT SPACE
506+ FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES
507+ WHERE
508+ INFORMATION_SCHEMA.INNODB_SYS_TABLES.SCHEMA='test' AND
509+ INFORMATION_SCHEMA.INNODB_SYS_TABLES.NAME='T1');
510+
511+--disable_query_log
512+--disable_result_log
513+
514+#########################################################################
515+# The maximum log size is 1MB. Each row occupies at least 256 bytes. #
516+# Each iteration inserts 100 rows. They occupies at least 25KB. To be #
517+# sure that tracking log thread wrote at least 1M/16K pages we need to #
518+# exceed maximum log size twice. That means we should do at least #
519+# 2M/25K = 80 iterations. #
520+#########################################################################
521+--let $i=80
522+
523+while ($i)
524+{
525+--dec $i
526+INSERT INTO T1 (F1) VALUES
527+("1"), ("2"), ("3"), ("4"), ("5"), ("6"), ("7"), ("8"), ("9"), ("10"),
528+("11"), ("12"), ("13"), ("14"), ("15"), ("16"), ("17"), ("18"), ("19"), ("20"),
529+("21"), ("22"), ("23"), ("24"), ("25"), ("26"), ("27"), ("28"), ("29"), ("30"),
530+("31"), ("32"), ("33"), ("34"), ("35"), ("36"), ("37"), ("38"), ("39"), ("40"),
531+("41"), ("42"), ("43"), ("44"), ("45"), ("46"), ("47"), ("48"), ("49"), ("50"),
532+("51"), ("52"), ("53"), ("54"), ("55"), ("56"), ("57"), ("58"), ("59"), ("60"),
533+("61"), ("62"), ("63"), ("64"), ("65"), ("66"), ("67"), ("68"), ("69"), ("70"),
534+("71"), ("72"), ("73"), ("74"), ("75"), ("76"), ("77"), ("78"), ("79"), ("80"),
535+("81"), ("82"), ("83"), ("84"), ("85"), ("86"), ("87"), ("88"), ("89"), ("90"),
536+("91"), ("92"), ("93"), ("94"), ("95"), ("96"), ("97"), ("98"), ("99"), ("100");
537+}
538+
539+###################################################################
540+# Gather data for condition pushdown testing not using conditions #
541+###################################################################
542+SET @cond_test_lsn=
543+ (SELECT MIN(end_lsn)
544+ FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES);
545+
546+SET @cond_test_pages_count=
547+ (SELECT count(*)
548+ FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES
549+ GROUP BY end_lsn
550+ ORDER BY end_lsn
551+ LIMIT 1);
552+
553+--enable_query_log
554+--enable_result_log
555+
556+###############################################################
557+# Check if the number of changed pages is greater than 1M/16K #
558+###############################################################
559+SET GLOBAL INNODB_CHANGED_PAGES_LIMIT = 0;
560+SELECT COUNT(DISTINCT PAGE_ID) >= (1024000/16384)
561+ FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES
562+ WHERE SPACE_ID = @t1_space_id;
563+#############################################################
564+# Check if the maximum page id is less than resonable limit #
565+#############################################################
566+SELECT MAX(PAGE_ID) < (3*1024000/16384)
567+ FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES
568+ WHERE SPACE_ID = @t1_space_id;
569+########################################################
570+# The records where START_LSN >= END_LSN should absent #
571+########################################################
572+SELECT COUNT(*)
573+ FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES
574+ WHERE START_LSN >= END_LSN;
575+
576+######################################################
577+# Check condition if pushdown doesn't break anything #
578+######################################################
579+SELECT COUNT(*) = @cond_test_pages_count
580+ FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES
581+ WHERE
582+ END_LSN > (@cond_test_lsn - 1) AND
583+ END_LSN < (@cond_test_lsn + 1);
584+
585+################################################
586+# Check how limit for maximum rows count works #
587+################################################
588+SET GLOBAL INNODB_CHANGED_PAGES_LIMIT = 1;
589+SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES;
590+
591+SET GLOBAL INNODB_CHANGED_PAGES_LIMIT = @OLD_INNODB_CHANGED_PAGES_LIMIT;
592+
593+DROP TABLE T1;
594
595=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages_empty-master.opt'
596--- Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages_empty-master.opt 1970-01-01 00:00:00 +0000
597+++ Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages_empty-master.opt 2012-08-15 14:13:58 +0000
598@@ -0,0 +1,1 @@
599+--innodb_track_changed_pages=false
600
601=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages_empty.test'
602--- Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages_empty.test 1970-01-01 00:00:00 +0000
603+++ Percona-Server/mysql-test/suite/innodb_plugin/t/percona_changed_pages_empty.test 2012-08-15 14:13:58 +0000
604@@ -0,0 +1,8 @@
605+###############################################################################
606+# Test for empty I_S.INNODB_CHANGED_PAGES table. The table should be empty if#
607+# innodb_track_changed_pages is false. #
608+###############################################################################
609+
610+--source include/have_innodb_plugin.inc
611+
612+SELECT * FROM INFORMATION_SCHEMA.INNODB_CHANGED_PAGES;
613
614=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/t/percona_skip_innodb_i_s-master.opt'
615--- Percona-Server/mysql-test/suite/innodb_plugin/t/percona_skip_innodb_i_s-master.opt 1970-01-01 00:00:00 +0000
616+++ Percona-Server/mysql-test/suite/innodb_plugin/t/percona_skip_innodb_i_s-master.opt 2012-08-15 14:13:58 +0000
617@@ -0,0 +1,1 @@
618+--skip-innodb
619
620=== added file 'Percona-Server/mysql-test/suite/innodb_plugin/t/percona_skip_innodb_i_s.test'
621--- Percona-Server/mysql-test/suite/innodb_plugin/t/percona_skip_innodb_i_s.test 1970-01-01 00:00:00 +0000
622+++ Percona-Server/mysql-test/suite/innodb_plugin/t/percona_skip_innodb_i_s.test 2012-08-15 14:13:58 +0000
623@@ -0,0 +1,21 @@
624+# we just test that we don't crash. The SELECT below is to ensure we update the test if we add I_S tables for INNODB or XTRADB
625+SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='INFORMATION_SCHEMA' AND TABLE_NAME LIKE 'INNODB%' ORDER BY TABLE_NAME;
626+SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='INFORMATION_SCHEMA' AND TABLE_NAME LIKE 'XTRADB%' ORDER BY TABLE_NAME;
627+SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_POOL_PAGES_INDEX;
628+SELECT * FROM INFORMATION_SCHEMA.INNODB_RSEG;
629+SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP;
630+SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
631+SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
632+SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
633+SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP_RESET;
634+SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_POOL_PAGES;
635+SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;
636+SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_POOL_PAGES_INDEX;
637+SELECT * FROM INFORMATION_SCHEMA.INNODB_CMPMEM;
638+SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_POOL_PAGES_BLOB;
639+SELECT * FROM INFORMATION_SCHEMA.INNODB_CMPMEM_RESET;
640+SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS;
641+SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_STATS;
642+SELECT * FROM INFORMATION_SCHEMA.INNODB_INDEX_STATS;
643+SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES;
644+SELECT * FROM INFORMATION_SCHEMA.XTRADB_ADMIN_COMMAND;
645
646=== modified file 'Percona-Server/sql/handler.cc'
647--- Percona-Server/sql/handler.cc 2012-05-09 04:14:12 +0000
648+++ Percona-Server/sql/handler.cc 2012-08-15 14:13:58 +0000
649@@ -27,6 +27,7 @@
650 #include "rpl_filter.h"
651 #include <myisampack.h>
652 #include <errno.h>
653+#include "debug_sync.h" // DEBUG_SYNC
654
655 #ifdef WITH_PARTITION_STORAGE_ENGINE
656 #include "ha_partition.h"
657@@ -4795,6 +4796,7 @@
658 int error;
659 Log_func *log_func= Write_rows_log_event::binlog_row_logging_function;
660 DBUG_ENTER("handler::ha_write_row");
661+ DEBUG_SYNC(ha_thd(), "start_ha_write_row");
662
663 mark_trx_read_write();
664
665
666=== modified file 'Percona-Server/sql/log_event.cc'
667--- Percona-Server/sql/log_event.cc 2012-05-09 04:14:12 +0000
668+++ Percona-Server/sql/log_event.cc 2012-08-15 14:13:58 +0000
669@@ -3162,11 +3162,35 @@
670 const char *query_arg, uint32 q_len_arg)
671 {
672 LEX_STRING new_db;
673+ char* query_buf;
674+ int query_buf_len;
675 int expected_error,actual_error= 0;
676 HA_CREATE_INFO db_options;
677 bool process_log_slow_statement= false;
678
679 /*
680+ We must allocate some extra memory for query cache
681+ The query buffer layout is:
682+ buffer :==
683+ <statement> The input statement(s)
684+ '\0' Terminating null char (1 byte)
685+ <length> Length of following current database name (size_t)
686+ <db_name> Name of current database
687+ <flags> Flags struct
688+ */
689+ query_buf_len = q_len_arg + 1 + sizeof(size_t) + thd->db_length
690+ + QUERY_CACHE_FLAGS_SIZE + 1;
691+ if ((query_buf= (char *) thd->alloc(query_buf_len)))
692+ {
693+ memcpy(query_buf, query_arg, q_len_arg);
694+ query_buf[q_len_arg]= 0;
695+ memcpy(query_buf+q_len_arg+1, (char *) &thd->db_length, sizeof(size_t));
696+ }
697+ else
698+ goto end;
699+
700+
701+ /*
702 Colleagues: please never free(thd->catalog) in MySQL. This would
703 lead to bugs as here thd->catalog is a part of an alloced block,
704 not an entire alloced block (see
705@@ -3246,7 +3270,7 @@
706 if (is_trans_keyword() || rpl_filter->db_ok(thd->db))
707 {
708 thd->set_time((time_t)when);
709- thd->set_query((char*)query_arg, q_len_arg);
710+ thd->set_query((char*) query_buf, q_len_arg);
711 VOID(pthread_mutex_lock(&LOCK_thread_count));
712 thd->query_id = next_query_id();
713 VOID(pthread_mutex_unlock(&LOCK_thread_count));
714@@ -4821,12 +4845,26 @@
715 enum enum_duplicates handle_dup;
716 bool ignore= 0;
717 char *load_data_query;
718-
719+ int query_buf_len;
720+
721+ /*
722+ We must allocate some extra memory for query cache
723+ The query buffer layout is:
724+ buffer :==
725+ <statement> The input statement(s)
726+ '\0' Terminating null char (1 byte)
727+ <length> Length of following current database name (size_t)
728+ <db_name> Name of current database
729+ <flags> Flags struct
730+ */
731+ query_buf_len = get_query_buffer_length() + 1 + sizeof(size_t)
732+ + thd->db_length + QUERY_CACHE_FLAGS_SIZE + 1;
733+
734 /*
735 Forge LOAD DATA INFILE query which will be used in SHOW PROCESS LIST
736 and written to slave's binlog if binlogging is on.
737 */
738- if (!(load_data_query= (char *)thd->alloc(get_query_buffer_length() + 1)))
739+ if (!(load_data_query= (char *) thd->alloc(query_buf_len)))
740 {
741 /*
742 This will set thd->fatal_error in case of OOM. So we surely will notice
743@@ -4837,6 +4875,7 @@
744
745 print_query(FALSE, NULL, load_data_query, &end, NULL, NULL);
746 *end= 0;
747+ memcpy(end+1, (char *) &thd->db_length, sizeof(size_t));
748 thd->set_query(load_data_query, (uint) (end - load_data_query));
749
750 if (sql_ex.opt_flags & REPLACE_FLAG)
751
752=== modified file 'Percona-Server/sql/signal_handler.cc'
753--- Percona-Server/sql/signal_handler.cc 2012-03-06 12:30:30 +0000
754+++ Percona-Server/sql/signal_handler.cc 2012-08-15 14:13:58 +0000
755@@ -99,7 +99,9 @@
756 my_safe_printf_stderr("%s",
757 "We will try our best to scrape up some info that will hopefully help\n"
758 "diagnose the problem, but since we have already crashed, \n"
759- "something is definitely wrong and this may fail.\n\n");
760+ "something is definitely wrong and this may fail.\n"
761+ "Please help us make Percona Server better by reporting any\n"
762+ "bugs at http://bugs.percona.com/\n\n");
763
764 my_safe_printf_stderr("key_buffer_size=%lu\n",
765 (ulong) dflt_key_cache->key_cache_mem_size);
766@@ -192,9 +194,9 @@
767 my_safe_printf_stderr("Status: %s\n\n", kreason);
768 }
769 my_safe_printf_stderr("%s",
770- "The manual page at "
771- "http://dev.mysql.com/doc/mysql/en/crashing.html contains\n"
772- "information that should help you find out what is causing the crash.\n");
773+ "You may download the Percona Server operations manual by visiting\n"
774+ "http://www.percona.com/software/percona-server/. You may find information\n"
775+ "in the manual which will help you identify the cause of the crash.\n");
776
777 #endif /* HAVE_STACKTRACE */
778
779
780=== modified file 'Percona-Server/sql/sql_show.cc'
781--- Percona-Server/sql/sql_show.cc 2012-05-09 04:14:12 +0000
782+++ Percona-Server/sql/sql_show.cc 2012-08-15 14:13:58 +0000
783@@ -3694,8 +3694,9 @@
784 DBUG_RETURN(schema_table_store_record(thd, table));
785
786 //engine
787- handler *handle= tmp_table->file;
788- char *engineType = (char *)(handle ? handle->table_type() : "UNKNOWN");
789+ handler *file= tmp_table->file;
790+ // Assume that invoking handler::table_type() on a shared handler is safe
791+ const char *engineType = (file) ? file->table_type() : "UNKNOWN";
792 table->field[3]->store(engineType, strlen(engineType), cs);
793
794 //name
795@@ -3706,12 +3707,15 @@
796 }
797
798 // file stats
799- handler *file= tmp_table->file;
800-
801 if (file) {
802
803 MYSQL_TIME time;
804
805+ /* We have only one handler object for a temp table globally and it might
806+ be in use by other thread. Do not trash it by invoking handler methods on
807+ it but rather clone it. */
808+ file = file->clone(tmp_table->s->normalized_path.str, thd->mem_root);
809+
810 /**
811 TODO: InnoDB stat(file) checks file on short names within data dictionary
812 rather than using full path, because of that, temp files created in
813@@ -3741,6 +3745,8 @@
814 table->field[10]->store_time(&time, MYSQL_TIMESTAMP_DATETIME);
815 table->field[10]->set_notnull();
816 }
817+
818+ file->close();
819 }
820
821 DBUG_RETURN(schema_table_store_record(thd, table));
822
823=== modified file 'Percona-Server/storage/innodb_plugin/Makefile.am'
824--- Percona-Server/storage/innodb_plugin/Makefile.am 2012-06-14 09:16:03 +0000
825+++ Percona-Server/storage/innodb_plugin/Makefile.am 2012-08-15 14:13:58 +0000
826@@ -227,7 +227,6 @@
827 include/ut0vec.h \
828 include/ut0vec.ic \
829 include/ut0wqueue.h \
830- handler/innodb_patch_info.h \
831 mem/mem0dbg.c
832
833 EXTRA_LIBRARIES= libinnobase.a
834
835=== modified file 'Percona-Server/storage/innodb_plugin/buf/buf0lru.c'
836--- Percona-Server/storage/innodb_plugin/buf/buf0lru.c 2011-11-24 16:33:30 +0000
837+++ Percona-Server/storage/innodb_plugin/buf/buf0lru.c 2012-08-15 14:13:58 +0000
838@@ -48,6 +48,7 @@
839 #include "page0zip.h"
840 #include "log0recv.h"
841 #include "srv0srv.h"
842+#include "srv0start.h"
843
844 /** The number of blocks from the LRU_old pointer onward, including
845 the block pointed to, must be buf_LRU_old_ratio/BUF_LRU_OLD_RATIO_DIV
846@@ -2098,6 +2099,7 @@
847 /********************************************************************//**
848 Dump the LRU page list to the specific file. */
849 #define LRU_DUMP_FILE "ib_lru_dump"
850+#define LRU_DUMP_TEMP_FILE "ib_lru_dump.tmp"
851
852 UNIV_INTERN
853 ibool
854@@ -2132,7 +2134,7 @@
855 goto end;
856 }
857
858- dump_file = os_file_create(LRU_DUMP_FILE, OS_FILE_OVERWRITE,
859+ dump_file = os_file_create(LRU_DUMP_TEMP_FILE, OS_FILE_OVERWRITE,
860 OS_FILE_NORMAL, OS_DATA_FILE, &success);
861 if (!success) {
862 os_file_get_last_error(TRUE);
863@@ -2156,6 +2158,13 @@
864 offset++;
865
866 if (offset == UNIV_PAGE_SIZE/4) {
867+ if (srv_shutdown_state != SRV_SHUTDOWN_NONE) {
868+ success = 0;
869+ fprintf(stderr,
870+ " InnoDB: stopped dumping lru pages"
871+ " because of server shutdown.\n");
872+ goto end;
873+ }
874 success = os_file_write(LRU_DUMP_FILE, dump_file, buffer,
875 (buffers << UNIV_PAGE_SIZE_SHIFT) & 0xFFFFFFFFUL,
876 (buffers >> (32 - UNIV_PAGE_SIZE_SHIFT)),
877@@ -2194,8 +2203,16 @@
878
879 ret = TRUE;
880 end:
881- if (dump_file != -1)
882+ if (dump_file != -1) {
883+ if (success) {
884+ success = os_file_flush(dump_file, TRUE);
885+ }
886 os_file_close(dump_file);
887+ }
888+ if (success) {
889+ success = os_file_rename(LRU_DUMP_TEMP_FILE,
890+ LRU_DUMP_FILE);
891+ }
892 if (buffer_base)
893 ut_free(buffer_base);
894
895@@ -2241,6 +2258,7 @@
896 dump_record_t* records = NULL;
897 ulint size;
898 ulint size_high;
899+ ulint recsize = sizeof(dump_record_t);
900 ulint length;
901
902 dump_file = os_file_create_simple_no_error_handling(
903@@ -2248,7 +2266,15 @@
904 if (!success || !os_file_get_size(dump_file, &size, &size_high)) {
905 os_file_get_last_error(TRUE);
906 fprintf(stderr,
907- " InnoDB: cannot open %s\n", LRU_DUMP_FILE);
908+ " InnoDB: cannot open %s,"
909+ " buffer pool preload not done\n",
910+ LRU_DUMP_FILE);
911+ goto end;
912+ }
913+
914+ if (size == 0 || size_high > 0 || size % recsize) {
915+ fprintf(stderr, " InnoDB: broken LRU dump file,"
916+ " buffer pool preload not done\n");
917 goto end;
918 }
919
920@@ -2332,6 +2358,14 @@
921 if (offset % 16 == 15) {
922 os_aio_simulated_wake_handler_threads();
923 buf_flush_free_margin(FALSE);
924+ /* skip loading of the rest of the file if we are
925+ terminating anyway*/
926+ if (srv_shutdown_state != SRV_SHUTDOWN_NONE) {
927+ fprintf(stderr,
928+ " InnoDB: stopped loading LRU pages"
929+ " because of server shutdown.\n");
930+ break;
931+ }
932 }
933
934 zip_size = fil_space_get_zip_size(space_id);
935
936=== modified file 'Percona-Server/storage/innodb_plugin/dict/dict0dict.c'
937--- Percona-Server/storage/innodb_plugin/dict/dict0dict.c 2012-05-09 04:14:12 +0000
938+++ Percona-Server/storage/innodb_plugin/dict/dict0dict.c 2012-08-15 14:13:58 +0000
939@@ -4622,12 +4622,6 @@
940 }
941 btr_pcur_close(&pcur);
942 mtr_commit(&mtr);
943-
944- if (rests) {
945- fprintf(stderr, "InnoDB: Warning: failed to store %lu stats entries"
946- " of %s/%s to SYS_STATS system table.\n",
947- rests, index->table_name, index->name);
948- }
949 }
950 /*===========================================*/
951
952
953=== modified file 'Percona-Server/storage/innodb_plugin/fil/fil0fil.c'
954--- Percona-Server/storage/innodb_plugin/fil/fil0fil.c 2012-05-09 04:14:12 +0000
955+++ Percona-Server/storage/innodb_plugin/fil/fil0fil.c 2012-08-15 14:13:58 +0000
956@@ -3375,6 +3375,7 @@
957 for (offset = 0; offset < free_limit_bytes;
958 offset += zip_size ? zip_size : UNIV_PAGE_SIZE) {
959 ibool page_is_corrupt;
960+ ibool is_descr_page = FALSE;
961
962 success = os_file_read(file, page,
963 (ulint)(offset & 0xFFFFFFFFUL),
964@@ -3413,6 +3414,7 @@
965
966 /* store as descr page */
967 memcpy(descr_page, page, (zip_size ? zip_size : UNIV_PAGE_SIZE));
968+ is_descr_page = TRUE;
969
970 } else if (descr_is_corrupt) {
971 /* unknown state of the page */
972@@ -3489,7 +3491,8 @@
973 }
974 }
975
976- if (fil_page_get_type(page) == FIL_PAGE_INDEX) {
977+ if (fil_page_get_type(page) ==
978+ FIL_PAGE_INDEX && !is_descr_page) {
979 dulint tmp = mach_read_from_8(page + (PAGE_HEADER + PAGE_INDEX_ID));
980
981 for (i = 0; i < n_index; i++) {
982
983=== modified file 'Percona-Server/storage/innodb_plugin/handler/ha_innodb.cc'
984--- Percona-Server/storage/innodb_plugin/handler/ha_innodb.cc 2012-06-14 09:16:03 +0000
985+++ Percona-Server/storage/innodb_plugin/handler/ha_innodb.cc 2012-08-15 14:13:58 +0000
986@@ -11934,6 +11934,13 @@
987 "Track the redo log for changed pages and output a changed page bitmap",
988 NULL, NULL, FALSE);
989
990+static MYSQL_SYSVAR_ULONGLONG(changed_pages_limit, srv_changed_pages_limit,
991+ PLUGIN_VAR_RQCMDARG,
992+ "The maximum number of rows for "
993+ "INFORMATION_SCHEMA.INNODB_CHANGED_PAGES table, "
994+ "0 - unlimited",
995+ NULL, NULL, 1000000, 0, ~0ULL, 0);
996+
997 #if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG
998 static MYSQL_SYSVAR_UINT(change_buffering_debug, ibuf_debug,
999 PLUGIN_VAR_RQCMDARG,
1000@@ -12181,6 +12188,7 @@
1001 MYSQL_SYSVAR(use_sys_malloc),
1002 MYSQL_SYSVAR(change_buffering),
1003 MYSQL_SYSVAR(track_changed_pages),
1004+ MYSQL_SYSVAR(changed_pages_limit),
1005 #if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG
1006 MYSQL_SYSVAR(change_buffering_debug),
1007 #endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */
1008@@ -12231,7 +12239,7 @@
1009 i_s_innodb_sys_tables,
1010 i_s_innodb_sys_indexes,
1011 i_s_innodb_sys_stats,
1012-i_s_innodb_patches
1013+i_s_innodb_changed_pages
1014 mysql_declare_plugin_end;
1015
1016 /** @brief Initialize the default value of innodb_commit_concurrency.
1017
1018=== modified file 'Percona-Server/storage/innodb_plugin/handler/handler0alter.cc'
1019--- Percona-Server/storage/innodb_plugin/handler/handler0alter.cc 2012-05-09 04:14:12 +0000
1020+++ Percona-Server/storage/innodb_plugin/handler/handler0alter.cc 2012-08-15 14:13:58 +0000
1021@@ -823,6 +823,8 @@
1022 innodb_table, indexed_table,
1023 index, num_of_idx, table);
1024
1025+ DBUG_EXECUTE_IF("crash_innodb_add_index_after", DBUG_SUICIDE(););
1026+
1027 error_handling:
1028 /* After an error, remove all those index definitions from the
1029 dictionary which were defined. */
1030
1031=== modified file 'Percona-Server/storage/innodb_plugin/handler/i_s.cc'
1032--- Percona-Server/storage/innodb_plugin/handler/i_s.cc 2011-11-24 16:33:30 +0000
1033+++ Percona-Server/storage/innodb_plugin/handler/i_s.cc 2012-08-15 14:13:58 +0000
1034@@ -22,8 +22,15 @@
1035
1036 Created July 18, 2007 Vasil Dimov
1037 *******************************************************/
1038+#ifndef MYSQL_SERVER
1039+#define MYSQL_SERVER /* For Item_* classes */
1040+#include <mysql_priv.h>
1041+/* Prevent influence of this definition to other headers */
1042+#undef MYSQL_SERVER
1043+#else
1044+#include <mysql_priv.h>
1045+#endif //MYSQL_SERVER
1046
1047-#include <mysql_priv.h>
1048 #include <mysqld_error.h>
1049
1050 #include <m_ctype.h>
1051@@ -32,7 +39,6 @@
1052 #include <mysys_err.h>
1053 #include <my_sys.h>
1054 #include "i_s.h"
1055-#include "innodb_patch_info.h"
1056 #include <mysql/plugin.h>
1057
1058 extern "C" {
1059@@ -48,6 +54,7 @@
1060 #include "dict0dict.h" /* for dict_sys */
1061 #include "btr0pcur.h"
1062 #include "buf0lru.h" /* for XTRA_LRU_[DUMP/RESTORE] */
1063+#include "log0online.h"
1064 }
1065
1066 static const char plugin_author[] = "Innobase Oy";
1067@@ -224,168 +231,11 @@
1068 return(ret);
1069 }
1070
1071-/* Fields of the dynamic table INFORMATION_SCHEMA.innodb_patches */
1072-static ST_FIELD_INFO innodb_patches_fields_info[] =
1073-{
1074-#define IDX_PATCH_NAME 0
1075- {STRUCT_FLD(field_name, "name"),
1076- STRUCT_FLD(field_length, 255),
1077- STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
1078- STRUCT_FLD(value, 0),
1079- STRUCT_FLD(field_flags, 0),
1080- STRUCT_FLD(old_name, ""),
1081- STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
1082-
1083-#define IDX_PATCH_DESCR 1
1084- {STRUCT_FLD(field_name, "description"),
1085- STRUCT_FLD(field_length, 255),
1086- STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
1087- STRUCT_FLD(value, 0),
1088- STRUCT_FLD(field_flags, 0),
1089- STRUCT_FLD(old_name, ""),
1090- STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
1091-
1092-#define IDX_PATCH_COMMENT 2
1093- {STRUCT_FLD(field_name, "comment"),
1094- STRUCT_FLD(field_length, 100),
1095- STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
1096- STRUCT_FLD(value, 0),
1097- STRUCT_FLD(field_flags, 0),
1098- STRUCT_FLD(old_name, ""),
1099- STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
1100-
1101-#define IDX_PATCH_LINK 3
1102- {STRUCT_FLD(field_name, "link"),
1103- STRUCT_FLD(field_length, 255),
1104- STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
1105- STRUCT_FLD(value, 0),
1106- STRUCT_FLD(field_flags, 0),
1107- STRUCT_FLD(old_name, ""),
1108- STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
1109-
1110- END_OF_ST_FIELD_INFO
1111-};
1112-
1113 static struct st_mysql_information_schema i_s_info =
1114 {
1115 MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION
1116 };
1117
1118-/***********************************************************************
1119-Fill the dynamic table information_schema.innodb_patches */
1120-static
1121-int
1122-innodb_patches_fill(
1123-/*=============*/
1124- /* out: 0 on success, 1 on failure */
1125- THD* thd, /* in: thread */
1126- TABLE_LIST* tables, /* in/out: tables to fill */
1127- COND* cond) /* in: condition (ignored) */
1128-{
1129- TABLE* table = (TABLE *) tables->table;
1130- int status = 0;
1131- int i;
1132- Field** fields;
1133-
1134-
1135- DBUG_ENTER("innodb_patches_fill");
1136- fields = table->field;
1137-
1138- /* deny access to non-superusers */
1139- if (check_global_access(thd, PROCESS_ACL)) {
1140-
1141- DBUG_RETURN(0);
1142- }
1143-
1144- RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
1145-
1146- for (i = 0; innodb_enhancements[i].file; i++) {
1147-
1148- field_store_string(fields[0],innodb_enhancements[i].file);
1149- field_store_string(fields[1],innodb_enhancements[i].name);
1150- field_store_string(fields[2],innodb_enhancements[i].comment);
1151- field_store_string(fields[3],innodb_enhancements[i].link);
1152-
1153- if (schema_table_store_record(thd, table)) {
1154- status = 1;
1155- break;
1156- }
1157-
1158- }
1159-
1160-
1161- DBUG_RETURN(status);
1162-}
1163-
1164-/***********************************************************************
1165-Bind the dynamic table information_schema.innodb_patches. */
1166-static
1167-int
1168-innodb_patches_init(
1169-/*=========*/
1170- /* out: 0 on success */
1171- void* p) /* in/out: table schema object */
1172-{
1173- DBUG_ENTER("innodb_patches_init");
1174- ST_SCHEMA_TABLE* schema = (ST_SCHEMA_TABLE*) p;
1175-
1176- schema->fields_info = innodb_patches_fields_info;
1177- schema->fill_table = innodb_patches_fill;
1178-
1179- DBUG_RETURN(0);
1180-}
1181-
1182-
1183-UNIV_INTERN struct st_mysql_plugin i_s_innodb_patches =
1184-{
1185- /* the plugin type (a MYSQL_XXX_PLUGIN value) */
1186- /* int */
1187- STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN),
1188-
1189- /* pointer to type-specific plugin descriptor */
1190- /* void* */
1191- STRUCT_FLD(info, &i_s_info),
1192-
1193- /* plugin name */
1194- /* const char* */
1195- STRUCT_FLD(name, "XTRADB_ENHANCEMENTS"),
1196-
1197- /* plugin author (for SHOW PLUGINS) */
1198- /* const char* */
1199- STRUCT_FLD(author, "Percona"),
1200-
1201- /* general descriptive text (for SHOW PLUGINS) */
1202- /* const char* */
1203- STRUCT_FLD(descr, "Enhancements applied to InnoDB plugin"),
1204-
1205- /* the plugin license (PLUGIN_LICENSE_XXX) */
1206- /* int */
1207- STRUCT_FLD(license, PLUGIN_LICENSE_GPL),
1208-
1209- /* the function to invoke when plugin is loaded */
1210- /* int (*)(void*); */
1211- STRUCT_FLD(init, innodb_patches_init),
1212-
1213- /* the function to invoke when plugin is unloaded */
1214- /* int (*)(void*); */
1215- STRUCT_FLD(deinit, i_s_common_deinit),
1216-
1217- /* plugin version (for SHOW PLUGINS) */
1218- /* unsigned int */
1219- STRUCT_FLD(version, INNODB_VERSION_SHORT),
1220-
1221- /* struct st_mysql_show_var* */
1222- STRUCT_FLD(status_vars, NULL),
1223-
1224- /* struct st_mysql_sys_var** */
1225- STRUCT_FLD(system_vars, NULL),
1226-
1227- /* reserved for dependency checking */
1228- /* void* */
1229- STRUCT_FLD(__reserved1, NULL)
1230-};
1231-
1232-
1233 static ST_FIELD_INFO i_s_innodb_buffer_pool_pages_fields_info[] =
1234 {
1235 {STRUCT_FLD(field_name, "page_type"),
1236@@ -1956,6 +1806,8 @@
1237
1238 DBUG_ENTER("i_s_cmp_fill_low");
1239
1240+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
1241+
1242 /* deny access to non-superusers */
1243 if (check_global_access(thd, PROCESS_ACL)) {
1244
1245@@ -2224,6 +2076,8 @@
1246
1247 DBUG_ENTER("i_s_cmpmem_fill_low");
1248
1249+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
1250+
1251 /* deny access to non-superusers */
1252 if (check_global_access(thd, PROCESS_ACL)) {
1253
1254@@ -2512,6 +2366,8 @@
1255
1256 DBUG_ENTER("i_s_innodb_rseg_fill");
1257
1258+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
1259+
1260 /* deny access to non-superusers */
1261 if (check_global_access(thd, PROCESS_ACL)) {
1262
1263@@ -2645,6 +2501,8 @@
1264
1265 DBUG_ENTER("i_s_innodb_admin_command_fill");
1266
1267+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
1268+
1269 /* deny access to non-superusers */
1270 if (check_global_access(thd, PROCESS_ACL)) {
1271 DBUG_RETURN(0);
1272@@ -2902,6 +2760,8 @@
1273
1274 DBUG_ENTER("i_s_innodb_table_stats_fill");
1275
1276+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
1277+
1278 /* deny access to non-superusers */
1279 if (check_global_access(thd, PROCESS_ACL)) {
1280 DBUG_RETURN(0);
1281@@ -2965,6 +2825,8 @@
1282
1283 DBUG_ENTER("i_s_innodb_index_stats_fill");
1284
1285+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
1286+
1287 /* deny access to non-superusers */
1288 if (check_global_access(thd, PROCESS_ACL)) {
1289 DBUG_RETURN(0);
1290@@ -3612,6 +3474,8 @@
1291
1292 DBUG_ENTER("i_s_innodb_schema_table_fill");
1293
1294+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
1295+
1296 /* deny access to non-superusers */
1297 if (check_global_access(thd, PROCESS_ACL)) {
1298 DBUG_RETURN(0);
1299@@ -3783,3 +3647,288 @@
1300 STRUCT_FLD(system_vars, NULL),
1301 STRUCT_FLD(__reserved1, NULL)
1302 };
1303+
1304+static ST_FIELD_INFO i_s_innodb_changed_pages_info[] =
1305+{
1306+ {STRUCT_FLD(field_name, "space_id"),
1307+ STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS),
1308+ STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
1309+ STRUCT_FLD(value, 0),
1310+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
1311+ STRUCT_FLD(old_name, ""),
1312+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
1313+
1314+ {STRUCT_FLD(field_name, "page_id"),
1315+ STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS),
1316+ STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
1317+ STRUCT_FLD(value, 0),
1318+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
1319+ STRUCT_FLD(old_name, ""),
1320+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
1321+
1322+ {STRUCT_FLD(field_name, "start_lsn"),
1323+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
1324+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
1325+ STRUCT_FLD(value, 0),
1326+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
1327+ STRUCT_FLD(old_name, ""),
1328+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
1329+
1330+ {STRUCT_FLD(field_name, "end_lsn"),
1331+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
1332+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
1333+ STRUCT_FLD(value, 0),
1334+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
1335+ STRUCT_FLD(old_name, ""),
1336+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
1337+
1338+ END_OF_ST_FIELD_INFO
1339+};
1340+
1341+/***********************************************************************
1342+ This function parses condition and gets upper bounds for start and end LSN's
1343+ if condition corresponds to certain pattern.
1344+
1345+ We can't know right position to avoid scanning bitmap files from the beginning
1346+ to the lower bound. But we can stop scanning bitmap files if we reach upper bound.
1347+
1348+ It's expected the most used queries will be like the following:
1349+
1350+ SELECT * FROM INNODB_CHANGED_PAGES WHERE START_LSN > num1 AND start_lsn < num2;
1351+
1352+ That's why the pattern is:
1353+
1354+ pattern: comp | and_comp;
1355+ comp: lsn < int_num | lsn <= int_num | int_num > lsn | int_num >= lsn;
1356+ lsn: start_lsn | end_lsn;
1357+ and_comp: some_expression AND some_expression | some_expression AND and_comp;
1358+ some_expression: comp | any_other_expression;
1359+
1360+ Suppose the condition is start_lsn < 100, this means we have to read all
1361+ blocks with start_lsn < 100. Which is equivalent to reading all the blocks
1362+ with end_lsn <= 99, or just end_lsn < 100. That's why it's enough to find
1363+ maximum lsn value, doesn't matter if this is start or end lsn and compare
1364+ it with "start_lsn" field.
1365+
1366+ Example:
1367+
1368+ SELECT * FROM INNODB_CHANGED_PAGES
1369+ WHERE
1370+ start_lsn > 10 AND
1371+ end_lsn <= 1111 AND
1372+ 555 > end_lsn AND
1373+ page_id = 100;
1374+
1375+ max_lsn will be set to 555.
1376+*/
1377+static
1378+void
1379+limit_lsn_range_from_condition(
1380+/*===========================*/
1381+ TABLE* table, /*!<in: table */
1382+ COND* cond, /*!<in: condition */
1383+ ib_uint64_t* max_lsn) /*!<in/out: maximum LSN
1384+ (must be initialized with maximum
1385+ available value) */
1386+{
1387+ if (cond->type() != Item::COND_ITEM &&
1388+ cond->type() != Item::FUNC_ITEM)
1389+ return;
1390+
1391+ switch (((Item_func*) cond)->functype())
1392+ {
1393+ case Item_func::COND_AND_FUNC:
1394+ {
1395+ List_iterator<Item> li(*((Item_cond*) cond)->
1396+ argument_list());
1397+ Item *item;
1398+ while ((item= li++))
1399+ limit_lsn_range_from_condition(table,
1400+ item,
1401+ max_lsn);
1402+ break;
1403+ }
1404+ case Item_func::LT_FUNC:
1405+ case Item_func::LE_FUNC:
1406+ case Item_func::GT_FUNC:
1407+ case Item_func::GE_FUNC:
1408+ {
1409+ Item *left;
1410+ Item *right;
1411+ Item_field *item_field;
1412+ ib_uint64_t tmp_result;
1413+
1414+ /*
1415+ a <= b equals to b >= a that's why we just exchange
1416+ "left" and "right" in the case of ">" or ">="
1417+ function
1418+ */
1419+ if (((Item_func*) cond)->functype() ==
1420+ Item_func::LT_FUNC ||
1421+ ((Item_func*) cond)->functype() ==
1422+ Item_func::LE_FUNC)
1423+ {
1424+ left = ((Item_func*) cond)->arguments()[0];
1425+ right = ((Item_func*) cond)->arguments()[1];
1426+ } else {
1427+ left = ((Item_func*) cond)->arguments()[1];
1428+ right = ((Item_func*) cond)->arguments()[0];
1429+ }
1430+
1431+ if (!left || !right)
1432+ return;
1433+ if (left->type() != Item::FIELD_ITEM)
1434+ return;
1435+ if (right->type() != Item::INT_ITEM)
1436+ return;
1437+
1438+ item_field = (Item_field*)left;
1439+
1440+ if (/* START_LSN */
1441+ table->field[2] != item_field->field &&
1442+ /* END_LSN */
1443+ table->field[3] != item_field->field)
1444+ {
1445+ return;
1446+ }
1447+
1448+ /* Check if the current field belongs to our table */
1449+ if (table != item_field->field->table)
1450+ return;
1451+
1452+ tmp_result = right->val_int();
1453+ if (tmp_result < *max_lsn)
1454+ *max_lsn = tmp_result;
1455+
1456+ break;
1457+ }
1458+ default:;
1459+ }
1460+
1461+}
1462+
1463+/***********************************************************************
1464+Fill the dynamic table information_schema.innodb_changed_pages.
1465+@return 0 on success, 1 on failure */
1466+static
1467+int
1468+i_s_innodb_changed_pages_fill(
1469+/*==========================*/
1470+ THD* thd, /*!<in: thread */
1471+ TABLE_LIST* tables, /*!<in/out: tables to fill */
1472+ COND* cond) /*!<in: condition */
1473+{
1474+ TABLE* table = (TABLE *) tables->table;
1475+ log_bitmap_iterator_t i;
1476+ ib_uint64_t output_rows_num = 0UL;
1477+ ib_uint64_t max_lsn = ~0ULL;
1478+
1479+ if (!srv_track_changed_pages)
1480+ return 0;
1481+
1482+ if (!log_online_bitmap_iterator_init(&i))
1483+ return 1;
1484+
1485+ if (cond)
1486+ limit_lsn_range_from_condition(table, cond, &max_lsn);
1487+
1488+ while(log_online_bitmap_iterator_next(&i) &&
1489+ (!srv_changed_pages_limit ||
1490+ output_rows_num < srv_changed_pages_limit) &&
1491+ /*
1492+ There is no need to compare both start LSN and end LSN fields
1493+ with maximum value. It's enough to compare only start LSN.
1494+ Example:
1495+
1496+ max_lsn = 100
1497+ \\\\\\\\\\\\\\\\\\\\\\\\\|\\\\\\\\ - Query 1
1498+ I------I I-------I I-------------I I----I
1499+ ////////////////// | - Query 2
1500+ 1 2 3 4
1501+
1502+ Query 1:
1503+ SELECT * FROM INNODB_CHANGED_PAGES WHERE start_lsn < 100
1504+ will select 1,2,3 bitmaps
1505+ Query 2:
1506+ SELECT * FROM INNODB_CHANGED_PAGES WHERE end_lsn < 100
1507+ will select 1,2 bitmaps
1508+
1509+ The condition start_lsn <= 100 will be false after reading
1510+ 1,2,3 bitmaps which suits for both cases.
1511+ */
1512+ LOG_BITMAP_ITERATOR_START_LSN(i) <= max_lsn)
1513+ {
1514+ if (!LOG_BITMAP_ITERATOR_PAGE_CHANGED(i))
1515+ continue;
1516+
1517+ /* SPACE_ID */
1518+ table->field[0]->store(
1519+ LOG_BITMAP_ITERATOR_SPACE_ID(i));
1520+ /* PAGE_ID */
1521+ table->field[1]->store(
1522+ LOG_BITMAP_ITERATOR_PAGE_NUM(i));
1523+ /* START_LSN */
1524+ table->field[2]->store(
1525+ LOG_BITMAP_ITERATOR_START_LSN(i));
1526+ /* END_LSN */
1527+ table->field[3]->store(
1528+ LOG_BITMAP_ITERATOR_END_LSN(i));
1529+
1530+ /*
1531+ I_S tables are in-memory tables. If bitmap file is big enough
1532+ a lot of memory can be used to store the table. But the size
1533+ of used memory can be diminished if we store only data which
1534+ corresponds to some conditions (in WHERE sql clause). Here
1535+ conditions are checked for the field values stored above.
1536+
1537+ Conditions are checked twice. The first is here (during table
1538+ generation) and the second during query execution. Maybe it
1539+ makes sense to use some flag in THD object to avoid double
1540+ checking.
1541+ */
1542+ if (cond && !cond->val_int())
1543+ continue;
1544+
1545+ if (schema_table_store_record(thd, table))
1546+ {
1547+ log_online_bitmap_iterator_release(&i);
1548+ return 1;
1549+ }
1550+
1551+ ++output_rows_num;
1552+ }
1553+
1554+ log_online_bitmap_iterator_release(&i);
1555+ return 0;
1556+}
1557+
1558+static
1559+int
1560+i_s_innodb_changed_pages_init(
1561+/*==========================*/
1562+ void* p)
1563+{
1564+ DBUG_ENTER("i_s_innodb_changed_pages_init");
1565+ ST_SCHEMA_TABLE* schema = (ST_SCHEMA_TABLE*) p;
1566+
1567+ schema->fields_info = i_s_innodb_changed_pages_info;
1568+ schema->fill_table = i_s_innodb_changed_pages_fill;
1569+
1570+ DBUG_RETURN(0);
1571+}
1572+
1573+UNIV_INTERN struct st_mysql_plugin i_s_innodb_changed_pages =
1574+{
1575+ STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN),
1576+ STRUCT_FLD(info, &i_s_info),
1577+ STRUCT_FLD(name, "INNODB_CHANGED_PAGES"),
1578+ STRUCT_FLD(author, "Percona"),
1579+ STRUCT_FLD(descr, "InnoDB CHANGED_PAGES table"),
1580+ STRUCT_FLD(license, PLUGIN_LICENSE_GPL),
1581+ STRUCT_FLD(init, i_s_innodb_changed_pages_init),
1582+ STRUCT_FLD(deinit, i_s_common_deinit),
1583+ STRUCT_FLD(version, 0x0100 /* 1.0 */),
1584+ STRUCT_FLD(status_vars, NULL),
1585+ STRUCT_FLD(system_vars, NULL),
1586+ STRUCT_FLD(__reserved1, NULL)
1587+};
1588
1589=== modified file 'Percona-Server/storage/innodb_plugin/handler/i_s.h'
1590--- Percona-Server/storage/innodb_plugin/handler/i_s.h 2011-11-24 02:00:45 +0000
1591+++ Percona-Server/storage/innodb_plugin/handler/i_s.h 2012-08-15 14:13:58 +0000
1592@@ -36,7 +36,6 @@
1593 extern struct st_mysql_plugin i_s_innodb_cmp_reset;
1594 extern struct st_mysql_plugin i_s_innodb_cmpmem;
1595 extern struct st_mysql_plugin i_s_innodb_cmpmem_reset;
1596-extern struct st_mysql_plugin i_s_innodb_patches;
1597 extern struct st_mysql_plugin i_s_innodb_rseg;
1598 extern struct st_mysql_plugin i_s_innodb_table_stats;
1599 extern struct st_mysql_plugin i_s_innodb_index_stats;
1600@@ -44,5 +43,6 @@
1601 extern struct st_mysql_plugin i_s_innodb_sys_tables;
1602 extern struct st_mysql_plugin i_s_innodb_sys_indexes;
1603 extern struct st_mysql_plugin i_s_innodb_sys_stats;
1604+extern struct st_mysql_plugin i_s_innodb_changed_pages;
1605
1606 #endif /* i_s_h */
1607
1608=== removed file 'Percona-Server/storage/innodb_plugin/handler/innodb_patch_info.h'
1609--- Percona-Server/storage/innodb_plugin/handler/innodb_patch_info.h 2011-11-24 02:00:45 +0000
1610+++ Percona-Server/storage/innodb_plugin/handler/innodb_patch_info.h 1970-01-01 00:00:00 +0000
1611@@ -1,51 +0,0 @@
1612-/* Copyright (C) 2002-2006 MySQL AB
1613-
1614- This program is free software; you can redistribute it and/or modify
1615- it under the terms of the GNU General Public License as published by
1616- the Free Software Foundation; version 2 of the License.
1617-
1618- This program is distributed in the hope that it will be useful,
1619- but WITHOUT ANY WARRANTY; without even the implied warranty of
1620- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1621- GNU General Public License for more details.
1622-
1623- You should have received a copy of the GNU General Public License
1624- along with this program; if not, write to the Free Software
1625- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
1626-
1627-#ifdef USE_PRAGMA_INTERFACE
1628-#pragma interface /* gcc class implementation */
1629-#endif
1630-
1631-struct innodb_enhancement {
1632- const char *file;
1633- const char *name;
1634- const char *comment;
1635- const char *link;
1636-}innodb_enhancements[] = {
1637-{"xtradb_show_enhancements","I_S.XTRADB_ENHANCEMENTS","","http://www.percona.com/docs/wiki/percona-xtradb"},
1638-{"innodb_show_status","Improvements to SHOW INNODB STATUS","Memory information and lock info fixes","http://www.percona.com/docs/wiki/percona-xtradb"},
1639-{"innodb_io","Improvements to InnoDB IO","","http://www.percona.com/docs/wiki/percona-xtradb"},
1640-{"innodb_opt_lru_count","Fix of buffer_pool mutex","Decreases contention on buffer_pool mutex on LRU operations","http://www.percona.com/docs/wiki/percona-xtradb"},
1641-{"innodb_buffer_pool_pages","Information of buffer pool content","","http://www.percona.com/docs/wiki/percona-xtradb"},
1642-{"innodb_expand_undo_slots","expandable maximum number of undo slots","from 1024 (default) to about 4000","http://www.percona.com/docs/wiki/percona-xtradb"},
1643-{"innodb_extra_rseg","allow to create extra rollback segments","When create new db, the new parameter allows to create more rollback segments","http://www.percona.com/docs/wiki/percona-xtradb"},
1644-{"innodb_overwrite_relay_log_info","overwrite relay-log.info when slave recovery","Building as plugin, it is not used.","http://www.percona.com/docs/wiki/percona-xtradb:innodb_overwrite_relay_log_info"},
1645-{"innodb_thread_concurrency_timer_based","use InnoDB timer based concurrency throttling (backport from MySQL 5.4.0)","",""},
1646-{"innodb_expand_import","convert .ibd file automatically when import tablespace","the files are generated by xtrabackup export mode.","http://www.percona.com/docs/wiki/percona-xtradb"},
1647-{"innodb_dict_size_limit","Limit dictionary cache size","Variable innodb_dict_size_limit in bytes","http://www.percona.com/docs/wiki/percona-xtradb"},
1648-{"innodb_split_buf_pool_mutex","More fix of buffer_pool mutex","Spliting buf_pool_mutex and optimizing based on innodb_opt_lru_count","http://www.percona.com/docs/wiki/percona-xtradb"},
1649-{"innodb_stats","Additional features about InnoDB statistics/optimizer","","http://www.percona.com/docs/wiki/percona-xtradb"},
1650-{"innodb_recovery_patches","Bugfixes and adjustments about recovery process","","http://www.percona.com/docs/wiki/percona-xtradb"},
1651-{"innodb_purge_thread","Enable to use purge devoted thread","","http://www.percona.com/docs/wiki/percona-xtradb"},
1652-{"innodb_admin_command_base","XtraDB specific command interface through i_s","","http://www.percona.com/docs/wiki/percona-xtradb"},
1653-{"innodb_show_lock_name","Show mutex/lock name instead of crated file/line","","http://www.percona.com/docs/wiki/percona-xtradb"},
1654-{"innodb_extend_slow","Extended statistics in slow.log","It is InnoDB-part only. It needs to patch also to mysqld.","http://www.percona.com/docs/wiki/percona-xtradb"},
1655-{"innodb_lru_dump_restore","Dump and restore command for content of buffer pool","","http://www.percona.com/docs/wiki/percona-xtradb"},
1656-{"innodb_separate_doublewrite","Add option 'innodb_doublewrite_file' to separate doublewrite dedicated tablespace","","http://www.percona.com/docs/wiki/percona-xtradb"},
1657-{"innodb_pass_corrupt_table","Treat tables as corrupt instead of crash, when meet corrupt blocks","","http://www.percona.com/docs/wiki/percona-xtradb"},
1658-{"innodb_fast_checksum","Using the checksum on 32bit-unit calculation","incompatible for unpatched ver.","http://www.percona.com/docs/wiki/percona-xtradb"},
1659-{"innodb_files_extend","allow >4GB transaction log files, and can vary universal page size of datafiles","incompatible for unpatched ver.","http://www.percona.com/docs/wiki/percona-xtradb"},
1660-{"innodb_sys_tables_sys_indexes","Expose InnoDB SYS_TABLES and SYS_INDEXES schema tables","","http://www.percona.com/docs/wiki/percona-xtradb"},
1661-{NULL, NULL, NULL, NULL}
1662-};
1663
1664=== modified file 'Percona-Server/storage/innodb_plugin/include/log0online.h'
1665--- Percona-Server/storage/innodb_plugin/include/log0online.h 2012-06-14 09:16:03 +0000
1666+++ Percona-Server/storage/innodb_plugin/include/log0online.h 2012-08-15 14:13:58 +0000
1667@@ -25,6 +25,7 @@
1668 #define log0online_h
1669
1670 #include "univ.i"
1671+#include "os0file.h"
1672
1673 /*********************************************************************//**
1674 Initializes the online log following subsytem. */
1675@@ -48,4 +49,63 @@
1676 log_online_follow_redo_log();
1677 /*=========================*/
1678
1679+/** The iterator through all bits of changed pages bitmap blocks */
1680+struct log_bitmap_iterator_struct
1681+{
1682+ char in_name[FN_REFLEN]; /*!< the file name for bitmap
1683+ input */
1684+ os_file_t in; /*!< the bitmap input file */
1685+ ib_uint64_t in_offset; /*!< the next write position in the
1686+ bitmap output file */
1687+ ib_uint32_t bit_offset; /*!< bit offset inside of bitmap
1688+ block*/
1689+ ib_uint64_t start_lsn; /*!< Start lsn of the block */
1690+ ib_uint64_t end_lsn; /*!< End lsn of the block */
1691+ ib_uint32_t space_id; /*!< Block space id */
1692+ ib_uint32_t first_page_id; /*!< First block page id */
1693+ ibool changed; /*!< true if current page was changed */
1694+ byte* page; /*!< Bitmap block */
1695+};
1696+
1697+typedef struct log_bitmap_iterator_struct log_bitmap_iterator_t;
1698+
1699+#define LOG_BITMAP_ITERATOR_START_LSN(i) \
1700+ ((i).start_lsn)
1701+#define LOG_BITMAP_ITERATOR_END_LSN(i) \
1702+ ((i).end_lsn)
1703+#define LOG_BITMAP_ITERATOR_SPACE_ID(i) \
1704+ ((i).space_id)
1705+#define LOG_BITMAP_ITERATOR_PAGE_NUM(i) \
1706+ ((i).first_page_id + (i).bit_offset)
1707+#define LOG_BITMAP_ITERATOR_PAGE_CHANGED(i) \
1708+ ((i).changed)
1709+
1710+/*********************************************************************//**
1711+Initializes log bitmap iterator.
1712+@return TRUE if the iterator is initialized OK, FALSE otherwise. */
1713+UNIV_INTERN
1714+ibool
1715+log_online_bitmap_iterator_init(
1716+/*============================*/
1717+ log_bitmap_iterator_t *i); /*!<in/out: iterator */
1718+
1719+/*********************************************************************//**
1720+Releases log bitmap iterator. */
1721+UNIV_INTERN
1722+void
1723+log_online_bitmap_iterator_release(
1724+/*===============================*/
1725+ log_bitmap_iterator_t *i); /*!<in/out: iterator */
1726+
1727+/*********************************************************************//**
1728+Iterates through bits of saved bitmap blocks.
1729+Sequentially reads blocks from bitmap file(s) and interates through
1730+their bits. Ignores blocks with wrong checksum.
1731+@return TRUE if iteration is successful, FALSE if all bits are iterated. */
1732+UNIV_INTERN
1733+ibool
1734+log_online_bitmap_iterator_next(
1735+/*============================*/
1736+ log_bitmap_iterator_t *i); /*!<in/out: iterator */
1737+
1738 #endif
1739
1740=== modified file 'Percona-Server/storage/innodb_plugin/include/srv0srv.h'
1741--- Percona-Server/storage/innodb_plugin/include/srv0srv.h 2012-06-14 09:16:03 +0000
1742+++ Percona-Server/storage/innodb_plugin/include/srv0srv.h 2012-08-15 14:13:58 +0000
1743@@ -136,6 +136,9 @@
1744
1745 extern my_bool srv_track_changed_pages;
1746
1747+extern
1748+ulonglong srv_changed_pages_limit;
1749+
1750 extern ibool srv_auto_extend_last_data_file;
1751 extern ulint srv_last_file_size_max;
1752 extern char** srv_log_group_home_dirs;
1753
1754=== modified file 'Percona-Server/storage/innodb_plugin/log/log0online.c'
1755--- Percona-Server/storage/innodb_plugin/log/log0online.c 2012-06-14 09:16:03 +0000
1756+++ Percona-Server/storage/innodb_plugin/log/log0online.c 2012-08-15 14:13:58 +0000
1757@@ -29,7 +29,6 @@
1758 #include "log0recv.h"
1759 #include "mach0data.h"
1760 #include "mtr0log.h"
1761-#include "os0file.h"
1762 #include "srv0srv.h"
1763 #include "srv0start.h"
1764 #include "trx0sys.h"
1765@@ -84,6 +83,10 @@
1766 which case the first LSN of actual log records will be this. */
1767 #define MIN_TRACKED_LSN ((LOG_START_LSN) + (LOG_BLOCK_HDR_SIZE))
1768
1769+/* Tests if num bit of bitmap is set */
1770+#define IS_BIT_SET(bitmap, num) \
1771+ (*((bitmap) + ((num) >> 3)) & (1UL << ((num) & 7UL)))
1772+
1773 /** The bitmap file block size in bytes. All writes will be multiples of this.
1774 */
1775 enum {
1776@@ -117,6 +120,7 @@
1777 enum { MODIFIED_PAGE_BLOCK_BITMAP_LEN
1778 = MODIFIED_PAGE_BLOCK_UNUSED_2 - MODIFIED_PAGE_BLOCK_BITMAP };
1779
1780+
1781 /****************************************************************//**
1782 Provide a comparisson function for the RB-tree tree (space,
1783 block_start_page) pairs. Actual implementation does not matter as
1784@@ -922,3 +926,158 @@
1785 log_bmp_sys->start_lsn = log_bmp_sys->end_lsn;
1786 log_set_tracked_lsn(log_bmp_sys->start_lsn);
1787 }
1788+
1789+/*********************************************************************//**
1790+Initializes log bitmap iterator.
1791+@return TRUE if the iterator is initialized OK, FALSE otherwise. */
1792+UNIV_INTERN
1793+ibool
1794+log_online_bitmap_iterator_init(
1795+/*============================*/
1796+ log_bitmap_iterator_t *i) /*!<in/out: iterator */
1797+{
1798+ ibool success;
1799+
1800+ ut_a(i);
1801+ ut_snprintf(i->in_name, FN_REFLEN, "%s%s%d", srv_data_home,
1802+ modified_page_stem, 1);
1803+ i->in_offset = 0;
1804+ /*
1805+ Set up bit offset out of the reasonable limit
1806+ to intiate reading block from file in
1807+ log_online_bitmap_iterator_next()
1808+ */
1809+ i->bit_offset = MODIFIED_PAGE_BLOCK_BITMAP_LEN;
1810+ i->in =
1811+ os_file_create_simple_no_error_handling(
1812+ i->in_name,
1813+ OS_FILE_OPEN,
1814+ OS_FILE_READ_ONLY,
1815+ &success);
1816+
1817+ if (!success) {
1818+ /* The following call prints an error message */
1819+ os_file_get_last_error(TRUE);
1820+ fprintf(stderr,
1821+ "InnoDB: Error: Cannot open \'%s\'\n",
1822+ i->in_name);
1823+ return FALSE;
1824+ }
1825+
1826+ i->page = ut_malloc(MODIFIED_PAGE_BLOCK_SIZE);
1827+
1828+ i->start_lsn = i->end_lsn = 0;
1829+ i->space_id = 0;
1830+ i->first_page_id = 0;
1831+ i->changed = FALSE;
1832+
1833+ return TRUE;
1834+}
1835+
1836+/*********************************************************************//**
1837+Releases log bitmap iterator. */
1838+UNIV_INTERN
1839+void
1840+log_online_bitmap_iterator_release(
1841+/*===============================*/
1842+ log_bitmap_iterator_t *i) /*!<in/out: iterator */
1843+{
1844+ ut_a(i);
1845+ os_file_close(i->in);
1846+ ut_free(i->page);
1847+}
1848+
1849+/*********************************************************************//**
1850+Iterates through bits of saved bitmap blocks.
1851+Sequentially reads blocks from bitmap file(s) and interates through
1852+their bits. Ignores blocks with wrong checksum.
1853+@return TRUE if iteration is successful, FALSE if all bits are iterated. */
1854+UNIV_INTERN
1855+ibool
1856+log_online_bitmap_iterator_next(
1857+/*============================*/
1858+ log_bitmap_iterator_t *i) /*!<in/out: iterator */
1859+{
1860+ ulint offset_low;
1861+ ulint offset_high;
1862+ ulint size_low;
1863+ ulint size_high;
1864+ ulint checksum = 0;
1865+ ulint actual_checksum = !checksum;
1866+
1867+ ibool success;
1868+
1869+ ut_a(i);
1870+
1871+ if (i->bit_offset < MODIFIED_PAGE_BLOCK_BITMAP_LEN)
1872+ {
1873+ ++i->bit_offset;
1874+ i->changed =
1875+ IS_BIT_SET(i->page + MODIFIED_PAGE_BLOCK_BITMAP,
1876+ i->bit_offset);
1877+ return TRUE;
1878+ }
1879+
1880+ while (checksum != actual_checksum)
1881+ {
1882+ success = os_file_get_size(i->in,
1883+ &size_low,
1884+ &size_high);
1885+ if (!success) {
1886+ os_file_get_last_error(TRUE);
1887+ fprintf(stderr,
1888+ "InnoDB: Warning: can't get size of "
1889+ "page bitmap file \'%s\'\n",
1890+ i->in_name);
1891+ return FALSE;
1892+ }
1893+
1894+ if (i->in_offset >=
1895+ (ib_uint64_t)(size_low) +
1896+ ((ib_uint64_t)(size_high) << 32))
1897+ return FALSE;
1898+
1899+ offset_high = (ulint)(i->in_offset >> 32);
1900+ offset_low = (ulint)(i->in_offset & 0xFFFFFFFF);
1901+
1902+ success = os_file_read(
1903+ i->in,
1904+ i->page,
1905+ offset_low,
1906+ offset_high,
1907+ MODIFIED_PAGE_BLOCK_SIZE);
1908+
1909+ if (!success) {
1910+ os_file_get_last_error(TRUE);
1911+ fprintf(stderr,
1912+ "InnoDB: Warning: failed reading "
1913+ "changed page bitmap file \'%s\'\n",
1914+ i->in_name);
1915+ return FALSE;
1916+ }
1917+
1918+ checksum = mach_read_from_4(
1919+ i->page + MODIFIED_PAGE_BLOCK_CHECKSUM);
1920+
1921+ actual_checksum = log_online_calc_checksum(i->page);
1922+
1923+ i->in_offset += MODIFIED_PAGE_BLOCK_SIZE;
1924+ }
1925+
1926+ i->start_lsn =
1927+ mach_read_ull(i->page + MODIFIED_PAGE_START_LSN);
1928+ i->end_lsn =
1929+ mach_read_ull(i->page + MODIFIED_PAGE_END_LSN);
1930+ i->space_id =
1931+ mach_read_from_4(i->page + MODIFIED_PAGE_SPACE_ID);
1932+ i->first_page_id =
1933+ mach_read_from_4(i->page + MODIFIED_PAGE_1ST_PAGE_ID);
1934+ i->bit_offset =
1935+ 0;
1936+ i->changed =
1937+ IS_BIT_SET(i->page + MODIFIED_PAGE_BLOCK_BITMAP,
1938+ i->bit_offset);
1939+
1940+ return TRUE;
1941+}
1942+
1943
1944=== modified file 'Percona-Server/storage/innodb_plugin/row/row0mysql.c'
1945--- Percona-Server/storage/innodb_plugin/row/row0mysql.c 2012-05-09 04:14:12 +0000
1946+++ Percona-Server/storage/innodb_plugin/row/row0mysql.c 2012-08-15 14:13:58 +0000
1947@@ -3635,7 +3635,7 @@
1948 btr_pcur_store_position(&pcur, &mtr);
1949 btr_pcur_commit_specify_mtr(&pcur, &mtr);
1950
1951- table = dict_load_table(table_name);
1952+ table = dict_table_get_low(table_name);
1953
1954 if (table) {
1955 row_drop_table_for_mysql(table_name, trx, FALSE);
1956
1957=== modified file 'Percona-Server/storage/innodb_plugin/srv/srv0srv.c'
1958--- Percona-Server/storage/innodb_plugin/srv/srv0srv.c 2012-06-14 09:16:03 +0000
1959+++ Percona-Server/storage/innodb_plugin/srv/srv0srv.c 2012-08-15 14:13:58 +0000
1960@@ -164,6 +164,8 @@
1961
1962 UNIV_INTERN my_bool srv_track_changed_pages = TRUE;
1963
1964+UNIV_INTERN ulonglong srv_changed_pages_limit = 0;
1965+
1966 /* if TRUE, then we auto-extend the last data file */
1967 UNIV_INTERN ibool srv_auto_extend_last_data_file = FALSE;
1968 /* if != 0, this tells the max size auto-extending may increase the
1969
1970=== modified file 'build/debian/control'
1971--- build/debian/control 2012-02-11 11:58:50 +0000
1972+++ build/debian/control 2012-08-15 14:13:58 +0000
1973@@ -3,7 +3,7 @@
1974 Priority: optional
1975 Maintainer: Percona Server Development Team <mysql-dev@percona.com>
1976 Uploaders: Ignacio Nin <ignacio.nin@percona.com>
1977-Build-Depends: libtool (>= 1.4.2-7), procps | hurd, debhelper (>= 4.1.16), file (>= 3.28-1), libncurses5-dev (>= 5.0-6), perl (>= 5.6.0), libwrap0-dev (>= 7.6-8.3), zlib1g-dev (>= 1:1.1.3-5), psmisc, po-debconf, chrpath, automake (>= 1.9), doxygen, gs, dpatch, gawk, bison, lsb-release, fakeroot
1978+Build-Depends: libtool (>= 1.4.2-7), procps | hurd, debhelper (>= 4.1.16), file (>= 3.28-1), libncurses5-dev (>= 5.0-6), perl (>= 5.6.0), libwrap0-dev (>= 7.6-8.3), zlib1g-dev (>= 1:1.1.3-5), psmisc, po-debconf, chrpath, automake (>= 1.9), doxygen, dpatch, gawk, bison, lsb-release, fakeroot
1979 Standards-Version: 3.8.0
1980 Homepage: http://www.percona.com/software/
1981 Vcs-Bzr: lp:percona-server/5.1
1982
1983=== modified file 'build/debian/rules'
1984--- build/debian/rules 2012-02-10 11:58:26 +0000
1985+++ build/debian/rules 2012-08-15 14:13:58 +0000
1986@@ -9,7 +9,7 @@
1987 TMP=$(CURDIR)/debian/tmp/
1988
1989 major_version_default=13
1990-minor_version_default=2
1991+minor_version_default=4
1992
1993 ARCH = $(shell dpkg-architecture -qDEB_BUILD_ARCH)
1994 ARCH_OS = $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS)
1995
1996=== modified file 'build/percona-server.spec'
1997--- build/percona-server.spec 2012-04-24 16:53:04 +0000
1998+++ build/percona-server.spec 2012-08-15 14:13:58 +0000
1999@@ -14,9 +14,9 @@
2000 %define mysql_vendor Percona, Inc
2001 %define redhatversion %(lsb_release -rs | awk -F. '{ print $1}')
2002 %define community 1
2003-%define mysqlversion 5.1.62
2004+%define mysqlversion 5.1.63
2005 %define majorversion 13
2006-%define minorversion 3
2007+%define minorversion 4
2008 %define distribution rhel%{redhatversion}
2009 %define release rel%{majorversion}.%{minorversion}.%{gotrevision}.%{distribution}
2010
2011
2012=== modified file 'build/percona-shared-compat.spec'
2013--- build/percona-shared-compat.spec 2012-04-24 16:53:04 +0000
2014+++ build/percona-shared-compat.spec 2012-08-15 14:13:58 +0000
2015@@ -29,7 +29,7 @@
2016 # Change this to match the version of the shared libs you want to include
2017 #
2018 %define version55 5.5.8
2019-%define version51 5.1.62
2020+%define version51 5.1.63
2021 %define version50 5.0.91
2022 %define version41 4.1.22
2023 %define version40 4.0.27
2024
2025=== modified file 'doc/Makefile'
2026--- doc/Makefile 2011-09-20 06:59:03 +0000
2027+++ doc/Makefile 2012-08-15 14:13:58 +0000
2028@@ -37,6 +37,14 @@
2029 -rm -rf $(BUILDDIR)/*
2030
2031 html:
2032+ @echo "Downloading percona-theme ..."
2033+ @wget -O percona-theme.tar.gz http://percona.com/docs/theme/percona-server/5.1
2034+ @echo "Extracting theme."
2035+ @tar -zxf percona-theme.tar.gz
2036+ @rm -rf source/percona-theme
2037+ @mv percona-theme source/percona-theme
2038+ @rm percona-theme.tar.gz
2039+ @echo "Building html doc"
2040 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
2041 @echo
2042 @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
2043@@ -46,6 +54,11 @@
2044 @echo
2045 @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
2046
2047+offhtml:
2048+ $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
2049+ @echo
2050+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
2051+
2052 singlehtml:
2053 $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
2054 @echo
2055
2056=== modified file 'doc/source/conf.py'
2057--- doc/source/conf.py 2012-04-24 12:35:07 +0000
2058+++ doc/source/conf.py 2012-08-15 14:13:58 +0000
2059@@ -52,9 +52,9 @@
2060 # built documents.
2061 #
2062 # The short X.Y version.
2063-version = '5.1.62'
2064+version = '5.1.63'
2065 # The full version, including alpha/beta/rc tags.
2066-release = '5.1.62-13.3'
2067+release = '5.1.63-13.4'
2068
2069 # The language for content autogenerated by Sphinx. Refer to documentation
2070 # for a list of supported languages.
2071@@ -224,7 +224,7 @@
2072 # Grouping the document tree into LaTeX files. List of tuples
2073 # (source start file, target name, title, author, documentclass [howto/manual]).
2074 latex_documents = [
2075- ('index', 'PerconaServer.tex', u'Percona Server Documentation',
2076+ ('index', 'PerconaServer-5.1.tex', u'Percona Server Documentation',
2077 u'Percona Inc', 'manual'),
2078 ]
2079
2080
2081=== modified file 'doc/source/diagnostics/innodb_stats.rst'
2082--- doc/source/diagnostics/innodb_stats.rst 2012-01-31 13:43:08 +0000
2083+++ doc/source/diagnostics/innodb_stats.rst 2012-08-15 14:13:58 +0000
2084@@ -54,13 +54,12 @@
2085
2086 .. variable:: innodb_use_sys_stats_table
2087
2088+ :version: 5.1.49-11.3 Variable introduced
2089 :type: BOOLEAN
2090 :default: 0
2091
2092
2093-If this option is enabled, |XtraDB| uses the ``SYS_STATS`` system table to store statistics of table indexes. Also, when |InnoDB| opens a table for the first time, it loads the statistics from ``SYS_STATS`` instead of sampling index pages. If you use a high ``stats_sample_pages`` value, the first open of a table is expensive. In such a case, this option will help. Note: This option may cause less frequent updating of statistics. So, you should intentionally use the ``ANALYZE TABLE`` command more often.
2094-
2095-(This variable was introduced in release 5.1.49-rel11.3)
2096+If this option is enabled, |XtraDB| uses the ``SYS_STATS`` system table to store statistics of table indexes. Also, when |InnoDB| opens a table for the first time, it loads the statistics from ``SYS_STATS`` instead of sampling index pages. If you use a high ``stats_sample_pages`` value, the first open of a table is expensive. In such a case, this option will help. Intended behavior is to never update statistics unless an explicit ``ANALYZE TABLE`` is issued.
2097
2098
2099 INFORMATION_SCHEMA Tables
2100
2101=== modified file 'doc/source/diagnostics/misc_info_schema_tables.rst'
2102--- doc/source/diagnostics/misc_info_schema_tables.rst 2012-04-02 07:06:54 +0000
2103+++ doc/source/diagnostics/misc_info_schema_tables.rst 2012-08-15 14:13:58 +0000
2104@@ -98,7 +98,7 @@
2105 Temporary tables
2106 ================
2107
2108- Only temporary tables that were explicitly created with `CREATE TEMPORARY TABLE` or `ALTER TABLE` are shown, and not the ones created during query execution.
2109+ Only temporary tables that were explicitly created with `CREATE TEMPORARY TABLE` are shown, and not the ones created during query execution. The temporary tables that are created for `ALTER TABLE` execution are not listed in `INFORMATION_SCHEMA.TEMPORARY_TABLES` or `GLOBAL_TEMPORARY_TABLES` tables.
2110
2111 .. table:: INFORMATION_SCHEMA.GLOBAL_TEMPORARY_TABLES
2112
2113
2114=== modified file 'doc/source/diagnostics/mysql_syslog.rst'
2115--- doc/source/diagnostics/mysql_syslog.rst 2011-10-07 00:55:06 +0000
2116+++ doc/source/diagnostics/mysql_syslog.rst 2012-08-15 14:13:58 +0000
2117@@ -4,7 +4,7 @@
2118 Log All Client Commands (``syslog``)
2119 ======================================
2120
2121-When enabled, this feature causes all commands run on the client to be logged to ``syslog``.
2122+When enabled, this feature causes all commands run by the command line client to be logged to ``syslog``. If you want to enable this option permanently, add it to the [mysql] group in my.cnf.
2123
2124
2125 Version Specific Information
2126
2127=== modified file 'doc/source/diagnostics/slow_extended.rst'
2128--- doc/source/diagnostics/slow_extended.rst 2011-10-07 00:55:06 +0000
2129+++ doc/source/diagnostics/slow_extended.rst 2012-08-15 14:13:58 +0000
2130@@ -179,10 +179,10 @@
2131 Specifies the time threshold for filtering queries out of the slow query log. The unit of time is seconds. This option has the same meaning as in a standard |MySQL| server, with the following changes:
2132
2133 The option accepts fractional values. If set to 0.5, for example, queries longer than 1/2 second will be logged.
2134-
2135-If the value is set to 0, then all queries are logged. This is different from the standard |MySQL| build, where a value of 0 disables logging.
2136 Before version 1.01 of this feature, the value was an integer, and the unit of time was microseconds, not seconds.
2137
2138+If the value is set to 0, then all queries are logged. This is different from the standard |MySQL| build, prior to version 5.1.21, where a value of 0 disables logging. After |MySQL| 5.1.21 this has been changed to minimum value and you can disable/enable slow query log with ``slow_query_log`` variable.
2139+
2140 .. variable:: profiling_server
2141
2142 :cli: Yes
2143
2144=== modified file 'doc/source/flexibility/buff_read_ahead_area.rst'
2145--- doc/source/flexibility/buff_read_ahead_area.rst 2011-10-07 00:55:06 +0000
2146+++ doc/source/flexibility/buff_read_ahead_area.rst 2012-08-15 14:13:58 +0000
2147@@ -33,4 +33,4 @@
2148 Other Reading
2149 =============
2150
2151- * `BUF_READ_AHEAD_AREA Bottleneck <http://www.facebook.com/notes/|MySQL|facebook/using-pmp-to-double-|MySQL|-throughput-part-2/405092575932>`_
2152+ * `BUF_READ_AHEAD_AREA Bottleneck <http://www.facebook.com/notes/MySQLfacebook/using-pmp-to-double-MySQL-throughput-part-2/405092575932>`_
2153
2154=== modified file 'doc/source/flexibility/mysqlbinlog_change_db.rst'
2155--- doc/source/flexibility/mysqlbinlog_change_db.rst 2012-04-24 12:35:07 +0000
2156+++ doc/source/flexibility/mysqlbinlog_change_db.rst 2012-08-15 14:13:58 +0000
2157@@ -7,15 +7,61 @@
2158 Sometimes there is a need to take a binary log and apply it to a database with
2159 a different name than the original name of the database on binlog producer.
2160
2161-If one is using statement-based replication, he can achieve this by grepping
2162-out "USE dbname" statements out of the output of mysqlbinlog(*). With
2163-row-based replication this is no longer possible, as database name is encoded
2164-within the the BINLOG '....' statement.
2165-
2166-This task is about adding an option to mysqlbinlog that would allow to change
2167-the names of used databases in both RBR and SBR events.
2168-
2169-Varible :variable:`rewrite-db` of **mysqlbinlog** utility allows to setup rewriting rule "from->"to".
2170+New variable rewrite-db has been added to the mysqlbinlog utility that allows the changing names of the used databases in both Row-Based and Statement-Based replication. This was possible before by using tools like grep, awk and sed but only for SBR, because with RBR database name is encoded within the BINLOG ‘....’ statement.
2171+
2172+Variable :variable:`rewrite-db` of **mysqlbinlog** utility allows to setup rewriting rule "from->"to".
2173+
2174+Example
2175+=======
2176+
2177+**mysqlbinlog** output before rewrite-db ::
2178+
2179+ $ mysqlbinlog mysql-bin.000005
2180+ ...
2181+ # at 175
2182+ #120517 13:10:00 server id 2 end_log_pos 203 Intvar
2183+ SET INSERT_ID=4083/*!*/;
2184+ # at 203
2185+ #120517 13:10:00 server id 2 end_log_pos 367 Query thread_id=88 exec_time=0 error_code=0
2186+ use world/*!*/;
2187+ SET TIMESTAMP=1337253000/*!*/;
2188+ insert into City (Name, CountryCode, District, Population) values ("New City", "ZMB", "TEX", 111000)
2189+ /*!*/;
2190+ # at 367
2191+ #120517 13:10:00 server id 2 end_log_pos 394 Xid = 1414
2192+ COMMIT/*!*/;
2193+ DELIMITER ;
2194+
2195+**mysqlbinlog** output when the new variable is used: ::
2196+
2197+ $ mysqlbinlog --rewrite-db='world->new_world' mysql-bin.000005
2198+ ...
2199+ # at 106
2200+ use new_world/*!*/;
2201+ #120517 13:10:00 server id 2 end_log_pos 175 Query thread_id=88 exec_time=0 error_code=0
2202+ SET TIMESTAMP=1337253000/*!*/;
2203+ SET @@session.pseudo_thread_id=88/*!*/;
2204+ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
2205+ SET @@session.sql_mode=0/*!*/;
2206+ SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
2207+ /*!\C latin1 *//*!*/;
2208+ SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
2209+ SET @@session.lc_time_names=0/*!*/;
2210+ SET @@session.collation_database=DEFAULT/*!*/;
2211+ BEGIN
2212+ /*!*/;
2213+ # at 175
2214+ #120517 13:10:00 server id 2 end_log_pos 203 Intvar
2215+ SET INSERT_ID=4083/*!*/;
2216+ # at 203
2217+ #120517 13:10:00 server id 2 end_log_pos 367 Query thread_id=88 exec_time=0 error_code=0
2218+ SET TIMESTAMP=1337253000/*!*/;
2219+ insert into City (Name, CountryCode, District, Population) values ("New City", "ZMB", "TEX", 111000)
2220+ /*!*/;
2221+ # at 367
2222+ #120517 13:10:00 server id 2 end_log_pos 394 Xid = 1414
2223+ COMMIT/*!*/;
2224+
2225
2226 Version Specific Information
2227 ============================
2228
2229=== modified file 'doc/source/installation/apt_repo.rst'
2230--- doc/source/installation/apt_repo.rst 2012-05-08 06:48:26 +0000
2231+++ doc/source/installation/apt_repo.rst 2012-08-15 14:13:58 +0000
2232@@ -33,15 +33,14 @@
2233 Debian
2234 ------
2235
2236- * 5.0 (lenny)
2237 * 6.0 (squeeze)
2238
2239 Ubuntu
2240 ------
2241
2242 * 10.04LTS (lucid)
2243- * 11.04 (natty)
2244 * 11.10 (oneiric)
2245+ * 12.04LTS (precise)
2246
2247
2248 Release Candidate Repository
2249@@ -51,3 +50,15 @@
2250
2251 deb http://repo.percona.com/apt-rc VERSION main
2252 deb-src http://repo.percona.com/apt-rc VERSION main
2253+
2254+
2255+Apt-Pinning the packages
2256+========================
2257+
2258+In some cases you might need to "pin" the selected packages to avoid the upgrades from the distribution repositories. You'll need to make a new file :file:`/etc/apt/preferences.d/00percona.pref` and add the following lines in it: ::
2259+
2260+ Package: *
2261+ Pin: release o=Percona Development Team
2262+ Pin-Priority: 1001
2263+
2264+For more information about the pinning you can check the official `debian wiki <http://wiki.debian.org/AptPreferences>`_.
2265
2266=== modified file 'doc/source/management/innodb_expand_import.rst'
2267--- doc/source/management/innodb_expand_import.rst 2011-10-07 00:55:06 +0000
2268+++ doc/source/management/innodb_expand_import.rst 2012-08-15 14:13:58 +0000
2269@@ -10,6 +10,9 @@
2270
2271 The normal version can import only the backed-up .ibd file at the same place.
2272
2273+.. note::
2274+
2275+ This feature is unsupported with InnoDB data files created with MySQL 5.0 and MySQL 5.1 prior to version 5.1.7 due to InnoDB file format limitation. It may work in some cases, but may result in crashes on import as well, see bug :bug:`1000221` and bug :bug:`727704` for examples and details.
2276
2277 Example
2278 =======
2279@@ -128,7 +131,7 @@
2280 .. lock all tables in the database ``example``
2281 .. "ALTER TABLE ... DISCARD TABLESPACE" for all tables in ``exmple``
2282 .. unlock all tables in the database ``example``
2283-.. (and we need to get all create table clause (e.g. "|MySQL|dump --no-data"))
2284+.. (and we need to get all create table clause (e.g. "mysqldump --no-data"))
2285 .. obtain *.ibd *.exp as exported files
2286 .. Target: (innodb_expand_import should be 1)
2287
2288
2289=== modified file 'doc/source/management/innodb_fast_index_creation.rst'
2290--- doc/source/management/innodb_fast_index_creation.rst 2011-10-07 00:55:06 +0000
2291+++ doc/source/management/innodb_fast_index_creation.rst 2012-08-15 14:13:58 +0000
2292@@ -4,7 +4,7 @@
2293 Fast Index Creation
2294 =====================
2295
2296-Percona has implemented several changes related to |MySQL| 's fast index creation feature. This feature extends the ``ALTER TABLE`` command by adding a new clause that provides online index renaming capability, that is renaming indexes without rebuilding the whole table.
2297+Percona has implemented several changes related to |MySQL|'s fast index creation feature. Extended features, besides disabling :variable:`fast_index_creation`, can be enabled with :variable:`expand_fast_index_creation`.
2298
2299 Disabling Fast Index Creation
2300 =============================
2301@@ -14,27 +14,6 @@
2302 This feature implements a session variable that disables fast index creation. This causes indexes to be created in the way they were created before fast index creation was implemented. While this is slower, it avoids the problem of data dictionary inconsistency between |MySQL| and |InnoDB|.
2303
2304
2305-:command:`mysqldump`
2306---------------------
2307-
2308-A new option, ``--innodb-optimize-keys``, was implemented in :command:`mysqldump`. It changes the way |InnoDB| tables are dumped, so that secondary and foreign keys are created after loading the data, thus taking advantage of fast index creation. More specifically:
2309-
2310- * ``KEY``, ``UNIQUE KEY``, and ``CONSTRAINT`` clauses are omitted from ``CREATE TABLE`` statements corresponding to |InnoDB| tables.
2311-
2312- * An additional ``ALTER TABLE`` is issued after dumping the data, in order to create the previously omitted keys.
2313-
2314-Delaying foreign key creation does not introduce any additional risks, as :command:`mysqldump` always prepends its output with ``SET FOREIGN_KEY_CHECKS=0`` anyway.
2315-
2316-
2317-``ALTER TABLE``
2318----------------
2319-
2320-When ``ALTER TABLE`` requires a table copy, secondary keys are now dropped and recreated later, after copying the data. The following restrictions apply:
2321-
2322- * Only non-unique keys can be involved in this optimization.
2323-
2324- * If the table contains foreign keys, or a foreign key is being added as a part of the current ``ALTER TABLE`` statement, the optimization is disabled for all keys.
2325-
2326 ``OPTIMIZE TABLE``
2327 ------------------
2328
2329
2330=== modified file 'doc/source/management/innodb_lru_dump_restore.rst'
2331--- doc/source/management/innodb_lru_dump_restore.rst 2012-04-21 07:20:03 +0000
2332+++ doc/source/management/innodb_lru_dump_restore.rst 2012-08-15 14:13:58 +0000
2333@@ -135,4 +135,4 @@
2334 Other reading
2335 =============
2336
2337- * `Save / restore buffer pool <http://www.|MySQL|performanceblog.com/2010/01/20/|XtraDB|-feature-save-restore-buffer-pool/>`_
2338+ * `Save / restore buffer pool <http://www.mysqlperformanceblog.com/2010/01/20/XtraDB-feature-save-restore-buffer-pool/>`_
2339
2340=== added directory 'doc/source/percona-theme'
2341=== removed directory 'doc/source/percona-theme'
2342=== added file 'doc/source/percona-theme/layout.html'
2343--- doc/source/percona-theme/layout.html 1970-01-01 00:00:00 +0000
2344+++ doc/source/percona-theme/layout.html 2012-08-15 14:13:58 +0000
2345@@ -0,0 +1,407 @@
2346+{#
2347+ basic/layout.html
2348+ ~~~~~~~~~~~~~~~~~
2349+
2350+ Master layout template for Sphinx themes.
2351+
2352+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
2353+ :license: BSD, see LICENSE for details.
2354+#}
2355+{%- block doctype -%}
2356+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2357+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2358+{%- endblock %}
2359+{%- set reldelim1 = reldelim1 is not defined and ' &raquo;' or reldelim1 %}
2360+{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
2361+{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and
2362+ (sidebars != []) %}
2363+{%- set url_root = pathto('', 1) %}
2364+{# XXX necessary? #}
2365+{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
2366+{%- if not embedded and docstitle %}
2367+ {%- set titlesuffix = " &mdash; "|safe + docstitle|e %}
2368+{%- else %}
2369+ {%- set titlesuffix = "" %}
2370+{%- endif %}
2371+
2372+{%- macro relbar() %}
2373+ <div class="related">
2374+ <h3>{{ _('Navigation') }}</h3>
2375+ <ul>
2376+ {%- for rellink in rellinks %}
2377+ <li class="right" {% if loop.first %}style="margin-right: 10px"{% endif %}>
2378+ <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}"
2379+ {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>
2380+ {%- if not loop.first %}{{ reldelim2 }}{% endif %}</li>
2381+ {%- endfor %}
2382+ {%- block rootrellink %}
2383+ <li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a>{{ reldelim1 }}</li>
2384+ {%- endblock %}
2385+ {%- for parent in parents %}
2386+ <li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a>{{ reldelim1 }}</li>
2387+ {%- endfor %}
2388+ {%- block relbaritems %} {% endblock %}
2389+ </ul>
2390+ </div>
2391+{%- endmacro %}
2392+
2393+{%- macro sidebar() %}
2394+ {%- if render_sidebar %}
2395+ <div class="sphinxsidebar">
2396+ <div class="sphinxsidebarwrapper">
2397+
2398+ <div class="side-column-block"><a href="http://www.percona.com/software/percona-server/"><img alt="Percona Server" src="http://s2.percona.com/logo_percona_server_new.png" /></a></div>
2399+
2400+ <div class="side-column-block">
2401+ <div class="header">Call Us</div>
2402+ <div class="content">
2403+ <div class="numbers">
2404+ <div style="padding-bottom: 4px">
2405+ +1-888-316-9775 (USA - Sales)<br>
2406+ +1-208-473-2904 (USA - Sales)
2407+ </div>
2408+ <div style="padding-bottom: 4px;">
2409+ +44-208-133-0309 (UK - Sales)
2410+ </div>
2411+ <div style="padding-bottom: 4px;">
2412+ +1-877-862-4316 (Emergency)
2413+ </div>
2414+ <div>
2415+ +1-855-55TRAIN (Training)<br>
2416+ +1-925-271-5054 (Training)
2417+ </div>
2418+ </div>
2419+ </div>
2420+ </div>
2421+
2422+ <div class="side-column-block">
2423+ <div class="a-btn-container">
2424+ <a title="Download PDF Manual for Percona Server 5.1" href="http://form.percona.com/PerconaServer51OperationsManual2.html" class="a-btn-new">
2425+ <span class="a-btn-text">Download Manual</span>
2426+ <span class="a-btn-fixed-slide-text">PDF for version 5.1</span>
2427+ <span class="a-btn-icon-right"><span></span></span>
2428+ </a>
2429+ </div></div>
2430+
2431+ <div class="percona_com_ad" style="width:220px;"><script type="text/javascript" src="http://www.percona.com/ads.php?size=220x120"></script></div>
2432+
2433+ {%- if sidebars != None %}
2434+ {#- new style sidebar: explicitly include/exclude templates #}
2435+ {%- for sidebartemplate in sidebars %}
2436+ {%- include sidebartemplate %}
2437+ {%- endfor %}
2438+ {%- else %}
2439+ {#- old style sidebars: using blocks -- should be deprecated #}
2440+ {%- block serverseries %}
2441+ <div class="side-column-block">
2442+ <h3>Percona Server Series</h3>
2443+ <ul><li><a href="http://www.percona.com/doc/percona-server/5.1/">Percona Server 5.1</a></li><li><a href="http://www.percona.com/doc/percona-server/5.5/">Percona Server 5.5</a></li></ul>
2444+ </div>
2445+ {%- endblock %}
2446+ {%- block sidebartoc %}
2447+ {%- include "localtoc.html" %}
2448+ {%- endblock %}
2449+ {%- block sidebarrel %}
2450+ {%- include "relations.html" %}
2451+ {%- endblock %}
2452+ {%- block sidebarsourcelink %}
2453+ {%- include "sourcelink.html" %}
2454+ {%- endblock %}
2455+ {%- if customsidebar %}
2456+ {%- include customsidebar %}
2457+ {%- endif %}
2458+ {%- block sidebarsearch %}
2459+ {%- include "searchbox.html" %}
2460+ {%- endblock %}
2461+ {%- endif %}
2462+<br /><br />
2463+ <div class="side-column-block">
2464+ <ul class="side-contact-buttons">
2465+ <li><a href="http://form.percona.com/ContactMe.html" title="Contact Me" class="contact-me"><span>Contact Me</span></a></li>
2466+ <li><a href="http://www.percona.com/webinars/" title="Attend a Webinar" class="webinar"><span>Attend a Webinar</span></a></li>
2467+ <li><a href="http://www.percona.com/downloads/" title="Download Software" class="download-software"><span>Download Software</span></a></li>
2468+ <li><a href="http://www.percona.com/subscribe/" title="Register For Newsletters" class="newsletters"><span>Register For Newsletters</span></a></li>
2469+ </ul>
2470+ </div>
2471+
2472+ </div>
2473+ </div>
2474+ {%- endif %}
2475+{%- endmacro %}
2476+
2477+{%- macro script() %}
2478+ <script type="text/javascript">
2479+ var DOCUMENTATION_OPTIONS = {
2480+ URL_ROOT: '{{ url_root }}',
2481+ VERSION: '{{ release|e }}',
2482+ COLLAPSE_INDEX: false,
2483+ FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}',
2484+ HAS_SOURCE: {{ has_source|lower }}
2485+ };
2486+ </script>
2487+ {%- for scriptfile in script_files %}
2488+ <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
2489+ {%- endfor %}
2490+{%- endmacro %}
2491+
2492+{%- macro css() %}
2493+ <link rel="stylesheet" href="{{ pathto('_static/percona.com.css', 1) }}" type="text/css" />
2494+ <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
2495+ <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
2496+ {%- for cssfile in css_files %}
2497+ <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
2498+ {%- endfor %}
2499+{%- endmacro %}
2500+
2501+<html xmlns="http://www.w3.org/1999/xhtml">
2502+ <head>
2503+ <meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" />
2504+ {{ metatags }}
2505+ {%- block htmltitle %}
2506+ <title>{{ title|striptags|e }}{{ titlesuffix }}</title>
2507+ {%- endblock %}
2508+
2509+ {{ css() }}
2510+ {%- if not embedded %}
2511+ {{ script() }}
2512+ {%- if use_opensearch %}
2513+ <link rel="search" type="application/opensearchdescription+xml"
2514+ title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
2515+ href="{{ pathto('_static/opensearch.xml', 1) }}"/>
2516+ {%- endif %}
2517+
2518+<script src="{{ pathto('_static/percona.com.js', 1)}}" type="text/javascript"></script>
2519+
2520+ {%- if favicon %}
2521+ <link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
2522+ {%- endif %}
2523+ {%- endif %}
2524+{%- block linktags %}
2525+ {%- if hasdoc('about') %}
2526+ <link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
2527+ {%- endif %}
2528+ {%- if hasdoc('genindex') %}
2529+ <link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
2530+ {%- endif %}
2531+ {%- if hasdoc('search') %}
2532+ <link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
2533+ {%- endif %}
2534+ {%- if hasdoc('copyright') %}
2535+ <link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
2536+ {%- endif %}
2537+ <link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
2538+ {%- if parents %}
2539+ <link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}" />
2540+ {%- endif %}
2541+ {%- if next %}
2542+ <link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
2543+ {%- endif %}
2544+ {%- if prev %}
2545+ <link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
2546+ {%- endif %}
2547+{%- endblock %}
2548+{%- block extrahead %} {% endblock %}
2549+ </head>
2550+ <body>
2551+
2552+{%- block header %}
2553+
2554+ <!-- <div id="stickywrapper"> -->
2555+ <!-- <div id="stickycontent"> -->
2556+ <div id="header"><div class="header">
2557+ <div class="logo"><a href="http://www.percona.com/" onfocus="this.blur()"><img src="http://s3.percona.com/ui-logo.png" alt="Percona Performance Consulting Experts" width="240" height="55" /></a></div>
2558+ <div class="right">
2559+ <div class="searchlink"><a onmouseover="SEARCH.Open()"><img id="searchlink-anchor" src="http://s2.percona.com/ui-search.png" alt="" /></a></div>
2560+ <span class="inv"><![CDATA[<noindex>]]></span>
2561+ <div class="navicontainer"><div class="navi">
2562+ <span id="navilink-span-about-us" ><a id="navilink-a-about-us" href="/about-us/">About Us</a></span><span id="navilink-span-mysql-consulting" ><a id="navilink-a-mysql-consulting" href="/mysql-consulting/">Consulting</a></span><span id="navilink-span-support" ><a id="navilink-a-support" href="/mysql-support/">Support</a></span><span id="navilink-span-training" ><a id="navilink-a-training" href="/training/">Training</a></span><span id="navilink-span-development" ><a id="navilink-a-development" href="/development/">Development</a></span><span id="navilink-span-software" ><a id="navilink-a-software" href="/software/">Software</a></span><span id="navilink-span-events" ><a id="navilink-a-events" href="/live/">Events</a></span><span id="navilink-span-contact" ><a id="navilink-a-contact" href="/contact/">Contact Us</a></span>
2563+ </div></div>
2564+
2565+ <span class="inv"><![CDATA[</noindex>]]></span>
2566+ <span class="inv"><![CDATA[</noindex>]]></span>
2567+ </div>
2568+ </div></div>
2569+ <div id="stripe"></div>
2570+
2571+{% endblock %}
2572+
2573+ <!-- <div id="stripe"></div> -->
2574+
2575+{%- block content %}
2576+
2577+
2578+
2579+ {%- block sidebar1 %} {# possible location for sidebar #} {% endblock %}
2580+
2581+ <div class="document">
2582+
2583+
2584+
2585+ {%- block document %}
2586+ <div class="documentwrapper">
2587+ {%- if render_sidebar %}
2588+ <div class="bodywrapper">
2589+ {%- endif %}
2590+
2591+ {%- block relbar1 %}{{ relbar() }}{% endblock %}
2592+
2593+ <div class="body">
2594+ {% block body %} {% endblock %}
2595+ </div>
2596+
2597+ {%- block relbar2 %}{{ relbar() }}
2598+
2599+ {%- if render_sidebar %}
2600+ <div class="percona_com_ad" style="margin:auto;width:630px;"><script type="text/javascript" src="http://www.percona.com/ads.php?size=630x80"></script></div>
2601+ </div>
2602+ {%- endif %}
2603+
2604+
2605+
2606+ </div>
2607+
2608+ {%- endblock %}
2609+
2610+ {%- block sidebar2 %}{{ sidebar() }}{% endblock %}
2611+
2612+ <div class="clearer"></div>
2613+
2614+ {%- if last_updated %}
2615+ {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
2616+ {%- endif %}
2617+
2618+
2619+
2620+
2621+ <div class="license">
2622+
2623+ {%- if show_copyright %}
2624+ {%- if hasdoc('copyright') %}
2625+ {% trans path=pathto('copyright'), copyright=copyright|e %}&copy; <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
2626+ {%- else %}
2627+ {% trans copyright=copyright|e %}&copy; Copyright {{ copyright }}.{% endtrans %}
2628+ {%- endif %}
2629+ {%- endif %}
2630+
2631+ <br />
2632+ Except where otherwise noted, this documentation is licensed under the following license:
2633+ <br />
2634+ <a class="urlextern" rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/">
2635+ CC Attribution-ShareAlike 2.0 Generic</a><br />
2636+
2637+ {%- if show_sphinx %}
2638+ {% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
2639+ {%- endif %}
2640+
2641+ </div>
2642+
2643+ </div>
2644+ {%- endblock %}
2645+
2646+ {% endblock %}
2647+
2648+{%- block footer %}
2649+
2650+ <div class="file-bugs">
2651+ This documentation is developed in Launchpad as part of the <a href="https://code.launchpad.net/percona-server">Percona Server source code</a>.<br/>
2652+ If you spotted innacuracies, errors, don't understood it or you think something is missing or should be improved, please <a href="https://bugs.launchpad.net/percona-server/+filebug?field.tags=doc&amp;field.comment=[In:Percona Server Documentation]&amp;?field.tags=doc&amp;field.title=[DOC] ">file a bug</a>.
2653+
2654+ </div>
2655+
2656+ <div id="footer">
2657+
2658+ <div class="footer">
2659+ <div class="logo"><img width="110" height="25" alt="" src="{{ pathto('_static/ui-footer-logo.png', 1) }}">
2660+ </div>
2661+
2662+ <div class="text">
2663+ <span class="inv"><!--[CDATA[<noindex-->]]&gt;</span>
2664+ Call us: 1-888-316-9775 • <a href="/contact">Contact Us</a><br>
2665+ MySQL and InnoDB are trademarks of Oracle Corp.<br>
2666+ Proudly running <a href="/software/percona-server/">Percona Server<span id="recentServerVersion"></span></a><br>
2667+ Copyright &copy; 2006-2011 Percona Inc.<br>
2668+ <a href="/about-us/policies/">Copyright, Trademark, and Privacy Policy</a> • <a href="/sitemap/">Sitemap</a>
2669+ <span class="inv"><!--[CDATA[</noindex-->]]&gt;</span>
2670+ </div>
2671+ </div>
2672+
2673+ </div>
2674+{%- endblock %}
2675+<span class="inv"><!--[CDATA[<noindex-->]]&gt;</span>
2676+<div id="submenus">
2677+ <div class="navi-dropdown" id="navi-dropdown-about-us">
2678+ <div class="navi-dropdown-header-l"><!-- //--></div>
2679+ <div class="navi-dropdown-content"><div class="item"><a href="/about-us/our-mission/">Our Mission</a></div><div class="item"><a href="/about-us/why-percona/">Why Percona?</a></div><div class="item"><a href="/about-us/procedures/">Coordinating with Percona</a></div><div class="item"><a href="/about-us/customers/">Customers</a></div><div class="item"><a href="/webinars/">Webinars</a></div><div class="item"><a href="/about-us/mysql-case-studies/">MySQL Case Studies</a></div><div class="item"><a href="/about-us/our-team/">Our Team</a></div><div class="item"><a href="/about-us/books/">Our Books</a></div><div class="item"><a href="/about-us/blogs/">Our Blogs</a></div><div class="item"><a href="/about-us/mysql-white-papers/">MySQL White Papers</a></div><div class="item"><a href="/about-us/conferences/">Conferences</a></div><div class="item"><a href="/about-us/presentations/">Presentations</a></div><div class="item"><a href="/about-us/newsletters/">Newsletters</a></div><div class="item"><a href="/about-us/pressreleases/">Press Releases</a></div><div class="item"><a href="/about-us/careers/">Careers</a></div> </div>
2680+ <div class="navi-dropdown-footer"><!-- //--></div>
2681+ </div><div class="navi-dropdown" id="navi-dropdown-mysql-consulting">
2682+ <div class="navi-dropdown-header-l"><!-- //--></div>
2683+ <div class="navi-dropdown-content"><div class="item"><a href="/mysql-consulting/overview/">MySQL Consulting Overview</a></div><div class="item"><a href="/mysql-consulting/prices/">MySQL Consulting Prices</a></div><div class="item"><a href="/mysql-consulting/architecture/">MySQL Architecture &amp; Design</a></div><div class="item"><a href="/mysql-consulting/mysql-backups/">MySQL Backups</a></div><div class="item"><a href="/mysql-consulting/cloud-computing/">MySQL Cloud Solutions</a></div><div class="item"><a href="/mysql-consulting/cluster/">MySQL Cluster Consulting</a></div><div class="item"><a href="/mysql-consulting/data-warehousing/">MySQL Data Warehousing</a></div><div class="item"><a href="/mysql-consulting/data-recovery/">MySQL Data Recovery</a></div><div class="item"><a href="/mysql-consulting/high-availability/">MySQL High Availability</a></div><div class="item"><a href="/mysql-consulting/mysql-monitoring-graphing/">MySQL Monitoring &amp; Graphing</a></div><div class="item"><a href="/mysql-consulting/mysql-onsite-consulting/">MySQL Onsite Consulting</a></div><div class="item"><a href="/mysql-consulting/performance-audit/">MySQL Performance Audit</a></div><div class="item"><a href="/mysql-consulting/remote-dba/">MySQL Remote DBA</a></div><div class="item"><a href="/mysql-consulting/mysql-replication/">MySQL Replication</a></div><div class="item"><a href="/mysql-consulting/upgrade/">MySQL Version Upgrades</a></div><div class="item"><a href="/mysql-consulting/24x7-emergency/">Emergency 24&times;7 Consulting</a></div><div class="item"><a href="/mysql-consulting/migration/">Migration to MySQL</a></div><div class="item"><a href="/drizzle-consulting/">Drizzle Consulting</a></div><div class="item"><a href="/mysql-consulting/sphinx/">Sphinx Consulting</a></div><div class="item"><a href="/mysql-consulting/drbd/">DRBD Consulting</a></div><div class="item"><a href="/mysql-consulting/memcached/">Memcached Consulting</a></div><div class="item"><a href="/mysql-consulting/other-services/">Other Consulting Services</a></div> </div>
2684+ <div class="navi-dropdown-footer"><!-- //--></div>
2685+ </div><div class="navi-dropdown" id="navi-dropdown-support">
2686+ <div class="navi-dropdown-header-l"><!-- //--></div>
2687+ <div class="navi-dropdown-content"><div class="item"><a href="/mysql-support/">MySQL Support Overview</a></div><div class="item"><a href="/prices/mysql-support/">MySQL Support Prices</a></div><div class="item"><a href="/mysql-support/policies/">MySQL Support Policies</a></div><div class="item"><a href="/mysql-support/consulting-vs-support/">Consulting vs. Support</a></div><div class="item"><a href="https://customers.percona.com">Customer Portal Login</a></div> </div>
2688+ <div class="navi-dropdown-footer"><!-- //--></div>
2689+ </div><div class="navi-dropdown" id="navi-dropdown-training">
2690+ <div class="navi-dropdown-header-l"><!-- //--></div>
2691+ <div class="navi-dropdown-content"><div class="item"><a href="/training/">MySQL Training Overview</a></div><div class="item"><a href="/prices/training/">MySQL Training Prices</a></div><div class="item"><a href="/training/classes/dba/">MySQL DBA Training</a></div><div class="item"><a href="/training/classes/developers/">MySQL Developer Training</a></div><div class="item"><a href="/training/classes/operations/">MySQL Operations Training</a></div><div class="item"><a href="/training/classes/innodb/">InnoDB &amp; XtraDB Training</a></div><div class="item"><a href="/training/classes/custom-onsite/">Custom Onsite Training</a></div> </div>
2692+ <div class="navi-dropdown-footer"><!-- //--></div>
2693+ </div><div class="navi-dropdown" id="navi-dropdown-development">
2694+ <div class="navi-dropdown-header-l"><!-- //--></div>
2695+ <div class="navi-dropdown-content"><div class="item"><a href="/development/mysql/">MySQL Development Overview</a></div><div class="item"><a href="/development/prices/">Custom Development Prices</a></div><div class="item"><a href="/development/maintenance/">MySQL Support Overview</a></div><div class="item"><a href="/development/benchmarking/">Custom Product Evaluation</a></div><div class="item"><a href="/development/maatkit/">Custom Maatkit Development</a></div><div class="item"><a href="/development/custom-tools/">Custom Tools Development</a></div> </div>
2696+ <div class="navi-dropdown-footer"><!-- //--></div>
2697+ </div><div class="navi-dropdown" id="navi-dropdown-software">
2698+ <div class="navi-dropdown-header-l"><!-- //--></div>
2699+ <div class="navi-dropdown-content"><div class="item"><a href="/software/">Percona Software for MySQL</a></div><div class="item"><a href="/software/percona-server/">Percona Server with XtraDB</a></div><div class="item"><a href="/software/percona-xtradb-cluster/">Percona XtraDB Cluster</a></div><div class="item"><a href="/software/percona-xtrabackup/">Percona XtraBackup</a></div><div class="item"><a href="/software/mysql-innodb-data-recovery-tools/">Data Recovery Toolkit</a></div><div class="item"><a href="/software/percona-xtradb/">Percona XtraDB</a></div><div class="item"><a href="/software/percona-toolkit/">Percona Toolkit</a></div><div class="item"><a href="/software/percona-monitoring-plugins/">Percona Monitoring Plugins</a></div><div class="item"><a href="/prices/software/">Software Prices</a></div><div class="item"><a href="/downloads/">Downloads</a></div><div class="item"><a href="/software/repositories/">Repositories</a></div><div class="item"><a href="/software/documentation/">Documentation</a></div><div class="item"><a href="http://forum.percona.com">Forum</a></div><div class="item"><a href="http://groups.google.com/group/percona-discussion">Google Discussion</a></div><div class="item"><a href="https://launchpad.net/percona-server">Launchpad</a></div> </div>
2700+ <div class="navi-dropdown-footer"><!-- //--></div>
2701+ </div><div class="navi-dropdown" id="navi-dropdown-events">
2702+ <div class="navi-dropdown-header-r"><!-- //--></div>
2703+ <div class="navi-dropdown-content"><div class="item"><a href="/live/nyc-2012/">New York 2012</a></div><div class="item"><a href="/live/london-2012/">London 2012</a></div><div class="item"><a href="/live/mysql-conference-2013/">MySQL Conference &amp; Expo 2013</a></div><div class="item"><a href="/live/mysql-conference-2012/">MySQL Conference &amp; Expo 2012</a></div><div class="item"><a href="/live/">Previous Percona Live Events</a></div> </div>
2704+ <div class="navi-dropdown-footer"><!-- //--></div>
2705+ </div><div class="navi-dropdown" id="navi-dropdown-contact">
2706+ <div class="navi-dropdown-header-r"><!-- //--></div>
2707+ <div class="navi-dropdown-content"><div class="item"><a href="/contact/24x7-emergency/">24&times;7 Emergency</a></div><div class="item"><a href="/contact/sales/">Sales &amp; General Inquiries</a></div><div class="item"><a href="/contact/billing/">Billing Inquiries</a></div><div class="item"><a href="https://customers.percona.com">Customer Portal Login</a></div><div class="item"><a href="/contact/phone-directory/">Phone Directory</a></div><div class="item"><a href="/subscribe/">Subscribe to Newsletter</a></div> </div>
2708+ <div class="navi-dropdown-footer"><!-- //--></div>
2709+ </div>
2710+ <div id="search-dropdown" class="search-dropdown">
2711+ <div class="search-dropdown-header"><!-- //--></div>
2712+ <div class="search-dropdown-content">
2713+ <div class="search-info">Search Percona.com:</div>
2714+ <form method="get" action="http://search.percona.com/search/" id="search-form">
2715+ <div class="form"><input type="text" id="search-input" name="q" maxlength="100"></div>
2716+ </form>
2717+ </div>
2718+ <div class="search-dropdown-footer"><!-- //--></div>
2719+ </div>
2720+</div>
2721+<div id="stats">
2722+<!-- GA //-->
2723+ <script src="http://www.percona.com/static/js/urchin.js" type="text/javascript"></script>
2724+ <script type="text/javascript">
2725+ _uacct = "UA-343802-3";
2726+ urchinTracker();
2727+ </script>
2728+<!-- /GA //-->
2729+<!-- NAVI //-->
2730+<script type="text/javascript">//<![CDATA[
2731+var navi = [{id:"about-us", direction: "l"},{id:"mysql-consulting", direction: "l"},{id:"support", direction: "l"},{id:"training", direction: "l"},{id:"development", direction: "l"},{id:"software", direction: "l"},{id:"events", direction: "r"},{id:"contact", direction: "r"}];
2732+for(var i = 0, c = navi.length; i < c; i++) {
2733+window.jQuery('#navilink-a-' + navi[i].id).bind('mouseover',{id: navi[i].id, direction:navi[i].direction}, function(e) { NAVI.Open(e.data.id, e.data.direction); } );
2734+}
2735+window.jQuery('#search-form').bind('submit', function() { window.location.href = jQuery('#search-form').attr('action') + jQuery('#search-input').val(); return false; });
2736+//]]></script>
2737+<!-- /NAVI //-->
2738+<script type="text/javascript">
2739+//<![CDATA[
2740+Percona.host = 'www.percona.com';
2741+Percona.getRecentServerVersion('#recentServerVersion');
2742+//]]>
2743+</script>
2744+</div>
2745+ </body>
2746+</html>
2747+
2748+
2749+
2750+{% if theme_collapsiblesidebar|tobool %}
2751+{% set script_files = script_files + ['_static/sidebar.js'] %}
2752+{% endif %}
2753
2754=== removed file 'doc/source/percona-theme/layout.html'
2755--- doc/source/percona-theme/layout.html 2012-04-12 14:06:33 +0000
2756+++ doc/source/percona-theme/layout.html 1970-01-01 00:00:00 +0000
2757@@ -1,503 +0,0 @@
2758-{#
2759- basic/layout.html
2760- ~~~~~~~~~~~~~~~~~
2761-
2762- Master layout template for Sphinx themes.
2763-
2764- :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
2765- :license: BSD, see LICENSE for details.
2766-#}
2767-{%- block doctype -%}
2768-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2769- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2770-{%- endblock %}
2771-{%- set reldelim1 = reldelim1 is not defined and ' &raquo;' or reldelim1 %}
2772-{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
2773-{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and
2774- (sidebars != []) %}
2775-{%- set url_root = pathto('', 1) %}
2776-{# XXX necessary? #}
2777-{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
2778-{%- if not embedded and docstitle %}
2779- {%- set titlesuffix = " &mdash; "|safe + docstitle|e %}
2780-{%- else %}
2781- {%- set titlesuffix = "" %}
2782-{%- endif %}
2783-
2784-{%- macro relbar() %}
2785- <div class="related">
2786- <h3>{{ _('Navigation') }}</h3>
2787- <ul>
2788- {%- for rellink in rellinks %}
2789- <li class="right" {% if loop.first %}style="margin-right: 10px"{% endif %}>
2790- <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}"
2791- {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>
2792- {%- if not loop.first %}{{ reldelim2 }}{% endif %}</li>
2793- {%- endfor %}
2794- {%- block rootrellink %}
2795- <li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a>{{ reldelim1 }}</li>
2796- {%- endblock %}
2797- {%- for parent in parents %}
2798- <li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a>{{ reldelim1 }}</li>
2799- {%- endfor %}
2800- {%- block relbaritems %} {% endblock %}
2801- </ul>
2802- </div>
2803-{%- endmacro %}
2804-
2805-{%- macro sidebar() %}
2806- {%- if render_sidebar %}
2807- <div class="sphinxsidebar">
2808- <div class="sphinxsidebarwrapper">
2809-
2810- <div class="side-column-block"><a href="http://www.percona.com/software/percona-server/"><img alt="Percona Server" src="http://s2.percona.com/logo_percona_server_new.png" /></a></div>
2811-
2812- <div class="side-column-block">
2813- <div class="header">Call Us</div>
2814- <div class="content">
2815- <div class="numbers">
2816- <div style="padding-bottom: 4px">
2817- +1-888-316-9775 (USA - Sales)<br>
2818- +1-208-473-2904 (USA - Sales)
2819- </div>
2820- <div style="padding-bottom: 4px;">
2821- +44-208-133-0309 (UK - Sales)
2822- </div>
2823- <div style="padding-bottom: 4px;">
2824- +1-877-862-4316 (Emergency)
2825- </div>
2826- <div>
2827- +1-855-55TRAIN (Training)<br>
2828- +1-925-271-5054 (Training)
2829- </div>
2830- </div>
2831- </div>
2832- </div>
2833-
2834- <div class="side-column-block">
2835-
2836- <div class="a-btn-container"><a title="Download PDF Manual for Percona Server 5.1" href="http://form.percona.com/PerconaServer51OperationsManual2.html" class="a-btn-new"><span class="a-btn-text">Download Manual</span><span class="a-btn-fixed-slide-text">PDF for 5.1</span><span class="a-btn-icon-right"><span></span></span></a>
2837- </div>
2838- </div>
2839- {%- if sidebars != None %}
2840- {#- new style sidebar: explicitly include/exclude templates #}
2841- {%- for sidebartemplate in sidebars %}
2842- {%- include sidebartemplate %}
2843- {%- endfor %}
2844- {%- else %}
2845- {#- old style sidebars: using blocks -- should be deprecated #}
2846- {%- block serverseries %}
2847- <div class="side-column-block">
2848- <h3>Percona Server Series</h3>
2849- <ul>
2850- <li><a href="http://www.percona.com/doc/percona-server/5.5/">Percona Server 5.5</a></li>
2851- <li><a href="http://www.percona.com/doc/percona-server/5.1/">Percona Server 5.1</a></li>
2852- </ul>
2853- </div>
2854- {%- endblock %}
2855- {%- block sidebartoc %}
2856- {%- include "localtoc.html" %}
2857- {%- endblock %}
2858- {%- block sidebarrel %}
2859- {%- include "relations.html" %}
2860- {%- endblock %}
2861- {%- block sidebarsourcelink %}
2862- {%- include "sourcelink.html" %}
2863- {%- endblock %}
2864- {%- if customsidebar %}
2865- {%- include customsidebar %}
2866- {%- endif %}
2867- {%- block sidebarsearch %}
2868- {%- include "searchbox.html" %}
2869- {%- endblock %}
2870- {%- endif %}
2871-<br /><br />
2872- <div class="side-column-block">
2873- <ul class="side-contact-buttons">
2874- <li><a href="http://form.percona.com/ContactMe.html" title="Contact Me" class="contact-me"><span>Contact Me</span></a></li>
2875- <li><a href="http://www.percona.com/webinars/" title="Attend a Webinar" class="webinar"><span>Attend a Webinar</span></a></li>
2876- <li><a href="http://www.percona.com/downloads/" title="Download Software" class="download-software"><span>Download Software</span></a></li>
2877- <li><a href="http://www.percona.com/subscribe/" title="Register For Newsletters" class="newsletters"><span>Register For Newsletters</span></a></li>
2878- </ul>
2879- </div>
2880-
2881- </div>
2882- </div>
2883- {%- endif %}
2884-{%- endmacro %}
2885-
2886-{%- macro script() %}
2887- <script type="text/javascript">
2888- var DOCUMENTATION_OPTIONS = {
2889- URL_ROOT: '{{ url_root }}',
2890- VERSION: '{{ release|e }}',
2891- COLLAPSE_INDEX: false,
2892- FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}',
2893- HAS_SOURCE: {{ has_source|lower }}
2894- };
2895- </script>
2896- {%- for scriptfile in script_files %}
2897- <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
2898- {%- endfor %}
2899-{%- endmacro %}
2900-
2901-{%- macro css() %}
2902- <link rel="stylesheet" href="{{ pathto('_static/percona.com.css', 1) }}" type="text/css" />
2903- <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
2904- <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
2905- {%- for cssfile in css_files %}
2906- <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
2907- {%- endfor %}
2908-{%- endmacro %}
2909-
2910-<html xmlns="http://www.w3.org/1999/xhtml">
2911- <head>
2912- <meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" />
2913- {{ metatags }}
2914- {%- block htmltitle %}
2915- <title>{{ title|striptags|e }}{{ titlesuffix }}</title>
2916- {%- endblock %}
2917-
2918- {{ css() }}
2919- {%- if not embedded %}
2920- {{ script() }}
2921- {%- if use_opensearch %}
2922- <link rel="search" type="application/opensearchdescription+xml"
2923- title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
2924- href="{{ pathto('_static/opensearch.xml', 1) }}"/>
2925- {%- endif %}
2926-
2927-<script src="{{ pathto('_static/percona.com.js', 1)}}" type="text/javascript"></script>
2928-
2929- {%- if favicon %}
2930- <link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
2931- {%- endif %}
2932- {%- endif %}
2933-{%- block linktags %}
2934- {%- if hasdoc('about') %}
2935- <link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
2936- {%- endif %}
2937- {%- if hasdoc('genindex') %}
2938- <link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
2939- {%- endif %}
2940- {%- if hasdoc('search') %}
2941- <link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
2942- {%- endif %}
2943- {%- if hasdoc('copyright') %}
2944- <link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
2945- {%- endif %}
2946- <link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
2947- {%- if parents %}
2948- <link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}" />
2949- {%- endif %}
2950- {%- if next %}
2951- <link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
2952- {%- endif %}
2953- {%- if prev %}
2954- <link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
2955- {%- endif %}
2956-{%- endblock %}
2957-{%- block extrahead %} {% endblock %}
2958- </head>
2959- <body>
2960-
2961-{%- block header %}
2962-
2963- <!-- <div id="stickywrapper"> -->
2964- <!-- <div id="stickycontent"> -->
2965- <div id="header"><div class="header">
2966- <div class="logo"><a href="http://www.percona.com/" onfocus="this.blur()"><img src="http://s3.percona.com/ui-logo.png" alt="Percona Performance Consulting Experts" width="240" height="55" /></a></div>
2967- <div class="right">
2968- <div class="searchlink"><a onmouseover="SEARCH.Open()"><img id="searchlink-anchor" src="http://s2.percona.com/ui-search.png" alt="" /></a></div>
2969- <span class="inv"><![CDATA[<noindex>]]></span>
2970- <div class="navicontainer"><div class="navi">
2971- <span id="navilink-span-about-us" ><a id="navilink-a-about-us" href="http://www.percona.com/about-us/">About Us</a></span><span id="navilink-span-mysql-consulting" ><a id="navilink-a-mysql-consulting" href="http://www.percona.com/mysql-consulting/">Consulting</a></span><span id="navilink-span-support" ><a id="navilink-a-support" href="http://www.percona.com/mysql-support/">Support</a></span><span id="navilink-span-training" ><a id="navilink-a-training" href="http://www.percona.com/training/">Training</a></span><span id="navilink-span-development" ><a id="navilink-a-development" href="http://www.percona.com/development/">Development</a></span><span id="navilink-span-software" class="selected"><a class="selected" id="navilink-a-software" href="http://www.percona.com/software/">Software</a></span><span id="navilink-span-events" ><a id="navilink-a-events" href="http://www.percona.com/live/">Events</a></span><span id="navilink-span-contact" ><a id="navilink-a-contact" href="http://www.percona.com/contact/">Contact Us</a></span> </div></div>
2972-
2973- <span class="inv"><![CDATA[</noindex>]]></span>
2974- <span class="inv"><![CDATA[</noindex>]]></span>
2975- </div>
2976- </div></div>
2977- <div id="stripe"></div>
2978-
2979-{% endblock %}
2980-
2981- <!-- <div id="stripe"></div> -->
2982-
2983-{%- block content %}
2984-
2985-
2986-
2987- {%- block sidebar1 %} {# possible location for sidebar #} {% endblock %}
2988-
2989- <div class="document">
2990-
2991-
2992-
2993- {%- block document %}
2994- <div class="documentwrapper">
2995- {%- if render_sidebar %}
2996- <div class="bodywrapper">
2997- {%- endif %}
2998-
2999- {%- block relbar1 %}{{ relbar() }}{% endblock %}
3000-
3001- <div class="body">
3002- {% block body %} {% endblock %}
3003- </div>
3004-
3005- {%- block relbar2 %}{{ relbar() }}
3006-
3007- {%- if render_sidebar %}
3008- </div>
3009- {%- endif %}
3010-
3011-
3012-
3013- </div>
3014-
3015- {%- endblock %}
3016-
3017- {%- block sidebar2 %}{{ sidebar() }}{% endblock %}
3018-
3019- <div class="clearer"></div>
3020-
3021- {%- if last_updated %}
3022- {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
3023- {%- endif %}
3024-
3025- <div class="license">
3026-
3027- {%- if show_copyright %}
3028- {%- if hasdoc('copyright') %}
3029- {% trans path=pathto('copyright'), copyright=copyright|e %}&copy; <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
3030- {%- else %}
3031- {% trans copyright=copyright|e %}&copy; Copyright {{ copyright }}.{% endtrans %}
3032- {%- endif %}
3033- {%- endif %}
3034-
3035- <br />
3036- Except where otherwise noted, this documentation is licensed under the following license:
3037- <br />
3038- <a class="urlextern" rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/">
3039- CC Attribution-ShareAlike 2.0 Generic</a><br />
3040-
3041- {%- if show_sphinx %}
3042- {% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
3043- {%- endif %}
3044-
3045- </div>
3046-
3047- </div>
3048- {%- endblock %}
3049-
3050- {% endblock %}
3051-
3052-{%- block footer %}
3053-
3054- <div class="file-bugs">
3055- This documentation is developed in Launchpad as part of the <a href="https://code.launchpad.net/percona-server">Percona Server source code</a>.<br/>
3056- If you spotted innacuracies, errors, don't understood it or you think something is missing or should be improved, please <a href="https://bugs.launchpad.net/percona-server/+filebug?field.tags=doc&amp;field.comment=[In:Percona Server Documentation]&amp;?field.tags=doc&amp;field.title=[DOC] ">file a bug</a>.
3057-
3058- </div>
3059-
3060- <div id="footer">
3061-
3062- <div class="footer">
3063- <div class="logo"><img width="110" height="25" alt="" src="{{ pathto('_static/ui-footer-logo.png', 1) }}">
3064- </div>
3065-
3066- <div class="text">
3067- <span class="inv"><!--[CDATA[<noindex-->]]&gt;</span>
3068- Call us: 1-888-316-9775 • <a href="/contact">Contact Us</a><br>
3069- MySQL and InnoDB are trademarks of Oracle Corp.<br>
3070- Proudly running <a href="/software/percona-server/">Percona Server<span id="recentServerVersion"></span></a><br>
3071- Copyright &copy; 2006-2011 Percona Inc.<br>
3072- <a href="/about-us/policies/">Copyright, Trademark, and Privacy Policy</a> • <a href="/sitemap/">Sitemap</a>
3073- <span class="inv"><!--[CDATA[</noindex-->]]&gt;</span>
3074- </div>
3075- </div>
3076-
3077- </div>
3078-{%- endblock %}
3079-<span class="inv"><!--[CDATA[<noindex-->]]&gt;</span>
3080-<div id="submenus">
3081- <div class="navi-dropdown" id="navi-dropdown-about-us">
3082- <div class="navi-dropdown-header-l"><!-- //--></div>
3083- <div class="navi-dropdown-content">
3084- <div class="item"><a href="http://www.percona.com/about-us/our-mission/">Our Mission</a></div>
3085- <div class="item"><a href="http://www.percona.com/about-us/why-percona/">Why Percona?</a></div>
3086- <div class="item"><a href="http://www.percona.com/about-us/procedures/">Coordinating with Percona</a></div>
3087- <div class="item"><a href="http://www.percona.com/about-us/customers/">Customers</a></div>
3088- <div class="item"><a href="http://www.percona.com/webinars/">Webinars</a></div>
3089- <div class="item"><a href="http://www.percona.com/about-us/mysql-case-studies/">MySQL Case Studies</a></div>
3090- <div class="item"><a href="http://www.percona.com/about-us/our-team/">Our Team</a></div>
3091-
3092- <div class="item"><a href="http://www.percona.com/about-us/books/">Our Books</a></div>
3093- <div class="item"><a href="http://www.percona.com/about-us/blogs/">Our Blogs</a></div>
3094- <div class="item"><a href="http://www.percona.com/about-us/mysql-white-papers/">MySQL White Papers</a></div>
3095- <div class="item"><a href="http://www.percona.com/about-us/conferences/">Conferences</a></div>
3096- <div class="item"><a href="http://www.percona.com/about-us/presentations/">Presentations</a></div>
3097- <div class="item"><a href="http://www.percona.com/about-us/newsletters/">Newsletters</a></div>
3098- <div class="item"><a href="http://www.percona.com/about-us/pressreleases/">Press Releases</a></div>
3099- <div class="item"><a href="http://www.percona.com/about-us/percona-in-the-news/">In The News</a></div>
3100- <div class="item"><a href="http://www.percona.com/about-us/careers/">Careers</a></div>
3101-
3102- </div>
3103- <div class="navi-dropdown-footer"><!-- //--></div>
3104- </div>
3105- <div class="navi-dropdown" id="navi-dropdown-mysql-consulting">
3106- <div class="navi-dropdown-header-l"><!-- //--></div>
3107- <div class="navi-dropdown-content">
3108- <div class="item"><a href="http://www.percona.com/mysql-consulting/overview/">MySQL Consulting Overview</a></div>
3109- <div class="item"><a href="http://www.percona.com/mysql-consulting/prices/">MySQL Consulting Prices</a></div>
3110- <div class="item"><a href="http://www.percona.com/mysql-consulting/architecture/">MySQL Architecture &amp; Design</a></div>
3111- <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-backups/">MySQL Backups</a></div>
3112- <div class="item"><a href="http://www.percona.com/mysql-consulting/cloud-computing/">MySQL Cloud Solutions</a></div>
3113-
3114- <div class="item"><a href="http://www.percona.com/mysql-consulting/cluster/">MySQL Cluster Consulting</a></div>
3115- <div class="item"><a href="http://www.percona.com/mysql-consulting/data-warehousing/">MySQL Data Warehousing</a></div>
3116- <div class="item"><a href="http://www.percona.com/mysql-consulting/data-recovery/">MySQL Data Recovery</a></div>
3117- <div class="item"><a href="http://www.percona.com/mysql-consulting/high-availability/">MySQL High Availability</a></div>
3118- <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-monitoring-graphing/">MySQL Monitoring &amp; Graphing</a></div>
3119- <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-onsite-consulting/">MySQL Onsite Consulting</a></div>
3120- <div class="item"><a href="http://www.percona.com/mysql-consulting/performance-audit/">MySQL Performance Audit</a></div>
3121- <div class="item"><a href="http://www.percona.com/mysql-consulting/remote-dba/">MySQL Remote DBA</a></div>
3122-
3123- <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-replication/">MySQL Replication</a></div>
3124- <div class="item"><a href="http://www.percona.com/mysql-consulting/upgrade/">MySQL Version Upgrades</a></div>
3125- <div class="item"><a href="http://www.percona.com/mysql-consulting/24x7-emergency/">Emergency 24&times;7 Consulting</a></div>
3126- <div class="item"><a href="http://www.percona.com/mysql-consulting/migration/">Migration to MySQL</a></div>
3127- <div class="item"><a href="http://www.percona.com/drizzle-consulting/">Drizzle Consulting</a></div>
3128- <div class="item"><a href="http://www.percona.com/mysql-consulting/sphinx/">Sphinx Consulting</a></div>
3129- <div class="item"><a href="http://www.percona.com/mysql-consulting/drbd/">DRBD Consulting</a></div>
3130- <div class="item"><a href="http://www.percona.com/mysql-consulting/memcached/">Memcached Consulting</a></div>
3131-
3132- <div class="item"><a href="http://www.percona.com/mysql-consulting/other-services/">Other Consulting Services</a></div>
3133- </div>
3134- <div class="navi-dropdown-footer"><!-- //--></div>
3135- </div>
3136- <div class="navi-dropdown" id="navi-dropdown-support">
3137- <div class="navi-dropdown-header-l"><!-- //--></div>
3138- <div class="navi-dropdown-content">
3139- <div class="item"><a href="http://www.percona.com/mysql-support/">MySQL Support Overview</a></div>
3140- <div class="item"><a href="http://www.percona.com/prices/mysql-support/">MySQL Support Prices</a></div>
3141- <div class="item"><a href="http://www.percona.com/mysql-support/policies/">MySQL Support Policies</a></div>
3142- <div class="item"><a href="http://www.percona.com/mysql-support/consulting-vs-support/">Consulting vs. Support</a></div>
3143- <div class="item"><a href="https://customers.percona.com">Customer Portal Login</a></div>
3144-
3145- </div>
3146- <div class="navi-dropdown-footer"><!-- //--></div>
3147- </div>
3148- <div class="navi-dropdown" id="navi-dropdown-training">
3149- <div class="navi-dropdown-header-l"><!-- //--></div>
3150- <div class="navi-dropdown-content">
3151- <div class="item"><a href="http://www.percona.com/training/">MySQL Training Overview</a></div>
3152- <div class="item"><a href="http://www.percona.com/prices/training/">MySQL Training Prices</a></div>
3153- <div class="item"><a href="http://www.percona.com/training/classes/dba/">MySQL DBA Training</a></div>
3154- <div class="item"><a href="http://www.percona.com/training/classes/developers/">MySQL Developer Training</a></div>
3155- <div class="item"><a href="http://www.percona.com/training/classes/operations/">MySQL Operations Training</a></div>
3156- <div class="item"><a href="http://www.percona.com/training/classes/innodb/">InnoDB &amp; XtraDB Training</a></div>
3157-
3158- <div class="item"><a href="http://www.percona.com/training/classes/custom-onsite/">Custom Onsite Training</a></div>
3159- </div>
3160- <div class="navi-dropdown-footer"><!-- //--></div>
3161- </div>
3162- <div class="navi-dropdown" id="navi-dropdown-development">
3163- <div class="navi-dropdown-header-l"><!-- //--></div>
3164- <div class="navi-dropdown-content">
3165- <div class="item"><a href="http://www.percona.com/development/mysql/">MySQL Development Overview</a></div>
3166- <div class="item"><a href="http://www.percona.com/development/prices/">Custom Development Prices</a></div>
3167- <div class="item"><a href="http://www.percona.com/development/maintenance/">MySQL Support Overview</a></div>
3168- <div class="item"><a href="http://www.percona.com/development/benchmarking/">Custom Product Evaluation</a></div>
3169- <div class="item"><a href="http://www.percona.com/development/maatkit/">Custom Maatkit Development</a></div>
3170-
3171- <div class="item"><a href="http://www.percona.com/development/custom-tools/">Custom Tools Development</a></div>
3172- </div>
3173- <div class="navi-dropdown-footer"><!-- //--></div>
3174- </div>
3175- <div class="navi-dropdown" id="navi-dropdown-software">
3176- <div class="navi-dropdown-header-l"><!-- //--></div>
3177- <div class="navi-dropdown-content">
3178- <div class="item"><a href="http://www.percona.com/software/">Percona Software for MySQL</a></div>
3179- <div class="item"><a href="http://www.percona.com/software/percona-server/">Percona Server with XtraDB</a></div>
3180- <div class="item"><a href="http://www.percona.com/software/percona-xtradb-cluster/">Percona XtraDB Cluster</a></div>
3181- <div class="item"><a href="http://www.percona.com/software/percona-xtrabackup/">Percona XtraBackup</a></div>
3182- <div class="item"><a href="http://www.percona.com/software/mysql-innodb-data-recovery-tools/">Data Recovery Toolkit</a></div>
3183- <div class="item"><a href="http://www.percona.com/software/percona-xtradb/">Percona XtraDB</a></div>
3184- <div class="item"><a href="http://www.percona.com/software/percona-toolkit/">Percona Toolkit</a></div>
3185- <div class="item"><a href="http://www.percona.com/software/percona-monitoring-plugins/">Percona Monitoring Plugins</a></div>
3186- <div class="item"><a href="http://www.percona.com/prices/software/">Software Prices</a></div>
3187- <div class="item"><a href="http://www.percona.com/downloads/">Downloads</a></div>
3188- <div class="item"><a href="http://www.percona.com/software/repositories/">Repositories</a></div>
3189- <div class="item"><a href="http://www.percona.com/software/documentation/">Documentation</a></div>
3190- <div class="item"><a href="http://forum.percona.com">Forum</a></div>
3191- <div class="item"><a href="http://groups.google.com/group/percona-discussion">Google Discussion</a></div>
3192- <div class="item"><a href="https://launchpad.net/percona-server">Launchpad</a></div>
3193- </div>
3194- <div class="navi-dropdown-footer"><!-- //--></div>
3195- </div>
3196- <div class="navi-dropdown" id="navi-dropdown-events">
3197- <div class="navi-dropdown-header-r"><!-- //--></div>
3198- <div class="navi-dropdown-content">
3199- <div class="item"><a href="http://www.percona.com/live/mysql-conference-2012/">MySQL Conference &amp; Expo 2012</a></div>
3200- <div class="item"><a href="http://www.percona.com/live/">Previous Percona Live Events</a></div>
3201- </div>
3202- <div class="navi-dropdown-footer"><!-- //--></div>
3203- </div>
3204-
3205- <div class="navi-dropdown" id="navi-dropdown-contact">
3206- <div class="navi-dropdown-header-r"><!-- //--></div>
3207- <div class="navi-dropdown-content">
3208- <div class="item"><a href="http://www.percona.com/contact/24x7-emergency/">24&times;7 Emergency</a></div>
3209- <div class="item"><a href="http://www.percona.com/contact/sales/">Sales &amp; General Inquiries</a></div>
3210- <div class="item"><a href="http://www.percona.com/contact/billing/">Billing Inquiries</a></div>
3211- <div class="item"><a href="https://customers.percona.com">Customer Portal Login</a></div>
3212- <div class="item"><a href="http://www.percona.com/contact/phone-directory/">Phone Directory</a></div>
3213- <div class="item"><a href="http://www.percona.com/subscribe/">Subscribe to Newsletter</a></div>
3214-
3215- </div>
3216- <div class="navi-dropdown-footer"><!-- //--></div>
3217- </div>
3218- <div id="search-dropdown" class="search-dropdown">
3219- <div class="search-dropdown-header"><!-- //--></div>
3220- <div class="search-dropdown-content">
3221- <div class="search-info">Search Percona.com:</div>
3222- <form method="get" action="http://search.percona.com/search/" id="search-form">
3223- <div class="form"><input type="text" id="search-input" name="q" maxlength="100"></div>
3224- </form>
3225- </div>
3226- <div class="search-dropdown-footer"><!-- //--></div>
3227- </div>
3228-</div>
3229-<div id="stats">
3230-<!-- GA //-->
3231- <script src="http://www.percona.com/static/js/urchin.js" type="text/javascript"></script>
3232- <script type="text/javascript">
3233- _uacct = "UA-343802-3";
3234- urchinTracker();
3235- </script>
3236-<!-- /GA //-->
3237-<!-- NAVI //-->
3238-<script type="text/javascript">//<![CDATA[
3239-var navi = [{id:"about-us", direction: "l"},{id:"mysql-consulting", direction: "l"},{id:"support", direction: "l"},{id:"training", direction: "l"},{id:"development", direction: "l"},{id:"software", direction: "l"},{id:"events", direction: "r"},{id:"contact", direction: "r"}];
3240-for(var i = 0, c = navi.length; i < c; i++) {
3241-window.jQuery('#navilink-a-' + navi[i].id).bind('mouseover',{id: navi[i].id, direction:navi[i].direction}, function(e) { NAVI.Open(e.data.id, e.data.direction); } );
3242-}
3243-window.jQuery('#search-form').bind('submit', function() { window.location.href = jQuery('#search-form').attr('action') + jQuery('#search-input').val(); return false; });
3244-//]]></script>
3245-<!-- /NAVI //-->
3246-<script type="text/javascript">
3247-//<![CDATA[
3248-Percona.host = 'www.percona.com';
3249-Percona.getRecentServerVersion('#recentServerVersion');
3250-//]]>
3251-</script>
3252-</div>
3253- </body>
3254-</html>
3255-
3256-
3257-
3258-{% if theme_collapsiblesidebar|tobool %}
3259-{% set script_files = script_files + ['_static/sidebar.js'] %}
3260-{% endif %}
3261
3262=== added file 'doc/source/percona-theme/searchbox.html'
3263--- doc/source/percona-theme/searchbox.html 1970-01-01 00:00:00 +0000
3264+++ doc/source/percona-theme/searchbox.html 2012-08-15 14:13:58 +0000
3265@@ -0,0 +1,22 @@
3266+{#
3267+ basic/searchbox.html
3268+ ~~~~~~~~~~~~~~~~~~~~
3269+
3270+ Sphinx sidebar template: quick search box.
3271+
3272+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
3273+ :license: BSD, see LICENSE for details.
3274+#}
3275+{%- if pagename != "search" %}
3276+<div id="searchbox" style="display: none; padding: 3px;">
3277+ <h3>{{ _('Quick search') }}</h3>
3278+ <form class="search" action="{{ pathto('search') }}" method="get">
3279+ <input type="text" name="q" size="18" />
3280+ <input type="submit" value="{{ _('Go') }}" />
3281+ <input type="hidden" name="check_keywords" value="yes" />
3282+ <input type="hidden" name="area" value="default" />
3283+ </form>
3284+
3285+</div>
3286+<script type="text/javascript">$('#searchbox').show(0);</script>
3287+{%- endif %}
3288
3289=== removed file 'doc/source/percona-theme/searchbox.html'
3290--- doc/source/percona-theme/searchbox.html 2011-09-20 06:59:03 +0000
3291+++ doc/source/percona-theme/searchbox.html 1970-01-01 00:00:00 +0000
3292@@ -1,22 +0,0 @@
3293-{#
3294- basic/searchbox.html
3295- ~~~~~~~~~~~~~~~~~~~~
3296-
3297- Sphinx sidebar template: quick search box.
3298-
3299- :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
3300- :license: BSD, see LICENSE for details.
3301-#}
3302-{%- if pagename != "search" %}
3303-<div id="searchbox" style="display: none; padding: 3px;">
3304- <h3>{{ _('Quick search') }}</h3>
3305- <form class="search" action="{{ pathto('search') }}" method="get">
3306- <input type="text" name="q" size="18" />
3307- <input type="submit" value="{{ _('Go') }}" />
3308- <input type="hidden" name="check_keywords" value="yes" />
3309- <input type="hidden" name="area" value="default" />
3310- </form>
3311-
3312-</div>
3313-<script type="text/javascript">$('#searchbox').show(0);</script>
3314-{%- endif %}
3315
3316=== added directory 'doc/source/percona-theme/static'
3317=== removed directory 'doc/source/percona-theme/static'
3318=== added file 'doc/source/percona-theme/static/boxes_header_bulletpoint.png'
3319Binary files doc/source/percona-theme/static/boxes_header_bulletpoint.png 1970-01-01 00:00:00 +0000 and doc/source/percona-theme/static/boxes_header_bulletpoint.png 2012-08-15 14:13:58 +0000 differ
3320=== removed file 'doc/source/percona-theme/static/boxes_header_bulletpoint.png'
3321Binary files doc/source/percona-theme/static/boxes_header_bulletpoint.png 2012-04-12 14:06:33 +0000 and doc/source/percona-theme/static/boxes_header_bulletpoint.png 1970-01-01 00:00:00 +0000 differ
3322=== added file 'doc/source/percona-theme/static/boxes_header_bulletpoint.png.moved'
3323Binary files doc/source/percona-theme/static/boxes_header_bulletpoint.png.moved 1970-01-01 00:00:00 +0000 and doc/source/percona-theme/static/boxes_header_bulletpoint.png.moved 2012-08-15 14:13:58 +0000 differ
3324=== removed file 'doc/source/percona-theme/static/boxes_header_bulletpoint.png.moved'
3325Binary files doc/source/percona-theme/static/boxes_header_bulletpoint.png.moved 2012-04-12 14:06:33 +0000 and doc/source/percona-theme/static/boxes_header_bulletpoint.png.moved 1970-01-01 00:00:00 +0000 differ
3326=== added file 'doc/source/percona-theme/static/button-download-icon.png'
3327Binary files doc/source/percona-theme/static/button-download-icon.png 1970-01-01 00:00:00 +0000 and doc/source/percona-theme/static/button-download-icon.png 2012-08-15 14:13:58 +0000 differ
3328=== removed file 'doc/source/percona-theme/static/button-download-icon.png'
3329Binary files doc/source/percona-theme/static/button-download-icon.png 2012-04-12 14:06:33 +0000 and doc/source/percona-theme/static/button-download-icon.png 1970-01-01 00:00:00 +0000 differ
3330=== added file 'doc/source/percona-theme/static/button-download-icon.png.moved'
3331Binary files doc/source/percona-theme/static/button-download-icon.png.moved 1970-01-01 00:00:00 +0000 and doc/source/percona-theme/static/button-download-icon.png.moved 2012-08-15 14:13:58 +0000 differ
3332=== removed file 'doc/source/percona-theme/static/button-download-icon.png.moved'
3333Binary files doc/source/percona-theme/static/button-download-icon.png.moved 2012-04-12 14:06:33 +0000 and doc/source/percona-theme/static/button-download-icon.png.moved 1970-01-01 00:00:00 +0000 differ
3334=== added file 'doc/source/percona-theme/static/content_list_bulletpoint.png'
3335Binary files doc/source/percona-theme/static/content_list_bulletpoint.png 1970-01-01 00:00:00 +0000 and doc/source/percona-theme/static/content_list_bulletpoint.png 2012-08-15 14:13:58 +0000 differ
3336=== removed file 'doc/source/percona-theme/static/content_list_bulletpoint.png'
3337Binary files doc/source/percona-theme/static/content_list_bulletpoint.png 2012-04-12 14:06:33 +0000 and doc/source/percona-theme/static/content_list_bulletpoint.png 1970-01-01 00:00:00 +0000 differ
3338=== added file 'doc/source/percona-theme/static/content_list_bulletpoint.png.moved'
3339Binary files doc/source/percona-theme/static/content_list_bulletpoint.png.moved 1970-01-01 00:00:00 +0000 and doc/source/percona-theme/static/content_list_bulletpoint.png.moved 2012-08-15 14:13:58 +0000 differ
3340=== removed file 'doc/source/percona-theme/static/content_list_bulletpoint.png.moved'
3341Binary files doc/source/percona-theme/static/content_list_bulletpoint.png.moved 2012-04-12 14:06:33 +0000 and doc/source/percona-theme/static/content_list_bulletpoint.png.moved 1970-01-01 00:00:00 +0000 differ
3342=== added file 'doc/source/percona-theme/static/default.css_t'
3343--- doc/source/percona-theme/static/default.css_t 1970-01-01 00:00:00 +0000
3344+++ doc/source/percona-theme/static/default.css_t 2012-08-15 14:13:58 +0000
3345@@ -0,0 +1,433 @@
3346+/*
3347+ * default.css_t
3348+ * ~~~~~~~~~~~~~
3349+ *
3350+ * Sphinx stylesheet -- default theme.
3351+ *
3352+ * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
3353+ * :license: BSD, see LICENSE for details.
3354+ *
3355+ */
3356+
3357+@import url("basic.css");
3358+
3359+/* -- page layout ----------------------------------------------------------- */
3360+
3361+body {
3362+ font-size: 12px;
3363+ line-height: 16px;
3364+ font-family: Arial;
3365+
3366+ background-color: #fff;
3367+ color: #333333;
3368+ line-height: 20px;
3369+ margin: 0;
3370+ padding: 0;
3371+
3372+}
3373+
3374+div.document {
3375+ background-color: #fff;
3376+ margin: 0 auto;
3377+ overflow: hidden;
3378+ padding: 30px 0;
3379+ width: 960px;
3380+}
3381+
3382+div.documentwrapper {
3383+ /* float: left; */
3384+ /* width: 100%; */
3385+
3386+}
3387+
3388+div.bodywrapper {
3389+ margin: 10 0 0 0px;
3390+ width: 660px;
3391+ float:right;
3392+}
3393+
3394+div.body {
3395+ background-color: #fff;
3396+ color: #333333;
3397+ padding: 0 0 20px;
3398+}
3399+
3400+{%- if theme_rightsidebar|tobool %}
3401+div.bodywrapper {
3402+ margin: 0 {{ theme_sidebarwidth }}px 0 0;
3403+}
3404+{%- endif %}
3405+
3406+div.footer {
3407+ /* color: {{ theme_footertextcolor }}; */
3408+ /* width: 100%; */
3409+ /* padding: 9px 0 9px 0; */
3410+ /* text-align: center; */
3411+ /* font-size: 75%; */
3412+ font: 80% "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif;
3413+ background: none repeat scroll 0 0 #333333;
3414+ border-top: 2px solid #D95200;
3415+ overflow: hidden;
3416+}
3417+
3418+div.footer a {
3419+ color: {{ theme_footertextcolor }};
3420+ text-decoration: underline;
3421+}
3422+
3423+div.related {
3424+ background-color: #ccc;
3425+ line-height: 30px;
3426+ color: #333;
3427+ background: none repeat scroll 0 0 #F8F8F8;
3428+ border: 1px solid #E0E0E0;
3429+ clear: both;
3430+ padding: 10px;
3431+ width: 635px;
3432+ margin-bottom: 5px;
3433+}
3434+
3435+div.related a {
3436+ color: #999;
3437+}
3438+
3439+div.sphinxsidebar {
3440+ margin-left: 0px;
3441+ margin-right: 30px;
3442+ color: #333333;
3443+ font-family: Arial,Helvetica,sans-serif;
3444+ width: 260px;
3445+ {%- if theme_stickysidebar|tobool %}
3446+ top: 30px;
3447+ bottom: 0;
3448+ margin: 0;
3449+ position: fixed;
3450+ overflow: auto;
3451+ height: auto;
3452+ {%- endif %}
3453+ {%- if theme_rightsidebar|tobool %}
3454+ float: right;
3455+ {%- if theme_stickysidebar|tobool %}
3456+ right: 0;
3457+ {%- endif %}
3458+ {%- endif %}
3459+}
3460+
3461+{%- if theme_stickysidebar|tobool %}
3462+/* this is nice, but it it leads to hidden headings when jumping
3463+ to an anchor */
3464+/*
3465+div.related {
3466+ position: fixed;
3467+}
3468+
3469+div.documentwrapper {
3470+ margin-top: 30px;
3471+}
3472+*/
3473+{%- endif %}
3474+
3475+div.sphinxsidebar h3 {
3476+ /* font-family: {{ theme_headfont }}; */
3477+ color: #999;
3478+ font-size: 18px;
3479+ line-height: 15px;
3480+ font-weight: 400;
3481+ margin-left: 5px;
3482+ padding: 0;
3483+}
3484+
3485+div.sphinxsidebar h3 a {
3486+ color: #333;
3487+}
3488+
3489+div.sphinxsidebar a:hover {
3490+ /* color: #333; */
3491+}
3492+
3493+div.sphinxsidebar h4 {
3494+ /* font-family: {{ theme_headfont }}; */
3495+ color: #666;
3496+ font-size: 18px;
3497+ font-weight: normal;
3498+ margin: 5px 0 0 5px;
3499+ padding: 0;
3500+}
3501+
3502+div.sphinxsidebar p {
3503+ color: #333;
3504+ margin-bottom: 5px;
3505+ margin-left: 5px;
3506+}
3507+
3508+div.sphinxsidebar p.topless {
3509+ margin: 5px 10px 10px 10px;
3510+}
3511+
3512+div.sphinxsidebar ul {
3513+ margin: 10px;
3514+ padding-left: 5px;
3515+ color: #333;
3516+}
3517+
3518+div.sphinxsidebar a {
3519+ color: #D12907;
3520+}
3521+
3522+div.sphinxsidebar input {
3523+ border: 1px solid #999;
3524+ font-family: sans-serif;
3525+ font-size: 1em;
3526+}
3527+
3528+{% if theme_collapsiblesidebar|tobool %}
3529+/* for collapsible sidebar */
3530+div#sidebarbutton {
3531+ background-color: {{ theme_sidebarbtncolor }};
3532+}
3533+{% endif %}
3534+
3535+/* -- hyperlink styles ------------------------------------------------------ */
3536+
3537+a {
3538+ color: #D12907;
3539+ text-decoration: underline;
3540+ border: medium none;
3541+ cursor: pointer;
3542+}
3543+
3544+a:visited {
3545+ color: #D12907;
3546+ text-decoration: underline;
3547+}
3548+
3549+a:hover {
3550+ color: #D12907;
3551+ text-decoration: underline;
3552+}
3553+
3554+{% if theme_externalrefs|tobool %}
3555+a.external {
3556+ text-decoration: none;
3557+ border-bottom: 1px dashed {{ theme_linkcolor }};
3558+}
3559+
3560+a.external:hover {
3561+ text-decoration: none;
3562+ border-bottom: none;
3563+}
3564+
3565+a.external:visited {
3566+ text-decoration: none;
3567+ border-bottom: 1px dashed {{ theme_visitedlinkcolor }};
3568+}
3569+{% endif %}
3570+
3571+/* -- body styles ----------------------------------------------------------- */
3572+
3573+
3574+
3575+a.headerlink {
3576+ color: {{ theme_headlinkcolor }};
3577+ font-size: 0.8em;
3578+ padding: 0 4px 0 4px;
3579+ text-decoration: none;
3580+}
3581+
3582+a.headerlink:hover {
3583+ background-color: {{ theme_headlinkcolor }};
3584+ color: white;
3585+}
3586+
3587+div.body dd, div.body li {
3588+ text-align: justify;
3589+}
3590+
3591+div.body dt {
3592+ list-style-type: square;
3593+ /* margin: 8px 0 8px 30px; */
3594+ padding: 0 4px 0 5px;
3595+
3596+}
3597+
3598+div.body p {
3599+ text-align: justify;
3600+/* line-height: 130%;*/
3601+ margin: 10px 0;
3602+}
3603+
3604+/* div.body ul, */
3605+div.body li {
3606+ list-style-type: square;
3607+ margin: 8px 0 8px 30px;
3608+ padding: 0 4px 0 5px;
3609+}
3610+
3611+.reference em {
3612+ font-style: normal;
3613+}
3614+
3615+.std-term {
3616+ font-style: normal;
3617+ font-weight: 400;
3618+ color: #FF7400
3619+}
3620+
3621+div.admonition p.admonition-title + p {
3622+ display: inline;
3623+}
3624+
3625+div.admonition p {
3626+ margin-bottom: 5px;
3627+}
3628+
3629+div.admonition pre {
3630+ margin-bottom: 5px;
3631+}
3632+
3633+div.admonition ul, div.admonition ol {
3634+ margin-bottom: 5px;
3635+}
3636+
3637+div.note {
3638+ background-color: #eee;
3639+ border: 1px solid #ccc;
3640+}
3641+
3642+div.seealso {
3643+ background-color: #ffc;
3644+ border: 1px solid #ff6;
3645+}
3646+
3647+div.topic {
3648+ background-color: #eee;
3649+}
3650+
3651+div.warning {
3652+ background-color: #ffe4e4;
3653+ border: 1px solid #f66;
3654+}
3655+
3656+p.admonition-title {
3657+ display: inline;
3658+}
3659+
3660+p.admonition-title:after {
3661+ content: ":";
3662+}
3663+
3664+pre {
3665+ padding: 10px;
3666+ background-color: #F0E6D9/* {{ theme_codebgcolor }} */;
3667+ color: {{ theme_codetextcolor }};
3668+ line-height: 120%;
3669+ border: 1px dashed #ED9821;
3670+ font-size: 80%;
3671+ overflow: auto;
3672+ /* border-left: none; */
3673+ /* border-right: none; */
3674+}
3675+
3676+tt {
3677+/* background-color: #ecf0f3;
3678+ padding: 0 1px 0 1px;
3679+ font-size: 0.95em;*/
3680+ font-weight: 400;
3681+}
3682+
3683+div.body td {
3684+ text-align: none;
3685+}
3686+
3687+table.docutils th {
3688+ background-color: #DEE7EC;
3689+ border: 1px solid #8CACBB;
3690+ padding: 3px;
3691+ text-align: center;
3692+ font-style: normal;
3693+ font-weight: 400;
3694+}
3695+
3696+table.docutils td {
3697+ border: 1px solid #8CACBB;
3698+ padding: 3px;
3699+ line-height: 16px;
3700+ vertical-align: middle;
3701+}
3702+
3703+.warning tt {
3704+ background: #efc2c2;
3705+}
3706+
3707+.note tt {
3708+ background: #d6d6d6;
3709+}
3710+
3711+.viewcode-back {
3712+ font-family: {{ theme_bodyfont }};
3713+}
3714+
3715+div.viewcode-block:target {
3716+ background-color: #f4debf;
3717+ border-top: 1px solid #ac9;
3718+ border-bottom: 1px solid #ac9;
3719+}
3720+
3721+.file-bugs {
3722+ background: none repeat scroll 0 0 #E8E8E8;
3723+ border: 1px solid #E0E0E0;
3724+ clear: both;
3725+ color: #333333;
3726+ padding: 10px;
3727+ text-align: center;
3728+ font-size: 90%;
3729+}
3730+
3731+div.footer .footer {
3732+ margin: 0 auto;
3733+ overflow: hidden;
3734+ padding: 10px 0;
3735+ width: 960px;
3736+ border-top: none;
3737+}
3738+
3739+div.footer .footer .logo {
3740+ float: left;
3741+ overflow: hidden;
3742+ padding: 17px 0 0;
3743+}
3744+
3745+div.footer .footer .text {
3746+ color: #E0E0E0;
3747+ float: right;
3748+ font-family: Arial,Helvetica,sans-serif;
3749+ font-size: 11px;
3750+ line-height: 15px;
3751+ overflow: hidden;
3752+ text-align: right;
3753+}
3754+
3755+div.license {
3756+ font-size: 80%;
3757+ /* padding: 0.5em; */
3758+ text-align: center;
3759+ margin: 13px 0 -15px;
3760+}
3761+
3762+#sidenavi.noborder {
3763+ border-right: medium none;
3764+ border-top: medium none;
3765+ margin: 0;
3766+}
3767+
3768+#sidenavi {
3769+ color: #333333;
3770+ /* float: left; */
3771+ font-family: Arial,Helvetica,sans-serif;
3772+ font-size: 18px;
3773+ line-height: 25px;
3774+ overflow: hidden;
3775+ padding: 10px 0 8px 0px;
3776+ width: 255px;
3777+}
3778+
3779
3780=== removed file 'doc/source/percona-theme/static/default.css_t'
3781--- doc/source/percona-theme/static/default.css_t 2012-04-12 14:06:33 +0000
3782+++ doc/source/percona-theme/static/default.css_t 1970-01-01 00:00:00 +0000
3783@@ -1,433 +0,0 @@
3784-/*
3785- * default.css_t
3786- * ~~~~~~~~~~~~~
3787- *
3788- * Sphinx stylesheet -- default theme.
3789- *
3790- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
3791- * :license: BSD, see LICENSE for details.
3792- *
3793- */
3794-
3795-@import url("basic.css");
3796-
3797-/* -- page layout ----------------------------------------------------------- */
3798-
3799-body {
3800- font-size: 12px;
3801- line-height: 16px;
3802- font-family: Arial;
3803-
3804- background-color: #fff;
3805- color: #333333;
3806- line-height: 20px;
3807- margin: 0;
3808- padding: 0;
3809-
3810-}
3811-
3812-div.document {
3813- background-color: #fff;
3814- margin: 0 auto;
3815- overflow: hidden;
3816- padding: 30px 0;
3817- width: 960px;
3818-}
3819-
3820-div.documentwrapper {
3821- /* float: left; */
3822- /* width: 100%; */
3823-
3824-}
3825-
3826-div.bodywrapper {
3827- margin: 10 0 0 0px;
3828- width: 660px;
3829- float:right;
3830-}
3831-
3832-div.body {
3833- background-color: #fff;
3834- color: #333333;
3835- padding: 0 0 20px;
3836-}
3837-
3838-{%- if theme_rightsidebar|tobool %}
3839-div.bodywrapper {
3840- margin: 0 {{ theme_sidebarwidth }}px 0 0;
3841-}
3842-{%- endif %}
3843-
3844-div.footer {
3845- /* color: {{ theme_footertextcolor }}; */
3846- /* width: 100%; */
3847- /* padding: 9px 0 9px 0; */
3848- /* text-align: center; */
3849- /* font-size: 75%; */
3850- font: 80% "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif;
3851- background: none repeat scroll 0 0 #333333;
3852- border-top: 2px solid #D95200;
3853- overflow: hidden;
3854-}
3855-
3856-div.footer a {
3857- color: {{ theme_footertextcolor }};
3858- text-decoration: underline;
3859-}
3860-
3861-div.related {
3862- background-color: #ccc;
3863- line-height: 30px;
3864- color: #333;
3865- background: none repeat scroll 0 0 #F8F8F8;
3866- border: 1px solid #E0E0E0;
3867- clear: both;
3868- padding: 10px;
3869- width: 635px;
3870- margin-bottom: 5px;
3871-}
3872-
3873-div.related a {
3874- color: #999;
3875-}
3876-
3877-div.sphinxsidebar {
3878- margin-left: 0px;
3879- margin-right: 30px;
3880- color: #333333;
3881- font-family: Arial,Helvetica,sans-serif;
3882- width: 260px;
3883- {%- if theme_stickysidebar|tobool %}
3884- top: 30px;
3885- bottom: 0;
3886- margin: 0;
3887- position: fixed;
3888- overflow: auto;
3889- height: auto;
3890- {%- endif %}
3891- {%- if theme_rightsidebar|tobool %}
3892- float: right;
3893- {%- if theme_stickysidebar|tobool %}
3894- right: 0;
3895- {%- endif %}
3896- {%- endif %}
3897-}
3898-
3899-{%- if theme_stickysidebar|tobool %}
3900-/* this is nice, but it it leads to hidden headings when jumping
3901- to an anchor */
3902-/*
3903-div.related {
3904- position: fixed;
3905-}
3906-
3907-div.documentwrapper {
3908- margin-top: 30px;
3909-}
3910-*/
3911-{%- endif %}
3912-
3913-div.sphinxsidebar h3 {
3914- /* font-family: {{ theme_headfont }}; */
3915- color: #999;
3916- font-size: 18px;
3917- line-height: 15px;
3918- font-weight: 400;
3919- margin-left: 5px;
3920- padding: 0;
3921-}
3922-
3923-div.sphinxsidebar h3 a {
3924- color: #333;
3925-}
3926-
3927-div.sphinxsidebar a:hover {
3928- /* color: #333; */
3929-}
3930-
3931-div.sphinxsidebar h4 {
3932- /* font-family: {{ theme_headfont }}; */
3933- color: #666;
3934- font-size: 18px;
3935- font-weight: normal;
3936- margin: 5px 0 0 5px;
3937- padding: 0;
3938-}
3939-
3940-div.sphinxsidebar p {
3941- color: #333;
3942- margin-bottom: 5px;
3943- margin-left: 5px;
3944-}
3945-
3946-div.sphinxsidebar p.topless {
3947- margin: 5px 10px 10px 10px;
3948-}
3949-
3950-div.sphinxsidebar ul {
3951- margin: 10px;
3952- padding-left: 5px;
3953- color: #333;
3954-}
3955-
3956-div.sphinxsidebar a {
3957- color: #D12907;
3958-}
3959-
3960-div.sphinxsidebar input {
3961- border: 1px solid #999;
3962- font-family: sans-serif;
3963- font-size: 1em;
3964-}
3965-
3966-{% if theme_collapsiblesidebar|tobool %}
3967-/* for collapsible sidebar */
3968-div#sidebarbutton {
3969- background-color: {{ theme_sidebarbtncolor }};
3970-}
3971-{% endif %}
3972-
3973-/* -- hyperlink styles ------------------------------------------------------ */
3974-
3975-a {
3976- color: #D12907;
3977- text-decoration: underline;
3978- border: medium none;
3979- cursor: pointer;
3980-}
3981-
3982-a:visited {
3983- color: #D12907;
3984- text-decoration: underline;
3985-}
3986-
3987-a:hover {
3988- color: #D12907;
3989- text-decoration: underline;
3990-}
3991-
3992-{% if theme_externalrefs|tobool %}
3993-a.external {
3994- text-decoration: none;
3995- border-bottom: 1px dashed {{ theme_linkcolor }};
3996-}
3997-
3998-a.external:hover {
3999- text-decoration: none;
4000- border-bottom: none;
4001-}
4002-
4003-a.external:visited {
4004- text-decoration: none;
4005- border-bottom: 1px dashed {{ theme_visitedlinkcolor }};
4006-}
4007-{% endif %}
4008-
4009-/* -- body styles ----------------------------------------------------------- */
4010-
4011-
4012-
4013-a.headerlink {
4014- color: {{ theme_headlinkcolor }};
4015- font-size: 0.8em;
4016- padding: 0 4px 0 4px;
4017- text-decoration: none;
4018-}
4019-
4020-a.headerlink:hover {
4021- background-color: {{ theme_headlinkcolor }};
4022- color: white;
4023-}
4024-
4025-div.body dd, div.body li {
4026- text-align: justify;
4027-}
4028-
4029-div.body dt {
4030- list-style-type: square;
4031- /* margin: 8px 0 8px 30px; */
4032- padding: 0 4px 0 5px;
4033-
4034-}
4035-
4036-div.body p {
4037- text-align: justify;
4038-/* line-height: 130%;*/
4039- margin: 10px 0;
4040-}
4041-
4042-/* div.body ul, */
4043-div.body li {
4044- list-style-type: square;
4045- margin: 8px 0 8px 30px;
4046- padding: 0 4px 0 5px;
4047-}
4048-
4049-.reference em {
4050- font-style: normal;
4051-}
4052-
4053-.std-term {
4054- font-style: normal;
4055- font-weight: 400;
4056- color: #FF7400
4057-}
4058-
4059-div.admonition p.admonition-title + p {
4060- display: inline;
4061-}
4062-
4063-div.admonition p {
4064- margin-bottom: 5px;
4065-}
4066-
4067-div.admonition pre {
4068- margin-bottom: 5px;
4069-}
4070-
4071-div.admonition ul, div.admonition ol {
4072- margin-bottom: 5px;
4073-}
4074-
4075-div.note {
4076- background-color: #eee;
4077- border: 1px solid #ccc;
4078-}
4079-
4080-div.seealso {
4081- background-color: #ffc;
4082- border: 1px solid #ff6;
4083-}
4084-
4085-div.topic {
4086- background-color: #eee;
4087-}
4088-
4089-div.warning {
4090- background-color: #ffe4e4;
4091- border: 1px solid #f66;
4092-}
4093-
4094-p.admonition-title {
4095- display: inline;
4096-}
4097-
4098-p.admonition-title:after {
4099- content: ":";
4100-}
4101-
4102-pre {
4103- padding: 10px;
4104- background-color: #F0E6D9/* {{ theme_codebgcolor }} */;
4105- color: {{ theme_codetextcolor }};
4106- line-height: 120%;
4107- border: 1px dashed #ED9821;
4108- font-size: 80%;
4109- overflow: auto;
4110- /* border-left: none; */
4111- /* border-right: none; */
4112-}
4113-
4114-tt {
4115-/* background-color: #ecf0f3;
4116- padding: 0 1px 0 1px;
4117- font-size: 0.95em;*/
4118- font-weight: 400;
4119-}
4120-
4121-div.body td {
4122- text-align: none;
4123-}
4124-
4125-table.docutils th {
4126- background-color: #DEE7EC;
4127- border: 1px solid #8CACBB;
4128- padding: 3px;
4129- text-align: center;
4130- font-style: normal;
4131- font-weight: 400;
4132-}
4133-
4134-table.docutils td {
4135- border: 1px solid #8CACBB;
4136- padding: 3px;
4137- line-height: 16px;
4138- vertical-align: middle;
4139-}
4140-
4141-.warning tt {
4142- background: #efc2c2;
4143-}
4144-
4145-.note tt {
4146- background: #d6d6d6;
4147-}
4148-
4149-.viewcode-back {
4150- font-family: {{ theme_bodyfont }};
4151-}
4152-
4153-div.viewcode-block:target {
4154- background-color: #f4debf;
4155- border-top: 1px solid #ac9;
4156- border-bottom: 1px solid #ac9;
4157-}
4158-
4159-.file-bugs {
4160- background: none repeat scroll 0 0 #E8E8E8;
4161- border: 1px solid #E0E0E0;
4162- clear: both;
4163- color: #333333;
4164- padding: 10px;
4165- text-align: center;
4166- font-size: 90%;
4167-}
4168-
4169-div.footer .footer {
4170- margin: 0 auto;
4171- overflow: hidden;
4172- padding: 10px 0;
4173- width: 960px;
4174- border-top: none;
4175-}
4176-
4177-div.footer .footer .logo {
4178- float: left;
4179- overflow: hidden;
4180- padding: 17px 0 0;
4181-}
4182-
4183-div.footer .footer .text {
4184- color: #E0E0E0;
4185- float: right;
4186- font-family: Arial,Helvetica,sans-serif;
4187- font-size: 11px;
4188- line-height: 15px;
4189- overflow: hidden;
4190- text-align: right;
4191-}
4192-
4193-div.license {
4194- font-size: 80%;
4195- /* padding: 0.5em; */
4196- text-align: center;
4197- margin: 13px 0 -15px;
4198-}
4199-
4200-#sidenavi.noborder {
4201- border-right: medium none;
4202- border-top: medium none;
4203- margin: 0;
4204-}
4205-
4206-#sidenavi {
4207- color: #333333;
4208- /* float: left; */
4209- font-family: Arial,Helvetica,sans-serif;
4210- font-size: 18px;
4211- line-height: 25px;
4212- overflow: hidden;
4213- padding: 10px 0 8px 0px;
4214- width: 255px;
4215-}
4216-
4217
4218=== added file 'doc/source/percona-theme/static/email-small.png'
4219Binary files doc/source/percona-theme/static/email-small.png 1970-01-01 00:00:00 +0000 and doc/source/percona-theme/static/email-small.png 2012-08-15 14:13:58 +0000 differ
4220=== removed file 'doc/source/percona-theme/static/email-small.png'
4221Binary files doc/source/percona-theme/static/email-small.png 2011-09-20 06:59:03 +0000 and doc/source/percona-theme/static/email-small.png 1970-01-01 00:00:00 +0000 differ
4222=== added file 'doc/source/percona-theme/static/jquery.min.js'
4223--- doc/source/percona-theme/static/jquery.min.js 1970-01-01 00:00:00 +0000
4224+++ doc/source/percona-theme/static/jquery.min.js 2012-08-15 14:13:58 +0000
4225@@ -0,0 +1,154 @@
4226+/*!
4227+ * jQuery JavaScript Library v1.4.2
4228+ * http://jquery.com/
4229+ *
4230+ * Copyright 2010, John Resig
4231+ * Dual licensed under the MIT or GPL Version 2 licenses.
4232+ * http://jquery.org/license
4233+ *
4234+ * Includes Sizzle.js
4235+ * http://sizzlejs.com/
4236+ * Copyright 2010, The Dojo Foundation
4237+ * Released under the MIT, BSD, and GPL Licenses.
4238+ *
4239+ * Date: Sat Feb 13 22:33:48 2010 -0500
4240+ */
4241+(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
4242+e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
4243+j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
4244+"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
4245+true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
4246+Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
4247+(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
4248+a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
4249+"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
4250+function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
4251+c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
4252+L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
4253+"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
4254+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
4255+d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
4256+a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
4257+!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
4258+true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
4259+var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
4260+parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
4261+false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
4262+s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
4263+applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
4264+else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
4265+a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
4266+w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
4267+cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
4268+i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
4269+" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
4270+this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
4271+e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
4272+c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
4273+a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
4274+function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
4275+k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
4276+C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
4277+null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
4278+e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
4279+f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
4280+if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
4281+fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
4282+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
4283+"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
4284+a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
4285+isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
4286+{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
4287+if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
4288+e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
4289+"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
4290+d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
4291+!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
4292+toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
4293+u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
4294+function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
4295+if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
4296+e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
4297+t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
4298+g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
4299+for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
4300+1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
4301+CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
4302+relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
4303+l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
4304+h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
4305+CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
4306+g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
4307+text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
4308+setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
4309+h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
4310+m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
4311+"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
4312+h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
4313+!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
4314+h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
4315+q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
4316+if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
4317+(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
4318+function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
4319+gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
4320+c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
4321+{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
4322+"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
4323+d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
4324+a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
4325+1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
4326+a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
4327+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
4328+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
4329+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
4330+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
4331+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
4332+""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
4333+this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
4334+u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
4335+1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
4336+return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
4337+""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
4338+c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
4339+c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
4340+function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
4341+Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
4342+"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
4343+a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
4344+a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
4345+"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
4346+serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
4347+function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
4348+global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
4349+e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
4350+"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
4351+false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
4352+false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
4353+c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
4354+d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
4355+g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
4356+1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
4357+"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
4358+if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
4359+this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
4360+"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
4361+animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
4362+j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
4363+this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
4364+"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
4365+c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
4366+this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
4367+this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
4368+e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
4369+c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
4370+function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
4371+this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
4372+k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
4373+f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
4374+a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
4375+c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
4376+d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
4377+f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
4378+"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
4379+e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
4380
4381=== removed file 'doc/source/percona-theme/static/jquery.min.js'
4382--- doc/source/percona-theme/static/jquery.min.js 2011-09-20 06:59:03 +0000
4383+++ doc/source/percona-theme/static/jquery.min.js 1970-01-01 00:00:00 +0000
4384@@ -1,154 +0,0 @@
4385-/*!
4386- * jQuery JavaScript Library v1.4.2
4387- * http://jquery.com/
4388- *
4389- * Copyright 2010, John Resig
4390- * Dual licensed under the MIT or GPL Version 2 licenses.
4391- * http://jquery.org/license
4392- *
4393- * Includes Sizzle.js
4394- * http://sizzlejs.com/
4395- * Copyright 2010, The Dojo Foundation
4396- * Released under the MIT, BSD, and GPL Licenses.
4397- *
4398- * Date: Sat Feb 13 22:33:48 2010 -0500
4399- */
4400-(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
4401-e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
4402-j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
4403-"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
4404-true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
4405-Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
4406-(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
4407-a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
4408-"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
4409-function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
4410-c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
4411-L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
4412-"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
4413-a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
4414-d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
4415-a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
4416-!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
4417-true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
4418-var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
4419-parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
4420-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
4421-s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
4422-applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
4423-else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
4424-a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
4425-w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
4426-cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
4427-i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
4428-" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
4429-this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
4430-e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
4431-c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
4432-a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
4433-function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
4434-k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
4435-C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
4436-null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
4437-e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
4438-f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
4439-if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
4440-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
4441-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
4442-"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
4443-a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
4444-isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
4445-{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
4446-if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
4447-e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
4448-"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
4449-d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
4450-!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
4451-toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
4452-u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
4453-function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
4454-if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
4455-e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
4456-t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
4457-g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
4458-for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
4459-1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
4460-CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
4461-relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
4462-l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
4463-h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
4464-CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
4465-g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
4466-text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
4467-setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
4468-h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
4469-m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
4470-"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
4471-h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
4472-!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
4473-h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
4474-q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
4475-if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
4476-(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
4477-function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
4478-gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
4479-c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
4480-{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
4481-"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
4482-d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
4483-a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
4484-1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
4485-a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
4486-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
4487-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
4488-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
4489-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
4490-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
4491-""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
4492-this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
4493-u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
4494-1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
4495-return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
4496-""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
4497-c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
4498-c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
4499-function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
4500-Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
4501-"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
4502-a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
4503-a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
4504-"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
4505-serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
4506-function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
4507-global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
4508-e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
4509-"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
4510-false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
4511-false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
4512-c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
4513-d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
4514-g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
4515-1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
4516-"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
4517-if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
4518-this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
4519-"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
4520-animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
4521-j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
4522-this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
4523-"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
4524-c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
4525-this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
4526-this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
4527-e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
4528-c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
4529-function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
4530-this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
4531-k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
4532-f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
4533-a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
4534-c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
4535-d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
4536-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
4537-"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
4538-e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
4539
4540=== added file 'doc/source/percona-theme/static/percona.com.css'
4541--- doc/source/percona-theme/static/percona.com.css 1970-01-01 00:00:00 +0000
4542+++ doc/source/percona-theme/static/percona.com.css 2012-08-15 14:13:58 +0000
4543@@ -0,0 +1,1850 @@
4544+body, html{
4545+ height:100%;
4546+ margin:0;
4547+ padding:0;
4548+ font-size: 12px;
4549+ line-height: 16px;
4550+ font-family: Arial;
4551+ color: #333333;
4552+}
4553+
4554+form{
4555+ display:inline
4556+}
4557+
4558+a, a:visited{
4559+ border:none;
4560+ cursor:pointer;
4561+ color: #d5390b;
4562+ text-decoration: underline;
4563+}
4564+a:hover
4565+{
4566+ color: #712000;
4567+ text-decoration: underline;
4568+}
4569+
4570+img{
4571+ border:none
4572+}
4573+
4574+div,img{
4575+ behavior:url(/static/css/iepngfix.htc)
4576+}
4577+
4578+em
4579+{
4580+ font-style: italic;
4581+}
4582+
4583+del
4584+{
4585+ text-decoration: line-through;
4586+}
4587+
4588+.hidden{
4589+ display:none
4590+}
4591+
4592+strong {
4593+ font-weight: bold;
4594+}
4595+
4596+html, body {
4597+ height: 100%;
4598+}
4599+
4600+#stickywrapper {
4601+ position: relative;
4602+ min-height: 100%;
4603+}
4604+
4605+* html #stickywrapper {
4606+ height: 100%;
4607+}
4608+
4609+#stickycontent {
4610+ padding-bottom: 102px;
4611+}
4612+
4613+#stickyfooter {
4614+ position: relative;
4615+ margin: -97px auto 0 auto;
4616+}
4617+a.links
4618+{
4619+ font-style: oblique;
4620+ text-decoration: underline;
4621+}
4622+span.subpart
4623+{
4624+ font-weight: bold;
4625+}
4626+
4627+/**
4628+ * LAYOUT
4629+ */
4630+
4631+#header{
4632+ background:#333;
4633+ height:95px;
4634+ overflow:hidden;
4635+ zoom:1
4636+}
4637+
4638+#header .header{
4639+ height:95px;
4640+ margin:0 auto;
4641+ overflow:hidden;
4642+ width:960px;
4643+ zoom:1
4644+}
4645+#header .header .logo{
4646+ float:left;
4647+ overflow:hidden;
4648+ padding:20px 0;
4649+ width:240px;
4650+ zoom:1
4651+}
4652+
4653+#header .header .logo
4654+{
4655+ overflow: hidden;
4656+ zoom: 1;
4657+ float: left;
4658+ width: 240px;
4659+ padding: 20px 0px;
4660+}
4661+
4662+#header .header .right
4663+{
4664+ overflow: hidden;
4665+ zoom: 1;
4666+ float: left;
4667+ width: 720px;
4668+ height: 35px;
4669+ padding: 30px 0px;
4670+}
4671+
4672+
4673+#header .header .right .searchlink
4674+{
4675+ overflow: hidden;
4676+ zoom: 1;
4677+ width: 35px;
4678+ height: 35px;
4679+ float: right;
4680+ padding: 0px 0px 0px 10px;
4681+}
4682+
4683+
4684+#header .header .right .navicontainer
4685+{
4686+ overflow: hidden;
4687+ zoom: 1;
4688+ float: right;
4689+ height: 35px;
4690+ background: #ffffff url(ui-navi-l.png) top left no-repeat;
4691+}
4692+
4693+#header .header .right .navi
4694+{
4695+ overflow: hidden;
4696+ zoom: 1;
4697+ height: 27px;
4698+ padding: 4px 10px;
4699+ background: url(ui-navi-r.png) top right no-repeat;
4700+}
4701+
4702+#header .header .right .navicontainer .navi span
4703+{
4704+ overflow: hidden;
4705+ zoom: 1;
4706+ height: 27px;
4707+ float: left;
4708+ margin: 0px;
4709+}
4710+#header .header .right .navicontainer .navi span:hover
4711+{
4712+ background: #f0f0f0 url(ui-navi-hover-l.png) top left no-repeat;
4713+}
4714+#header .header .right .navicontainer .navi span.selected, #header .header .right .navicontainer .navi span.selected:hover
4715+{
4716+ background: #d5390b url(ui-navi-sel-l.png) top left no-repeat;
4717+}
4718+
4719+#header .header .right .navicontainer .navi span a, #header .header .right .navicontainer .navi span a:visited
4720+{
4721+ display: block;
4722+ padding: 6px 10px 4px 10px;
4723+ height: 17px;
4724+ font-family: Arial, Helvetica, sans-serif;
4725+ font-size: 14px;
4726+ line-height: 14px;
4727+ color: #000000;
4728+ text-decoration: none;
4729+}
4730+#header .header .right .navicontainer .navi span a:hover
4731+{
4732+ background: url(ui-navi-hover-r.png) top right no-repeat;
4733+}
4734+#header .header .right .navicontainer .navi span.selected a.selected, #header .header .right .navicontainer .navi span.selected a.selected:visited, #header .header .right .navicontainer .navi span.selected a.selected:hover
4735+{
4736+ background: url(ui-navi-sel-r.png) top right no-repeat;
4737+ color: #ffffff;
4738+}
4739+
4740+
4741+
4742+/*
4743+ * Banners
4744+ */
4745+
4746+#slogan
4747+{
4748+ overflow: hidden;
4749+ zoom: 1;
4750+ height: 125px;
4751+ background: #d24300 url(ui-orange-front.png) bottom center no-repeat;
4752+ text-align: center;
4753+}
4754+
4755+#stripe
4756+{
4757+ overflow: hidden;
4758+ zoom: 1;
4759+ height: 20px;
4760+ background: #d24300 url(ui-orange-content.png) top center no-repeat;
4761+}
4762+
4763+
4764+
4765+/*
4766+ * Footer
4767+ */
4768+
4769+#footer
4770+{
4771+ overflow: hidden;
4772+ zoom: 1;
4773+ background: #333333;
4774+ border-top: 2px #d95200 solid;
4775+}
4776+
4777+#footer .footer
4778+{
4779+ overflow: hidden;
4780+ zoom: 1;
4781+ width: 960px;
4782+ margin: 0px auto;
4783+ padding: 10px 0px;
4784+}
4785+
4786+#footer .footer .logo
4787+{
4788+ overflow: hidden;
4789+ zoom: 1;
4790+ float: left;
4791+ padding: 17px 0px 0px 0px;
4792+}
4793+
4794+#footer .footer .text
4795+{
4796+ overflow: hidden;
4797+ zoom: 1;
4798+ float: right;
4799+ text-align: right;
4800+ font-family: Arial, Helvetica, sans-serif;
4801+ font-size: 11px;
4802+ line-height: 15px;
4803+ color: #e0e0e0;
4804+}
4805+
4806+#footer .footer .text a, #footer .footer .text a:visited
4807+{
4808+ color: #e0e0e0;
4809+ text-decoration: none;
4810+}
4811+#footer .footer .text a:hover
4812+{
4813+ color: #ffffff;
4814+ text-decoration: underline;
4815+}
4816+
4817+
4818+/*
4819+ * Menu Dropdowns
4820+ */
4821+
4822+div.navi-dropdown
4823+{
4824+ display: none;
4825+ position: absolute;
4826+ overflow: hidden;
4827+ zoom: 1;
4828+ width: 255px;
4829+ z-index: 900;
4830+}
4831+
4832+div.navi-dropdown .navi-dropdown-header-l
4833+{
4834+ overflow: hidden;
4835+ zoom: 1;
4836+ width: 255px;
4837+ height: 20px;
4838+ background: url(ui-dropdown-header-l.png) top left no-repeat;
4839+}
4840+
4841+div.navi-dropdown .navi-dropdown-header-r
4842+{
4843+ overflow: hidden;
4844+ zoom: 1;
4845+ width: 255px;
4846+ height: 20px;
4847+ background: url(ui-dropdown-header-r.png) top left no-repeat;
4848+}
4849+
4850+div.navi-dropdown .navi-dropdown-content
4851+{
4852+ overflow: hidden;
4853+ zoom: 1;
4854+ width: 225px;
4855+ padding: 0px 15px 5px 15px;
4856+ background: #ffffff url(ui-dropdown-bg.png) repeat-y;
4857+ font-family: Arial, Helvetica, sans-serif;
4858+ font-size: 14px;
4859+ line-height: 20px;
4860+ color: #333333;
4861+}
4862+
4863+div.navi-dropdown .navi-dropdown-content .item
4864+{
4865+ padding: 3px 0px 1px 0px;
4866+}
4867+
4868+div.navi-dropdown .navi-dropdown-content a, div.navi-dropdown .navi-dropdown-content a:visited
4869+{
4870+ display: block;
4871+ color: #333333;
4872+ text-decoration: none;
4873+}
4874+div.navi-dropdown .navi-dropdown-content a:hover
4875+{
4876+ color: #d12907;
4877+ text-decoration: underline;
4878+}
4879+
4880+div.navi-dropdown .navi-dropdown-footer
4881+{
4882+ overflow: hidden;
4883+ zoom: 1;
4884+ width: 255px;
4885+ height: 10px;
4886+ background: url(ui-dropdown-footer.png) top left no-repeat;
4887+}
4888+
4889+
4890+div.search-dropdown
4891+{
4892+ display: none;
4893+ position: absolute;
4894+ overflow: hidden;
4895+ zoom: 1;
4896+ width: 255px;
4897+}
4898+
4899+div.search-dropdown .search-dropdown-header
4900+{
4901+ overflow: hidden;
4902+ zoom: 1;
4903+ width: 255px;
4904+ height: 20px;
4905+ background: url(ui-dropdown-header-search.png) top left no-repeat;
4906+}
4907+
4908+div.search-dropdown .search-dropdown-content
4909+{
4910+ overflow: hidden;
4911+ zoom: 1;
4912+ width: 225px;
4913+ padding: 0px 15px 5px 15px;
4914+ background: #ffffff url(ui-dropdown-bg.png) repeat-y;
4915+ font-family: Arial, Helvetica, sans-serif;
4916+ font-size: 14px;
4917+ line-height: 20px;
4918+ color: #333333;
4919+}
4920+
4921+div.search-dropdown .search-dropdown-content .form
4922+{
4923+ padding-top: 2px;
4924+}
4925+
4926+div.search-dropdown .search-dropdown-content .form input
4927+{
4928+ border: 1px #c0c0c0 solid;
4929+ padding: 4px;
4930+ width: 210px;
4931+ outline: none;
4932+}
4933+div.search-dropdown .search-dropdown-content .form input:focus
4934+{
4935+ border: 1px #707070 solid;
4936+ outline: none;
4937+}
4938+
4939+div.search-dropdown .search-dropdown-footer
4940+{
4941+ overflow: hidden;
4942+ zoom: 1;
4943+ width: 255px;
4944+ height: 10px;
4945+ background: url(ui-dropdown-footer.png) top left no-repeat;
4946+}
4947+
4948+
4949+
4950+#left-column .navi-title {
4951+ font-size: 15px;
4952+ color: #d5390b;
4953+ margin-bottom: 20px;
4954+}
4955+
4956+#left-column .navi-title span {
4957+ background: url("left_menu_title_bullet.png") right top no-repeat;
4958+ padding-right: 20px;
4959+ padding-left: 10px;
4960+}
4961+
4962+#left-column .item, #left-column .subitem {
4963+
4964+ border-top: 1px solid #f3f1ee;
4965+}
4966+
4967+#left-column .subitem {
4968+ padding-left: 15px;
4969+}
4970+
4971+#left-column .item a, #left-column .subitem a {
4972+ min-height: 18px;
4973+ /* line-height: 23px; */
4974+
4975+ color: #a3a3a3;
4976+ font-size: 11px;
4977+ text-decoration: none;
4978+ display: block;
4979+ padding: 5px 0 2px 10px;
4980+ background: url('left_column_item_bulletpoint.png') left no-repeat;
4981+}
4982+#left-column .item a:hover {
4983+ text-decoration: underline;
4984+}
4985+
4986+#left-column .selected > a {
4987+ color: #b82c02;
4988+ background: url('left_menu_item_selected_bulletpoint.png') left no-repeat;
4989+}
4990+
4991+/*
4992+ * Front page
4993+ */
4994+.frontpage-text {
4995+ font-size: 13px;
4996+}
4997+div.frontpage-banners
4998+{
4999+ overflow: hidden;
5000+ zoom: 1;
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: