OSDN Git Service

mediaプラグイン 実装 保存まで
authorCake <cake_67@users.sourceforge.jp>
Mon, 15 Feb 2010 16:28:43 +0000 (01:28 +0900)
committerCake <cake_67@users.sourceforge.jp>
Mon, 15 Feb 2010 16:33:04 +0000 (01:33 +0900)
127 files changed:
.gitignore
app/config/bootstrap.php
app/controllers/users_controller.php
app/models/user.php
app/plugins/media/AUTHORS [new file with mode: 0644]
app/plugins/media/LICENSE [new file with mode: 0644]
app/plugins/media/README [new file with mode: 0644]
app/plugins/media/config/core.php [new file with mode: 0644]
app/plugins/media/config/sql/media.php [new file with mode: 0644]
app/plugins/media/config/sql/media.sql [new file with mode: 0644]
app/plugins/media/media_app_controller.php [new file with mode: 0644]
app/plugins/media/media_app_model.php [new file with mode: 0644]
app/plugins/media/models/attachment.php [new file with mode: 0644]
app/plugins/media/models/behaviors/media.php [new file with mode: 0644]
app/plugins/media/models/behaviors/polymorphic.php [new file with mode: 0644]
app/plugins/media/models/behaviors/transfer.php [new file with mode: 0644]
app/plugins/media/tests/cases/models/attachment.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/models/behaviors/media.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/models/behaviors/transfer.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/models/models.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/media_validation.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/medium/adapter/ffmpeg_audio.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/medium/adapter/ffmpeg_video.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/medium/adapter/gd.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/medium/adapter/getid3_audio.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/medium/adapter/getid3_video.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/medium/adapter/imagick.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/medium/adapter/imagick_shell.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/medium/adapter/pear_mp3.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/medium/document.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/medium/image.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/medium/medium.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/mime_glob.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/mime_magic.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/mime_type.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/vendors/transfer_validation.test.php [new file with mode: 0644]
app/plugins/media/tests/cases/views/helpers/medium.test.php [new file with mode: 0644]
app/plugins/media/tests/fixtures/actor_fixture.php [new file with mode: 0644]
app/plugins/media/tests/fixtures/attachment_fixture.php [new file with mode: 0644]
app/plugins/media/tests/fixtures/movie_fixture.php [new file with mode: 0644]
app/plugins/media/tests/fixtures/pirate_fixture.php [new file with mode: 0644]
app/plugins/media/tests/fixtures/song_fixture.php [new file with mode: 0644]
app/plugins/media/tests/fixtures/test_data.php [new file with mode: 0644]
app/plugins/media/tests/groups/compatible.group.php [new file with mode: 0644]
app/plugins/media/tests/groups/medium.group.php [new file with mode: 0644]
app/plugins/media/tests/groups/mime.group.php [new file with mode: 0644]
app/plugins/media/tests/groups/model.group.php [new file with mode: 0644]
app/plugins/media/tests/groups/validation.group.php [new file with mode: 0644]
app/plugins/media/vendors/media_validation.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/basic_image.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/basic_text.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/css_tidy.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/ffmpeg_audio.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/ffmpeg_video.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/gd.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/getid3_audio.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/getid3_video.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/imagick.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/imagick_shell.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/jsmin.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/pear_mp3.php [new file with mode: 0644]
app/plugins/media/vendors/medium/adapter/pear_text.php [new file with mode: 0644]
app/plugins/media/vendors/medium/audio.php [new file with mode: 0644]
app/plugins/media/vendors/medium/css.php [new file with mode: 0644]
app/plugins/media/vendors/medium/document.php [new file with mode: 0644]
app/plugins/media/vendors/medium/generic.php [new file with mode: 0644]
app/plugins/media/vendors/medium/icon.php [new file with mode: 0644]
app/plugins/media/vendors/medium/image.php [new file with mode: 0644]
app/plugins/media/vendors/medium/js.php [new file with mode: 0644]
app/plugins/media/vendors/medium/medium.php [new file with mode: 0644]
app/plugins/media/vendors/medium/text.php [new file with mode: 0644]
app/plugins/media/vendors/medium/video.php [new file with mode: 0644]
app/plugins/media/vendors/mime_glob.db [new file with mode: 0644]
app/plugins/media/vendors/mime_glob.php [new file with mode: 0644]
app/plugins/media/vendors/mime_magic.db [new file with mode: 0644]
app/plugins/media/vendors/mime_magic.php [new file with mode: 0644]
app/plugins/media/vendors/mime_type.php [new file with mode: 0644]
app/plugins/media/vendors/shells/media.php [new file with mode: 0644]
app/plugins/media/vendors/shells/tasks/collect.php [new file with mode: 0644]
app/plugins/media/vendors/shells/tasks/make.php [new file with mode: 0644]
app/plugins/media/vendors/shells/tasks/sync.php [new file with mode: 0644]
app/plugins/media/vendors/transfer_validation.php [new file with mode: 0644]
app/plugins/media/views/elements/attachments.ctp [new file with mode: 0644]
app/plugins/media/views/helpers/medium.php [new file with mode: 0644]
app/views/layouts/default.ctp
app/views/users/edit_image.ctp [new file with mode: 0644]
app/webroot/media/filter/l/transfer/img/toomuch.png [new file with mode: 0644]
app/webroot/media/filter/m/transfer/img/toomuch.png [new file with mode: 0644]
app/webroot/media/filter/s/transfer/img/toomuch.png [new file with mode: 0644]
app/webroot/media/filter/xl/transfer/img/toomuch.png [new file with mode: 0644]
app/webroot/media/filter/xs/transfer/img/toomuch.png [new file with mode: 0644]
app/webroot/media/filter/xxs/transfer/img/toomuch.png [new file with mode: 0644]
app/webroot/media/static/css/base.css [new file with mode: 0644]
app/webroot/media/static/css/jquery-jquery-ui.css [new file with mode: 0644]
app/webroot/media/static/css/jquery-ui.accordion.css [new file with mode: 0644]
app/webroot/media/static/css/jquery-ui.all.css [new file with mode: 0644]
app/webroot/media/static/css/jquery-ui.base.css [new file with mode: 0644]
app/webroot/media/static/css/jquery-ui.core.css [new file with mode: 0644]
app/webroot/media/static/css/jquery-ui.datepicker.css [new file with mode: 0644]
app/webroot/media/static/css/jquery-ui.dialog.css [new file with mode: 0644]
app/webroot/media/static/css/jquery-ui.progressbar.css [new file with mode: 0644]
app/webroot/media/static/css/jquery-ui.resizable.css [new file with mode: 0644]
app/webroot/media/static/css/jquery-ui.slider.css [new file with mode: 0644]
app/webroot/media/static/css/jquery-ui.tabs.css [new file with mode: 0644]
app/webroot/media/static/css/jquery-ui.theme.css [new file with mode: 0644]
app/webroot/media/static/gen/jquery-1.3.2.min.js [new file with mode: 0644]
app/webroot/media/static/gen/jquery-ui-1.7.2.custom.min.js [new file with mode: 0644]
app/webroot/media/static/gen/jquery.droppy.js [new file with mode: 0644]
app/webroot/media/static/img/cake.icon.gif [new file with mode: 0644]
app/webroot/media/static/img/cake.power.gif [new file with mode: 0644]
app/webroot/media/static/img/favicon.ico [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-bg_glass_55_fcf0ba_1x400.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-bg_gloss-wave_100_ece8da_500x100.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_100_f5f3e5_1x100.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_100_fafaf4_1x100.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_15_459e00_1x100.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_95_cccccc_1x100.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-bg_highlight-soft_25_67b021_1x100.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-bg_highlight-soft_95_ffedad_1x100.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-bg_inset-soft_15_2b2922_1x100.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-icons_808080_256x240.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-icons_847e71_256x240.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-icons_8DC262_256x240.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-icons_cd0a0a_256x240.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-icons_eeeeee_256x240.png [new file with mode: 0644]
app/webroot/media/static/img/jquery-images/ui-icons_ffffff_256x240.png [new file with mode: 0644]
app/webroot/media/transfer/.htaccess [new file with mode: 0755]

index e1f18f9..dd5742f 100644 (file)
@@ -2,4 +2,5 @@
 app/tmp/*
 app/config/core.php
 app/config/database.php
+app/webroot/media/*
 
index 85d4d07..ae0abd0 100644 (file)
@@ -45,5 +45,8 @@
 require_once ('init.php');
 require_once ('config.php');
 
+/* media plugin */
+require_once(APP.'plugins'.DS.'media'.DS.'config'.DS.'core.php');
+
 /* 汎用関数 */
 require_once (APP. DS. 'libs'. DS. 'core_plus.php');
index a57357e..03282a4 100644 (file)
@@ -10,6 +10,7 @@ class UsersController extends ModuleController {
        var $actionMapPlus = array(
                'listview' => 'read',
                'change_password' => 'update',
+               'edit_image' => 'update',
        );
 
        var $disableTokenActions = array('add','mobile_add');
@@ -75,7 +76,26 @@ class UsersController extends ModuleController {
                self::_edit($id);
        }
 
-       function change_password($id = null) {
+       function edit_image() {
+               $id = $this->AuthPlus->user("id");
+
+               if (!empty($this->data)) {
+                       $this->data['User']['id'] = $id;
+
+                       if ($this->User->saveAll($this->data, array('validate' => 'first'))) {
+                               $this->Session->setFlash(__('The User image has been saved', true));
+                               $this->redirect(array('action'=>'index'));
+                       } else {
+                               $this->Session->setFlash(__('The User image could not be saved. Please, try again.', true));
+                               $this->data['User']['id'] = $id;
+                       }
+               }
+
+               $this->data = $this->User->read(null, $id);
+       }
+
+       function change_password() {
+               $id = $this->AuthPlus->user("id");
                self::_change_password($id);
 
                $this->set('passwordLength', Configure::read('User.Password.Length'));
index 8da37e3..3956298 100644 (file)
@@ -11,6 +11,15 @@ class User extends AppModel {
                'Containable',
        );
 
+       //The Associations below have been created with all possible keys, those that are not needed can be removed
+       var $hasMany = array(
+               'Attachment' => array(
+                       'className' => 'Media.Attachment',
+                       'foreignKey' => 'foreign_key',
+                       'conditions' => array('model' => 'User'),
+               )
+       );
+
        var $fields = array(
                'add' => array('group_id', 'name', 'username', 'password', 'useragent', 'host'),
                'edit' => array('name'),
diff --git a/app/plugins/media/AUTHORS b/app/plugins/media/AUTHORS
new file mode 100644 (file)
index 0000000..1b5fd7e
--- /dev/null
@@ -0,0 +1,3 @@
+David Persson <davidpersson@gmx.de>
+Naonak <noanak@free.fr>
+Adrien Gibrat <adrien.gibrat@gmail.com>
\ No newline at end of file
diff --git a/app/plugins/media/LICENSE b/app/plugins/media/LICENSE
new file mode 100644 (file)
index 0000000..0288387
--- /dev/null
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2007-2010 David Persson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/app/plugins/media/README b/app/plugins/media/README
new file mode 100644 (file)
index 0000000..eb5fad3
--- /dev/null
@@ -0,0 +1,29 @@
+
+  xx xx   xxxx  xxx  x   xxx
+  x x x  x x    x  x x  x x x
+  x   x   xxxx  xxx  x  x   x
+  Plugin for CakePHP
+
+  Authors
+  -------
+  See the AUTHORS file.
+
+  Copyright & License
+  -------------------
+  Media Plugin for CakePHP is Copyright (c) 2007-2010 David Persson
+  if not otherwise stated. The code is distributed under the terms
+  of the MIT License. For the full license text see the LICENSE file.
+
+  Download
+  --------
+  Tar: http://github.com/davidpersson/media/tarball/master
+  Zip: http://github.com/davidpersson/media/zipball/master
+
+  Installation
+  ------------
+  Extract the downloaded archive.
+  Move or copy the extracted directory davidpersson-media-[hash]
+  to /path/to/your/app/plugins/media
+
+  For more information please visit the media wiki at
+  http://github.com/davidpersson/media/wikis
diff --git a/app/plugins/media/config/core.php b/app/plugins/media/config/core.php
new file mode 100644 (file)
index 0000000..935c866
--- /dev/null
@@ -0,0 +1,135 @@
+<?php
+/**
+ * Plugin Configuration File
+ *
+ * In order to make the plugin work you must include this file
+ * within either your app’s `core.php` or `bootstrap.php`.
+ *
+ * To overwrite defaults you'll define constants before including this file,
+ * and overwrite other settings selectively with `Configure::write()`
+ * calls after including it.
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.config
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ * @since      media 0.50
+ */
+/**
+ * Directory paths
+ *
+ * Each constant is defined with a value which is
+ * an absolute (slash terminated) path to a directory holding media files.
+ *
+ * Example:
+ *     `'/var/www/example.org/htdocs/app/webroot/media/'`
+ */
+if (!defined('MEDIA')) {
+       define('MEDIA', WWW_ROOT . 'media' . DS);
+}
+if (!defined('MEDIA_STATIC')) {
+       define('MEDIA_STATIC', MEDIA . 'static' . DS);
+}
+if (!defined('MEDIA_FILTER')) {
+       define('MEDIA_FILTER', MEDIA . 'filter' . DS);
+}
+if (!defined('MEDIA_TRANSFER')) {
+       define('MEDIA_TRANSFER', MEDIA . 'transfer' . DS);
+}
+/**
+ * URL paths
+ *
+ * Each constant is defined with a value which is
+ * either a (slash terminated) complete URL or an path fragment relative to your webroot.
+ *
+ * In case the corresponding directory isn't served use `false` as a value.
+ *
+ * Examples:
+ *     `'http://www.example.org/app/media/'`
+ *     `'media/'`
+ *     `false`
+ */
+if (!defined('MEDIA_URL')) {
+       define('MEDIA_URL', 'media/');
+}
+if (!defined('MEDIA_STATIC_URL')) {
+       define('MEDIA_STATIC_URL', MEDIA_URL . 'static/');
+}
+if (!defined('MEDIA_FILTER_URL')) {
+       define('MEDIA_FILTER_URL', MEDIA_URL . 'filter/');
+}
+if (!defined('MEDIA_TRANSFER_URL')) {
+       define('MEDIA_TRANSFER_URL', MEDIA_URL . 'transfer/');
+}
+/**
+ * MIME type detection by file extension
+ *
+ * Options:
+ *     engine - `null` for autodetection or `'core'`
+ *     db     - Absolute path to a glob db file in freedesktop, apache, or php format
+ *              (required for core engine)
+ */
+Configure::write('Mime.glob', array(
+       'engine' => null,
+       'db'     => null,
+));
+/**
+ * MIME type detection by file content
+ *
+ * Options:
+ *     engine - `null` for autodetection or `'core'`, `'fileinfo'`, `'mime_magic'`
+ *     db     - Absolute path to a glob db file in freedesktop, apache, or php format
+ *              (optional for the fileinfo and mime_magic engine, required for core engine)
+ */
+Configure::write('Mime.magic', array(
+       'engine' => null,
+       'db'     => null,
+));
+/**
+ * Filters and versions
+ *
+ * For each medium type a set of filters keyed by version name is configured.
+ * A filter is a set of instructions which are processed by the Medium class.
+ */
+Configure::write('Media.filter.audio', array(
+       's'   => array('convert' => 'image/png', 'fitCrop' => array(100, 100)),
+       'm'   => array('convert' => 'image/png', 'fit' => array(300, 300)),
+));
+Configure::write('Media.filter.css', array(
+       'c'   => array('compress'),
+));
+Configure::write('Media.filter.document', array(
+       'xxs' => array('convert' => 'image/png', 'zoomCrop' => array(16, 16)),
+       's'   => array('convert' => 'image/png', 'fitCrop' => array(100, 100)),
+       'm'   => array('convert' => 'image/png', 'fit' => array(300, 300)),
+));
+Configure::write('Media.filter.generic', array());
+Configure::write('Media.filter.image', array(
+       'xxs' => array('convert' => 'image/png', 'zoomCrop' => array(16, 16)),
+       'xs'  => array('convert' => 'image/png', 'zoomCrop' => array(32, 32)),
+       's'   => array('convert' => 'image/png', 'fitCrop' => array(100, 100)),
+       'm'   => array('convert' => 'image/png', 'fit' => array(300, 300)),
+       'l'   => array('convert' => 'image/png', 'fit' => array(450, 450)),
+       'xl'  => array('convert' => 'image/png', 'fit' => array(680, 440)),
+       )
+);
+Configure::write('Media.filter.icon', array());
+Configure::write('Media.filter.js', array(
+       'c'   => array('compress'),
+));
+Configure::write('Media.filter.text', array());
+Configure::write('Media.filter.video', array(
+       'xxs' => array('convert' => 'image/png', 'zoomCrop' => array(16, 16)),
+       's'   => array('convert' => 'image/png', 'fitCrop' => array(100, 100)),
+       'm'   => array('convert' => 'image/png', 'fit' => array(300, 300)),
+));
+?>
diff --git a/app/plugins/media/config/sql/media.php b/app/plugins/media/config/sql/media.php
new file mode 100644 (file)
index 0000000..2c04933
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Media Schema File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.config.sql
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Media Schema Class
+ *
+ * @package    media
+ * @subpackage media.config.sql
+ */
+class MediaSchema extends CakeSchema {
+/**
+ * before
+ *
+ * @param array $event
+ * @access public
+ */
+       function before($event = array()) {
+               return true;
+       }
+/**
+ * after
+ *
+ * @param array $event
+ * @access public
+ */
+       function after($event = array()) {
+       }
+/**
+ * attachments
+ *
+ * @var array
+ * @access public
+ */
+       var $attachments = array(
+               'id'          => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary', 'extra' => 'auto_increment', 'length' => 10),
+               'model'       => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 255),
+               'foreign_key' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10),
+               'dirname'     => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 255),
+               'basename'    => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 255),
+               'checksum'    => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 255),
+               'group'       => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 255),
+               'alternative' => array('type' => 'string', 'null' => true, 'default' => NULL,'length' => 50),
+               'created'     => array('type' => 'datetime', 'null' => true, 'default' => NULL),
+               'modified'    => array('type' => 'datetime', 'null' => true, 'default' => NULL),
+               'indexes'     => array('PRIMARY' => array('column' => 'id', 'unique' => 1))
+       );
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/config/sql/media.sql b/app/plugins/media/config/sql/media.sql
new file mode 100644 (file)
index 0000000..3ca0a89
--- /dev/null
@@ -0,0 +1,14 @@
+CREATE TABLE IF NOT EXISTS `attachments` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `model` varchar(255) NOT NULL,
+  `foreign_key` int(10) NOT NULL,
+  `dirname` varchar(255) default NULL,
+  `basename` varchar(255) NOT NULL,
+  `checksum` varchar(255) NOT NULL,
+  `alternative` varchar(50) default NULL,
+  `group` varchar(255) default NULL,
+  `created` datetime default NULL,
+  `modified` datetime default NULL,
+  PRIMARY KEY  (`id`)
+);
+
diff --git a/app/plugins/media/media_app_controller.php b/app/plugins/media/media_app_controller.php
new file mode 100644 (file)
index 0000000..adbf2ab
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Media App Controller File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.controllers
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Media App Controller Class
+ *
+ * @package    media
+ * @subpackage media.controllers
+ */
+class MediaAppController extends AppController {
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/media_app_model.php b/app/plugins/media/media_app_model.php
new file mode 100644 (file)
index 0000000..7aa55c6
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Media App Model File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.models
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Media App Model Class
+ *
+ * @package    media
+ * @subpackage media.models
+ */
+class MediaAppModel extends AppModel {
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/models/attachment.php b/app/plugins/media/models/attachment.php
new file mode 100644 (file)
index 0000000..ffd3aec
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Attachment Model File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.models
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Attachment Model Class
+ *
+ * A ready-to-use model combining multiple behaviors.
+ *
+ * @package    media
+ * @subpackage media.models
+ */
+class Attachment extends MediaAppModel {
+/**
+ * Name of model
+ *
+ * @var string
+ * @access public
+ */
+       var $name = 'Attachment';
+/**
+ * Name of table to use
+ *
+ * @var mixed
+ * @access public
+ */
+       var $useTable = 'attachments';
+/**
+ * actsAs property
+ *
+ * @var array
+ * @access public
+ */
+       var $actsAs = array(
+               'Media.Polymorphic' => array(
+                       'classField' => 'model',
+                       'foreignKey' => 'foreign_key',
+               ),
+               'Media.Transfer' => array(
+                       'trustClient'     => false,
+                       'destinationFile' => ':Medium.short::DS::Source.basename:',
+                       'baseDirectory'   => MEDIA_TRANSFER,
+                       'createDirectory' => true,
+                       'alternativeFile' => 100
+               ),
+               'Media.Media' => array(
+                       'metadataLevel'   => 2,
+                       'makeVersions'    => true,
+                       'filterDirectory' => MEDIA_FILTER,
+       ));
+/**
+ * Validation rules for file and alternative fields
+ *
+ * For more information on the rules used here
+ * see the source of TransferBehavior and MediaBehavior or
+ * the test case for MediaValidation.
+ *
+ * If you experience problems with your model not validating,
+ * try commenting the mimeType rule or providing less strict
+ * settings for single rules.
+ *
+ * `checkExtension()` and `checkMimeType()` take both a blacklist and
+ * a whitelist. If you are on windows make sure that you addtionally
+ * specify the `'tmp'` extension in case you are using a whitelist.
+ *
+ * @var array
+ * @access public
+ */
+       var $validate = array(
+               'file' => array(
+                       'resource'   => array('rule' => 'checkResource'),
+                       'access'     => array('rule' => 'checkAccess'),
+                       'location'   => array('rule' => array('checkLocation', array(
+                               MEDIA_TRANSFER, '/tmp/'
+                       ))),
+                       'permission' => array('rule' => array('checkPermission', '*')),
+                       'size'       => array('rule' => array('checkSize', '5M')),
+                       'pixels'     => array('rule' => array('checkPixels', '1600x1600')),
+                       'extension'  => array('rule' => array('checkExtension', false, array(
+                               'jpg', 'jpeg', 'png', 'tif', 'tiff', 'gif', 'pdf', 'tmp'
+                       ))),
+                       'mimeType'   => array('rule' => array('checkMimeType', false, array(
+                               'image/jpeg', 'image/png', 'image/tiff', 'image/gif', 'application/pdf'
+               )))),
+               'alternative' => array(
+                       'rule'       => 'checkRepresent',
+                       'on'         => 'create',
+                       'required'   => false,
+                       'allowEmpty' => true,
+               ));
+/**
+ * beforeMake Callback
+ *
+ * Called from within `MediaBehavior::make()`
+ *
+ * $process an array with the following contents:
+ *     overwrite - If the destination file should be overwritten if it exists
+ *     directory - The destination directory (guranteed to exist)
+ *  name - Medium name of $file (e.g. `'Image'`)
+ *     version - The version requested to be processed (e.g. `'xl'`)
+ *     instructions - An array containing which names of methods to be called
+ *
+ * @param string $file Absolute path to the source file
+ * @param array $process directory, version, name, instructions, overwrite
+ * @access public
+ * @return boolean True signals that the file has been processed,
+ *     false or null signals that the behavior should process the file
+ */
+       function beforeMake($file, $process) {
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/models/behaviors/media.php b/app/plugins/media/models/behaviors/media.php
new file mode 100644 (file)
index 0000000..71c1db0
--- /dev/null
@@ -0,0 +1,462 @@
+<?php
+/**
+ * Media Behavior File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.models.behaviors
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.MimeType');
+App::import('Vendor', 'Media.Medium');
+/**
+ * Media Behavior Class
+ *
+ * @package    media
+ * @subpackage media.models.behaviors
+ */
+class MediaBehavior extends ModelBehavior {
+/**
+ * Settings keyed by model alias
+ *
+ * @var array
+ */
+       var $settings = array();
+/**
+ * Default settings
+ *
+ * metadataLevel
+ *     0 - (disabled) No retrieval of additional metadata
+ *  1 - (basic) Adds `mime_type` and `size` fields
+ *  2 - (detailed) Adds Multiple fields dependent on the type of the file e.g. `artist`, `title`
+ *
+ * baseDirectory
+ *     An absolute path (with trailing slash) to a directory which will be stripped off the file path
+ *
+ * makeVersions
+ *     false - Disable version generation
+ *     true  - Creates versions (configured in plugin's `core.php`) of files on create
+ *
+ * filterDirectory
+ *     An absolute path (with trailing slash) to a directory to use for storing generated versions
+ *
+ * createDirectory
+ *     false - Fail on missing directories
+ *     true  - Recursively create missing directories
+ *
+ * @var array
+ */
+       var $_defaultSettings = array(
+               'metadataLevel'   => 1,
+               'baseDirectory'   => MEDIA,
+               'makeVersions'    => true,
+               'filterDirectory' => MEDIA_FILTER,
+               'createDirectory' => true,
+       );
+/**
+ * Holds cached metadata keyed by model alias
+ *
+ * @var array
+ * @access private
+ */
+       var $__cached;
+/**
+ * Setup
+ *
+ * @param Model $Model
+ * @param array $config See defaultSettings for configuration options
+ * @return void
+ */
+       function setup(&$Model, $config = null) {
+               if (!is_array($config)) {
+                       $config = array();
+               }
+
+               /* `base` config option deprecation */
+               if (isset($config['base'])) {
+                       $message  = "MediaBehavior::setup - ";
+                       $message .= "The `base` option has been deprecated in favour of `baseDirectory`.";
+                       trigger_error($message, E_USER_NOTICE);
+
+                       $config['baseDirectory'] = $config['base'];
+                       unset($config['base']);
+               }
+
+               /* Interact with Transfer Behavior */
+               if (isset($Model->Behaviors->Transfer)) {
+                       $transferSettings = $Model->Behaviors->Transfer->settings[$Model->alias];
+                       $config['baseDirectory'] = dirname($transferSettings['baseDirectory']) . DS;
+                       $config['createDirectory'] = $transferSettings['createDirectory'];
+               }
+
+               $this->settings[$Model->alias] = $config + $this->_defaultSettings;
+               $this->__cached[$Model->alias] = Cache::read('media_metadata_' . $Model->alias, '_cake_core_');
+       }
+/**
+ * Callback
+ *
+ * Requires `file` field to be present if a record is created.
+ *
+ * Handles deletion of a record and corresponding file if the `delete` field is
+ * present and has not a value of either `null` or `'0'.`
+ *
+ * Prevents `dirname`, `basename`, `checksum` and `delete` fields to be written to
+ * database.
+ *
+ * Parses contents of the `file` field if present and generates a normalized path
+ * relative to the path set in the `baseDirectory` option.
+ *
+ * @param Model $Model
+ * @return boolean
+ */
+       function beforeSave(&$Model) {
+               if (!$Model->exists()) {
+                       if (!isset($Model->data[$Model->alias]['file'])) {
+                               unset($Model->data[$Model->alias]);
+                               return true;
+                       }
+               } else {
+                       if (isset($Model->data[$Model->alias]['delete'])
+                       && $Model->data[$Model->alias]['delete'] !== '0') {
+                               $Model->delete();
+                               unset($Model->data[$Model->alias]);
+                               return true;
+                       }
+               }
+
+               $blacklist = array(
+                       'dirname', 'basename', 'checksum', 'delete'
+               );
+               $whitelist = array(
+                       'id', 'file', 'model', 'foreign_key',
+                       'created', 'modified', 'alternative'
+               );
+
+               foreach ($Model->data[$Model->alias] as $key => $value) {
+                       if (in_array($key, $whitelist)) {
+                               continue;
+                       }
+                       if (in_array($key, $blacklist)) {
+                               unset($Model->data[$Model->alias][$key]);
+                       }
+               }
+
+               extract($this->settings[$Model->alias]);
+
+               if (isset($Model->data[$Model->alias]['file'])) {
+                       $File = new File($Model->data[$Model->alias]['file']);
+                       unset($Model->data[$Model->alias]['file']);
+
+                       /* `baseDirectory` may equal the file's directory or use backslashes */
+                       $dirname = substr(str_replace(
+                               str_replace('\\', '/', $baseDirectory),
+                               null,
+                               str_replace('\\', '/', Folder::slashTerm($File->Folder->pwd()))
+                       ), 0, -1);
+
+                       $result = array(
+                               'checksum' => $File->md5(true),
+                               'dirname'  => $dirname,
+                               'basename' => $File->name,
+                       );
+
+                       $Model->data[$Model->alias] = array_merge($Model->data[$Model->alias], $result);
+               }
+               return true;
+       }
+/**
+ * Callback
+ *
+ * Triggers `make()` if both `dirname` and `basename` fields are present.
+ * Otherwise skips and returns `true` to continue the save operation.
+ *
+ * @param Model $Model
+ * @param boolean $created
+ * @return boolean
+ */
+       function afterSave(&$Model, $created) {
+               extract($this->settings[$Model->alias]);
+
+               if (!$created || !$makeVersions) {
+                       return true;
+               }
+               $item =& $Model->data[$Model->alias];
+
+               if (!isset($item['dirname'], $item['basename'])) {
+                       return true;
+               }
+               return $this->make($Model, $item['dirname'] . DS . $item['basename']);
+       }
+/**
+ * Callback
+ *
+ * Adds metadata of corresponding file to each result.
+ *
+ * If the corresponding file of a result is not readable it is removed
+ * from the results array, as it is inconsistent. This can be fixed
+ * by calling `cake media sync` from the command line.
+ *
+ * @param Model $Model
+ * @param array $results
+ * @param boolean $primary
+ * @return array
+ */
+       function afterFind(&$Model, $results, $primary = false) {
+               if (empty($results)) {
+                       return $results;
+               }
+               extract($this->settings[$Model->alias]);
+
+               foreach ($results as $key => &$result) {
+                       /* Needed during a pre deletion phase */
+                       if (!isset($result[$Model->alias]['dirname'], $result[$Model->alias]['basename'])) {
+                               continue;
+                       }
+                       $file = $result[$Model->alias]['dirname'] . DS . $result[$Model->alias]['basename'];
+
+                       $metadata = $this->metadata($Model, $file, $metadataLevel);
+
+                       /* `metadata()` checks if the file is readable */
+                       if ($metadata === false) {
+                               unset($results[$key]);
+                               continue;
+                       }
+                       $result[$Model->alias] = array_merge($result[$Model->alias], $metadata);
+               }
+               return $results;
+       }
+/**
+ * Callback
+ *
+ * Deletes file corresponding to record as well as generated versions of that file.
+ *
+ * If the file couldn't be deleted the callback won't stop the
+ * delete operation to continue to delete the record.
+ *
+ * @param Model $Model
+ * @param boolean $cascade
+ * @return boolean
+ */
+       function beforeDelete(&$Model, $cascade = true) {
+               extract($this->settings[$Model->alias]);
+
+               $query = array(
+                       'conditions' => array('id' => $Model->id),
+                       'fields'     => array('dirname', 'basename'),
+                       'recursive'  => -1,
+               );
+               $result = $Model->find('first', $query);
+
+               if (empty($result)) {
+                       return false; /* Record did not pass verification? */
+               }
+
+               $file  = $baseDirectory;
+               $file .= $result[$Model->alias]['dirname'];
+               $file .= DS . $result[$Model->alias]['basename'];
+
+               $File = new File($file);
+               $Folder = new Folder($filterDirectory);
+
+               list($versions, ) = $Folder->ls();
+
+               foreach ($versions as $version) {
+                       $Folder->cd($filterDirectory . $version . DS . $result[$Model->alias]['dirname'] . DS);
+                       $basenames = $Folder->find($File->name() . '\..*');
+
+                       if (count($basenames) > 1) {
+                               $message  = "MediaBehavior::beforeDelete - Ambiguous filename ";
+                               $message .= "`" . $File->name() . "` in `" . $Folder->pwd() . "`.";
+                               trigger_error($message, E_USER_NOTICE);
+                               continue;
+                       } elseif (!isset($basenames[0])) {
+                               continue;
+                       }
+
+                       $FilterFile = new File($Folder->pwd() . $basenames[0]);
+                       $FilterFile->delete();
+               }
+               $File->delete();
+               return true;
+       }
+/**
+ * Parses instruction sets and invokes `Medium::make()` for a file
+ *
+ * @param Model $Model
+ * @param string $file Path to a file relative to `baseDirectory`  or an absolute path to a file
+ * @return boolean
+ */
+       function make(&$Model, $file, $overwrite = false) {
+               extract($this->settings[$Model->alias]);
+
+               list($file, $relativeFile) = $this->_file($Model, $file);
+
+               $relativeDirectory = DS . rtrim(dirname($relativeFile), '.');
+
+               $name = Medium::name($file);
+               $filter = Configure::read('Media.filter.' . strtolower($name));
+
+               $hasCallback = method_exists($Model, 'beforeMake');
+
+               foreach ($filter as $version => $instructions) {
+                       $directory = Folder::slashTerm($filterDirectory . $version . $relativeDirectory);
+                       $Folder = new Folder($directory, $createDirectory);
+
+                       if (!$Folder->pwd()) {
+                               $message  = "MediaBehavior::make - Directory `{$directory}` ";
+                               $message .= "could not be created or is not writable. ";
+                               $message .= "Please check the permissions.";
+                               trigger_error($message, E_USER_WARNING);
+                               continue;
+                       }
+
+                       if ($hasCallback) {
+                               $process = compact('overwrite', 'directory', 'name', 'version', 'instructions');
+
+                               if ($Model->beforeMake($file, $process)) {
+                                       continue;
+                               }
+                       }
+                       if (!$Medium = Medium::make($file, $instructions)) {
+                               $message  = "MediaBehavior::make - Failed to make version `{$version}` ";
+                               $message .= "of file `{$file}`. ";
+                               trigger_error($message, E_USER_WARNING);
+                               continue;
+                       }
+                       $Medium->store($directory . basename($file), $overwrite);
+               }
+               return true;
+       }
+
+/**
+ * Retrieve (cached) metadata of a file
+ *
+ * @param Model $Model
+ * @param string $file Path to a file relative to `baseDirectory` or an absolute path to a file
+ * @param integer $level level of amount of info to add, `0` disable, `1` for basic, `2` for detailed info
+ * @return mixed Array with results or false if file is not readable
+ */
+       function metadata(&$Model, $file, $level = 1) {
+               if ($level < 1) {
+                       return array();
+               }
+               extract($this->settings[$Model->alias]);
+
+               list($file,) = $this->_file($Model, $file);
+               $File = new File($file);
+
+               if (!$File->readable()) {
+                       return false;
+               }
+               $checksum = $File->md5(true);
+
+               if (isset($this->__cached[$Model->alias][$checksum])) {
+                       $data = $this->__cached[$Model->alias][$checksum];
+               }
+
+               if ($level > 0 && !isset($data[1])) {
+                       $data[1] = array(
+                               'size'      => $File->size(),
+                               'mime_type' => MimeType::guessType($File->pwd()),
+                               'checksum'  => $checksum,
+                       );
+               }
+               if ($level > 1 && !isset($data[2])) {
+                       $Medium = Medium::factory($File->pwd());
+
+                       if ($Medium->name === 'Audio') {
+                               $data[2] = array(
+                                       'artist'        => $Medium->artist(),
+                                       'album'         => $Medium->album(),
+                                       'title'         => $Medium->title(),
+                                       'track'         => $Medium->track(),
+                                       'year'          => $Medium->year(),
+                                       'length'        => $Medium->duration(),
+                                       'quality'       => $Medium->quality(),
+                                       'sampling_rate' => $Medium->samplingRate(),
+                                       'bit_rate'       => $Medium->bitRate(),
+                               );
+                       } elseif ($Medium->name === 'Image') {
+                               $data[2] = array(
+                                       'width'     => $Medium->width(),
+                                       'height'    => $Medium->height(),
+                                       'ratio'     => $Medium->ratio(),
+                                       'quality'   => $Medium->quality(),
+                                       'megapixel' => $Medium->megapixel(),
+                               );
+                       } elseif ($Medium->name === 'Text') {
+                               $data[2] = array(
+                                       'characters'      => $Medium->characters(),
+                                       'syllables'       => $Medium->syllables(),
+                                       'sentences'       => $Medium->sentences(),
+                                       'words'           => $Medium->words(),
+                                       'flesch_score'    => $Medium->fleschScore(),
+                                       'lexical_density' => $Medium->lexicalDensity(),
+                               );
+                       } elseif ($Medium->name === 'Video') {
+                               $data[2] = array(
+                                       'title'   => $Medium->title(),
+                                       'year'    => $Medium->year(),
+                                       'length'  => $Medium->duration(),
+                                       'width'   => $Medium->width(),
+                                       'height'  => $Medium->height(),
+                                       'ratio'   => $Medium->ratio(),
+                                       'quality' => $Medium->quality(),
+                                       'bit_rate' => $Medium->bitRate(),
+                               );
+                       } else {
+                               $data[2] = array();
+                       }
+               }
+
+               for ($i = $level, $result = array(); $i > 0; $i--) {
+                       $result = array_merge($result, $data[$i]);
+               }
+               $this->__cached[$Model->alias][$checksum] = $data;
+               return Set::filter($result);
+       }
+/**
+ * Checks if an alternative text is given only if a file is submitted
+ *
+ * @param unknown_type $Model
+ * @param unknown_type $field
+ * @return unknown
+ */
+       function checkRepresent(&$Model, $field) {
+               if (!isset($Model->data[$Model->alias]['file'])) {
+                       return true;
+               }
+               $value = current($field); /* empty() limitation */
+               return !empty($value);
+       }
+/**
+ * Returns relative and absolute path to a file
+ *
+ * @param Model $Model
+ * @param string$file
+ * @return array
+ */
+       function _file(&$Model, $file) {
+               extract($this->settings[$Model->alias]);
+               $file = str_replace(array('\\', '/'), DS, $file);
+
+               if (!is_file($file)) {
+                       $file = ltrim($file, DS);
+                       $relativeFile = $file;
+                       $file = $baseDirectory . $file;
+               } else {
+                       $relativeFile = str_replace($baseDirectory, null, $file);
+               }
+               return array($file, $relativeFile);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/models/behaviors/polymorphic.php b/app/plugins/media/models/behaviors/polymorphic.php
new file mode 100644 (file)
index 0000000..6500f02
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Polymorphic Behavior File
+ *
+ * Allow the model to be associated with any other model object
+ *
+ * Copyright (c), Andy Dawson
+ *
+ * Licensed under The MIT License
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @filesource
+ * @author                     Andy Dawson (AD7six)
+ * @copyright       Andy Dawson
+ * @version                    $Revision: 18 $
+ * @modifiedby         $LastChangedBy: andy $
+ * @lastmodified       $Date: 2008-03-07 13:56:09 +0100 (Fri, 07 Mar 2008) $
+ * @license                    http://www.opensource.org/licenses/mit-license.php The MIT License
+ */
+/**
+ * Polymorphic Behavior Class
+ *
+ * @author                     Andy Dawson (AD7six)
+ * @copyright       Andy Dawson
+ * @version                    $Revision: 18 $
+ * @modifiedby         $LastChangedBy: andy $
+ * @lastmodified       $Date: 2008-03-07 13:56:09 +0100 (Fri, 07 Mar 2008) $
+ * @license                    http://www.opensource.org/licenses/mit-license.php The MIT License
+ */
+class PolymorphicBehavior extends ModelBehavior {
+
+       function setup(&$model, $config = array()) {
+               $this->settings[$model->name] = am (array('classField' => 'class', 'foreignKey' => 'foreign_id'),$config);
+       }
+
+       function afterFind (&$model, $results, $primary = false) {
+               extract($this->settings[$model->name]);
+               if ($primary && isset($results[0][$model->alias][$classField]) && $model->recursive > 0) {
+                       foreach ($results as $key => $result) {
+                               $associated = array();
+                               $class = $result[$model->alias][$classField];
+                               $foreignId = $result[$model->alias][$foreignKey];
+                               if ($class && $foreignId) {
+                                       $result = $result[$model->alias];
+                                       if (!isset($model->$class)) {
+                                               $model->bindModel(array('belongsTo' => array(
+                                                       $class => array(
+                                                               'conditions' => array($model->alias . '.' . $classField => $class),
+                                                               'foreignKey' => $foreignKey
+                                                       )
+                                               )));
+                                       }
+                                       // Applied fix suggested in http://groups.google.com/group/cake-php/msg/3ecbdc13ca1e3a64
+                                       $associated = $model->$class->find(array($class . '.id' => $foreignId),null,null, -1);
+                                       $associated[$class]['display_field'] = $associated[$class][$model->$class->displayField];
+                                       $results[$key][$class] = $associated[$class];
+                               }
+                       }
+               } elseif(isset($results[$model->alias][$classField])) {
+                       $associated = array();
+                       $class = $results[$model->alias][$classField];
+                       $foreignId = $results[$model->alias][$foreignKey];
+                       if ($class && $foreignId) {
+                               $result = $results[$model->alias];
+                               if (!isset($model->$class)) {
+                                       $model->bindModel(array('belongsTo' => array(
+                                               $class => array(
+                                                       'conditions' => array($model->alias . '.' . $classField => $class),
+                                                       'foreignKey' => $foreignKey
+                                               )
+                                       )));
+                               }
+                               $associated = $model->$class->find(array($class.'.id' => $foreignId), array('id', $model->$class->displayField), null, -1);
+                               $associated[$class]['display_field'] = $associated[$class][$model->$class->displayField];
+                               $results[$class] = $associated[$class];
+                       }
+               }
+               return $results;
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/models/behaviors/transfer.php b/app/plugins/media/models/behaviors/transfer.php
new file mode 100644 (file)
index 0000000..b9e121b
--- /dev/null
@@ -0,0 +1,846 @@
+<?php
+/**
+ * Transfer Behavior File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.models.behaviors
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.MimeType');
+App::import('Vendor', 'Media.Medium');
+App::import('Vendor', 'Media.MediaValidation');
+App::import('Vendor', 'Media.TransferValidation');
+/**
+ * Transfer Behavior Class
+ *
+ * Takes care of transferring local and remote (via HTTP)
+ * files or handling uploads received through a HTML form.
+ *
+ * @package    media
+ * @subpackage media.models.behaviors
+ */
+class TransferBehavior extends ModelBehavior {
+/**
+ * Holds data between function calls keyed by model alias
+ *
+ * @var array
+ */
+       var $runtime = array();
+/**
+ * Settings keyed by model alias
+ *
+ * @var array
+ */
+       var $settings = array();
+/**
+ * Default settings
+ *
+ * trustClient
+ *     false -
+ *     true  - Trust the MIME type submitted together with an upload
+ *
+ * destinationFile
+ *  A path (withouth leading slash) relative to `baseDirectory`.
+ *
+ *     These markers can be used:
+ *     :DS:                    Directory separator `'/'` or `'\'`
+ *  :uuid:                  An uuid generated by String::uuid()
+ *  :day:                   The current day
+ *     :month:                 The current month
+ *     :year:                  The current year
+ *     :Model.name:
+ *  :Model.alias:
+ *  :Model.xyz:             Where `xyz` is a field of the submitted record
+ *     :Source.basename:       e.g. `'logo.png'`
+ *     :Source.filename:       e.g. `'logo'`
+ *     :Source.extension:      e.g. `'png'`
+ *     :Source.mimeType:       e.g. `'image_png'`
+ *     :Medium.name:           Lowercased medium name of the source file (e.g. `'image'`)
+ *     :Medium.short:          Short medium name of the source file (e.g. `'img'`)
+ *
+ * baseDirectory
+ *     string - An absolute path (with trailing slash) to a directory
+ *
+ * createDirectory
+ *     false - Fail on missing directories
+ *     true  - Recursively create missing directories
+ *
+ * alternativeFileTries
+ *     integer - Specifies the maximum number of tries for finding an alternative destination file name
+ *
+ * @var array
+ */
+       var $_defaultSettings = array(
+               'trustClient'     => false,
+               'destinationFile' => ':Medium.short::DS::Source.basename:',
+               'baseDirectory'   => MEDIA_TRANSFER,
+               'createDirectory' => true,
+               'alternativeFile' => 100
+       );
+/**
+ * Default runtime
+ *
+ * @var array
+ */
+       var $_defaultRuntime = array(
+               'source'       => null,
+               'temporary'    => null,
+               'destination'  => null,
+               'isReady'      => false,
+               'hasPerformed' => false,
+               'markers'      => array(),
+       );
+/**
+ * Setup
+ *
+ * Merges default settings with provided config and sets default validation options
+ *
+ * @param Model $Model
+ * @param array $config @see _defaultSettings for configuration options
+ * @return void
+ */
+       function setup(&$Model, $config = null) {
+               if (!is_array($config)) {
+                       $config = array();
+               }
+
+               /* `destinationFile` syntax change */
+               if (isset($config['destinationFile'])
+               && preg_match('/:(MEDIA|APP|TMP|WEBROOT)+/', $config['destinationFile'])) {
+                       $message  = "TransferBehavior::setup - ";
+                       $message .= "The syntax of the `destinationFile` option has been changed. ";
+                       $message .= "It should hold a relative path only. ";
+                       $message .= "See also the `baseDirectory' option.";
+                       trigger_error($message, E_USER_NOTICE);
+
+                       unset($config['destinationFile']);
+               }
+
+               /* If present validation rules get some sane default values */
+               if (isset($Model->validate['file'])) {
+                       $default = array('allowEmpty' => true, 'required' => false, 'last' => true);
+
+                       foreach ($Model->validate['file'] as &$rule) {
+                               $rule = array_merge($default, $rule);
+                       }
+               }
+
+               $this->settings[$Model->alias] = $config + $this->_defaultSettings;
+               $this->runtime[$Model->alias] = $this->_defaultRuntime;
+       }
+/**
+ * Run before any or if validation occurs
+ *
+ * Triggers `prepare()` setting source, temporary and destination to
+ * enable validation rules to check the transfer. If that fails
+ * invalidates the model.
+ *
+ * @param Model $Model
+ * @return boolean
+ */
+       function beforeValidate(&$Model) {
+               if ($this->prepare($Model) === false) {
+                       $Model->invalidate('file', 'error');
+                       return false;
+               }
+               return true;
+       }
+/**
+ * Triggers `prepare()` and performs transfer
+ *
+ * If transfer is unsuccessful save operation will abort.
+ *
+ * @param Model $Model
+ * @return boolean
+ */
+       function beforeSave(&$Model) {
+               $preparation = $this->prepare($Model);
+
+               if ($preparation === false) {
+                       return false;
+               }
+               if ($preparation === null) {
+                       if (array_key_exists('file', $Model->data[$Model->alias])) {
+                               unset($Model->data[$Model->alias]['file']);
+                       }
+                       return true;
+               }
+               extract($this->runtime[$Model->alias], EXTR_SKIP);
+               extract($this->settings[$Model->alias], EXTR_SKIP);
+
+               if (!$this->perform($Model)) { /* uses source, etc. from runtime */
+                       return false;
+               }
+               $Model->data[$Model->alias]['file'] = $destination['dirname'] . DS . $destination['basename'];
+               return $Model->data[$Model->alias];
+       }
+/**
+ * Triggered by `beforeValidate`, `beforeSave` or upon user request
+ *
+ * Prepares runtime for being used by `perform()`
+ *
+ * @param Model $Model
+ * @param string $file Optionally provide a valid transfer resource to be used as source
+ * @return mixed true if transfer is ready to be performed, false on error, null if no data was found
+ */
+       function prepare(&$Model, $file = null) {
+               if (isset($Model->data[$Model->alias]['file'])) {
+                       $file = $Model->data[$Model->alias]['file'];
+               }
+               if (empty($file)) {
+                       return null;
+               }
+               if ($this->runtime[$Model->alias]['hasPerformed']) {
+                       $this->reset($Model);
+               }
+               if ($this->runtime[$Model->alias]['isReady']) {
+                       return true;
+               }
+               /* Extraction must happen after reset */
+               extract($this->settings[$Model->alias], EXTR_SKIP);
+               extract($this->runtime[$Model->alias], EXTR_SKIP);
+
+               if (TransferValidation::blank($file)) {
+                       /* Set explicitly null enabling allowEmpty in rules act upon emptiness */
+                       return $Model->data[$Model->alias]['file'] = null;
+               }
+
+               if ($source = $this->_source($Model, $file)) {
+                       $this->runtime[$Model->alias]['source'] = $source;
+               } else {
+                       return false;
+               }
+               /* Temporary is optional and can fail */
+               if ($source['type'] !== 'file-local') {
+                       $temporary = $this->runtime[$Model->alias]['temporary'] = $this->_temporary($Model, $file);
+               }
+
+               $this->_addMarker($Model, 'DS', DS);
+
+               $this->_addMarker($Model, 'uuid', String::uuid());
+               $this->_addMarker($Model, 'unixTimestamp', time());
+               $this->_addMarker($Model, 'year', date('Y'));
+               $this->_addMarker($Model, 'month', date('m'));
+               $this->_addMarker($Model, 'day', date('d'));
+
+               $filename = $this->_addMarker($Model, 'Source.filename', $source['filename'], true);
+               $extension = $this->_addMarker($Model, 'Source.extension', $source['extension'], true);
+               $this->_addMarker($Model, 'Source.basename', empty($extension) ? $filename : $filename . '.' . $extension);
+               $this->_addMarker($Model, 'Source.mimeType', $source['mimeType'], true);
+               $this->_addMarker($Model, 'Source.type', $source['type']);
+
+               $this->_addMarker($Model, 'Medium.name', strtolower(Medium::name($source['file'], $source['mimeType'])));
+               $this->_addMarker($Model, 'Medium.short', Medium::short($source['file'], $source['mimeType']));
+
+               /* Needed for tableless Models */
+               if (isset($Model->data[$Model->alias])) {
+                       $this->_addMarker($Model, $Model->alias . '.', $Model->data[$Model->alias], true);
+                       $this->_addMarker($Model, 'Model.', $Model->data[$Model->alias], true);
+               }
+               $this->_addMarker($Model, 'Model.name', $Model->name);
+               $this->_addMarker($Model, 'Model.alias', $Model->alias);
+
+               if (!$destinationFile = $this->_replaceMarker($Model, $destinationFile)) {
+                       return false;
+               }
+
+               if ($destination = $this->_destination($Model, $baseDirectory . $destinationFile)) {
+                       $this->runtime[$Model->alias]['destination'] = $destination;
+               } else {
+                       return false;
+               }
+
+               if ($source == $destination || $temporary == $destination) {
+                       return false;
+               }
+
+               $Folder = new Folder($destination['dirname'], $createDirectory);
+
+               if (!$Folder->pwd()) {
+                       $message  = "TransferBehavior::prepare - Directory `{$destination['dirname']}` could ";
+                       $message .= "not be created or is not writable. Please check the permissions.";
+                       trigger_error($message, E_USER_WARNING);
+                       return false;
+               }
+               return $this->runtime[$Model->alias]['isReady'] = true;
+       }
+/**
+ * Parse data to be used as source
+ *
+ * @param mixed Path to file in local FS, URL or file-upload array
+ * @return mixed Array with parsed results on success, false on error
+ * @todo evaluate errors in file uploads
+ */
+       function _source(&$Model, $data) {
+               if (TransferValidation::fileUpload($data)) {
+                       return array_merge($this->info($Model, $data), array('error' => $data['error']));
+               } elseif (MediaValidation::file($data)) {
+                       return $this->info($Model, $data);
+               } elseif (TransferValidation::url($data, array('scheme' => 'http'))) {
+                       return $this->info($Model, $data);
+               }
+               return false;
+       }
+/**
+ * Parse data to be used as temporary
+ *
+ * @param mixed Path to file in local FS or file-upload array
+ * @return mixed Array with parsed results on success, false on error
+ */
+       function _temporary(&$Model, $data) {
+               if (TransferValidation::fileUpload($data)
+               && TransferValidation::uploadedFile($data['tmp_name'])) {
+                       return array_merge(
+                               $this->info($Model, $data['tmp_name']),
+                               array('error' => $data['error'])
+                       );
+               } elseif (MediaValidation::file($data)) {
+                       return $this->info($Model, $data);
+               }
+               return false;
+       }
+/**
+ * Parse data to be used as destination
+ *
+ * @param mixed Path to file in local FS
+ * @return mixed Array with parsed results on success, false on error
+ */
+       function _destination(&$Model, $data) {
+               extract($this->settings[$Model->alias]);
+
+               /* Destination file may not exist yet */
+               if (MediaValidation::file($data , false)) {
+                       $original = $data;
+                       if (!$data = $this->_alternativeFile($data, $alternativeFile)) {
+                               $message  = "TransferBehavior::_destination - ";
+                               $message .= "Exceeded number of max. tries while finding alt. name ";
+                               $message .= "for `" . basename($original) . "`";
+                               trigger_error($message, E_USER_NOTICE);
+                               return false;
+                       }
+                       return $this->info($Model, $data);
+               }
+               return false;
+       }
+/**
+ * Performs a transfer
+ *
+ * @param Model $Model
+ * @param array $source
+ * @param array $temporary
+ * @param array $destination
+ * @return boolean true on success, false on failure
+ */
+       function perform(&$Model) {
+               extract($this->runtime[$Model->alias]);
+
+               if (!$isReady || $hasPerformed) {
+                       return false;
+               }
+               $hasPerformed = false;
+
+               $chain = implode('>>', array($source['type'], $temporary['type'], $destination['type']));
+
+               if ($source['type'] === 'http-url-remote') {
+                       if (!class_exists('HttpSocket')) {
+                               App::import('Core','HttpSocket');
+                       }
+                       $Socket = new HttpSocket(array('timeout' => 5));
+                       $Socket->request(array('method' => 'GET', 'uri' => $source['file']));
+
+                       if (!empty($Socket->error) || $Socket->response['status']['code'] != 200) {
+                               return $this->runtime[$Model->alias]['hasPerformed'] = $hasPerformed;
+                       }
+               }
+
+               if ($chain === 'file-upload-remote>>uploaded-file-local>>file-local') {
+                       $hasPerformed = move_uploaded_file($temporary['file'], $destination['file']);
+               } elseif ($chain === 'file-local>>>>file-local') {
+                       $hasPerformed = copy($source['file'], $destination['file']);
+               } elseif ($chain === 'file-local>>file-local>>file-local') {
+                       if (copy($source['file'], $temporary['file'])) {
+                               $hasPerformed = rename($temporary['file'], $destination['file']);
+                       }
+               } elseif ($chain === 'http-url-remote>>>>file-local') {
+                       $hasPerformed = file_put_contents($destination['file'], $Socket->response['body']);
+               } elseif ($chain === 'http-url-remote>>file-local>>file-local') {
+                       if (file_put_contents($temporary['file'], $Socket->response['body'])) {
+                               $hasPerformed = rename($temporary['file'], $destination['file']);
+                       }
+               }
+               return $this->runtime[$Model->alias]['hasPerformed'] = $hasPerformed;
+       }
+/**
+ * Resets runtime property
+ *
+ * @param Model $Model
+ * @return void
+ */
+       function reset(&$Model) {
+               $this->runtime[$Model->alias] = $this->_defaultRuntime;
+       }
+/**
+ * Convenience method which (if available) returns absolute path to last transferred file
+ *
+ * @param Model $Model
+ * @return mixed
+ */
+       function getLastTransferredFile(&$Model) {
+               extract($this->runtime[$Model->alias], EXTR_SKIP);
+
+               if ($hasPerformed) {
+                       return $destination['file'];
+               }
+               return false;
+       }
+/**
+ * Checks if field contains a transferable resource
+ *
+ * @see TransferBehavior::source
+ *
+ * @param Model $Model
+ * @param array $field
+ * @return boolean
+ */
+       function checkResource(&$Model, $field) {
+               return TransferValidation::resource(current($field));
+       }
+/**
+ * Checks if sufficient permissions are set to access the resource
+ * Source must be readable, temporary read or writable, destination writable
+ *
+ * @param Model $Model
+ * @param array $field
+ * @return boolean
+ */
+       function checkAccess(&$Model, $field) {
+               extract($this->runtime[$Model->alias]);
+
+               if (MediaValidation::file($source['file'], true)) {
+                       if (!MediaValidation::access($source['file'], 'r')) {
+                               return false;
+                       }
+               } else {
+                       if (!MediaValidation::access($source['permission'], 'r')) {
+                               return false;
+                       }
+               }
+               if (!empty($temporary)) {
+                       if (MediaValidation::file($temporary['file'], true)) {
+                               if (!MediaValidation::access($temporary['file'], 'r')) {
+                                       return false;
+                               }
+                       } elseif (MediaValidation::folder($temporary['dirname'], true)) {
+                               if (!MediaValidation::access($temporary['dirname'], 'w')) {
+                                       return false;
+                               }
+                       }
+               }
+               if (!MediaValidation::access($destination['dirname'], 'w')) {
+                       return false;
+               }
+               return true;
+       }
+/**
+ * Checks if resource is located within given locations
+ *
+ * @param Model $Model
+ * @param array $field
+ * @param mixed $allow True or * allows any location, an array containing absolute paths to locations
+ * @return boolean
+ */
+       function checkLocation(&$Model, $field, $allow = true) {
+               extract($this->runtime[$Model->alias]);
+
+               foreach ((array)$allow as $allowed) {
+                       if (strpos(':', $allowed) !== false) {
+                               $message  = "TransferBehavior::checkLocation - ";
+                               $message .= "Makers cannot be used in parameters for this method anymore. ";
+                               $message .= "Please use predefined constants instead.";
+                               trigger_error($message, E_USER_NOTICE);
+                       }
+               }
+
+               foreach (array('source', 'temporary', 'destination') as $type) {
+                       if ($type == 'temporary' && empty($$type)) {
+                               continue;
+                       }
+                       if ($type == 'source' && ${$type}['type'] == 'file-upload-remote') {
+                               continue;
+                       }
+                       if (!MediaValidation::location(${$type}['file'], $allow)) {
+                               return false;
+                       }
+               }
+               return true;
+       }
+/**
+ * Checks if provided or potentially dangerous permissions are set
+ *
+ * @param Model $Model
+ * @param array $field
+ * @param mixed $match True to check for potentially dangerous permissions,
+ *     a string containing the 4-digit octal value of the permissions to check for an exact match,
+ *     false to allow any permissions
+ * @return boolean
+ */
+       function checkPermission(&$Model, $field, $match = true) {
+               extract($this->runtime[$Model->alias]);
+
+               foreach (array('source', 'temporary') as $type) {
+                       if ($type == 'temporary' && empty($$type)) {
+                               continue;
+                       }
+                       if (!MediaValidation::permission(${$type}['permission'], $match)) {
+                               return false;
+                       }
+               }
+               return true;
+       }
+/**
+ * Checks if resource doesn't exceed provided size
+ *
+ * Please note that the size will always be checked against
+ * limitations set in `php.ini` for `post_max_size` and `upload_max_filesize`
+ * even if $max is set to false.
+ *
+ * @param Model $Model
+ * @param array $field
+ * @param mixed $max String (e.g. 8M) containing maximum allowed size, false allows any size
+ * @return boolean
+ */
+       function checkSize(&$Model, $field, $max = false) {
+               extract($this->runtime[$Model->alias]);
+
+               foreach (array('source', 'temporary') as $type) {
+                       if ($type == 'temporary' && empty($$type)) {
+                               continue;
+                       }
+                       if (!MediaValidation::size(${$type}['size'], $max)) {
+                               return false;
+                       }
+               }
+               return true;
+       }
+/**
+ * Checks if resource (if it is an image) pixels doesn't exceed provided size
+ *
+ * Useful in situation where you wan't to prevent running out of memory when
+ * the image gets resized later. You can calculate the amount of memory used
+ * like this: width * height * 4 + overhead
+ *
+ * @param Model $Model
+ * @param array $field
+ * @param mixed $max String (e.g. 40000 or 200x100) containing maximum allowed amount of pixels
+ * @return boolean
+ */
+       function checkPixels(&$Model, $field, $max = false) {
+               extract($this->runtime[$Model->alias]);
+
+               foreach (array('source', 'temporary') as $type) { /* pixels value is optional */
+                       if (($type == 'temporary' && empty($$type)) || !isset(${$type}['pixels'])) {
+                               continue;
+                       }
+                       if (!MediaValidation::pixels(${$type}['pixels'], $max)) {
+                               return false;
+                       }
+               }
+               return true;
+       }
+/**
+ * Checks if resource has (not) one of given extensions
+ *
+ * @param Model $Model
+ * @param array $field
+ * @param mixed $deny True or * blocks any extension,
+ *     an array containing extensions (w/o leading dot) selectively blocks,
+ *     false blocks no extension
+ * @param mixed $allow True or * allows any extension,
+ *     an array containing extensions (w/o leading dot) selectively allows,
+ *     false allows no extension
+ * @return boolean
+ */
+       function checkExtension(&$Model, $field, $deny = false, $allow = true) {
+               extract($this->runtime[$Model->alias]);
+
+               foreach (array('source', 'temporary', 'destination') as $type) {
+                       if (($type == 'temporary' && empty($$type)) || !isset(${$type}['extension'])) {
+                               continue;
+                       }
+                       if (!MediaValidation::extension(${$type}['extension'], $deny, $allow)) {
+                               return false;
+                       }
+               }
+               return true;
+       }
+/**
+ * Checks if resource has (not) one of given MIME types
+ *
+ * @param Model $Model
+ * @param array $field
+ * @param mixed $deny True or * blocks any MIME type,
+ *     an array containing MIME types selectively blocks,
+ *     false blocks no MIME type
+ * @param mixed $allow True or * allows any extension,
+ *     an array containing extensions selectively allows,
+ *     false allows no MIME type
+ * @return boolean
+ */
+       function checkMimeType(&$Model, $field, $deny = false, $allow = true) {
+               extract($this->runtime[$Model->alias]);
+               extract($this->settings[$Model->alias], EXTR_SKIP);
+
+               foreach (array('source', 'temporary') as $type) {
+                       /*
+                        * MIME types and trustClient setting
+                        *
+                        * trust | source   | (temporary) | (destination)
+                        * ------|----------|----------------------------
+                        * true  | x/x      | x/x         | x/x,null
+                        * ------|----------|----------------------------
+                        * false | x/x,null | x/x,null    | null
+                        */
+                       /* Temporary is optional */
+                       if ($type === 'temporary' && empty($$type)) {
+                               continue;
+                       }
+                       /* With `trustClient` set to `false` we don't necessarily have a MIME type */
+                       if (!isset(${$type}['mimeType']) && !$trustClient) {
+                               continue;
+                       }
+                       if (!MediaValidation::mimeType(${$type}['mimeType'], $deny, $allow)) {
+                               return false;
+                       }
+               }
+               return true;
+       }
+/**
+ * Gather/Return information about a resource
+ *
+ * @param mixed $resource Path to file in local FS, URL or file-upload array
+ * @param string $what scheme, host, port, file, MIME type, size, permission,
+ *     dirname, basename, filename, extension or type
+ * @return mixed
+ */
+       function info(&$Model, $resource, $what = null) {
+               extract($this->settings[$Model->alias], EXTR_SKIP);
+
+               $defaultResource = array(
+                       'scheme'      => null,
+                       'host'        => null,
+                       'port'        => null,
+                       'file'        => null,
+                       'mimeType'    => null,
+                       'size'        => null,
+                       'pixels'      => null,
+                       'permisssion' => null,
+                       'dirname'     => null,
+                       'basename'    => null,
+                       'filename'    => null,
+                       'extension'   => null,
+                       'type'        => null,
+               );
+
+               /* Currently HTTP is supported only */
+               if (TransferValidation::url($resource, array('scheme' => 'http'))) {
+                       $resource = array_merge(
+                               $defaultResource,
+                               pathinfo(parse_url($resource, PHP_URL_PATH)),
+                               array(
+                                       'scheme' => parse_url($resource, PHP_URL_SCHEME),
+                                       'host'   => parse_url($resource, PHP_URL_HOST),
+                                       'port'   => parse_url($resource, PHP_URL_PORT),
+                                       'file'   => $resource,
+                                       'type'   => 'http-url-remote',
+                       ));
+
+                       if (!class_exists('HttpSocket')) {
+                               App::import('Core', 'HttpSocket');
+                       }
+                       $Socket =& new HttpSocket(array('timeout' => 5));
+                       $Socket->request(array('method' => 'HEAD', 'uri' => $resource['file']));
+
+                       if (empty($Socket->error) && $Socket->response['status']['code'] == 200) {
+                               $resource = array_merge(
+                                       $resource,
+                                       array(
+                                               'size'       => $Socket->response['header']['Content-Length'],
+                                               'mimeType'   => $trustClient ? $Socket->response['header']['Content-Type'] : null,
+                                               'permission' => '0004'
+                               ));
+                       }
+               } elseif (MediaValidation::file($resource, false)) {
+                       $resource = array_merge(
+                               $defaultResource,
+                               pathinfo($resource),
+                               array(
+                                       'file' => $resource,
+                                       'host' => 'localhost',
+                                       'mimeType' => MimeType::guessType($resource, array('paranoid' => !$trustClient)),
+                       ));
+
+                       if (TransferValidation::uploadedFile($resource['file'])) {
+                               $resource['type'] = 'uploaded-file-local';
+                       } else {
+                               $resource['type'] = 'file-local';
+                       }
+
+                       if (is_readable($resource['file'])) {
+                               /*
+                                * Because there is not better  way to determine if resource is an image
+                                * first, we suppress a warning that would be thrown here otherwise.
+                                */
+                               list($width, $height) = @getimagesize($resource['file']);
+
+                               $resource = array_merge(
+                                       $resource,
+                                       array(
+                                               'size'       => filesize($resource['file']),
+                                               'permission' => substr(sprintf('%o', fileperms($resource['file'])), -4),
+                                               'pixels'     => $width * $height,
+                               ));
+                       }
+               } elseif (TransferValidation::fileUpload($resource)) {
+                       $resource = array_merge(
+                               $defaultResource,
+                               pathinfo($resource['name']),
+                               array(
+                                       'file'       => $resource['name'],
+                                       'host'       => env('REMOTE_ADDR'),
+                                       'size'       => $resource['size'],
+                                       'mimeType'   => $trustClient ? $resource['type'] : null,
+                                       'permission' => '0004',
+                                       'type'       => 'file-upload-remote',
+                       ));
+               } else {
+                       return null;
+               }
+
+               if (!isset($resource['filename'])) { /* PHP < 5.2.0 */
+                       $length = isset($resource['extension']) ? strlen($resource['extension']) + 1 : 0;
+                       $resource['filename'] = substr($resource['basename'], 0, - $length);
+               }
+
+               if (is_null($what)) {
+                       return $resource;
+               } elseif (array_key_exists($what, $resource)) {
+                       return $resource[$what];
+               }
+               return null;
+       }
+/**
+ * Finds an alternative filename for an already existing file
+ *
+ * @param string $file Absolute path to file in local FS
+ * @param integer $tries Number of tries
+ * @return mixed A string if an alt. name was found, false if number of tries were exceeded
+ */
+       function _alternativeFile($file, $tries = 100) {
+               $extension = null;
+               extract(pathinfo($file), EXTR_OVERWRITE);
+
+               if (!isset($filename)) { /* PHP < 5.2.0 */
+                       $filename = substr($basename, 0, isset($extension) ? - (strlen($extension) + 1) : 0);
+               }
+               $newFilename = $filename;
+
+               $Folder = new Folder($dirname);
+               $names = $Folder->find($filename . '.*');
+
+               foreach ($names as &$name) { /* PHP < 5.2.0 */
+                       $length =  strlen(pathinfo($name, PATHINFO_EXTENSION));
+                       $name = substr(basename($name), 0, $length ? - ($length + 1) : 0);
+               }
+
+               for ($count = 2; in_array($newFilename, $names); $count++) {
+                       if ($count > $tries) {
+                               return false;
+                       }
+
+                       $newFilename = $filename . '_' . $count;
+               }
+
+               $new = $dirname . DS . $newFilename;
+
+               if (isset($extension)) {
+                       $new .= '.' . $extension;
+               }
+               return $new;
+       }
+/**
+ * Adds and/or overwrites marker(s)/replacement(s)
+ *
+ * @param Model $Model
+ * @param string $marker The name of the marker, or the prefix for mapped markers
+ * @param string $replacement  String or an array mapping markers to replacements
+ */
+       function _addMarker(&$Model, $marker, $replacement = null, $slugify = false) {
+               if (is_array($replacement)) {
+                       foreach ($replacement as $subMarker => $subReplacement) {
+                               if (is_array($subReplacement)) {
+                                       continue;
+                               }
+                               $this->_addMarker($Model, $marker . $subMarker, $subReplacement, $slugify);
+                       }
+                       return true;
+               }
+
+               if ($slugify) {
+                       $replacement = strtolower(Inflector::slug($replacement, '_'));
+               }
+               return $this->runtime[$Model->alias]['markers'][$marker] = $replacement;
+       }
+/**
+ * Replace with constants and dynamic replacements
+ *
+ * @param Model $Model
+ * @param mixed $subject Array holding multiple strings or a single string
+ * @param boolean $safe Make result safe for e.g. filenames
+ * @return string
+ */
+       function _replaceMarker(&$Model, $subject) {
+               if (is_array($subject)) {
+                       foreach ($subject as $s) {
+                               $result[] = $this->_replaceMarker($Model, $s);
+                       }
+                       return $result;
+               }
+
+               if (!is_string($subject)) {
+                       return $subject;
+               }
+
+               $markers = Set::filter($this->runtime[$Model->alias]['markers']);
+               $subject = String::insert($subject, $markers, array(
+                       'before' => ':', 'after' => ':',
+                       'escape' => '#',
+                       'clean' => array(
+                               'before' => ':', 'after' => ':',
+                               'escape' => '#',
+                               'method' => 'text',
+                               'replacement' => 'unknown_marker'
+               )));
+
+               if (strpos($subject, 'unknown_marker') !== false) {
+                       $message  = "TransferBehavior::_replaceMarker - ";
+                       $message .= "Failed to replace all markers of subject `{$subject}`. ";
+                       $message .= "Did you setup the behavior correctly? ";
+                       $message .= "Check the configuration you provided for TransferBehavior ";
+                       $message .= "in your `{$Model->name}` model.";
+                       trigger_error($message, E_USER_WARNING);
+                       return false;
+               }
+               return $subject;
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/models/attachment.test.php b/app/plugins/media/tests/cases/models/attachment.test.php
new file mode 100644 (file)
index 0000000..b4a9795
--- /dev/null
@@ -0,0 +1,244 @@
+<?php
+/**
+ * Attachment Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.models
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Model', 'Media.Attachment');
+require_once 'models.php';
+require_once dirname(dirname(dirname(__FILE__))) . DS . 'fixtures' . DS . 'test_data.php';
+require_once dirname(dirname(dirname(dirname(__FILE__)))) . DS . 'config' . DS . 'core.php';
+/**
+ * Attachment Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.models
+ */
+class AttachmentTestCase extends CakeTestCase {
+       var $fixtures = array(
+               'plugin.media.movie', 'plugin.media.actor',
+               'plugin.media.attachment', 'plugin.media.pirate'
+       );
+
+       function setUp() {
+               $this->TestData = new TestData();
+               $this->TestFolder = new Folder(TMP . 'test_suite' . DS, true);
+               new Folder($this->TestFolder->pwd() . 'transfer' . DS, true);
+               new Folder($this->TestFolder->pwd() . 'static' . DS, true);
+               new Folder($this->TestFolder->pwd() . 'filter' . DS, true);
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+               $this->TestFolder->delete();
+               ClassRegistry::flush();
+       }
+
+       function testHasOne() {
+               $Model = ClassRegistry::init('Movie');
+               $assoc = array(
+                       'Attachment' => array(
+                               'className' => 'Media.Attachment',
+                               'foreignKey' => 'foreign_key',
+                               'conditions' => array('Attachment.model' => 'Movie'),
+                               'dependent' => true,
+               ));
+               $Model->bindModel(array('hasOne' => $assoc), false);
+
+               $Model->Attachment->Behaviors->attach('Media.Polymorphic', array(
+                       'classField' => 'model',
+                       'foreignKey' => 'foreign_key'
+               ));
+               $Model->Attachment->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS:transfer:DS::Source.basename:'
+               ));
+               $Model->Attachment->Behaviors->attach('Media.Media', array(
+                       'filterDirectory' => $this->TestFolder->pwd() . 'filter' . DS
+               ));
+
+               $file = $this->TestData->getFile(array('image-jpg.jpg' => 'ta.jpg'));
+               $data = array(
+                       'Movie' => array('title' => 'Weekend', 'director' => 'Jean-Luc Godard'),
+                       'Attachment' => array('file' => $file, 'model' => 'Movie')
+               );
+
+               $Model->create();
+               $this->assertTrue($Model->saveAll($data, array('validate' => 'first')));
+               $file = $Model->Attachment->getLastTransferredFile();
+               $this->assertTrue(file_exists($file));
+
+               $result = $Model->find('first', array('conditions' => array('title' => 'Weekend')));
+               $expected = array(
+                       'id' => 1,
+                       'model' => 'Movie',
+                       'foreign_key' => 4,
+                       'dirname' => 'tmp/test_suite/transfer',
+                       'basename' => 'ta.jpg',
+                       'checksum' => '1920c29e7fbe4d1ad2f9173ef4591133',
+                       'group' => null,
+                       'alternative' => null,
+               );
+               $this->assertEqual($result['Attachment'], $expected);
+
+               $result = $Model->delete($Model->getLastInsertID());
+               $this->assertTrue($result);
+               $this->assertFalse(file_exists($this->TestFolder->pwd() . 'transfer' .  DS . 'ta.jpg'));
+       }
+
+       function testHasMany() {
+               $Model = ClassRegistry::init('Movie');
+               $assoc = array(
+                       'Attachment' => array(
+                               'className' => 'Media.Attachment',
+                               'foreignKey' => 'foreign_key',
+                               'conditions' => array('Attachment.model' => 'Movie'),
+                               'dependent' => true,
+               ));
+               $Model->bindModel(array('hasMany' => $assoc), false);
+
+               $Model->Attachment->Behaviors->attach('Media.Polymorphic', array(
+                       'classField' => 'model',
+                       'foreignKey' => 'foreign_key'
+               ));
+               $Model->Attachment->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS:transfer:DS::Source.basename:'
+               ));
+               $Model->Attachment->Behaviors->attach('Media.Media', array(
+                       'filterDirectory' => $this->TestFolder->pwd() . 'filter' . DS
+               ));
+
+               $fileA = $this->TestData->getFile(array('image-jpg.jpg' => 'ta.jpg'));
+               $fileB = $this->TestData->getFile(array('image-png.png' => 'tb.png'));
+               $data = array(
+                       'Movie' => array('title' => 'Weekend', 'director' => 'Jean-Luc Godard'),
+                       'Attachment' => array(
+                               array('file' => $fileA, 'model' => 'Movie'),
+                               array('file' => $fileB, 'model' => 'Movie')
+               ));
+
+               $Model->create();
+               $result = $Model->saveAll($data, array('validate' => 'first'));
+               $this->assertTrue($result);
+               $this->assertTrue(file_exists($this->TestFolder->pwd() . 'ta.jpg'));
+               $this->assertTrue(file_exists($this->TestFolder->pwd() . 'tb.png'));
+
+               $result = $Model->find('first', array('conditions' => array('title' => 'Weekend')));
+               $expected = array(
+                       0 => array(
+                               'id' => 1,
+                               'model' => 'Movie',
+                               'foreign_key' => 4,
+                               'dirname' => 'tmp/test_suite/transfer',
+                               'basename' => 'ta.jpg',
+                               'checksum' => '1920c29e7fbe4d1ad2f9173ef4591133',
+                               'group' => null,
+                               'alternative' => null,
+                       ),
+                       1 => array(
+                               'id' => 2,
+                               'model' => 'Movie',
+                               'foreign_key' => 4,
+                               'dirname' => 'tmp/test_suite/transfer',
+                               'basename' => 'tb.png',
+                               'checksum' => '7f9af648b511f2c83b1744f42254983f',
+                               'group' => null,
+                               'alternative' => null,
+               ));
+               $this->assertEqual($result['Attachment'], $expected);
+
+               $result = $Model->delete($Model->getLastInsertID());
+               $this->assertTrue($result);
+               $this->assertFalse(file_exists($this->TestFolder->pwd() . 'transfer' .  DS . 'ta.jpg'));
+               $this->assertFalse(file_exists($this->TestFolder->pwd() . 'transfer' .  DS . 'tb.jpg'));
+       }
+
+       function testGroupedHasMany() {
+               $Model = ClassRegistry::init('Movie');
+               $assoc = array(
+                       'Photo' => array(
+                               'className' => 'Media.Attachment',
+                               'foreignKey' => 'foreign_key',
+                               'conditions' => array('Photo.model' => 'Movie', 'Photo.group' => 'photo'),
+                               'dependent' => true
+               ));
+               $Model->bindModel(array('hasMany' => $assoc), false);
+
+               $Model->Photo->Behaviors->attach('Media.Polymorphic', array(
+                       'classField' => 'model',
+                       'foreignKey' => 'foreign_key'
+               ));
+               $Model->Photo->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS:transfer:DS:photo:DS::Source.basename:'
+               ));
+               $Model->Photo->Behaviors->attach('Media.Media', array(
+                       'filterDirectory' => $this->TestFolder->pwd() . 'filter' . DS
+               ));
+
+               $fileA = $this->TestData->getFile(array('image-png.png' => 'ta.png'));
+               $fileB = $this->TestData->getFile(array('image-png.png' => 'tb.png'));
+               $data = array(
+                       'Movie' => array('title' => 'Weekend', 'director' => 'Jean-Luc Godard'),
+                       'Photo' => array(
+                               array('file' => $fileA, 'model' => 'Movie', 'group' => 'photo'),
+                               array('file' => $fileB, 'model' => 'Movie', 'group' => 'photo'),
+               ));
+
+               $Model->create();
+               $result = $Model->saveAll($data, array('validate' => 'first'));
+               $this->assertTrue($result);
+               $this->assertTrue(file_exists($this->TestFolder->pwd() . 'transfer' . DS . 'photo' . DS . 'ta.png'));
+               $this->assertTrue(file_exists($this->TestFolder->pwd() . 'transfer' . DS . 'photo' . DS . 'tb.png'));
+
+               $result = $Model->find('first', array('conditions' => array('title' => 'Weekend')));
+               $expected = array(
+                       'Movie' => array(
+                               'id' => 4,
+                               'title' => 'Weekend',
+                               'director' => 'Jean-Luc Godard',
+                       ),
+                       'Actor' => array(),
+                       'Photo' => array(
+                               0 => array(
+                                       'id' => 1,
+                                       'model' => 'Movie',
+                                       'foreign_key' => 4,
+                                       'dirname' => 'tmp/test_suite/transfer/photo',
+                                       'basename' => 'ta.png',
+                                       'checksum' => '7f9af648b511f2c83b1744f42254983f',
+                                       'group' => 'photo',
+                                       'alternative' => null,
+                               ),
+                               1 => array(
+                                       'id' => 2,
+                                       'model' => 'Movie',
+                                       'foreign_key' => 4,
+                                       'dirname' => 'tmp/test_suite/transfer/photo',
+                                       'basename' => 'tb.png',
+                                       'checksum' => '7f9af648b511f2c83b1744f42254983f',
+                                       'group' => 'photo',
+                                       'alternative' => null,
+               )));
+               $this->assertEqual($result, $expected);
+
+               $result = $Model->delete($Model->getLastInsertID());
+               $this->assertTrue($result);
+               $this->assertFalse(file_exists($this->TestFolder->pwd() . 'transfer' . DS . 'photo' . DS . 'ta.png'));
+               $this->assertFalse(file_exists($this->TestFolder->pwd() . 'transfer' . DS . 'photo' . DS . 'tb.png'));
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/models/behaviors/media.test.php b/app/plugins/media/tests/cases/models/behaviors/media.test.php
new file mode 100644 (file)
index 0000000..a3a6bc0
--- /dev/null
@@ -0,0 +1,161 @@
+<?php
+/**
+ * Media Behavior Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.models.behaviors
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::Import('Model', 'App');
+require_once CORE_TEST_CASES . DS . 'libs' . DS . 'model' .DS . 'models.php';
+require_once dirname(__FILE__) . DS . '..' . DS . 'models.php';
+require_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . DS . 'config' . DS . 'core.php';
+require_once dirname(dirname(dirname(dirname(__FILE__)))) . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Media Behavior Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.models.behaviors
+ */
+class MediaBehaviorTestCase extends CakeTestCase {
+       var $fixtures = array('plugin.media.song', 'core.image');
+
+       function start() {
+               parent::start();
+               $this->loadFixtures('Song');
+       }
+
+       function setUp() {
+               $this->TmpFolder = new Folder(TMP . 'tests' . DS, true);
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'static/img');
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'static/doc');
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'static/txt');
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'filter');
+
+               $this->TestData = new TestData();
+               $this->file0 = $this->TestData->getFile(array(
+                       'image-png.png' => $this->TmpFolder->pwd() . 'static/img/image-png.png'
+               ));
+               $this->file1 = $this->TestData->getFile(array(
+                       'image-jpg.jpg' => $this->TmpFolder->pwd() . 'static/img/image-jpg.jpg'
+               ));
+               $this->file2 = $this->TestData->getFile(array(
+                       'text-plain.txt' => $this->TmpFolder->pwd() . 'static/txt/text-plain.txt'
+               ));
+
+               $this->_behaviorSettings = array(
+                       'baseDirectory' => $this->TmpFolder->pwd(),
+                       'makeVersions' => false,
+                       'createDirectory' => false,
+                       'filterDirectory' => $this->TmpFolder->pwd() . 'filter' . DS,
+                       'metadataLevel' => 1
+               );
+
+               $this->_mediaConfig = Configure::read('Media');
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+               $this->TmpFolder->delete();
+               ClassRegistry::flush();
+               Configure::write('Media', $this->_mediaConfig);
+       }
+
+       function testSetup() {
+               $Model =& ClassRegistry::init('TheVoid');
+               $Model->Behaviors->attach('Media.Media');
+
+               $Model =& ClassRegistry::init('Song');
+               $Model->Behaviors->attach('Media.Media');
+       }
+
+       function testFind() {
+               $Model =& ClassRegistry::init('Song');
+               $Model->Behaviors->attach('Media.Media', $this->_behaviorSettings);
+               $result = $Model->find('all');
+               $this->assertEqual(count($result), 3);
+
+               /* Virtual */
+               $result = $Model->findById(1);
+               $this->assertTrue(Set::matches('/Song/size', $result));
+               $this->assertTrue(Set::matches('/Song/mime_type',$result));
+       }
+
+       function testSave() {
+               $Model =& ClassRegistry::init('Song');
+               $Model->Behaviors->attach('Media.Media', $this->_behaviorSettings);
+
+               $file = $this->TestData->getFile(array(
+                       'application-pdf.pdf' => $this->TmpFolder->pwd() . 'static/doc/application-pdf.pdf'
+               ));
+               $item = array('file' => $file);
+               $Model->create();
+               $result = $Model->save($item);
+               $this->assertTrue($result);
+
+               $result = $Model->findById(5);
+               $expected = array(
+                       'Song' => array (
+                               'id' => '5',
+                                       'dirname' => 'static/doc',
+                                       'basename' => 'application-pdf.pdf',
+                                       'checksum' => 'f7ee91cffd90881f3d719e1bab1c4697',
+                                       'size' => 13903,
+                                       'mime_type' => 'application/pdf'
+               ));
+               $this->assertEqual($expected, $result);
+       }
+
+       function testBeforeMake() {
+               Configure::write('Media.filter.image', array(
+                       's' => array('convert' => 'image/png', 'fit' => array(5, 5)),
+                       'm' => array('convert' => 'image/png', 'fit' => array(10, 10))
+               ));
+
+               $Model =& ClassRegistry::init('Unicorn', 'Model');
+
+               $Model->Behaviors->attach('Media.Media', array(
+                       'baseDirectory' => $this->TmpFolder->pwd(),
+                       'filterDirectory' => $this->TmpFolder->pwd() . 'filter' . DS,
+                       'makeVersions' => true,
+                       'createDirectory' => true,
+                       'metadataLevel' => 0));
+
+               $file = $this->TestData->getFile(array(
+                       'image-jpg.jpg' => $this->TmpFolder->pwd() . 'image-jpg.jpg'));
+
+               $expected[] = array(
+                                       $file,
+                                       array(
+                                               'overwrite' => false,
+                                               'directory' => $this->TmpFolder->pwd() . 'filter' . DS . 's' . DS,
+                                               'name' => 'Image',
+                                               'version' => 's',
+                                               'instructions' => array('convert' => 'image/png', 'fit' => array(5, 5))
+                                                )
+                                       );
+               $expected[] = array(
+                       $file,
+                       array(
+                               'overwrite' => false,
+                               'directory' => $this->TmpFolder->pwd() . 'filter' . DS . 'm' . DS,
+                               'name' => 'Image',
+                               'version' => 'm',
+                               'instructions' => array('convert' => 'image/png', 'fit' => array(10, 10))
+                ));
+
+               $Model->make($file);
+               $this->assertEqual($Model->beforeMakeArgs, $expected);
+       }
+}
+?>
diff --git a/app/plugins/media/tests/cases/models/behaviors/transfer.test.php b/app/plugins/media/tests/cases/models/behaviors/transfer.test.php
new file mode 100644 (file)
index 0000000..8d56987
--- /dev/null
@@ -0,0 +1,328 @@
+<?php
+/**
+ * Transfer Behavior Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.models.behaviors
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::Import('Model', 'App');
+App::import('Behavior', 'Media.Transfer');
+require_once dirname(dirname(__FILE__)) . DS . 'models.php';
+require_once CORE_TEST_CASES . DS . 'libs' . DS . 'model' .DS . 'models.php';
+require_once dirname(dirname(dirname(dirname(__FILE__)))) . DS . 'fixtures' . DS . 'test_data.php';
+require_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . DS . 'config' . DS . 'core.php';
+/**
+ * Test Transfer Behavior Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.models.behaviors
+ */
+class TestTransferBehavior extends TransferBehavior {
+       function alternativeFile($file, $tries = 100) {
+               return $this->_alternativeFile($file, $tries);
+       }
+}
+/**
+ * Transfer Behavior Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.models.behaviors
+ */
+class TransferBehaviorTestCase extends CakeTestCase {
+       var $fixtures = array('plugin.media.movie', 'plugin.media.actor');
+
+       function setUp() {
+               $this->TestData = new TestData();
+               $this->TestFolder = new Folder(TMP . 'test_suite' . DS . 'transfer' . DS, true);
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+               $this->TestFolder->delete();
+               ClassRegistry::flush();
+       }
+
+       function skip() {
+               $this->skipUnless(@fsockopen('cakephp.org', 80), 'Remote server not available at cakephp.org.');
+       }
+
+       function testSetupValidation() {
+               $Model =& ClassRegistry::init('Movie');
+               $Model->validate['file'] = array(
+                       'resource' => array('rule' => 'checkResource')
+               );
+               $Model->Behaviors->attach('Media.Transfer');
+
+               $expected = array(
+                       'resource' => array(
+                               'rule' => 'checkResource',
+                               'allowEmpty' => true,
+                               'required' => false,
+                               'last' => true
+               ));
+               $this->assertEqual($Model->validate['file'], $expected);
+
+               $Model =& ClassRegistry::init('Movie');
+               $Model->validate['file'] = array(
+                       'resource' => array(
+                               'rule' => 'checkResource',
+                               'required' => true,
+               ));
+               $Model->Behaviors->attach('Media.Transfer');
+
+               $expected = array(
+                       'resource' => array(
+                               'rule' => 'checkResource',
+                               'allowEmpty' => true,
+                               'required' => true,
+                               'last' => true
+               ));
+               $this->assertEqual($Model->validate['file'], $expected);
+       }
+
+       function testFailOnNoResource() {
+               $Model =& ClassRegistry::init('Movie');
+               $Model->validate['file'] = array(
+                       'resource' => array(
+                               'rule' => 'checkResource',
+                               'required' => true,
+                               'allowEmpty' => false,
+               ));
+               $Model->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS:transfer:DS::Source.basename:'
+               ));
+
+               $item = array('title' => 'Spiderman I', 'file' => '');
+               $Model->create($item);
+               $this->assertFalse($Model->save());
+
+               $item = array('title' => 'Spiderman I', 'file' => array());
+               $Model->create($item);
+               $this->assertFalse($Model->save());
+
+               $item = array(
+                       'title' => 'Spiderman I',
+                       'file' => array(
+                               'name' => '',
+                               'type' => '',
+                               'tmp_name' => '',
+                               'error' => UPLOAD_ERR_NO_FILE,
+                               'size' => 0,
+               ));
+               $Model->create($item);
+               $this->assertFalse($Model->save());
+       }
+
+       function testDestinationFile() {
+               $Model =& ClassRegistry::init('Movie');
+               $Model->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS:transfer:DS::Source.basename:'
+               ));
+
+               $file = $this->TestData->getFile(array('image-jpg.jpg' => 'wei?rd$Ö- FILE_name_'));
+               $item = array('title' => 'Spiderman I', 'file' => $file);
+               $Model->create();
+               $this->assertTrue($Model->save($item));
+               $this->assertEqual($Model->getLastTransferredFile(), $this->TestFolder->pwd() . 'wei_rd_oe_file_name');
+
+               $Model->Behaviors->detach('Transfer');
+               $Model->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'please:raiseanerror:'
+               ));
+
+               $file = $this->TestData->getFile('image-jpg.jpg');
+               $item = array('title' => 'Spiderman II', 'file' => $file);
+               $Model->create();
+               $this->expectError();
+               $this->assertFalse($Model->save($item));
+       }
+
+       function testGetLastTransferredFile() {
+               $Model =& ClassRegistry::init('TheVoid');
+               $Model->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS::Source.basename:'
+               ));
+
+               $this->assertFalse($Model->getLastTransferredFile());
+
+               $file = $this->TestData->getFile('image-jpg.jpg');
+               $Model->prepare($file);
+               $Model->perform();
+               $file = $Model->getLastTransferredFile();
+
+               $this->assertTrue($file);
+               $this->assertTrue(file_exists($file));
+       }
+
+       function testFileLocalToFileLocal() {
+               $Model =& ClassRegistry::init('Movie');
+               $Model->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS:transfer:DS::Source.basename:'
+               ));
+
+               $file = $this->TestData->getFile(array('image-jpg.jpg' => 'ta.jpg'));
+               $item = array('title' => 'Spiderman I', 'file' => $file);
+               $Model->create();
+               $this->assertTrue($Model->save($item));
+               $this->assertTrue(file_exists($file));
+               $this->assertEqual($Model->getLastTransferredFile(), $this->TestFolder->pwd() . 'ta.jpg');
+
+               $Model =& ClassRegistry::init('TheVoid');
+               $Model->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS:transfer:DS::Source.basename:'
+               ));
+
+               $file = $this->TestData->getFile(array('image-jpg.jpg' => 'tb.jpg'));
+               $this->assertTrue($Model->prepare($file));
+               $this->assertTrue($Model->perform());
+               $this->assertTrue(file_exists($file));
+               $this->assertEqual($Model->getLastTransferredFile(), $this->TestFolder->pwd() . 'tb.jpg');
+
+               ClassRegistry::flush();
+
+               $Model =& ClassRegistry::init('Movie');
+               $Model->Actor->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS:transfer:DS::Source.basename:'
+               ));
+               $file = $this->TestData->getFile(array('image-jpg.jpg' => 'tc.jpg'));
+               $data = array(
+                       'Movie' => array('title' => 'Changeling'),
+                       'Actor' => array(array('name' => 'John Malkovich', 'file' => $file)),
+               );
+               $this->assertTrue($Model->saveAll($data));
+               $this->assertTrue(file_exists($file));
+               $this->assertEqual($Model->Actor->getLastTransferredFile(), $this->TestFolder->pwd() . 'tc.jpg');
+       }
+
+       function testUrlRemoteToFileLocal() {
+               $Model =& ClassRegistry::init('Movie');
+               $Model->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS:transfer:DS::Source.basename:'
+               ));
+
+               $item = array('title' => 'Spiderman I', 'file' => 'http://cakephp.org/img/cake-logo.png');
+               $Model->create();
+               $this->assertTrue($Model->save($item));
+               $this->assertEqual($Model->getLastTransferredFile(), $this->TestFolder->pwd() . 'cake_logo.png');
+
+               $Model =& ClassRegistry::init('TheVoid');
+               $Model->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS:transfer:DS::Source.basename:'
+               ));
+
+               $file = 'http://cakephp.org/img/cake-logo.png';
+               $this->assertTrue($Model->prepare($file));
+               $this->assertTrue($Model->perform());
+               $this->assertEqual($Model->getLastTransferredFile(), $this->TestFolder->pwd() . 'cake_logo_2.png');
+       }
+
+       function testTrustClient() {
+               $Model =& ClassRegistry::init('TheVoid');
+               $Model->Behaviors->attach('Media.Transfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS::Source.basename:'
+               ));
+
+               $file = $this->TestData->getFile('image-jpg.jpg');
+               $Model->prepare($file);
+               $Model->perform();
+               $result = $Model->Behaviors->Transfer->runtime['TheVoid']['source']['mimeType'];
+               $this->assertIdentical($result, 'image/jpeg');
+               $result = $Model->Behaviors->Transfer->runtime['TheVoid']['destination']['mimeType'];
+               $this->assertNull($result);
+
+               $file = 'http://cakephp.org/img/cake-logo.png';
+               $Model->prepare($file);
+               $Model->perform();
+               $result = $Model->Behaviors->Transfer->runtime['TheVoid']['source']['mimeType'];
+               $this->assertNull($result);
+               $result = $Model->Behaviors->Transfer->runtime['TheVoid']['destination']['mimeType'];
+               $this->assertNull($result);
+
+               $Model =& ClassRegistry::init('TheVoid');
+               $Model->Behaviors->attach('Media.Transfer', array(
+                       'trustClient' => true,
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS::Source.basename:'
+               ));
+
+               $file = $this->TestData->getFile('image-jpg.jpg');
+               $Model->prepare($file);
+               $Model->perform();
+               $result = $Model->Behaviors->Transfer->runtime['TheVoid']['source']['mimeType'];
+               $this->assertIdentical($result, 'image/jpeg');
+               $result = $Model->Behaviors->Transfer->runtime['TheVoid']['destination']['mimeType'];
+               $this->assertIdentical($result, 'image/jpeg');
+
+               $file = 'http://cakephp.org/img/cake-logo.png';
+               $Model->prepare($file);
+               $Model->perform();
+               $result = $Model->Behaviors->Transfer->runtime['TheVoid']['source']['mimeType'];
+               $this->assertIdentical($result, 'image/png');
+               $result = $Model->Behaviors->Transfer->runtime['TheVoid']['destination']['mimeType'];
+               $this->assertIdentical($result, 'image/png');
+       }
+
+       function testAlternativeFile() {
+               $Model =& ClassRegistry::init('TheVoid');
+               $Model->Behaviors->attach('TestTransfer', array(
+                       'baseDirectory' => TMP,
+                       'destinationFile' => 'test_suite:DS:transfer:DS::Source.basename:'
+               ));
+               $file = $this->TestFolder->pwd() . 'file.jpg';
+
+               $result = $Model->Behaviors->TestTransfer->alternativeFile($file);
+               $expected = $this->TestFolder->pwd() . 'file.jpg';
+               $this->assertEqual($result, $expected);
+
+               touch($this->TestFolder->pwd() . 'file.jpg');
+
+               $result = $Model->Behaviors->TestTransfer->alternativeFile($file);
+               $expected = $this->TestFolder->pwd() . 'file_2.jpg';
+               $this->assertEqual($result, $expected);
+
+               touch($this->TestFolder->pwd() . 'file_2.jpg');
+
+               $result = $Model->Behaviors->TestTransfer->alternativeFile($file);
+               $expected = $this->TestFolder->pwd() . 'file_3.jpg';
+               $this->assertEqual($result, $expected);
+
+               touch($this->TestFolder->pwd() . 'file_3.png');
+
+               $result = $Model->Behaviors->TestTransfer->alternativeFile($file);
+               $expected = $this->TestFolder->pwd() . 'file_4.jpg';
+               $this->assertEqual($result, $expected);
+
+               touch($this->TestFolder->pwd() . 'file_80.jpg');
+
+               $result = $Model->Behaviors->TestTransfer->alternativeFile($file);
+               $expected = $this->TestFolder->pwd() . 'file_4.jpg';
+               $this->assertEqual($result, $expected);
+
+               touch($this->TestFolder->pwd() . 'file_4.jpg');
+
+               $result = $Model->Behaviors->TestTransfer->alternativeFile($file, 4);
+               $this->assertFalse($result);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/models/models.php b/app/plugins/media/tests/cases/models/models.php
new file mode 100644 (file)
index 0000000..d2e06c8
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+class Movie extends CakeTestModel {
+       var $name = 'Movie';
+       var $useTable = 'movies';
+       var $hasMany = array('Actor');
+}
+
+class Actor extends CakeTestModel {
+       var $name = 'Actor';
+       var $useTable = 'actors';
+       var $belongsTo = array('Movie');
+}
+
+class Unicorn extends CakeTestModel {
+       var $name = 'Unicorn';
+       var $useTable = false;
+       var $beforeMakeArgs = array();
+
+       function beforeMake() {
+               $this->beforeMakeArgs[] = func_get_args();
+               return false;
+       }
+}
+
+class Pirate extends CakeTestModel {
+       var $name = 'Pirate';
+       var $useTable = 'pirates';
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/vendors/media_validation.test.php b/app/plugins/media/tests/cases/vendors/media_validation.test.php
new file mode 100644 (file)
index 0000000..731d59b
--- /dev/null
@@ -0,0 +1,294 @@
+<?php
+/**
+ * Media Validation Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor','Media.MediaValidation');
+require_once dirname(dirname(dirname(__FILE__))) . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Transfer Validation Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs
+ */
+class MediaValidationTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function testMimeType() {
+               $check = 'image/png';
+               $result = MediaValidation::mimeType($check);
+               $this->assertTrue($result);
+
+               $check = 'image/png';
+               $result = MediaValidation::mimeType($check,array('image/png'));
+               $this->assertFalse($result);
+
+               $check = 'image/png';
+               $result = MediaValidation::mimeType($check,array('image/png'),array('image/png'));
+               $this->assertFalse($result);
+
+               $check = 'in/val/id';
+               $result = MediaValidation::mimeType($check);
+               $this->assertFalse($result);
+
+               $check = '';
+               $result = MediaValidation::mimeType($check);
+               $this->assertFalse($result);
+       }
+
+       function testExtension() {
+               $check = 'png';
+               $result = MediaValidation::extension($check);
+               $this->assertTrue($result);
+
+               $check = 'tar.gz';
+               $result = MediaValidation::extension($check, false, array('tar', 'gz'));
+               $this->assertTrue($result);
+
+               $check = 'tar.gz';
+               $result = MediaValidation::extension($check, false, array('tar.gz'));
+               $this->assertFalse($result);
+
+               $check = 'png';
+               $result = MediaValidation::extension($check, array('png'));
+               $this->assertFalse($result);
+
+               $check = 'png';
+               $result = MediaValidation::extension($check, array('png'), array('png'));
+               $this->assertFalse($result);
+
+               $check = 'in.va.lid';
+               $result = MediaValidation::extension($check);
+               $this->assertFalse($result);
+
+               $check = '.inva.lid';
+               $result = MediaValidation::extension($check);
+               $this->assertFalse($result);
+
+               $check = '';
+               $result = MediaValidation::extension($check);
+               $this->assertFalse($result);
+
+               $check = false;
+               $result = MediaValidation::extension($check);
+               $this->assertFalse($result);
+
+               $check = true;
+               $result = MediaValidation::extension($check);
+               $this->assertFalse($result);
+
+               $check = true;
+               $result = MediaValidation::extension($check);
+               $this->assertFalse($result);
+
+               $deny = array('bin', 'class', 'dll', 'dms', 'exe', 'lha');
+        $allow = array('pdf');
+               $check = 'tmp';
+               $result = MediaValidation::extension($check, $deny, $allow);
+               $this->assertFalse($result);
+
+               $check = 'tmp';
+               $result = MediaValidation::extension($check);
+               $this->assertTrue($result);
+
+               $deny = array('bin', 'class', 'dll', 'dms', 'exe', 'lha');
+        $allow = array('pdf', 'tmp');
+               $check = 'tmp';
+               $result = MediaValidation::extension($check);
+               $this->assertTrue($result);
+
+               $deny = array('bin', 'class', 'dll', 'dms', 'exe', 'lha');
+        $allow = array('*');
+               $check = 'tmp';
+               $result = MediaValidation::extension($check);
+               $this->assertTrue($result);
+       }
+
+       function testSize() {
+               $result = MediaValidation::size('1M','2M');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::size('1K','2M');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::size('1M','1K');
+               $this->assertFalse($result);
+
+               $result = MediaValidation::size('1048576','2M');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::size(1048576,'2M');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::size('1M','1M');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::size('1048576','1M');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::size(1048576,10);
+               $this->assertFalse($result);
+
+               $result = MediaValidation::size('','2M');
+               $this->assertFalse($result);
+
+       }
+
+       function testLocation() {
+               $result = MediaValidation::location(TMP);
+               $this->assertFalse($result);
+
+               $result = MediaValidation::location(TMP,true);
+               $this->assertTrue($result);
+
+               $result = MediaValidation::location(TMP,array(DS));
+               $this->assertTrue($result);
+
+               $result = MediaValidation::location(TMP.DS.DS.DS,array(DS));
+               $this->assertTrue($result);
+
+               $result = MediaValidation::location(TMP.DS.'file.png',array(DS));
+               $this->assertTrue($result);
+
+               $result = MediaValidation::location(TMP,array(TMP.'subdir'));
+               $this->assertFalse($result);
+
+               $result = MediaValidation::location('http://cakeforge.org',true);
+               $this->assertTrue($result);
+
+               $result = MediaValidation::location('http://cakeforge.org');
+               $this->assertFalse($result);
+
+               $result = MediaValidation::location('http://cakeforge.org',array(TMP));
+               $this->assertFalse($result);
+
+               $result = MediaValidation::location('http://cakeforge.org',array(TMP,'http://'));
+               $this->assertTrue($result);
+
+               $result = MediaValidation::location('http://cakeforge.org','http://rosa');
+               $this->assertFalse($result);
+
+               $result = MediaValidation::location('http://cakeforge.org','http://cakeforge.org');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::location('http://cakeforge.org/bla/?x=?$§c $%.org','http://cakeforge.org');
+               $this->assertFalse($result);
+
+               $result = MediaValidation::location('http://cakeforge.org/bla','http://cakeforge.org');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::location('http://cakeforge.org/bla?x=do','http://cakeforge.org');
+               $this->assertTrue($result);
+       }
+
+       function testAccess() {
+               $result = MediaValidation::access('0444', 'r');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::access(0444, 'r');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::access('0004', 'r');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::access('0111','r');
+               $this->assertFalse($result);
+
+               $result = MediaValidation::access('0222', 'w');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::access('0002', 'w');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::access('0111', 'w');
+               $this->assertFalse($result);
+       }
+
+       function testPermission() {
+               $result = MediaValidation::permission('0111');
+               $this->assertFalse($result);
+
+               $result = MediaValidation::permission(0111);
+               $this->assertFalse($result);
+
+               $result = MediaValidation::permission('0111','-x');
+               $this->assertFalse($result);
+
+               $result = MediaValidation::permission('0111','-x');
+               $this->assertFalse($result);
+
+               $result = MediaValidation::permission('0000','-x');
+               $this->assertTrue($result);
+
+               $result = MediaValidation::permission('0666','-x');
+               $this->assertTrue($result);
+       }
+
+       function testFile() {
+               $file = __FILE__;
+               $result = MediaValidation::file($file);
+               $this->assertTrue($result);
+
+               $file = $this->TestData->getFile('image-jpg.jpg');
+               $result = MediaValidation::file($file,false);
+               $this->assertTrue($result);
+
+               $file = DS.'i-am-not-a-file.png';
+               $result = MediaValidation::file($file);
+               $this->assertFalse($result);
+
+               $file = DS;
+               $result = MediaValidation::file($file);
+               $this->assertFalse($result);
+
+               $file = DS;
+               $result = MediaValidation::file($file,false);
+               $this->assertTrue($result);
+       }
+
+       function testFolder() {
+               $file = dirname(__FILE__);
+               $result = MediaValidation::folder($file);
+               $this->assertTrue($result);
+
+               $file = $this->TestData->getFile('image-jpg.jpg');
+               $result = MediaValidation::folder($file,false);
+               $this->assertTrue($result);
+
+               $file = DS.'i-am-not-a-file.png';
+               $result = MediaValidation::folder($file);
+               $this->assertFalse($result);
+
+               $file = DS;
+               $result = MediaValidation::folder($file);
+               $this->assertTrue($result);
+
+               $file = DS;
+               $result = MediaValidation::folder($file,false);
+               $this->assertTrue($result);
+
+               $file = DS.DS.DS.DS;
+               $result = MediaValidation::folder($file,false);
+               $this->assertTrue($result);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/vendors/medium/adapter/ffmpeg_audio.test.php b/app/plugins/media/tests/cases/vendors/medium/adapter/ffmpeg_audio.test.php
new file mode 100644 (file)
index 0000000..6d22db6
--- /dev/null
@@ -0,0 +1,214 @@
+<?php
+/**
+ * FfmpegAudio Medium Adapter Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor','Media.AudioMedium', array('file' => 'medium'.DS.'audio.php'));
+App::import('Vendor','FfMpegAudioMediumAdapter', array('file' => 'medium'.DS.'adapter'.DS.'ff_mpeg_audio.php'));
+require_once dirname(__FILE__) . DS . '..' . DS . '..' . DS . '..' . DS . '..' . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Test Ffmpeg Audio Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class TestFfmpegAudioMedium extends AudioMedium {
+       var $adapters = array('FfmpegAudio');
+}
+/**
+ * FfMpeg Audio Medium Adapter Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class FfmpegAudioMediumAdapterTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function skip() {
+               $this->skipUnless(extension_loaded('ffmpeg'), '%s ffmpeg extension not loaded');
+       }
+
+       function testBasic() {
+               $result = new TestFfmpegAudioMedium($this->TestData->getFile('audio-mpeg.ID3v1.mp3'));
+               $this->assertIsA($result, 'object');
+
+               $Medium = new TestFfmpegAudioMedium($this->TestData->getFile('audio-mpeg.ID3v1.mp3'));
+               $result = $Medium->toString();
+               $this->assertTrue(!empty($result));
+       }
+
+       function testInformationId3v1() {
+               $Medium = new TestFfmpegAudioMedium($this->TestData->getFile('audio-mpeg.ID3v1.mp3'));
+
+               $result = $Medium->artist();
+               $this->assertEqual($result, 'Artist');
+
+               $result = $Medium->title();
+               $this->assertEqual($result, 'Title');
+
+               $result = $Medium->album();
+               $this->assertEqual($result, 'Album');
+
+               $result = $Medium->year();
+               $this->assertEqual($result, 2009);
+
+               $result = $Medium->track();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 64000);
+
+               $result = $Medium->samplingRate();
+               $this->assertEqual($result, 24000);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 1);
+       }
+
+       function testInformationId3v2() {
+               $Medium = new TestFfmpegAudioMedium($this->TestData->getFile('audio-mpeg.ID3v2.mp3'));
+
+               $result = $Medium->artist();
+               $this->assertEqual($result, 'Artist');
+
+               $result = $Medium->title();
+               $this->assertEqual($result, 'Title');
+
+               $result = $Medium->album();
+               $this->assertEqual($result, 'Album');
+
+               $result = $Medium->year();
+               $this->assertEqual($result, 2009);
+
+               $result = $Medium->track();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 64000);
+
+               $result = $Medium->samplingRate();
+               $this->assertEqual($result, 24000);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 1);
+       }
+
+       function testInformationNotag() {
+               $Medium = new TestFfmpegAudioMedium($this->TestData->getFile('audio-mpeg.notag.mp3'));
+
+               $result = $Medium->artist();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->title();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->album();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->year();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->track();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 64000);
+
+               $result = $Medium->samplingRate();
+               $this->assertEqual($result, 24000);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 1);
+       }
+
+       function testInformationVorbisComment() {
+               $Medium = new TestFfmpegAudioMedium($this->TestData->getFile('audio-vorbis.comments.ogg'));
+
+               $result = $Medium->artist();
+               $this->assertEqual($result, 'Artist');
+
+               $result = $Medium->title();
+               $this->assertEqual($result, 'Title');
+
+               $result = $Medium->album();
+               $this->assertEqual($result, 'Album');
+
+               $result = $Medium->year();
+               $this->assertEqual($result, 2009);
+
+               $result = $Medium->track();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 36666);
+
+               $result = $Medium->samplingRate();
+               $this->assertEqual($result, 24000);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 1);
+       }
+
+       function testInformationVorbisNotag() {
+               $Medium = new TestFfmpegAudioMedium($this->TestData->getFile('audio-vorbis.notag.ogg'));
+
+               $result = $Medium->artist();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->title();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->album();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->year();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->track();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 36666);
+
+               $result = $Medium->samplingRate();
+               $this->assertEqual($result, 24000);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 1);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/vendors/medium/adapter/ffmpeg_video.test.php b/app/plugins/media/tests/cases/vendors/medium/adapter/ffmpeg_video.test.php
new file mode 100644 (file)
index 0000000..a5f4c16
--- /dev/null
@@ -0,0 +1,161 @@
+<?php
+/**
+ * FfmpegVideo Medium Adapter Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor','Media.VideoMedium', array('file' => 'medium'.DS.'video.php'));
+App::import('Vendor','FfMpegVideoMediumAdapter', array('file' => 'medium'.DS.'adapter'.DS.'ff_mpeg_video.php'));
+require_once dirname(__FILE__) . DS . '..' . DS . '..' . DS . '..' . DS . '..' . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Test Ffmpeg Video Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class TestFfmpegVideoMedium extends VideoMedium {
+       var $adapters = array('FfMpegVideo');
+}
+/**
+ * Ffmpeg Video Medium Adapter Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class FfmpegVideoMediumAdapterTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function skip() {
+               $this->skipUnless(extension_loaded('ffmpeg'), '%s ffmpeg extension not loaded');
+       }
+
+       function testBasic() {
+               $result = new TestFfmpegVideoMedium($this->TestData->getFile('video-quicktime.notag.mov'));
+               $this->assertIsA($result, 'object');
+
+               $Medium = new TestFfmpegVideoMedium($this->TestData->getFile('video-quicktime.notag.mov'));
+               $result = $Medium->toString();
+               $this->assertTrue(!empty($result));
+       }
+
+       function testInformationMp4tag() {
+               $Medium = new TestFfmpegVideoMedium($this->TestData->getFile('video-quicktime.notag.mov'));
+
+               $result = $Medium->title();
+               //$this->assertEqual($result, 'Title'); // Unable to get the Title...
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 489203);
+
+               $result = $Medium->width();
+               $this->assertEqual($result, 320);
+
+               $result = $Medium->height();
+               $this->assertEqual($result, 180);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 2);
+       }
+
+       function testInformationMp4notag() {
+               $Medium = new TestFfmpegVideoMedium($this->TestData->getFile('video-quicktime.notag.mov'));
+
+               $result = $Medium->title();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 489203);
+
+               $result = $Medium->width();
+               $this->assertEqual($result, 320);
+
+               $result = $Medium->height();
+               $this->assertEqual($result, 180);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 2);
+       }
+
+       function testInformationTheoraComment() {
+               $Medium = new TestFfmpegVideoMedium($this->TestData->getFile('video-theora.comments.ogv'));
+
+               $result = $Medium->title();
+               $this->assertEqual($result, 'Title');
+
+               $result = $Medium->duration();
+               //$this->assertEqual($result, 1); // Video seems too short (1 sec), return 0 length
+
+               $result = $Medium->bitRate();
+               //$this->assertEqual($result, 200000); // Return 0 bitrate...
+
+               $result = $Medium->width();
+               $this->assertEqual($result, 320);
+
+               $result = $Medium->height();
+               $this->assertEqual($result, 176);
+
+               $result = $Medium->quality();
+               //$this->assertEqual($result, 2); // No bitrate, fail to compute quality
+       }
+
+       function testInformationTheoraNotag() {
+               $Medium = new TestFfmpegVideoMedium($this->TestData->getFile('video-theora.notag.ogv'));
+
+               $result = $Medium->title();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->duration();
+               //$this->assertEqual($result, 1); // Video seems too short (1 sec), return 0 length
+
+               $result = $Medium->bitRate();
+               //$this->assertEqual($result, 200000); // Return 0 bitrate...
+
+               $result = $Medium->width();
+               $this->assertEqual($result, 320);
+
+               $result = $Medium->height();
+               $this->assertEqual($result, 176);
+
+               $result = $Medium->quality();
+               //$this->assertEqual($result, 2); // No bitrate, fail to compute quality
+       }
+
+       function testConvertMp4() {
+               $Medium = new TestFfmpegVideoMedium($this->TestData->getFile('video-h264.qt-tag.mp4'));
+               $Medium->convert('image/jpeg');
+               $result = $Medium->mimeType;
+               $this->assertTrue($result, 'image/jpeg');
+       }
+
+       function testConvertTheora() {
+               $Medium = new TestFfmpegVideoMedium($this->TestData->getFile('video-theora.comments.ogv'));
+               $Medium->convert('image/png');
+               $result = $Medium->mimeType;
+               $this->assertTrue($result, 'image/png');
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/vendors/medium/adapter/gd.test.php b/app/plugins/media/tests/cases/vendors/medium/adapter/gd.test.php
new file mode 100644 (file)
index 0000000..88daa45
--- /dev/null
@@ -0,0 +1,135 @@
+<?php
+/**
+ * Gd Medium Adapter Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor','Media.ImageMedium', array('file' => 'medium'.DS.'image.php'));
+App::import('Vendor','GdMediumAdapter', array('file' => 'medium'.DS.'adapter'.DS.'gd.php'));
+require_once dirname(__FILE__) . DS . '..' . DS . '..' . DS . '..' . DS . '..' . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Test Gd Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class TestGdImageMedium extends ImageMedium {
+       var $adapters = array('Gd');
+}
+/**
+ * Gd Medium Adapter Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class GdMediumAdapterTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function skip() {
+               $this->skipUnless(extension_loaded('gd'), '%s GD extension not loaded');
+       }
+
+       function testBasic() {
+               $result = new TestGdImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $this->assertIsA($result, 'object');
+
+               $Medium = new TestGdImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $result = $Medium->toString();
+               $this->assertTrue(!empty($result));
+       }
+
+       function testInformation() {
+               $Medium = new TestGdImageMedium($this->TestData->getFile('image-jpg.jpg'));
+
+               $result = $Medium->width();
+               $this->assertEqual($result, 70);
+
+               $result = $Medium->height();
+               $this->assertEqual($result, 47);
+       }
+
+       function testManipulation() {
+               $Medium = new TestGdImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $Medium->fit(10, 10);
+               $this->assertTrue($Medium->width() <= 10);
+               $this->assertTrue($Medium->height() <= 10);
+
+               $Medium = new TestGdImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $Medium->convert('image/png');
+               $result = $Medium->mimeType;
+               $this->assertTrue($result, 'image/png');
+       }
+
+       function testManipulationWithAlphaTransparency8bit() {
+               $source = $this->TestData->getFile('image-png.transparent.8bit.png');
+               $target = $this->TestData->getFile('test8bit_man.jpg');
+
+               $Medium = new TestGdImageMedium($source);
+               $Medium->convert('image/jpeg');
+               $Medium->fit(15, 15);
+               $Medium->store($target, true);
+               $this->assertEqual(md5_file($target), 'fc5a49bb265ea1baa6094d289a4823b0');
+
+               $source = $this->TestData->getFile('image-png.transparent.8bit.png');
+               $target = $this->TestData->getFile('test8bit_man.png');
+
+               $Medium = new TestGdImageMedium($source);
+               $Medium->fit(15, 15);
+               $result = $Medium->mimeType;
+               $Medium->store($target, true);
+               $this->assertEqual(md5_file($target), '6230d343b932bfcf0996c7e0a291b677');
+       }
+
+       function testManipulationWithAlphaTransparency16bit() {
+               $source = $this->TestData->getFile('image-png.transparent.16bit.png');
+               $target = $this->TestData->getFile('test16bit_man.jpg');
+
+               $Medium = new TestGdImageMedium($source);
+               $Medium->convert('image/jpeg');
+               $Medium->fit(15, 15);
+               $Medium->store($target, true);
+               $this->assertEqual(md5_file($target), '1719836a4b39bc56bf119975785292f8');
+
+               $source = $this->TestData->getFile('image-png.transparent.16bit.png');
+               $target = $this->TestData->getFile('test16bit_man.png');
+
+               $Medium = new TestGdImageMedium($source);
+               $Medium->fit(15, 15);
+               $result = $Medium->mimeType;
+               $Medium->store($target, true);
+               $this->assertEqual(md5_file($target), 'f8c84870bd6cf656e9dcaba1cbf26636');
+       }
+
+       function testCompress() {
+               $Medium = new TestGdImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $resultCompress = $Medium->compress(1.5);
+               $resultStore = $Medium->store($this->TestData->getFile('test-compress-1.5.jpg'), true);
+               $this->assertTrue($resultCompress);
+               $this->assertTrue(file_exists($resultStore));
+
+               $Medium = new TestGdImageMedium($this->TestData->getFile('image-png.png'));
+               $resultCompress = $Medium->compress(1.5);
+               $resultStore = $Medium->store($this->TestData->getFile('test-compress-1.5.png'), true);
+               $this->assertTrue($resultCompress);
+               $this->assertTrue($resultStore);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/vendors/medium/adapter/getid3_audio.test.php b/app/plugins/media/tests/cases/vendors/medium/adapter/getid3_audio.test.php
new file mode 100644 (file)
index 0000000..fb420f3
--- /dev/null
@@ -0,0 +1,232 @@
+<?php
+/**
+ * Getid3Audio Medium Adapter Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor','Media.AudioMedium', array('file' => 'medium'.DS.'audio.php'));
+App::import('Vendor','GetId3AudioMediumAdapter', array('file' => 'medium'.DS.'adapter'.DS.'get_id3_audio.php'));
+require_once dirname(__FILE__) . DS . '..' . DS . '..' . DS . '..' . DS . '..' . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Test Getid3 Audio Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class TestGetid3AudioMedium extends AudioMedium {
+       var $adapters = array('Getid3Audio');
+}
+/**
+ * Getid3 Audio Medium Adapter Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class Getid3AudioMediumAdapterTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function skip() {
+               $this->skipUnless(App::import(array(
+                       'type' => 'Vendor',
+                       'name'=> 'getID3',
+                       'file' => 'getid3/getid3.php'
+                       )), 'Getid3 not in vendor');
+       }
+
+       function testBasic() {
+               $result = new TestGetid3AudioMedium($this->TestData->getFile('audio-mpeg.ID3v1.mp3'));
+               $this->assertIsA($result, 'object');
+
+               $Medium = new TestGetid3AudioMedium($this->TestData->getFile('audio-mpeg.ID3v1.mp3'));
+               $result = $Medium->toString();
+               $this->assertTrue(!empty($result));
+       }
+
+       function testInformationId3v1() {
+               $Medium = new TestGetid3AudioMedium($this->TestData->getFile('audio-mpeg.ID3v1.mp3'));
+
+               $result = $Medium->artist();
+               $this->assertEqual($result, 'Artist');
+
+               $result = $Medium->title();
+               $this->assertEqual($result, 'Title');
+
+               $result = $Medium->album();
+               $this->assertEqual($result, 'Album');
+
+               $result = $Medium->year();
+               $this->assertEqual($result, 2009);
+
+               $result = $Medium->track();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 64000);
+
+               $result = $Medium->samplingRate();
+               $this->assertEqual($result, 24000);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 1);
+       }
+
+       function testInformationId3v2() {
+               $Medium = new TestGetid3AudioMedium($this->TestData->getFile('audio-mpeg.ID3v2.mp3'));
+
+               $result = $Medium->artist();
+               $this->assertEqual($result, 'Artist');
+
+               $result = $Medium->title();
+               $this->assertEqual($result, 'Title');
+
+               $result = $Medium->album();
+               $this->assertEqual($result, 'Album');
+
+               $result = $Medium->year();
+               $this->assertEqual($result, 2009);
+
+               $result = $Medium->track();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 64000);
+
+               $result = $Medium->samplingRate();
+               $this->assertEqual($result, 24000);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 1);
+       }
+
+       function testInformationNotag() {
+               $Medium = new TestGetid3AudioMedium($this->TestData->getFile('audio-mpeg.notag.mp3'));
+
+               $result = $Medium->artist();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->title();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->album();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->year();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->track();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 64000);
+
+               $result = $Medium->samplingRate();
+               $this->assertEqual($result, 24000);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 1);
+       }
+
+       function testInformationVorbisComment() {
+               $Medium = new TestGetid3AudioMedium($this->TestData->getFile('audio-vorbis.comments.ogg'));
+
+               $result = $Medium->artist();
+               $this->assertEqual($result, 'Artist');
+
+               $result = $Medium->title();
+               $this->assertEqual($result, 'Title');
+
+               $result = $Medium->album();
+               $this->assertEqual($result, 'Album');
+
+               $result = $Medium->year();
+               $this->assertEqual($result, 2009);
+
+               $result = $Medium->track();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 36666);
+
+               $result = $Medium->samplingRate();
+               $this->assertEqual($result, 24000);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 1);
+       }
+
+       function testInformationVorbisNotag() {
+               $Medium = new TestGetid3AudioMedium($this->TestData->getFile('audio-vorbis.notag.ogg'));
+
+               $result = $Medium->artist();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->title();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->album();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->year();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->track();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 36666);
+
+               $result = $Medium->samplingRate();
+               $this->assertEqual($result, 24000);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 1);
+       }
+
+       function testConvertMp3() {
+               $Medium = new TestGetid3AudioMedium($this->TestData->getFile('audio-mpeg.ID3v2.mp3'));
+               $Medium->convert('image/jpeg');
+               $result = $Medium->mimeType;
+               $this->assertTrue($result, 'image/jpeg');
+       }
+
+       function testConvertOgg() {
+               $Medium = new TestGetid3AudioMedium($this->TestData->getFile('audio-vorbis.comments.ogg'));
+               $Medium->convert('image/png');
+               $result = $Medium->mimeType;
+               $this->assertTrue($result, 'image/png');
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/vendors/medium/adapter/getid3_video.test.php b/app/plugins/media/tests/cases/vendors/medium/adapter/getid3_video.test.php
new file mode 100644 (file)
index 0000000..22f00bb
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+/**
+ * Getid3Video Medium Adapter Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor','Media.VideoMedium', array('file' => 'medium'.DS.'video.php'));
+App::import('Vendor','GetId3VideoMediumAdapter', array('file' => 'medium'.DS.'adapter'.DS.'get_id3_video.php'));
+require_once dirname(__FILE__) . DS . '..' . DS . '..' . DS . '..' . DS . '..' . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Test Getid3 Video Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class TestGetid3VideoMedium extends VideoMedium {
+       var $adapters = array('Getid3Video');
+}
+/**
+ * Getid3 Video Medium Adapter Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class Getid3VideoMediumAdapterTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function skip() {
+               $this->skipUnless(App::import(array(
+                       'type' => 'Vendor',
+                       'name'=> 'getID3',
+                       'file' => 'getid3/getid3.php'
+                       )), 'Getid3 not in vendor');
+       }
+
+       function testBasic() {
+               $result = new TestGetid3VideoMedium($this->TestData->getFile('video-h264.qt-tag.mp4'));
+               $this->assertIsA($result, 'object');
+
+               $Medium = new TestGetid3VideoMedium($this->TestData->getFile('video-h264.qt-tag.mp4'));
+               $result = $Medium->toString();
+               $this->assertTrue(!empty($result));
+       }
+
+       function testInformationMp4tag() {
+               $Medium = new TestGetid3VideoMedium($this->TestData->getFile('video-h264.qt-tag.mp4'));
+
+               /* Fails because info->tags->quicktime->field
+               $result = $Medium->title();
+               $this->assertEqual($result, 'Title');
+
+               $result = $Medium->year();
+               $this->assertEqual($result, 2009);
+                */
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 243006);
+
+               $result = $Medium->width();
+               $this->assertEqual($result, 320);
+
+               $result = $Medium->height();
+               $this->assertEqual($result, 180);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 2);
+       }
+
+       function testInformationMp4notag() {
+               $Medium = new TestGetid3VideoMedium($this->TestData->getFile('video-h264.notag.mp4'));
+
+               $result = $Medium->title();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->year();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 241671);
+
+               $result = $Medium->width();
+               $this->assertEqual($result, 320);
+
+               $result = $Medium->height();
+               $this->assertEqual($result, 180);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 2);
+       }
+}
+?>
diff --git a/app/plugins/media/tests/cases/vendors/medium/adapter/imagick.test.php b/app/plugins/media/tests/cases/vendors/medium/adapter/imagick.test.php
new file mode 100644 (file)
index 0000000..0d282fc
--- /dev/null
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Imagick Medium Adapter Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor','Media.ImageMedium', array('file' => 'medium'.DS.'image.php'));
+App::import('Vendor','Media.DocumentMedium', array('file' => 'medium'.DS.'document.php'));
+App::import('Vendor','ImagickMediumAdapter', array('file' => 'medium'.DS.'adapter'.DS.'imagick.php'));
+require_once dirname(__FILE__) . DS . '..' . DS . '..' . DS . '..' . DS . '..' . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Test Imagick Image Medium Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class TestImagickImageMedium extends ImageMedium {
+       var $adapters = array('Imagick');
+}
+/**
+ * Test Imagick Document Medium Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class TestImagickDocumentMedium extends DocumentMedium {
+       var $adapters = array('Imagick');
+}
+/**
+ * Imagick Medium Adapter Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class ImagickMediumAdapterTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function skip() {
+               $this->skipUnless(extension_loaded('imagick'), 'Imagick extension not loaded');
+       }
+
+       function showImage($string, $mimeType = null) {
+               echo '<img src="data:'.$mimeType.';base64,'.base64_encode($string).'" />';
+       }
+
+       function testBasic() {
+               $result = new TestImagickImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $this->assertIsA($result, 'object');
+
+               $Medium = new TestImagickImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $result = $Medium->toString();
+               $this->assertTrue(!empty($result));
+       }
+
+       function testInformation() {
+               $file = $this->TestData->getFile('image-jpg.jpg');
+               $Medium = new TestImagickImageMedium($file);
+
+               $result = $Medium->width();
+               $this->assertEqual($result, 70);
+
+               $result = $Medium->height();
+               $this->assertEqual($result, 47);
+       }
+
+       function testManipulation() {
+               $Medium = new TestImagickImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $Medium->fit(10, 10);
+               $this->assertTrue($Medium->width() <= 10);
+               $this->assertTrue($Medium->height() <= 10);
+
+               $Medium = new TestImagickImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $Medium = $Medium->convert('image/png');
+               if ($this->assertIsA($Medium, 'ImageMedium')) {
+                       $result = $Medium->mimeType;
+                       $this->assertEqual($result, 'image/png');
+               }
+
+               $Medium = new TestImagickImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $Medium = $Medium->convert('image/png');
+               if ($this->assertIsA($Medium, 'ImageMedium')) {
+                       $tmpFile = TMP . uniqid('test_suite_');
+                       $tmpFile = $Medium->store($tmpFile);
+                       $this->assertEqual(MimeType::guessType($tmpFile), 'image/png');
+                       unlink($tmpFile);
+               }
+       }
+
+       function testCompress() {
+               $Medium = new TestImagickImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $resultCompress = $Medium->compress(1.5);
+               $resultStore = $Medium->store($this->TestData->getFile('test-compress-1.5.jpg'), true);
+               $this->assertTrue($resultCompress);
+               $this->assertTrue($resultStore);
+
+               $Medium = new TestImagickImageMedium($this->TestData->getFile('image-png.png'));
+               $resultCompress = $Medium->compress(1.5);
+               $resultStore = $Medium->store($this->TestData->getFile('test-compress-1.5.png'), true);
+               $this->assertTrue($resultCompress);
+               $this->assertTrue($resultStore);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/vendors/medium/adapter/imagick_shell.test.php b/app/plugins/media/tests/cases/vendors/medium/adapter/imagick_shell.test.php
new file mode 100644 (file)
index 0000000..f7ad3aa
--- /dev/null
@@ -0,0 +1,136 @@
+<?php
+/**
+ * Imagick Shell Medium Adapter Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor','Media.ImageMedium', array('file' => 'medium'.DS.'image.php'));
+App::import('Vendor','Media.DocumentMedium', array('file' => 'medium'.DS.'document.php'));
+App::import('Vendor','ImagickShellMediumAdapter', array('file' => 'medium'.DS.'adapter'.DS.'imagick_shell.php'));
+require_once dirname(__FILE__) . DS . '..' . DS . '..' . DS . '..' . DS . '..' . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Test Imagick Shell Image Medium Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class TestImagickShellImageMedium extends ImageMedium {
+       var $adapters = array('ImagickShell');
+}
+/**
+ * Test Imagick Shell Document Medium Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class TestImagickShellDocumentMedium extends DocumentMedium {
+       var $adapters = array('ImagickShell');
+}
+/**
+ * Imagick Shell Medium Adapter Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class ImagickShellMediumAdapterTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function skip() {
+               exec('which convert 2>&1', $output, $return);
+               $this->skipUnless($return === 0, 'convert command not available');
+               exec('which identify 2>&1', $output, $return);
+               $this->skipUnless($return === 0, 'identify command not available');
+               exec('which gs 2>&1', $output, $return);
+               $this->skipUnless($return === 0, 'gs command not available');
+       }
+
+       function showImage($string, $mimeType = null) {
+               echo '<img src="data:'.$mimeType.';base64,'.base64_encode($string).'" />';
+       }
+
+       function testBasic() {
+               $result = new TestImagickShellImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $this->assertIsA($result, 'object');
+
+               $Medium = new TestImagickShellImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $result = $Medium->toString();
+               $this->assertTrue(!empty($result));
+       }
+
+       function testInformation() {
+               $Medium = new TestImagickShellImageMedium($this->TestData->getFile('image-jpg.jpg'));
+
+               $result = $Medium->width();
+               $this->assertEqual($result, 70);
+
+               $result = $Medium->height();
+               $this->assertEqual($result, 47);
+       }
+
+       function testManipulation() {
+               $Medium = new TestImagickShellImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $Medium->fit(10,10);
+               $this->assertTrue($Medium->width() <= 10);
+               $this->assertTrue($Medium->height() <= 10);
+
+               $Medium = new TestImagickShellImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $Medium->convert('image/png');
+               $result = $Medium->mimeType;
+               $this->assertTrue($result, 'image/png');
+       }
+
+       function testCompress() {
+               $Medium = new TestImagickShellImageMedium($this->TestData->getFile('image-jpg.jpg'));
+               $resultCompress = $Medium->compress(1.5);
+               $resultStore = $Medium->store($this->TestData->getFile('test-compress-1.5.jpg'), true);
+               $this->assertTrue($resultCompress);
+               $this->assertTrue($resultStore);
+
+               $Medium = new TestImagickShellImageMedium($this->TestData->getFile('image-png.png'));
+               $resultCompress = $Medium->compress(1.5);
+               $resultStore = $Medium->store($this->TestData->getFile('test-compress-1.5.png'), true);
+               $this->assertTrue($resultCompress);
+               $this->assertTrue($resultStore);
+       }
+
+       function testTransitions() {
+               $Medium = new DocumentMedium($this->TestData->getFile('application-pdf.pdf'));
+               $Medium->Adapters->detach(array_diff($Medium->adapters, array('ImagickShell')));
+
+               $Medium = $Medium->convert('image/png');
+               $Medium->Adapters->detach(array_diff($Medium->adapters, array('ImagickShell')));
+               $this->assertIsA($Medium, 'ImageMedium');
+
+               $tmpFile = $Medium->store(TMP . uniqid('test_suite_'));
+               $this->assertEqual(MimeType::guessType($tmpFile), 'image/png');
+               unlink($tmpFile);
+
+               $Medium = new DocumentMedium($this->TestData->getFile('application-pdf.pdf'));
+               $Medium->Adapters->detach(array_diff($Medium->adapters, array('ImagickShell')));
+               $Medium = $Medium->convert('image/png');
+               $Medium->Adapters->detach(array_diff($Medium->adapters, array('ImagickShell')));
+               $result = $Medium->fit(10, 10);
+               $this->assertTrue($result);
+               $this->assertTrue($Medium->width() <= 10);
+               $this->assertTrue($Medium->height() <= 10);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/vendors/medium/adapter/pear_mp3.test.php b/app/plugins/media/tests/cases/vendors/medium/adapter/pear_mp3.test.php
new file mode 100644 (file)
index 0000000..41bfdbf
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+/**
+ * PearMp3Audio Medium Adapter Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor','Media.AudioMedium', array('file' => 'medium'.DS.'audio.php'));
+App::import('Vendor','PearMp3MediumAdapter', array('file' => 'medium'.DS.'adapter'.DS.'pear_mp3.php'));
+require_once dirname(__FILE__) . DS . '..' . DS . '..' . DS . '..' . DS . '..' . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Test PearMp3 Audio Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class TestPearMp3Medium extends AudioMedium {
+       var $adapters = array('PearMp3');
+}
+/**
+ * PearMp3 Audio Medium Adapter Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium.adapter
+ */
+class PearMp3MediumAdapterTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function skip()
+       {
+               $this->skipUnless(App::import(array(
+                       'type' => 'Vendor',
+                       'name'=> 'MP3_Id',
+                       'file' => 'MP3/Id.php'
+                       )), 'PearMp3 not in vendor');
+       }
+
+       function testBasic() {
+               $result = new TestPearMp3Medium($this->TestData->getFile('audio-mpeg.ID3v1.mp3'));
+               $this->assertIsA($result, 'object');
+
+               $Medium = new TestPearMp3Medium($this->TestData->getFile('audio-mpeg.ID3v1.mp3'));
+               $result = $Medium->toString();
+               $this->assertTrue(!empty($result));
+       }
+
+       function testInformationId3v1() {
+               $Medium = new TestPearMp3Medium($this->TestData->getFile('audio-mpeg.ID3v1.mp3'));
+
+               $result = $Medium->artist();
+               $this->assertEqual($result, 'Artist');
+
+               $result = $Medium->title();
+               $this->assertEqual($result, 'Title');
+
+               $result = $Medium->album();
+               $this->assertEqual($result, 'Album');
+
+               $result = $Medium->year();
+               $this->assertEqual($result, 2009);
+
+               $result = $Medium->track();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 64000);
+
+               $result = $Medium->samplingRate();
+               $this->assertEqual($result, 24000);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 1);
+       }
+
+       function testInformationNotag() {
+               $Medium = new TestPearMp3Medium($this->TestData->getFile('audio-mpeg.notag.mp3'));
+
+               $result = $Medium->artist();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->title();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->album();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->year();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->track();
+               $this->assertEqual($result, null);
+
+               $result = $Medium->duration();
+               $this->assertEqual($result, 1);
+
+               $result = $Medium->bitRate();
+               $this->assertEqual($result, 64000);
+
+               $result = $Medium->samplingRate();
+               $this->assertEqual($result, 24000);
+
+               $result = $Medium->quality();
+               $this->assertEqual($result, 1);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/vendors/medium/document.test.php b/app/plugins/media/tests/cases/vendors/medium/document.test.php
new file mode 100644 (file)
index 0000000..4547f45
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Document Medium Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.DocumentMedium', array('file' => 'medium' . DS . 'document.php'));
+require_once dirname(__FILE__) . DS . '..' . DS . '..' . DS . '..' . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Document Medium Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium
+ */
+class DocumentMediumTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function skip() {
+               exec('which gs 2>&1', $output, $return);
+               $this->skipUnless($return === 0, 'gs command not available');
+       }
+
+       function testInformation() {
+               $file = $this->TestData->getFile('application-pdf.pdf');
+               $Medium = new DocumentMedium($file);
+               $result = $Medium->width();
+               $expecting = 595;
+               $this->assertEqual($result,$expecting);
+
+               $result = $Medium->height();
+               $expecting = 842;
+               $this->assertEqual($result,$expecting);
+
+               $result = $Medium->quality();
+               $expecting = 0;
+               $this->assertEqual($result,$expecting);
+
+               $result = $Medium->ratio();
+               $expecting = '1:√2';
+               $this->assertEqual($result,$expecting);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/vendors/medium/image.test.php b/app/plugins/media/tests/cases/vendors/medium/image.test.php
new file mode 100644 (file)
index 0000000..9e74552
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+/**
+ * Image Medium Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor','Media.ImageMedium', array('file' => 'medium' . DS . 'image.php'));
+App::import('Vendor','Media.DocumentMedium', array('file' => 'medium' . DS . 'document.php'));
+require_once dirname(__FILE__) . DS . '..' . DS . '..' . DS . '..' . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Image Medium Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium
+ */
+class ImageMediumTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function testInformation() {
+               $file = $this->TestData->getFile('image-jpg.jpg');
+               $Medium = new ImageMedium($file);
+               $result = $Medium->width();
+               $expecting = 70;
+               $this->assertEqual($result,$expecting);
+
+               $result = $Medium->height();
+               $expecting = 47;
+               $this->assertEqual($result,$expecting);
+
+               $result = $Medium->quality();
+               $expecting = 1;
+               $this->assertEqual($result,$expecting);
+
+               $result = $Medium->ratio();
+               $expecting = '3:2';
+               $this->assertEqual($result,$expecting);
+
+               $result = $Medium->megapixel();
+               $expecting = 0;
+               $this->assertEqual($result,$expecting);
+       }
+
+       function testTransitions() {
+               exec('which gs 2>&1', $output, $return);
+               $this->skipUnless($return === 0, 'gs command not available');
+
+               $Medium = new DocumentMedium($this->TestData->getFile('application-pdf.pdf'));
+               $Medium = $Medium->convert('image/png');
+               if ($this->assertIsA($Medium, 'ImageMedium')) {
+                       $tmpFile = $Medium->store(TMP . uniqid('test_suite_'));
+                       $this->assertEqual(MimeType::guessType($tmpFile), 'image/png');
+                       unlink($tmpFile);
+               }
+
+               $Medium = new DocumentMedium($this->TestData->getFile('application-pdf.pdf'));
+               $Medium = $Medium->convert('image/png');
+               if ($this->assertIsA($Medium, 'ImageMedium')) {
+                       $result = $Medium->fit(10, 10);
+                       $this->assertTrue($result);
+                       $this->assertTrue($Medium->width() <= 10);
+                       $this->assertTrue($Medium->height() <= 10);
+               }
+       }
+}
+?>
diff --git a/app/plugins/media/tests/cases/vendors/medium/medium.test.php b/app/plugins/media/tests/cases/vendors/medium/medium.test.php
new file mode 100644 (file)
index 0000000..7b4bf0c
--- /dev/null
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Medium Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.Medium');
+require_once dirname(__FILE__) . DS . '..' . DS . '..' . DS . '..' . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Banana Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium
+ */
+class BananaMediumAdapter extends MediumAdapter {}
+/**
+ * Cherry Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium
+ */
+class CherryMediumAdapter extends MediumAdapter {}
+/**
+ * Sweet Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium
+ */
+class SweetMedium extends Medium {
+       var $adapters = array('Banana', 'Cherry');
+}
+/**
+ * Medium Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs.medium
+ */
+class MediumTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function testMediumFactory() {
+               $file = $this->TestData->getFile('image-jpg.jpg');
+               $result = Medium::factory($file);
+               $this->assertIsA($result,'ImageMedium');
+
+               $file = $this->TestData->getFile('image-png.png');
+               $result = Medium::factory($file);
+               $this->assertIsA($result,'ImageMedium');
+
+               $file = $this->TestData->getFile('image-gif.gif');
+               $result = Medium::factory($file);
+               $this->assertIsA($result,'ImageMedium');
+
+               $file = $this->TestData->getFile('text-plain.txt');
+               $result = Medium::factory($file);
+               $this->assertIsA($result,'TextMedium');
+
+               $file = $this->TestData->getFile('application-pdf.pdf');
+               $result = Medium::factory($file);
+               $this->assertIsA($result,'DocumentMedium');
+       }
+
+       function testMediumNameAndShort() {
+               $file = $this->TestData->getFile('image-jpg.jpg');
+               $result = Medium::factory($file);
+               $this->assertEqual($result->name,'Image');
+               $this->assertEqual($result->short,'img');
+
+               $file = $this->TestData->getFile('image-png.png');
+               $result = Medium::factory($file);
+               $this->assertEqual($result->name,'Image');
+               $this->assertEqual($result->short,'img');
+
+               $file = $this->TestData->getFile('image-gif.gif');
+               $result = Medium::factory($file);
+               $this->assertEqual($result->name,'Image');
+               $this->assertEqual($result->short,'img');
+
+               $file = $this->TestData->getFile('text-plain.txt');
+               $result = Medium::factory($file);
+               $this->assertEqual($result->name,'Text');
+               $this->assertEqual($result->short,'txt');
+
+               $file = $this->TestData->getFile('application-pdf.pdf');
+               $result = Medium::factory($file);
+               $this->assertEqual($result->name,'Document');
+               $this->assertEqual($result->short,'doc');
+       }
+
+       function testMediumAdapterCollection() {
+
+//             $Collection = new MediumAdapterCollection();
+//             $Collection
+
+       }
+
+       function testMake() {
+               $instructions = array('convert' => 'image/png', 'zoomCrop' => array(10, 10));
+               $Medium = Medium::make($this->TestData->getFile('image-jpg.jpg'), $instructions);
+               $this->assertIsA($Medium, 'Medium');
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/vendors/mime_glob.test.php b/app/plugins/media/tests/cases/vendors/mime_glob.test.php
new file mode 100644 (file)
index 0000000..83ef06b
--- /dev/null
@@ -0,0 +1,216 @@
+<?php
+/**
+ * Mime Glob Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs
+ * @author     David Persson <davidpersson@gmx.de>
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.MimeGlob');
+require_once dirname(dirname(dirname(__FILE__))) . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Mime Glob Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs
+ */
+class MimeGlobTest extends CakeTestCase {
+       function setUp() {
+               Configure::write('Cache.disable', true);
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function testFormat() {
+               $this->assertNull(MimeGlob::format(true));
+               $this->assertNull(MimeGlob::format(5));
+//             $this->assertNull(MimeGlob::format(array('foo' => 'bar')));
+               $this->assertNull(MimeGlob::format('does-not-exist.db'));
+
+               $file = $this->TestData->getFile('glob.apache.snippet.db');
+               $this->assertEqual(MimeGlob::format($file), 'Apache Module mod_mime');
+
+               $file = $this->TestData->getFile('glob.freedesktop.snippet.db');
+               $this->assertEqual(MimeGlob::format($file), 'Freedesktop Shared MIME-info Database');
+       }
+
+       function testRead() {
+               $fileA = $this->TestData->getFile('glob.apache.snippet.db');
+               $fileB = $this->TestData->getFile('glob.freedesktop.snippet.db');
+
+               $Mime =& new MimeGlob($fileA);
+
+               $Mime =& new MimeGlob($fileB);
+
+               $this->expectError();
+               $Mime =& new MimeGlob(5);
+       }
+
+       function testToArrayAndRead() {
+               $file = $this->TestData->getFile('glob.apache.snippet.db');
+
+               $Mime =& new MimeGlob($file);
+               $expected = $Mime->toArray();
+               $Mime =& new MimeGlob($expected);
+               $result = $Mime->toArray();
+
+               $this->assertEqual($result, $expected);
+       }
+
+       function testAnalyzeFail() {
+               $file = $this->TestData->getFile('glob.apache.snippet.db');
+               $Mime =& new MimeGlob($file);
+
+               $this->assertEqual($Mime->analyze('i-dont-exist.sla'), array());
+
+               $file = $this->TestData->getFile('glob.freedesktop.snippet.db');
+               $Mime =& new MimeGlob($file);
+       }
+
+       function testApacheAnalyze() {
+               $file = $this->TestData->getFile('glob.apache.snippet.db');
+               $Mime =& new MimeGlob($file);
+
+               $this->assertEqual($Mime->analyze('file.3gp'), array());
+               $this->assertEqual($Mime->analyze('file.avi'), array());
+               $this->assertEqual($Mime->analyze('file.bz2'), array());
+               $this->assertEqual($Mime->analyze('file.mp4'), array());
+               $this->assertEqual($Mime->analyze('file.css'), array('text/css'));
+               $this->assertEqual($Mime->analyze('file.flac'), array('application/x-flac'));
+               $this->assertEqual($Mime->analyze('file.swf'), array('application/x-shockwave-flash'));
+               $this->assertEqual($Mime->analyze('file.gif'), array('image/gif'));
+               $this->assertEqual($Mime->analyze('file.gz'), array());
+               $this->assertEqual($Mime->analyze('file.html'), array('text/html'));
+               $this->assertEqual($Mime->analyze('file.mp3'), array('audio/mpeg'));
+               $this->assertEqual($Mime->analyze('file.class'), array('application/java-vm'));
+               $this->assertEqual($Mime->analyze('file.js'), array('application/x-javascript'));
+               $this->assertEqual($Mime->analyze('file.jpg'), array('image/jpeg'));
+               $this->assertEqual($Mime->analyze('file.mpeg'), array());
+               $this->assertEqual($Mime->analyze('file.ogg'), array('application/ogg'));
+               $this->assertEqual($Mime->analyze('file.php'), array());
+               $this->assertEqual($Mime->analyze('file.pdf'), array('application/pdf'));
+               $this->assertEqual($Mime->analyze('file.png'), array('image/png'));
+               $this->assertEqual($Mime->analyze('file.ps'), array('application/postscript'));
+               $this->assertEqual($Mime->analyze('file.po'), array());
+               $this->assertEqual($Mime->analyze('file.pot'), array('text/plain'));
+               $this->assertEqual($Mime->analyze('file.mo'), array());
+               $this->assertEqual($Mime->analyze('file.rm'), array('audio/x-pn-realaudio'));
+               $this->assertEqual($Mime->analyze('file.rtf'), array('text/rtf'));
+               $this->assertEqual($Mime->analyze('file.txt'), array('text/plain'));
+               $this->assertEqual($Mime->analyze('file.doc'), array('application/msword'));
+               $this->assertEqual($Mime->analyze('file.docx'), array());
+               $this->assertEqual($Mime->analyze('file.odt'), array('application/vnd.oasis.opendocument.text'));
+               $this->assertEqual($Mime->analyze('file.tar'), array('application/x-tar'));
+               $this->assertEqual($Mime->analyze('file.wav'), array('audio/x-wav'));
+               $this->assertEqual($Mime->analyze('file.xhtml'), array('application/xhtml+xml'));
+               $this->assertEqual($Mime->analyze('file.xml'), array('application/xml'));
+       }
+
+       function testApacheAnalyzeReverse() {
+               $file = $this->TestData->getFile('glob.apache.snippet.db');
+               $Mime =& new MimeGlob($file);
+
+               $this->assertEqual($Mime->analyze('text/plain', true), array('asc', 'txt', 'text', 'diff', 'pot'));
+               $this->assertEqual($Mime->analyze('application/pdf', true), array('pdf'));
+       }
+
+       function testFreedesktopAnalyze() {
+               $file = $this->TestData->getFile('glob.freedesktop.snippet.db');
+               $Mime =& new MimeGlob($file);
+
+               $this->assertEqual($Mime->analyze('file.3gp'), array());
+               $this->assertEqual($Mime->analyze('file.avi'), array());
+               $this->assertEqual($Mime->analyze('file.bz2'), array('application/x-bzip'));
+               $this->assertEqual($Mime->analyze('file.mp4'), array());
+               $this->assertEqual($Mime->analyze('file.css'), array('text/css'));
+               $this->assertEqual($Mime->analyze('file.flac'), array());
+               $this->assertEqual($Mime->analyze('file.swf'), array());
+               $this->assertEqual($Mime->analyze('file.gif'), array('image/gif'));
+               $this->assertEqual($Mime->analyze('file.gz'), array('application/x-gzip'));
+               $this->assertEqual($Mime->analyze('file.html'), array());
+               $this->assertEqual($Mime->analyze('file.mp3'), array());
+               $this->assertEqual($Mime->analyze('file.class'), array('application/x-java'));
+               $this->assertEqual($Mime->analyze('file.js'), array('application/javascript'));
+               $this->assertEqual($Mime->analyze('file.jpg'), array());
+               $this->assertEqual($Mime->analyze('file.mpeg'), array());
+               $this->assertEqual($Mime->analyze('file.ogg'), array());
+               $this->assertEqual($Mime->analyze('file.php'), array());
+               $this->assertEqual($Mime->analyze('file.pdf'), array('application/pdf'));
+               $this->assertEqual($Mime->analyze('file.png'), array());
+               $this->assertEqual($Mime->analyze('file.ps'), array());
+               $this->assertEqual($Mime->analyze('file.po'), array('text/x-gettext-translation'));
+               $this->assertEqual($Mime->analyze('file.pot'), array('application/vnd.ms-powerpoint','text/x-gettext-translation-template'));
+               $this->assertEqual($Mime->analyze('file.mo'), array('application/x-gettext-translation'));
+               $this->assertEqual($Mime->analyze('file.rm'), array());
+               $this->assertEqual($Mime->analyze('file.rtf'), array('application/rtf'));
+               $this->assertEqual($Mime->analyze('file.txt'), array('text/plain'));
+               $this->assertEqual($Mime->analyze('file.doc'), array('application/msword'));
+               $this->assertEqual($Mime->analyze('file.docx'), array());
+               $this->assertEqual($Mime->analyze('file.odt'), array('application/vnd.oasis.opendocument.text'));
+               $this->assertEqual($Mime->analyze('file.tar'), array('application/x-tar'));
+               $this->assertEqual($Mime->analyze('file.wav'), array());
+               $this->assertEqual($Mime->analyze('file.xhtml'), array('application/xhtml+xml'));
+               $this->assertEqual($Mime->analyze('file.xml'), array('application/xml'));
+       }
+
+       function testShippedAnalyze() {
+               $file = dirname(dirname(dirname(dirname(__FILE__)))) . DS . 'vendors' . DS . 'mime_glob.db';
+               $skip = $this->skipIf(!file_exists($file), '%s. No shipped glob db.');
+
+               if ($skip) { /* Skipping does not silence the error */
+                       $this->expectError();
+               }
+               $Mime =& new MimeGlob($file);
+
+               $this->assertEqual($Mime->analyze('file.3gp'), array('video/3gpp'));
+               $this->assertEqual($Mime->analyze('file.avi'), array('video/x-msvideo'));
+               $this->assertEqual($Mime->analyze('file.bz2'), array('application/x-bzip'));
+               $this->assertEqual($Mime->analyze('file.mp4'), array('video/mp4'));
+               $this->assertEqual($Mime->analyze('file.css'), array('text/css'));
+               $this->assertEqual($Mime->analyze('file.flac'), array('audio/x-flac'));
+               $this->assertEqual($Mime->analyze('file.swf'), array('application/x-shockwave-flash'));
+               $this->assertEqual($Mime->analyze('file.gif'), array('image/gif'));
+               $this->assertEqual($Mime->analyze('file.gz'), array('application/x-gzip'));
+               $this->assertEqual($Mime->analyze('file.html'), array('text/html'));
+               $this->assertEqual($Mime->analyze('file.mp3'), array('audio/mpeg'));
+               $this->assertEqual($Mime->analyze('file.class'), array('application/x-java'));
+               $this->assertEqual($Mime->analyze('file.js'), array('application/javascript'));
+               $this->assertEqual($Mime->analyze('file.jpg'), array('image/jpeg'));
+               $this->assertEqual($Mime->analyze('file.mpeg'), array('video/mpeg'));
+               $this->assertEqual($Mime->analyze('file.ogg'), array('application/ogg', 'audio/x-vorbis+ogg', 'audio/x-flac+ogg', 'audio/x-speex+ogg', 'video/x-theora+ogg'));
+               $this->assertEqual($Mime->analyze('file.php'), array('application/x-php'));
+               $this->assertEqual($Mime->analyze('file.pdf'), array('application/pdf'));
+               $this->assertEqual($Mime->analyze('file.png'), array('image/png'));
+               $this->assertEqual($Mime->analyze('file.ps'), array('application/postscript'));
+               $this->assertEqual($Mime->analyze('file.po'), array('text/x-gettext-translation'));
+               $this->assertEqual($Mime->analyze('file.pot'), array('application/vnd.ms-powerpoint','text/x-gettext-translation-template'));
+               $this->assertEqual($Mime->analyze('file.mo'), array('application/x-gettext-translation'));
+               $this->assertEqual($Mime->analyze('file.rm'), array('application/vnd.rn-realmedia'));
+               $this->assertEqual($Mime->analyze('file.rtf'), array('application/rtf'));
+               $this->assertEqual($Mime->analyze('file.txt'), array('text/plain'));
+               /* Fails with text/plain */
+               // $this->assertEqual($Mime->analyze('file.doc'), array('application/msword', 'application/msword'));
+               /* This really shouldn't fail */
+               // $this->assertEqual($Mime->analyze('file.docx'), array('application/vnd.openxmlformats-officedocument.wordprocessingml.document'));
+               $this->assertEqual($Mime->analyze('file.odt'), array('application/vnd.oasis.opendocument.text'));
+               $this->assertEqual($Mime->analyze('file.tar'), array('application/x-tar'));
+               $this->assertEqual($Mime->analyze('file.wav'), array('audio/x-wav'));
+               $this->assertEqual($Mime->analyze('file.xhtml'), array('application/xhtml+xml'));
+               $this->assertEqual($Mime->analyze('file.xml'), array('application/xml'));
+       }
+}
+?>
diff --git a/app/plugins/media/tests/cases/vendors/mime_magic.test.php b/app/plugins/media/tests/cases/vendors/mime_magic.test.php
new file mode 100644 (file)
index 0000000..953926f
--- /dev/null
@@ -0,0 +1,159 @@
+<?php
+/**
+ * Mime Magic Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.MimeMagic');
+require_once dirname(dirname(dirname(__FILE__))) . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Mime Magic Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs
+ */
+class MimeMagicTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function testFormat() {
+               $this->assertNull(MimeMagic::format(true));
+               $this->assertNull(MimeMagic::format(5));
+               /* Currently arrays aren't validated */
+               // $this->assertNull(MimeMagic::format(array('foo' => 'bar')));
+               $this->assertNull(MimeMagic::format('does-not-exist.db'));
+
+               $file = $this->TestData->getFile('text-html.snippet.html');
+               $this->assertNull(MimeMagic::format($file));
+
+               $file = $this->TestData->getFile('magic.apache.snippet.db');
+               $this->assertEqual(MimeMagic::format($file), 'Apache Module mod_mime_magic');
+
+               $file = $this->TestData->getFile('magic.freedesktop.snippet.db');
+               $this->assertEqual(MimeMagic::format($file), 'Freedesktop Shared MIME-info Database');
+       }
+
+       function testRead() {
+               $fileA = $this->TestData->getFile('magic.apache.snippet.db');
+               $fileB = $this->TestData->getFile('magic.freedesktop.snippet.db');
+
+               $Mime =& new MimeMagic($fileA);
+
+               $Mime =& new MimeMagic($fileB);
+
+               $this->expectError();
+               $Mime =& new MimeMagic(5);
+       }
+
+       function testToArrayAndRead() {
+               $file = $this->TestData->getFile('magic.apache.snippet.db');
+
+               $Mime =& new MimeMagic($file);
+               $expected = $Mime->toArray();
+               $Mime =& new MimeMagic($expected);
+               $result = $Mime->toArray();
+
+               $this->assertEqual($result, $expected);
+       }
+
+       function testAnalyzeFail() {
+               $file = $this->TestData->getFile('magic.apache.snippet.db');
+               $Mime =& new MimeMagic($file);
+
+               $this->assertEqual($Mime->analyze('i-dont-exist.sla'), array());
+
+               $file = $this->TestData->getFile('magic.freedesktop.snippet.db');
+               $Mime =& new MimeMagic($file);
+
+               $this->assertEqual($Mime->analyze('i-dont-exist.sla'), array());
+       }
+
+       function testShippedAnalyze() {
+               $file = dirname(dirname(dirname(dirname(__FILE__)))) . DS . 'vendors' . DS . 'mime_magic.db';
+               $skip = $this->skipIf(!file_exists($file), '%s. No shipped magic db.');
+
+               if ($skip) { /* Skipping does not silence the error */
+                       $this->expectError();
+               }
+               $Mime =& new MimeMagic($file);
+
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('ms.snippet.avi')), 'video/x-msvideo');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('image-gif.gif')), 'image/gif');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('application-pdf.pdf')), 'application/pdf');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('postscript.snippet.ps')), 'application/postscript');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('tar.snippet.tar')), 'application/x-tar');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('wave.snippet.wav')), 'audio/x-wav');
+
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('3gp.snippet.3gp')), 'video/3gpp');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('bzip2.snippet.bz2')), 'application/x-bzip');//application/x-bzip2
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('video.snippet.mp4')), 'video/mp4');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('gzip.snippet.gz')), 'application/x-gzip');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('text-html.snippet.html')), 'text/html');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('image-jpeg.snippet.jpg')), 'image/jpeg');//audio/MP4A-LATM
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('video-mpeg.snippet.mpeg')), 'video/mpeg');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('video-ogg.snippet.ogv')), 'video/x-theora+ogg');//application/ogg
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('audio-ogg.snippet.ogg')), 'audio/x-vorbis+ogg');//application/ogg
+               $this->assertEqual($Mime->analyze(__FILE__), 'application/x-php');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('image-png.png')), 'image/png');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('text-rtf.snippet.rtf')), 'application/rtf');//text/rtf
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('ms-word.snippet.doc')), 'application/msword');//audio/MP4A-LATM
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('xml.snippet.xml')), 'application/xml');//text/xml
+
+               /* Fail! */
+               /*
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('opendocument-writer.snippet.odt')), 'application/vnd.oasis.opendocument.text');//application/zip
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('ms-word.snippet.docx')), 'application/vnd.openxmlformats-officedocument.wordprocessingml.document');//application/zip
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('audio-mpeg.snippet.mp3')), 'audio/mpeg');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('text-plain.snippet.txt')), 'text/plain');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('css.snippet.css')), 'text/css');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('javascript.snippet.js')), 'application/javascript');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('text-xhtml.snippet.xhtml')), 'application/xhtml+xml');//text/xml
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('po.snippet.po')), 'text/x-gettext-translation');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('text-pot.snippet.pot')), 'text/x-gettext-translation-template');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('mo.snippet.mo')), 'application/x-gettext-translation');
+               */
+
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('video-flash.snippet.flv')), 'video/x-flv');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('audio.snippet.snd')), 'audio/basic');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('audio-apple.snippet.aiff')), 'audio/x-aiff');
+
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('flash.snippet.swf')), 'application/x-shockwave-flash');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('audio-mpeg.snippet.m4a')), 'audio/mp4');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('audio-musepack.snippet.mpc')), 'audio/x-musepack');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('video-quicktime.snippet.mov')), 'video/quicktime');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('video-ms.snippet.wmv')), 'video/x-ms-asf');
+
+               /* Fail! */
+               /*
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('audio.snippet.aac')), 'audio/x-aac');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('audio-ms.snippet.wma')), 'audio/x-ms-asf');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('flac.snippet.flac')), 'audio/x-flac');//Fail only with freedesktop db!
+               */
+               /* Audio formats to find/add/test:
+               riff,wavpack, aac, ac3, ape, shorten, midi, voc, s3m, xm, it, mod, matroska, pac, bonk, dts, cda */
+
+               /* Fail! No data :( */
+               /*
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('java.snippet.class')), 'application/x-java');
+               $this->assertEqual($Mime->analyze($this->TestData->getFile('real-video.snippet.rm')), 'application/vnd.rn-realmedia');
+               */
+       }
+}
+?>
diff --git a/app/plugins/media/tests/cases/vendors/mime_type.test.php b/app/plugins/media/tests/cases/vendors/mime_type.test.php
new file mode 100644 (file)
index 0000000..98b5555
--- /dev/null
@@ -0,0 +1,205 @@
+<?php
+/**
+ * Mime Type Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs
+ * @author     David Persson <davidpersson@gmx.de>
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.MimeType');
+require_once dirname(dirname(dirname(__FILE__))) . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Mime Type Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs
+ */
+class MimeTypeTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+
+       function testSimplify() {
+               MimeType::config('magic', array('engine' => false));
+               MimeType::config('glob', array('engine' => false));
+
+               $this->assertEqual(MimeType::simplify('application/x-pdf'), 'application/pdf');
+               $this->assertEqual(MimeType::simplify('x-inode/x-directory'), 'inode/directory');
+               $this->assertEqual(MimeType::simplify('application/octet-stream; encoding=compress'), 'application/octet-stream');
+               $this->assertEqual(MimeType::simplify('application/x-test; encoding=compress'), 'application/test');
+               $this->assertEqual(MimeType::simplify('text/plain; charset=iso-8859-1'), 'text/plain');
+               $this->assertEqual(MimeType::simplify('text/plain charset=us-ascii'), 'text/plain');
+       }
+
+       function testGuessTypeFileinfoShippedGlob() {
+               $this->skipUnless(extension_loaded('fileinfo'), '%s. Fileinfo extension not loaded.');
+
+               MimeType::config('magic', array(
+                       'engine' => 'fileinfo'
+               ));
+               MimeType::config('glob', array(
+                       'engine' => 'core',
+                       'file' => dirname(dirname(dirname(dirname(__FILE__)))) . DS . 'vendors' . DS . 'mime_glob.db'
+               ));
+
+               /* Some tests have been commented (if not otherwise stated) because of missing support the extension */
+
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('3gp.snippet.3gp')), 'video/3gpp');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('ms.avi')), 'video/x-msvideo');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('bzip2.snippet.bz2')), 'application/x-bzip');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('video.snippet.mp4')), 'video/mp4');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('css.snippet.css')), 'text/css');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('flac.snippet.flac')), 'audio/x-flac');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('flash.snippet.swf')), 'application/x-shockwave-flash');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('image-gif.gif')), 'image/gif');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('gzip.snippet.gz')), 'application/x-gzip');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('text-html.snippet.html')), 'text/html');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio-mpeg.snippet.mp3')), 'audio/mpeg');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('java.snippet.class')), 'application/x-java');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('javascript.snippet.js')), 'application/javascript');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('image-jpeg.snippet.jpg')), 'image/jpeg');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('video-mpeg.snippet.mpeg')), 'video/mpeg');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio-ogg.snippet.ogg')), 'audio/ogg');
+               /* Fails application<->text */
+               //$this->assertEqual(MimeType::guessType(__FILE__), 'application/x-php');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('application-pdf.pdf')), 'application/pdf');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('image-png.png')), 'image/png');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('postscript.ps')), 'application/postscript');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('po.snippet.po')), 'text/x-gettext-translation');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('text-pot.snippet.pot')), 'text/x-gettext-translation-template');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('mo.snippet.mo')), 'application/x-gettext-translation');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('real-video.snippet.rm')), 'application/vnd.rn-realmedia');
+               /* Fails application<->text */
+               //$this->assertEqual(MimeType::guessType($this->TestData->getFile('text-rtf.snippet.rtf')), 'application/rtf');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('text-plain.snippet.txt')), 'text/plain');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('ms-word.snippet.doc')), 'application/msword');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('ms-word.snippet.docx')), 'application/vnd.openxmlformats-officedocument.wordprocessingml.document');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('opendocument-writer.snippet.odt')), 'application/vnd.oasis.opendocument.text');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('tar.snippet.tar')), 'application/x-tar');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('wave.snippet.wav')), 'audio/x-wav');
+               /* Fails application<->text */
+               //$this->assertEqual(MimeType::guessType($this->TestData->getFile('text-xhtml.snippet.html')), 'application/xhtml+xml');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('xml.snippet.xml')), 'application/xml');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('generic-binary')), 'application/octet-stream');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('generic-text')), 'text/plain');
+/* Start added tests */
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('video-flash.snippet.flv')), 'video/x-flv');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio.snippet.snd')), 'audio/basic');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio-apple.snippet.aiff')), 'audio/x-aiff');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('flash.snippet.swf')), 'application/x-shockwave-flash');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio-mpeg.snippet.m4a')), 'audio/mpeg');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio-musepack.snippet.mpc')), 'audio/x-musepack');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('video-quicktime.snippet.mov')), 'video/quicktime');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('video-ms.snippet.wmv')), 'video/x-ms-wmv');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio.snippet.aac')), 'audio/x-aac');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio-ms.snippet.wma')), 'audio/x-ms-wma');
+               $this->assertEqual(MimeType::guessType($this->TestData->getFile('flac.snippet.flac')), 'audio/x-flac');//Fail only with freedesktop db!
+/* End added tests */
+               $this->assertEqual(MimeType::guessType('file.3gp'), 'video/3gpp');
+               $this->assertEqual(MimeType::guessType('file.avi'), 'video/x-msvideo');
+               $this->assertEqual(MimeType::guessType('file.bz2'), 'application/x-bzip');
+               $this->assertEqual(MimeType::guessType('file.mp4'), 'video/mp4');
+               $this->assertEqual(MimeType::guessType('file.css'), 'text/css');
+               $this->assertEqual(MimeType::guessType('file.flac'), 'audio/x-flac');
+               $this->assertEqual(MimeType::guessType('file.swf'), 'application/x-shockwave-flash');
+               $this->assertEqual(MimeType::guessType('file.gif'), 'image/gif');
+               $this->assertEqual(MimeType::guessType('file.gz'), 'application/x-gzip');
+               $this->assertEqual(MimeType::guessType('file.html'), 'text/html');
+               $this->assertEqual(MimeType::guessType('file.mp3'), 'audio/mpeg');
+               $this->assertEqual(MimeType::guessType('file.class'), 'application/x-java');
+               $this->assertEqual(MimeType::guessType('file.js'), 'application/javascript');
+               $this->assertEqual(MimeType::guessType('file.jpg'), 'image/jpeg');
+               $this->assertEqual(MimeType::guessType('file.mpeg'), 'video/mpeg');
+               $this->assertEqual(MimeType::guessType('file.ogg'), 'audio/ogg');
+               /* Fails application<->text */
+               //$this->assertEqual(MimeType::guessType('file.php'), 'application/x-php');
+               $this->assertEqual(MimeType::guessType('file.pdf'), 'application/pdf');
+               $this->assertEqual(MimeType::guessType('file.png'), 'image/png');
+               $this->assertEqual(MimeType::guessType('file.ps'), 'application/postscript');
+               $this->assertEqual(MimeType::guessType('file.po'), 'text/x-gettext-translation');
+               $this->assertEqual(MimeType::guessType('file.pot'), 'text/x-gettext-translation-template');
+               $this->assertEqual(MimeType::guessType('file.mo'), 'application/x-gettext-translation');
+               $this->assertEqual(MimeType::guessType('file.rm'), 'application/vnd.rn-realmedia');
+               /* Fails application<->text */
+               //$this->assertEqual(MimeType::guessType('file.rtf'), 'application/rtf');
+               $this->assertEqual(MimeType::guessType('file.txt'), 'text/plain');
+               $this->assertEqual(MimeType::guessType('file.doc'), 'application/msword');
+               $this->assertEqual(MimeType::guessType('file.docx'), 'application/vnd.openxmlformats-officedocument.wordprocessingml.document');
+               $this->assertEqual(MimeType::guessType('file.odt'), 'application/vnd.oasis.opendocument.text');
+               $this->assertEqual(MimeType::guessType('file.tar'), 'application/x-tar');
+               $this->assertEqual(MimeType::guessType('file.wav'), 'audio/x-wav');
+               $this->assertEqual(MimeType::guessType('file.xhtml'), 'application/xhtml+xml');
+               $this->assertEqual(MimeType::guessType('file.xml'), 'application/xml');
+       }
+
+       function testGuessExtension() {
+               MimeType::config('magic');
+               MimeType::config('glob');
+
+               $this->assertFalse(MimeType::guessExtension('i-m-not-a-mime-type'));
+               $this->assertFalse(MimeType::guessExtension('/tmp/i-m-do-not-exist.txt'));
+
+               $this->assertEqual(MimeType::guessExtension('video/3gpp'), '3gp');
+               $this->assertEqual(MimeType::guessExtension('video/x-msvideo'), 'avi');
+               $this->assertEqual(MimeType::guessExtension('application/x-bzip'), 'bz2');
+               $this->assertEqual(MimeType::guessExtension('video/mp4'), 'mp4');
+               $this->assertEqual(MimeType::guessExtension('text/css'), 'css');
+               $this->assertEqual(MimeType::guessExtension('audio/x-flac'), 'flac');
+               $this->assertEqual(MimeType::guessExtension('application/x-shockwave-flash'), 'swf');
+               $this->assertEqual(MimeType::guessExtension('image/gif'), 'gif');
+               $this->assertEqual(MimeType::guessExtension('application/x-gzip'), 'gz');
+               $this->assertEqual(MimeType::guessExtension('text/html'), 'html');
+               $this->assertEqual(MimeType::guessExtension('audio/mpeg'), 'mp3');
+               $this->assertEqual(MimeType::guessExtension('application/x-java'), 'class');
+               $this->assertEqual(MimeType::guessExtension('application/javascript'), 'js');
+               $this->assertEqual(MimeType::guessExtension('image/jpeg'), 'jpg');
+               $this->assertEqual(MimeType::guessExtension('video/mpeg'), 'mpeg');
+               $this->assertEqual(MimeType::guessExtension('application/ogg'), 'ogx');
+               /* Fails application<->text */
+               // $this->assertEqual(MimeType::guessExtension('application/x-php'), 'php');
+               $this->assertEqual(MimeType::guessExtension('application/pdf'), 'pdf');
+               $this->assertEqual(MimeType::guessExtension('image/png'), 'png');
+               $this->assertEqual(MimeType::guessExtension('application/postscript'), 'ps');
+               $this->assertEqual(MimeType::guessExtension('text/x-gettext-translation'), 'po');
+               $this->assertEqual(MimeType::guessExtension('text/x-gettext-translation-template'), 'pot');
+               $this->assertEqual(MimeType::guessExtension('application/x-gettext-translation'), 'mo');
+               $this->assertEqual(MimeType::guessExtension('application/vnd.rn-realmedia'), 'rm');
+               /* Fails application<->text */
+               // $this->assertEqual(MimeType::guessExtension('application/rtf'), 'rtf');
+               $this->assertEqual(MimeType::guessExtension('text/plain'), 'txt');
+               $this->assertEqual(MimeType::guessExtension('application/msword'), 'doc');
+               $this->assertEqual(MimeType::guessExtension('application/vnd.openxmlformats-officedocument.wordprocessingml.document'), 'docx');
+               $this->assertEqual(MimeType::guessExtension('application/vnd.oasis.opendocument.text'), 'odt');
+               $this->assertEqual(MimeType::guessExtension('application/x-tar'), 'tar');
+               $this->assertEqual(MimeType::guessExtension('audio/x-wav'), 'wav');
+               $this->assertEqual(MimeType::guessExtension('application/xhtml+xml'), 'xhtml');
+               $this->assertEqual(MimeType::guessExtension('application/xml'), 'xml');
+       }
+
+       function testGuessTypeParanoid() {
+               $this->skipUnless(extension_loaded('fileinfo'), '%s. Fileinfo extension not loaded.');
+
+               MimeType::config('magic', array('engine' => 'fileinfo'));
+               MimeType::config('glob', array('engine' => 'core', 'file' => dirname(dirname(dirname(dirname(__FILE__)))) . DS . 'vendors' . DS . 'mime_glob.db'));
+
+               $file = $this->TestData->getFile(array('image-png.png' => TMP . 'image-png.jpg'));
+               $this->assertEqual(MimeType::guessType($file, array('paranoid' => true)), 'image/png');
+               $this->assertEqual(MimeType::guessType($file, array('paranoid' => false)), 'image/jpeg');
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/vendors/transfer_validation.test.php b/app/plugins/media/tests/cases/vendors/transfer_validation.test.php
new file mode 100644 (file)
index 0000000..cd4a897
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Transfer Validation Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor','Media.TransferValidation');
+require_once dirname(dirname(dirname(__FILE__))) . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Transfer Validation Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.libs
+ */
+class TransferValidationTest extends CakeTestCase {
+       function setUp() {
+               $this->TestData = new TestData();
+       }
+
+       function tearDown() {
+               $this->TestData->flushFiles();
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/cases/views/helpers/medium.test.php b/app/plugins/media/tests/cases/views/helpers/medium.test.php
new file mode 100644 (file)
index 0000000..6852ed9
--- /dev/null
@@ -0,0 +1,229 @@
+<?php
+/**
+ * Medium Helper Test Case File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.cases.views.helpers
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Core', array('Helper', 'AppHelper', 'ClassRegistry'));
+App::import('Helper', 'Media.Medium');
+require_once dirname(__FILE__) . DS . '..' . DS . '..' . DS . '..' . DS . 'fixtures' . DS . 'test_data.php';
+/**
+ * Mock Medium Helper
+ *
+ * @package    media
+ * @subpackage media.tests.cases.views.helpers
+ */
+class MockMediumHelper extends MediumHelper {
+
+       function versions() {
+               return $this->_versions;
+       }
+
+       function directories() {
+               return $this->_directories;
+       }
+}
+/**
+ * Medium Helper Test Case Class
+ *
+ * @package    media
+ * @subpackage media.tests.cases.views.helpers
+ */
+class MediumHelperTestCase extends CakeTestCase {
+
+       function setUp() {
+               $this->_config = Configure::read('Media');
+
+               $this->TmpFolder = new Folder(TMP . 'tests' . DS, true);
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'static');
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'static' . DS . 'img');
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'filter');
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'filter' . DS . 's' . DS . 'static' . DS . 'img');
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'transfer');
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'transfer' . DS . 'img');
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'filter' . DS . 's' . DS . 'transfer' . DS . 'img');
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'theme');
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'theme' . DS . 'blanko');
+               $this->TmpFolder->create($this->TmpFolder->pwd() . 'theme' . DS . 'blanko' . DS . 'img' . DS);
+
+               $this->TestData = new TestData();
+
+               $this->file0 = $this->TestData->getFile(array(
+                       'image-png.png' => $this->TmpFolder->pwd() . 'static/img/image-png.png'));
+               $this->file1 = $this->TestData->getFile(array(
+                       'image-png.png' => $this->TmpFolder->pwd() . 'filter/s/static/img/image-png.png'));
+               $this->file2 = $this->TestData->getFile(array(
+                       'image-png.png' => $this->TmpFolder->pwd() . 'filter/s/static/img/dot.ted.name.png'));
+               $this->file3 = $this->TestData->getFile(array(
+                       'image-png.png' => $this->TmpFolder->pwd() . 'transfer/img/image-png-x.png'));
+               $this->file4 = $this->TestData->getFile(array(
+                       'image-png.png' => $this->TmpFolder->pwd() . 'filter/s/transfer/img/image-png-x.png'));
+               $this->file5 = $this->TestData->getFile(array(
+                       'image-png.png' => $this->TmpFolder->pwd() . 'theme/blanko/img/image-blanko.png'));
+
+               $settings = array(
+                       'static' => array($this->TmpFolder->pwd() . 'static' . DS => 'media/static/'),
+                       'filter' => array($this->TmpFolder->pwd() . 'filter' . DS => 'media/filter/'),
+                       'transfer' => array($this->TmpFolder->pwd() . 'transfer' . DS => false),
+                       'theme' => array($this->TmpFolder->pwd() . 'theme' . DS  => 'media/theme/')
+               );
+               $this->Helper =& new MediumHelper($settings);
+       }
+
+       function tearDown() {
+               Configure::write('Media', $this->_config);
+               $this->TestData->flushFiles();
+               $this->TmpFolder->delete();
+               ClassRegistry::flush();
+       }
+
+       function testConstruct() {
+               $settings = array(
+                       'static' => array($this->TmpFolder->pwd() . 'static' . DS => 'media/static/'),
+                       'theme' => array($this->TmpFolder->pwd() . 'theme' . DS  => 'media/theme/')
+               );
+               Configure::write('Media.filter', array(
+                       'image'  => array('s' => array(), 'm' => array()),
+                       'video' => array('s' => array(), 'xl' => array())
+               ));
+               $Helper = new MockMediumHelper($settings);
+
+               $this->assertEqual($Helper->versions(), array('s', 'm', 'xl'));
+
+               $expected = array(
+                       'static' => $this->TmpFolder->pwd() . 'static' . DS,
+                       'transfer' => MEDIA_TRANSFER,
+                       'filter' =>  MEDIA_FILTER,
+                       'theme' => $this->TmpFolder->pwd() . 'theme' . DS
+               );
+               $this->assertEqual($Helper->directories(), $expected);
+       }
+
+       function testUrl() {
+               $result = $this->Helper->url('static/img/image-png');
+               $this->assertEqual($result, 'media/static/img/image-png.png');
+
+               $result = $this->Helper->url('filter/s/static/img/image-png');
+               $this->assertEqual($result, 'media/filter/s/static/img/image-png.png');
+
+               $result = $this->Helper->url('transfer/img/image-png-x');
+               $this->assertNull($result);
+
+               $result = $this->Helper->url('filter/s/transfer/img/image-png-x');
+               $this->assertEqual($result, 'media/filter/s/transfer/img/image-png-x.png');
+
+               $result = $this->Helper->url($this->TmpFolder->pwd() . 'filter/s/transfer/img/image-png-x.png');
+               $this->assertEqual($result, 'media/filter/s/transfer/img/image-png-x.png');
+       }
+
+       function testWebroot() {
+               $result = $this->Helper->webroot('static/img/image-png');
+               $this->assertEqual($result, 'media/static/img/image-png.png');
+
+               $result = $this->Helper->webroot('filter/s/static/img/image-png');
+               $this->assertEqual($result, 'media/filter/s/static/img/image-png.png');
+
+               $result = $this->Helper->webroot('transfer/img/image-png-x');
+               $this->assertNull($result);
+
+               $result = $this->Helper->webroot('filter/s/transfer/img/image-png-x');
+               $this->assertEqual($result, 'media/filter/s/transfer/img/image-png-x.png');
+
+               $result = $this->Helper->webroot($this->TmpFolder->pwd() . 'filter/s/transfer/img/image-png-x.png');
+               $this->assertEqual($result, 'media/filter/s/transfer/img/image-png-x.png');
+       }
+
+       function testFile() {
+               $this->expectError();
+               $this->Helper->file('image-png');
+
+               $result = $this->Helper->file('static/img/not-existant.jpg');
+               $this->assertFalse($result);
+
+               $result = $this->Helper->file('img/image-png');
+               $this->assertEqual($result, $this->file0);
+
+               $result = $this->Helper->file('static/img/image-png');
+               $this->assertEqual($result, $this->file0);
+
+               $result = $this->Helper->file('static/img/image-png.png');
+               $this->assertEqual($result, $this->file0);
+
+               $result = $this->Helper->file('s/img/image-png');
+               $this->assertEqual($result, $this->file1);
+
+               $result = $this->Helper->file('filter/s/img/image-png');
+               $this->assertEqual($result, $this->file1);
+
+               $result = $this->Helper->file('filter/s/static/img/image-png');
+               $this->assertEqual($result, $this->file1);
+
+               $result = $this->Helper->file('filter/s/img/dot.ted.name');
+               $this->assertEqual($result, $this->file2);
+
+               $result = $this->Helper->file('transfer/img/image-png-x');
+               $this->assertEqual($result, $this->file3);
+
+               $result = $this->Helper->file('filter/s/transfer/img/image-png-x');
+               $this->assertEqual($result, $this->file4);
+
+               $result = $this->Helper->file($this->TmpFolder->pwd() . 'filter/s/transfer/img/image-png-x.png');
+               $this->assertEqual($result, $this->file4);
+
+               $result = $this->Helper->file('theme/blanko/img/image-blanko');
+               $this->assertEqual($result, $this->file5);
+       }
+
+       function testFileArraySyntax() {
+               $result = $this->Helper->file(array(
+                       'dirname' => 'static/img',
+                       'basename' => 'not-existant.jpg'
+               ));
+               $this->assertFalse($result);
+
+               $result = $this->Helper->file(array(
+                       'dirname' => 'static/img',
+                       'basename' => 'image-png'
+               ));
+               $this->assertEqual($result, $this->file0);
+
+               $result = $this->Helper->file(array(
+                       'dirname' => 'static/img/',
+                       'basename' => 'image-png'
+               ));
+               $this->assertEqual($result, $this->file0);
+       }
+
+       function testFileMixedSyntax() {
+               $result = $this->Helper->file('static', array(
+                       'dirname' => 'img',
+                       'basename' => 'not-existant.jpg'
+               ));
+               $this->assertFalse($result);
+
+               $result = $this->Helper->file('static', array(
+                       'dirname' => 'img',
+                       'basename' => 'image-png'
+               ));
+               $this->assertEqual($result, $this->file0);
+
+               $result = $this->Helper->file('static/', array(
+                       'dirname' => 'img',
+                       'basename' => 'image-png'
+               ));
+               $this->assertEqual($result, $this->file0);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/fixtures/actor_fixture.php b/app/plugins/media/tests/fixtures/actor_fixture.php
new file mode 100644 (file)
index 0000000..cd717ec
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+class ActorFixture extends CakeTestFixture {
+       var $name = 'Actor';
+
+       var $fields = array(
+                       'id'            => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary', 'extra' => 'auto_increment', 'length' => 10),
+                       'movie_id'      => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10),
+                       'name'          => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 255),
+                       'indexes'       => array('PRIMARY' => array('column' => 'id', 'unique' => 1))
+                       );
+
+       var $records = array(
+                                               array(
+                                                       'id'  => 1,
+                                                       'movie_id' => 1,
+                                                       'name' => 'Michael Sheen',
+                                               ),
+                                               array(
+                                                       'id'  => 2,
+                                                       'movie_id' => 1,
+                                                       'name' => 'Frank Langella',
+                                               ),
+                                               array(
+                                                       'id'  => 3,
+                                                       'movie_id' => 2,
+                                                       'name' => 'Nassim Amrabt',
+                                               ),
+                                       );
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/fixtures/attachment_fixture.php b/app/plugins/media/tests/fixtures/attachment_fixture.php
new file mode 100644 (file)
index 0000000..75e069a
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+class AttachmentFixture extends CakeTestFixture {
+       var $name = 'Attachment';
+
+       var $fields = array(
+                       'id'          => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary', 'extra' => 'auto_increment', 'length' => 10),
+                       'model'       => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 255),
+                       'foreign_key' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10),
+                       'dirname'     => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 255),
+                       'basename'    => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 255),
+                       'checksum'    => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 255),
+                       'group'       => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 255),
+                       'alternative' => array('type' => 'string', 'null' => true, 'default' => NULL,'length' => 50),
+                       'indexes'     => array('PRIMARY' => array('column' => 'id', 'unique' => 1))
+                       );
+
+       var $records = array();
+}
diff --git a/app/plugins/media/tests/fixtures/movie_fixture.php b/app/plugins/media/tests/fixtures/movie_fixture.php
new file mode 100644 (file)
index 0000000..60d8ce9
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+class MovieFixture extends CakeTestFixture {
+       var $name = 'Movie';
+
+       var $fields = array(
+                       'id'            => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary', 'extra' => 'auto_increment', 'length' => 10),
+                       'title'         => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 255),
+                       'director'      => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 255),
+                       'indexes'       => array('PRIMARY' => array('column' => 'id', 'unique' => 1))
+                       );
+
+       var $records = array(
+                                               array(
+                                                       'id'  => 1,
+                                                       'title'  => 'Frost/Nixon',
+                                                       'director'  => 'Ron Howard',
+                                               ),
+                                               array(
+                                                       'id'  => 2,
+                                                       'title'  => 'Entre les murs',
+                                                       'director'  => 'Laurent Cantet',
+                                               ),
+                                               array(
+                                                       'id'  => 3,
+                                                       'title'  => 'Revanche',
+                                                       'director'  => 'Goetz Spielmann',
+                                               ),
+                                       );
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/fixtures/pirate_fixture.php b/app/plugins/media/tests/fixtures/pirate_fixture.php
new file mode 100644 (file)
index 0000000..0e2a439
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+class PirateFixture extends CakeTestFixture {
+       var $name = 'Pirate';
+
+       var $fields = array(
+               'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary', 'extra' => 'auto_increment', 'length' => 10),
+               'name'  => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 255),
+               'group' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 255),
+               'model' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 255),
+       );
+
+       var $records = array(
+               array(
+                       'id'  => 1,
+                       'name'  => 'George Lowther',
+                       'group'  => 'atlantic',
+                       'model' => 'unknown'
+       ));
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/fixtures/song_fixture.php b/app/plugins/media/tests/fixtures/song_fixture.php
new file mode 100644 (file)
index 0000000..3a3966d
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+class SongFixture extends CakeTestFixture {
+       var $name = 'Song';
+
+       var $fields = array(
+                       'id'          => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary', 'extra' => 'auto_increment', 'length' => 10),
+                       'dirname'     => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 255),
+                       'basename'    => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 255),
+                       'checksum'    => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 255),
+                       'indexes'     => array('PRIMARY' => array('column' => 'id', 'unique' => 1))
+                       );
+                       
+       var $records = array(
+                                               array(
+                                               'id'  => 1,
+                                               'dirname'  => 'static/img',
+                                               'basename'  => 'image-png.png',
+                                               'checksum'  => '7f9af648b511f2c83b1744f42254983f',
+                                               ),
+                                               array(
+                                               'id'  => 2,
+                                               'dirname'  => 'static/img',
+                                               'basename'  => 'image-jpg.jpg',
+                                               'checksum'  => '1920c29e7fbe4d1ad2f9173ef4591133',
+                                               ),
+                                               array(
+                                               'id'  => 3,
+                                               'dirname'  => 'static/txt',
+                                               'basename'  => 'text-plain.txt',
+                                               'checksum'  => '3f3f58abd4209b4c87be51018fe5a0c6',
+                                               ),
+                                               array(
+                                               'id'  => 4,
+                                               'dirname'  => 'static/txt',
+                                               'basename'  => 'not-existent.txt',
+                                               'checksum'  => null,
+                                               )                                                       
+                                       );
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/fixtures/test_data.php b/app/plugins/media/tests/fixtures/test_data.php
new file mode 100644 (file)
index 0000000..9452bce
--- /dev/null
@@ -0,0 +1,230 @@
+<?php
+/**
+ * Test Data File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.tests.fixtures
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+uses('object');
+/**
+ * Test Data Class
+ *
+ * Holds and manages test data used in cases.
+ *
+ * @package    media
+ * @subpackage media.tests.fixtures
+ */
+class TestData extends Object {
+/**
+ * Base64 encoded data
+ *
+ * Sample data can be generated easily on *nix systems
+ * from the command line with one of the several available base64 tools
+ * and the `head` command with the `-c` option.
+ *
+ * @var array
+ * @access public
+ */
+       var $encoded = array(
+               /* selection of rules */
+               'magic.apache.snippet.db' => 'IyBNYWdpYyBkYXRhIGZvciBtb2RfbWltZV9tYWdpYyBBcGFjaGUgbW9kdWxlIChvcmlnaW5hbGx5IGZvciBmaWxlKDEpIGNvbW1hbmQpCiMgVGhlIG1vZHVsZSBpcyBkZXNjcmliZWQgaW4gL21hbnVhbC9tb2QvbW9kX21pbWVfbWFnaWMuaHRtbAojCiMgVGhlIGZvcm1hdCBpcyA0LTUgY29sdW1uczoKIyAgICBDb2x1bW4gIzE6IGJ5dGUgbnVtYmVyIHRvIGJlZ2luIGNoZWNraW5nIGZyb20sICI+IiBpbmRpY2F0ZXMgY29udGludWF0aW9uCiMgICAgQ29sdW1uICMyOiB0eXBlIG9mIGRhdGEgdG8gbWF0Y2gKIyAgICBDb2x1bW4gIzM6IGNvbnRlbnRzIG9mIGRhdGEgdG8gbWF0Y2gKIyAgICBDb2x1bW4gIzQ6IE1JTUUgdHlwZSBvZiByZXN1bHQKIyAgICBDb2x1bW4gIzU6IE1JTUUgZW5jb2Rpbmcgb2YgcmVzdWx0IChvcHRpb25hbCkKCjAJc3RyaW5nCQlSSUZGCQlhdWRpby91bmtub3duCj44CXN0cmluZwkJV0FWRQkJYXVkaW8veC13YXYKMCAgIGJlc2hvcnQmMHhmZmYwICAweGZmZjAgIGF1ZGlvL21wZWcKMAlzdHJpbmcJCS8qXCBYUE0JCWltYWdlL3gteGJtCTdiaXQKMAlzdHJpbmcJCS8qCQl0ZXh0L3BsYWluCjAJc3RyaW5nCQkvLwkJdGV4dC9wbGFpbgowCXN0cmluZwkJXDAzN1wyMzUJYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCXgtY29tcHJlc3MKMCAgICAgICBzdHJpbmcgICAgICAgICAgXDAzN1wyMTMgICAgICAgIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQl4LWd6aXAKMAlzdHJpbmcJCVwwMzdcMDM2CWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQowCXNob3J0CQkwMTc0MzcJCWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQowCXNob3J0CQkweDFmZmYJCWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQowCXN0cmluZwkJXDM3N1wwMzcJYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCjAJc2hvcnQJCTAxNDU0MDUJCWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQowICAgc3RyaW5nICAgICAgXDwhRE9DVFlQRVwgSFRNTCAgICB0ZXh0L2h0bWwKMCAgIHN0cmluZyAgICAgIFw8IWRvY3R5cGVcIGh0bWwgICAgdGV4dC9odG1sCjAgICBzdHJpbmcgICAgICBcPEhFQUQgICAgICB0ZXh0L2h0bWwKMCAgIHN0cmluZyAgICAgIFw8aGVhZCAgICAgIHRleHQvaHRtbAowICAgc3RyaW5nICAgICAgXDxUSVRMRSAgICAgdGV4dC9odG1sCjAgICBzdHJpbmcgICAgICBcPHRpdGxlICAgICB0ZXh0L2h0bWwKMCAgIHN0cmluZyAgICAgIFw8aHRtbCAgICAgIHRleHQvaHRtbAowICAgc3RyaW5nICAgICAgXDxIVE1MICAgICAgdGV4dC9odG1sCjAgICBzdHJpbmcgICAgICBcPCEtLSAgICAgICB0ZXh0L2h0bWwKMCAgIHN0cmluZyAgICAgIFw8aDEgICAgICAgIHRleHQvaHRtbAowICAgc3RyaW5nICAgICAgXDxIMSAgICAgICAgdGV4dC9odG1sCjAgICBzdHJpbmcgICAgICBcPD94bWwgICAgICB0ZXh0L3htbAowCXN0cmluZwkJTU0JCWltYWdlL3RpZmYKMAlzdHJpbmcJCUlJCQlpbWFnZS90aWZmCjAJc3RyaW5nCQlHSUY5NHoJCWltYWdlL3Vua25vd24KMAlzdHJpbmcJCUZHRjk1YQkJaW1hZ2UvdW5rbm93bgowCXN0cmluZwkJUEJGCQlpbWFnZS91bmtub3duCjAJc3RyaW5nCQlHSUYJCWltYWdlL2dpZgowCWJlc2hvcnQJCTB4ZmZkOAkJaW1hZ2UvanBlZwowCXN0cmluZwkJQk0JCWltYWdlL2JtcAowCXN0cmluZwkJXDM3NlwwNjdcMFwwNDMJCQlhcHBsaWNhdGlvbi9tc3dvcmQKMAlzdHJpbmcJCVwzMzNcMjQ1LVwwXDBcMAkJCWFwcGxpY2F0aW9uL21zd29yZAowCXN0cmluZwkJJSEJCWFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQKMAlzdHJpbmcJCVwwMDQlIQkJYXBwbGljYXRpb24vcG9zdHNjcmlwdAowCXN0cmluZwkJJVBERi0JCWFwcGxpY2F0aW9uL3BkZgowCXN0cmluZwkJe1xccnRmCQlhcHBsaWNhdGlvbi9ydGYKCg==',
+               'glob.apache.snippet.db' => 'IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMgIE1JTUUtVFlQRVMgYW5kIHRoZSBleHRlbnNpb25zIHRoYXQgcmVwcmVzZW50IHRoZW0KIwojICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgYXBwLW1pc2MvbWltZS10eXBlcyBwYWNrYWdlLCB3aGljaCBpcyBiYXNlZCBvbiAKIyAgZGViaWFuJ3MgIm1pbWUtc3VwcG9ydCIuICBJZiB5b3Ugd291bGQgbGlrZSBuZXcgdHlwZXMgYW5kL29yIGV4dGVuc2lvbnMgdG8KIyAgYmUgYWRkZWQgaGVyZSwgcGxlYXNlIGZpbGUgYSBidWcgb24gaHR0cDovL2J1Z3MuZ2VudG9vLm9yZwojCiMgIFRoZSByZWFzb24gdGhhdCBhbGwgdHlwZXMgYXJlIG1hbmFnZWQgYnkgdGhlIG1pbWUtc3VwcG9ydCBwYWNrYWdlIGluc3RlYWQKCgphcHBsaWNhdGlvbi9hY3RpdmVtZXNzYWdlCmFwcGxpY2F0aW9uL2FuZHJldy1pbnNldAkJCWV6CmFwcGxpY2F0aW9uL2N1LXNlZW1lCQkJCWN1CmFwcGxpY2F0aW9uL2N5YmVyY2FzaAphcHBsaWNhdGlvbi9kc3B0eXBlCQkJCXRzcAphcHBsaWNhdGlvbi9mdXR1cmVzcGxhc2gJCQlzcGwKYXBwbGljYXRpb24vZ2hvc3R2aWV3CmFwcGxpY2F0aW9uL2h0YQkJCQkJaHRhCmFwcGxpY2F0aW9uL2phdmEtYXJjaGl2ZQkJCWphcgphcHBsaWNhdGlvbi9qYXZhLXNlcmlhbGl6ZWQtb2JqZWN0CQlzZXIKYXBwbGljYXRpb24vamF2YS12bQkJCQljbGFzcwphcHBsaWNhdGlvbi9tYWMtYmluaGV4NDAJCQlocXgKYXBwbGljYXRpb24vbWFjLWNvbXBhY3Rwcm8JCQljcHQKYXBwbGljYXRpb24vbWFjd3JpdGVpaQphcHBsaWNhdGlvbi9tYXJjCmFwcGxpY2F0aW9uL21hdGhlbWF0aWNhCQkJCW5iCmFwcGxpY2F0aW9uL21hdGhlbWF0aWNhLW9sZAphcHBsaWNhdGlvbi9tc2FjY2VzcwkJCQltZGIKYXBwbGljYXRpb24vbXN3b3JkCQkJCWRvYyBkb3QKYXBwbGljYXRpb24vbmV3cy1tZXNzYWdlLWlkCmFwcGxpY2F0aW9uL25ld3MtdHJhbnNtaXNzaW9uCmFwcGxpY2F0aW9uL29jc3AtcmVxdWVzdAphcHBsaWNhdGlvbi9vY3NwLXJlc3BvbnNlCmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQkJCWJpbgphcHBsaWNhdGlvbi9vZGEJCQkJCW9kYQphcHBsaWNhdGlvbi9vZ2cJCQkJCW9nZwphcHBsaWNhdGlvbi9wYXJpdHlmZWMKYXBwbGljYXRpb24vcGRmCQkJCQlwZGYKYXBwbGljYXRpb24vcGdwLWVuY3J5cHRlZAphcHBsaWNhdGlvbi9wZ3Ata2V5cwkJCQlrZXkKYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZQkJCXBncAphcHBsaWNhdGlvbi9waWNzLXJ1bGVzCQkJCXByZgphcHBsaWNhdGlvbi9wa2NzMTAKYXBwbGljYXRpb24vcGtjczctbWltZQphcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmUKYXBwbGljYXRpb24vcGtpeC1jZXJ0CmFwcGxpY2F0aW9uL3BraXgtY3JsCmFwcGxpY2F0aW9uL3BraXhjbXAKYXBwbGljYXRpb24vcG9zdHNjcmlwdAkJCQlwcyBhaSBlcHMKYXBwbGljYXRpb24vcmFyCQkJCQlyYXIKYXBwbGljYXRpb24vcmRmK3htbAkJCQlyZGYKYXBwbGljYXRpb24vcmVtb3RlLXByaW50aW5nCmFwcGxpY2F0aW9uL3Jpc2NvcwphcHBsaWNhdGlvbi9yc3MreG1sCQkJCXJzcwphcHBsaWNhdGlvbi93b3JkcGVyZmVjdDUuMQkJCXdwNQphcHBsaWNhdGlvbi94NDAwLWJwCmFwcGxpY2F0aW9uL3hodG1sK3htbAkJCQl4aHRtbCB4aHQKYXBwbGljYXRpb24veG1sCQkJCQl4bWwgeHNsCmFwcGxpY2F0aW9uL3htbC1kdGQKYXBwbGljYXRpb24veG1sLWV4dGVybmFsLXBhcnNlZC1lbnRpdHkKYXBwbGljYXRpb24vemlwCQkJCQl6aXAKYXBwbGljYXRpb24vdm5kLmNpbmRlcmVsbGEJCQljZHkKYXBwbGljYXRpb24vdm5kLm1vemlsbGEueHVsK3htbAkJCXh1bAphcHBsaWNhdGlvbi92bmQubXMtYXJ0Z2FscnkKYXBwbGljYXRpb24vdm5kLm1zLWFzZgphcHBsaWNhdGlvbi92bmQubXMtZXhjZWwJCQl4bHMgeGxiIHhsdAphcHBsaWNhdGlvbi92bmQubXMtbHJtCmFwcGxpY2F0aW9uL3ZuZC5tcy1wa2kuc2VjY2F0CQkJY2F0CmFwcGxpY2F0aW9uL3ZuZC5tcy1wa2kuc3RsCQkJc3RsCmFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50CQkJcHB0IHBwcwphcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmNoYXJ0CW9kYwphcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmRhdGFiYXNlCW9kYgphcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmZvcm11bGEJb2RmCmFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZ3JhcGhpY3MJb2RnCmFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZ3JhcGhpY3MtdGVtcGxhdGUgb3RnCmFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuaW1hZ2UJb2RpCmFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uCW9kcAphcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvbi10ZW1wbGF0ZSBvdHAKYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldAlvZHMKYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldC10ZW1wbGF0ZSBvdHMKYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0CQlvZHQKYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0LW1hc3RlcglvZG0KYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0LXRlbXBsYXRlIG90dAphcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtd2ViCW90aAphcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmNhbGMJCXNkYwphcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmRyYXcJCXNkYQphcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmltcHJlc3MJCXNkZCBzZHAKYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5tYXRoCQlzbWYKYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi53cml0ZXIJCXNkdyB2b3IKYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi53cml0ZXItZ2xvYmFsCXNnbAphcHBsaWNhdGlvbi92bmQuc3RyZWV0LXN0cmVhbQphcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjCQkJc3hjCmFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmNhbGMudGVtcGxhdGUJCXN0YwphcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5kcmF3CQkJc3hkCmFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmRyYXcudGVtcGxhdGUJCXN0ZAphcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzCQkJc3hpCmFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmltcHJlc3MudGVtcGxhdGUJc3RpCmFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLm1hdGgJCQlzeG0KYXBwbGljYXRpb24vdm5kLnN1bi54bWwud3JpdGVyCQkJc3h3CmFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlci5nbG9iYWwJCXN4ZwphcHBsaWNhdGlvbi92bmQuc3VuLnhtbC53cml0ZXIudGVtcGxhdGUJCXN0dwphcHBsaWNhdGlvbi92bmQuc3ZkCmFwcGxpY2F0aW9uL3ZuZC5zd2lmdHZpZXctaWNzCmFwcGxpY2F0aW9uL3ZuZC5zeW1iaWFuLmluc3RhbGwJCQlzaXMKYXBwbGljYXRpb24vdm5kLndhcC53YnhtbAkJCXdieG1sCmFwcGxpY2F0aW9uL3ZuZC53YXAud21sYwkJCXdtbGMKYXBwbGljYXRpb24vdm5kLndhcC53bWxzY3JpcHRjCQkJd21sc2MKYXBwbGljYXRpb24vdm5kLndlYnR1cmJvCmFwcGxpY2F0aW9uL3ZuZC53cnEtaHAzMDAwLWxhYmVsbGVkCmFwcGxpY2F0aW9uL3ZuZC53dC5zdGYKYXBwbGljYXRpb24vdm5kLnhhcmEKYXBwbGljYXRpb24vdm5kLnhmZGwKYXBwbGljYXRpb24vdm5kLnllbGxvd3JpdmVyLWN1c3RvbS1tZW51CmFwcGxpY2F0aW9uL3gtMTIzCQkJCXdrCmFwcGxpY2F0aW9uL3gtYWJpd29yZAkJCQlhYncKYXBwbGljYXRpb24veC1hcHBsZS1kaXNraW1hZ2UJCQlkbWcKYXBwbGljYXRpb24veC1iY3BpbwkJCQliY3BpbwphcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQJCQl0b3JyZW50CmFwcGxpY2F0aW9uL3gtY2RmCQkJCWNkZgphcHBsaWNhdGlvbi94LWNkbGluawkJCQl2Y2QKYXBwbGljYXRpb24veC1jaGVzcy1wZ24JCQkJcGduCmFwcGxpY2F0aW9uL3gtY29yZQphcHBsaWNhdGlvbi94LWNwaW8JCQkJY3BpbwphcHBsaWNhdGlvbi94LWNzaAkJCQljc2gKYXBwbGljYXRpb24veC1kZWJpYW4tcGFja2FnZQkJCWRlYiB1ZGViCmFwcGxpY2F0aW9uL3gtZGlyZWN0b3IJCQkJZGNyIGRpciBkeHIKYXBwbGljYXRpb24veC1kbXMJCQkJZG1zCmFwcGxpY2F0aW9uL3gtZG9vbQkJCQl3YWQKYXBwbGljYXRpb24veC1kdmkJCQkJZHZpCmFwcGxpY2F0aW9uL3gtZXhlY3V0YWJsZQphcHBsaWNhdGlvbi94LWZsYWMJCQkJZmxhYwphcHBsaWNhdGlvbi94LWZvbnQJCQkJcGZhIHBmYiBnc2YgcGNmIHBjZi5aCmFwcGxpY2F0aW9uL3gtZnJlZW1pbmQJCQkJbW0KYXBwbGljYXRpb24veC1mdXR1cmVzcGxhc2gJCQlzcGwKYXBwbGljYXRpb24veC1nbnVtZXJpYwkJCQlnbnVtZXJpYwphcHBsaWNhdGlvbi94LWdvLXNnZgkJCQlzZ2YKYXBwbGljYXRpb24veC1ncmFwaGluZy1jYWxjdWxhdG9yCQlnY2YKYXBwbGljYXRpb24veC1ndGFyCQkJCWd0YXIgdGd6IHRhegphcHBsaWNhdGlvbi94LWhkZgkJCQloZGYKYXBwbGljYXRpb24veC1pY2EJCQkJaWNhCmFwcGxpY2F0aW9uL3gtaW50ZXJuZXQtc2lnbnVwCQkJaW5zIGlzcAphcHBsaWNhdGlvbi94LWlwaG9uZQkJCQlpaWkKYXBwbGljYXRpb24veC1pc285NjYwLWltYWdlCQkJaXNvCmFwcGxpY2F0aW9uL3gtamF2YS1qbmxwLWZpbGUJCQlqbmxwCmFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdAkJCWpzCmFwcGxpY2F0aW9uL3gtam1vbAkJCQlqbXoKYXBwbGljYXRpb24veC1rY2hhcnQJCQkJY2hydAphcHBsaWNhdGlvbi94LWtkZWxuawphcHBsaWNhdGlvbi94LWtpbGx1c3RyYXRvcgkJCWtpbAphcHBsaWNhdGlvbi94LWtvYW4JCQkJc2twIHNrZCBza3Qgc2ttCmFwcGxpY2F0aW9uL3gta3ByZXNlbnRlcgkJCWtwciBrcHQKYXBwbGljYXRpb24veC1rc3ByZWFkCQkJCWtzcAphcHBsaWNhdGlvbi94LWt3b3JkCQkJCWt3ZCBrd3QKYXBwbGljYXRpb24veC1sYXRleAkJCQlsYXRleAphcHBsaWNhdGlvbi94LWxoYQkJCQlsaGEKYXBwbGljYXRpb24veC1semgJCQkJbHpoCmFwcGxpY2F0aW9uL3gtbHp4CQkJCWx6eAphcHBsaWNhdGlvbi94LW1ha2VyCQkJCWZybSBtYWtlciBmcmFtZSBmbSBmYiBib29rIGZiZG9jCmFwcGxpY2F0aW9uL3gtbWlmCQkJCW1pZgphcHBsaWNhdGlvbi94LW1zLXdtZAkJCQl3bWQKYXBwbGljYXRpb24veC1tcy13bXoJCQkJd216CmFwcGxpY2F0aW9uL3gtbXNkb3MtcHJvZ3JhbQkJCWNvbSBleGUgYmF0IGRsbAphcHBsaWNhdGlvbi94LW1zaQkJCQltc2kKYXBwbGljYXRpb24veC1uZXRjZGYJCQkJbmMKYXBwbGljYXRpb24veC1ucy1wcm94eS1hdXRvY29uZmlnCQlwYWMKYXBwbGljYXRpb24veC1ud2MJCQkJbndjCmFwcGxpY2F0aW9uL3gtb2JqZWN0CQkJCW8KYXBwbGljYXRpb24veC1vei1hcHBsaWNhdGlvbgkJCW96YQphcHBsaWNhdGlvbi94LXBrY3M3LWNlcnRyZXFyZXNwCQkJcDdyCmFwcGxpY2F0aW9uL3gtcGtjczctY3JsCQkJCWNybAphcHBsaWNhdGlvbi94LXB5dGhvbi1jb2RlCQkJcHljIHB5bwphcHBsaWNhdGlvbi94LXF1aWNrdGltZXBsYXllcgkJCXF0bAphcHBsaWNhdGlvbi94LXJlZGhhdC1wYWNrYWdlLW1hbmFnZXIJCXJwbQphcHBsaWNhdGlvbi94LXJ4CmFwcGxpY2F0aW9uL3gtc2gJCQkJc2gKYXBwbGljYXRpb24veC1zaGFyCQkJCXNoYXIKYXBwbGljYXRpb24veC1zaGVsbHNjcmlwdAphcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaAkJCXN3ZiBzd2ZsCmFwcGxpY2F0aW9uL3gtc3R1ZmZpdAkJCQlzaXQKYXBwbGljYXRpb24veC1zdjRjcGlvCQkJCXN2NGNwaW8KYXBwbGljYXRpb24veC1zdjRjcmMJCQkJc3Y0Y3JjCmFwcGxpY2F0aW9uL3gtdGFyCQkJCXRhcgphcHBsaWNhdGlvbi94LXRjbAkJCQl0Y2wKYXBwbGljYXRpb24veC10ZXgtZ2YJCQkJZ2YKYXBwbGljYXRpb24veC10ZXgtcGsJCQkJcGsKYXBwbGljYXRpb24veC10ZXhpbmZvCQkJCXRleGluZm8gdGV4aQphcHBsaWNhdGlvbi94LXRyYXNoCQkJCX4gJSBiYWsgb2xkIHNpawphcHBsaWNhdGlvbi94LXRyb2ZmCQkJCXQgdHIgcm9mZgphcHBsaWNhdGlvbi94LXRyb2ZmLW1hbgkJCQltYW4KYXBwbGljYXRpb24veC10cm9mZi1tZQkJCQltZQphcHBsaWNhdGlvbi94LXRyb2ZmLW1zCQkJCW1zCmFwcGxpY2F0aW9uL3gtdXN0YXIJCQkJdXN0YXIKYXBwbGljYXRpb24veC12aWRlb2xhbgphcHBsaWNhdGlvbi94LXdhaXMtc291cmNlCQkJc3JjCmFwcGxpY2F0aW9uL3gtd2luZ3oJCQkJd3oKYXBwbGljYXRpb24veC14NTA5LWNhLWNlcnQJCQljcnQKYXBwbGljYXRpb24veC14Y2YJCQkJeGNmCmFwcGxpY2F0aW9uL3gteGZpZwkJCQlmaWcKYXBwbGljYXRpb24veC14cGluc3RhbGwJCQkJeHBpCgphdWRpby8zMmthZHBjbQphdWRpby9iYXNpYwkJCQkJYXUgc25kCmF1ZGlvL21pZGkJCQkJCW1pZCBtaWRpIGthcgphdWRpby9tcGVnCQkJCQltcGdhIG1wZWdhIG1wMiBtcDMgbTRhCmF1ZGlvL21wZWd1cmwJCQkJCW0zdQphdWRpby9wcnMuc2lkCQkJCQlzaWQKYXVkaW8vcWNlbHAKYXVkaW8veC1haWZmCQkJCQlhaWYgYWlmZiBhaWZjCmF1ZGlvL3gtZ3NtCQkJCQlnc20KYXVkaW8veC1tcGVndXJsCQkJCQltM3UKYXVkaW8veC1tcy13bWEJCQkJCXdtYQphdWRpby94LW1zLXdheAkJCQkJd2F4CmF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbgphdWRpby94LXBuLXJlYWxhdWRpbwkJCQlyYSBybSByYW0KYXVkaW8veC1yZWFsYXVkaW8JCQkJcmEKYXVkaW8veC1zY3BscwkJCQkJcGxzCmF1ZGlvL3gtc2QyCQkJCQlzZDIKYXVkaW8veC13YXYJCQkJCXdhdgoKY2hlbWljYWwveC1hbGNoZW15CQkJCWFsYwpjaGVtaWNhbC94LWNhY2hlCQkJCWNhYyBjYWNoZQpjaGVtaWNhbC94LWNhY2hlLWNzZgkJCQljc2YKY2hlbWljYWwveC1jYWN0dnMtYmluYXJ5CQkJY2JpbiBjYXNjaWkgY3RhYgpjaGVtaWNhbC94LWNkeAkJCQkJY2R4CmNoZW1pY2FsL3gtY2VyaXVzCQkJCWNlcgpjaGVtaWNhbC94LWNoZW0zZAkJCQljM2QKY2hlbWljYWwveC1jaGVtZHJhdwkJCQljaG0KY2hlbWljYWwveC1jaWYJCQkJCWNpZgpjaGVtaWNhbC94LWNtZGYJCQkJCWNtZGYKY2hlbWljYWwveC1jbWwJCQkJCWNtbApjaGVtaWNhbC94LWNvbXBhc3MJCQkJY3BhCmNoZW1pY2FsL3gtY3Jvc3NmaXJlCQkJCWJzZApjaGVtaWNhbC94LWNzbWwJCQkJCWNzbWwgY3NtCmNoZW1pY2FsL3gtY3R4CQkJCQljdHgKY2hlbWljYWwveC1jeGYJCQkJCWN4ZiBjZWYKI2NoZW1pY2FsL3gtZGF5bGlnaHQtc21pbGVzCQkJc21pCmNoZW1pY2FsL3gtZW1ibC1kbC1udWNsZW90aWRlCQkJZW1iIGVtYmwKY2hlbWljYWwveC1nYWxhY3RpYy1zcGMJCQkJc3BjCmNoZW1pY2FsL3gtZ2FtZXNzLWlucHV0CQkJCWlucCBnYW0gZ2FtaW4KY2hlbWljYWwveC1nYXVzc2lhbi1jaGVja3BvaW50CQkJZmNoIGZjaGsKY2hlbWljYWwveC1nYXVzc2lhbi1jdWJlCQkJY3ViCmNoZW1pY2FsL3gtZ2F1c3NpYW4taW5wdXQJCQlnYXUgZ2pjIGdqZgpjaGVtaWNhbC94LWdhdXNzaWFuLWxvZwkJCQlnYWwKY2hlbWljYWwveC1nY2c4LXNlcXVlbmNlCQkJZ2NnCmNoZW1pY2FsL3gtZ2VuYmFuawkJCQlnZW4KY2hlbWljYWwveC1oaW4JCQkJCWhpbgpjaGVtaWNhbC94LWlzb3N0YXIJCQkJaXN0ciBpc3QKY2hlbWljYWwveC1qY2FtcC1keAkJCQlqZHggZHgKY2hlbWljYWwveC1raW5lbWFnZQkJCQlraW4KY2hlbWljYWwveC1tYWNtb2xlY3VsZQkJCQltY20KY2hlbWljYWwveC1tYWNyb21vZGVsLWlucHV0CQkJbW1kIG1tb2QKY2hlbWljYWwveC1tZGwtbW9sZmlsZQkJCQltb2wKY2hlbWljYWwveC1tZGwtcmRmaWxlCQkJCXJkCmNoZW1pY2FsL3gtbWRsLXJ4bmZpbGUJCQkJcnhuCmNoZW1pY2FsL3gtbWRsLXNkZmlsZQkJCQlzZCBzZGYKY2hlbWljYWwveC1tZGwtdGdmCQkJCXRnZgojY2hlbWljYWwveC1taWYJCQkJCW1pZgpjaGVtaWNhbC94LW1tY2lmCQkJCW1jaWYKY2hlbWljYWwveC1tb2wyCQkJCQltb2wyCmNoZW1pY2FsL3gtbW9sY29ubi1aCQkJCWIKY2hlbWljYWwveC1tb3BhYy1ncmFwaAkJCQlncHQKY2hlbWljYWwveC1tb3BhYy1pbnB1dAkJCQltb3AgbW9wY3J0IG1wYyBkYXQgem10CmNoZW1pY2FsL3gtbW9wYWMtb3V0CQkJCW1vbwpjaGVtaWNhbC94LW1vcGFjLXZpYgkJCQltdmIKY2hlbWljYWwveC1uY2JpLWFzbjEJCQkJYXNuCmNoZW1pY2FsL3gtbmNiaS1hc24xLWFzY2lpCQkJcHJ0IGVudApjaGVtaWNhbC94LW5jYmktYXNuMS1iaW5hcnkJCQl2YWwgYXNvCmNoZW1pY2FsL3gtbmNiaS1hc24xLXNwZWMJCQlhc24KY2hlbWljYWwveC1wZGIJCQkJCXBkYiBlbnQKY2hlbWljYWwveC1yb3NkYWwJCQkJcm9zCmNoZW1pY2FsL3gtc3dpc3Nwcm90CQkJCXN3CmNoZW1pY2FsL3gtdmFtYXMtaXNvMTQ5NzYJCQl2bXMKY2hlbWljYWwveC12bWQJCQkJCXZtZApjaGVtaWNhbC94LXh0ZWwJCQkJCXh0ZWwKY2hlbWljYWwveC14eXoJCQkJCXh5egoKaW1hZ2UvZ2lmCQkJCQlnaWYKaW1hZ2UvaWVmCQkJCQlpZWYKaW1hZ2UvanBlZwkJCQkJanBlZyBqcGcganBlCmltYWdlL25hcGxwcwppbWFnZS9wY3gJCQkJCXBjeAppbWFnZS9wbmcJCQkJCXBuZwppbWFnZS9zdmcreG1sCQkJCQlzdmcgc3ZnegppbWFnZS90aWZmCQkJCQl0aWZmIHRpZgppbWFnZS92bmQuY25zLmluZjIKaW1hZ2Uvdm5kLmRqdnUJCQkJCWRqdnUgZGp2CmltYWdlL3ZuZC5zdmYKaW1hZ2Uvdm5kLndhcC53Ym1wCQkJCXdibXAKaW1hZ2Uvdm5kLnhpZmYKaW1hZ2UveC1jbXUtcmFzdGVyCQkJCXJhcwppbWFnZS94LWNvcmVsZHJhdwkJCQljZHIKaW1hZ2UveC1jb3JlbGRyYXdwYXR0ZXJuCQkJcGF0CmltYWdlL3gtY29yZWxkcmF3dGVtcGxhdGUJCQljZHQKaW1hZ2UveC1jb3JlbHBob3RvcGFpbnQJCQkJY3B0CmltYWdlL3gtaWNvbgkJCQkJaWNvCmltYWdlL3gtamcJCQkJCWFydAppbWFnZS94LWpuZwkJCQkJam5nCmltYWdlL3gtbXMtYm1wCQkJCQlibXAKaW1hZ2UveC1waG90b3Nob3AJCQkJcHNkCmltYWdlL3gtcG9ydGFibGUtYW55bWFwCQkJCXBubQppbWFnZS94LXBvcnRhYmxlLWJpdG1hcAkJCQlwYm0KaW1hZ2UveC1wb3J0YWJsZS1ncmF5bWFwCQkJcGdtCmltYWdlL3gtcG9ydGFibGUtcGl4bWFwCQkJCXBwbQppbWFnZS94LXJnYgkJCQkJcmdiCmltYWdlL3gteGJpdG1hcAkJCQkJeGJtCmltYWdlL3gteHBpeG1hcAkJCQkJeHBtCmltYWdlL3gteHdpbmRvd2R1bXAJCQkJeHdkCgoKbWVzc2FnZS9kZWxpdmVyeS1zdGF0dXMKbWVzc2FnZS9kaXNwb3NpdGlvbi1ub3RpZmljYXRpb24KbWVzc2FnZS9leHRlcm5hbC1ib2R5Cgptb2RlbC9pZ2VzCQkJCQlpZ3MgaWdlcwptb2RlbC9tZXNoCQkJCQltc2ggbWVzaCBzaWxvCm1vZGVsL3ZuZC5kd2YKbW9kZWwvdm5kLmZsYXRsYW5kLjNkbWwKbW9kZWwvdnJtbAkJCQkJd3JsIHZybWwKCgp0ZXh0L2NhbGVuZGFyCQkJCQlpY3MgaWN6CnRleHQvY29tbWEtc2VwYXJhdGVkLXZhbHVlcwkJCWNzdgp0ZXh0L2NzcwkJCQkJY3NzCnRleHQvZGlyZWN0b3J5CnRleHQvZW5nbGlzaAp0ZXh0L2VucmljaGVkCnRleHQvaDMyMwkJCQkJMzIzCnRleHQvaHRtbAkJCQkJaHRtbCBodG0gc2h0bWwKdGV4dC9pdWxzCQkJCQl1bHMKdGV4dC9tYXRobWwJCQkJCW1tbAp0ZXh0L3Bhcml0eWZlYwp0ZXh0L3BsYWluCQkJCQlhc2MgdHh0IHRleHQgZGlmZiBwb3QKdGV4dC9wcnMubGluZXMudGFnCnRleHQveC1wc3AJCQkJCXBzcAp0ZXh0L3JmYzgyMi1oZWFkZXJzCnRleHQvcmljaHRleHQJCQkJCXJ0eAp0ZXh0L3J0ZgkJCQkJcnRmCnRleHQvc2NyaXB0bGV0CQkJCQlzY3Qgd3NjCnRleHQvdDE0MAp0ZXh0L3RleG1hY3MJCQkJCXRtIHRzCnRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMJCQl0c3YKdGV4dC91cmktbGlzdAp0ZXh0L3ZuZC5hYmMKdGV4dC92bmQuY3VybAp0ZXh0L3ZuZC5ETUNsaWVudFNjcmlwdAp0ZXh0L3ZuZC5mbGF0bGFuZC4zZG1sCnRleHQvdm5kLmZseQp0ZXh0L3ZuZC5mbWkuZmxleHN0b3IKdGV4dC92bmQuaW4zZC4zZG1sCnRleHQvdm5kLmluM2Quc3BvdAp0ZXh0L3ZuZC5JUFRDLk5ld3NNTAp0ZXh0L3ZuZC5JUFRDLk5JVEYKdGV4dC92bmQubGF0ZXgtegp0ZXh0L3ZuZC5tb3Rvcm9sYS5yZWZsZXgKdGV4dC92bmQubXMtbWVkaWFwYWNrYWdlCnRleHQvdm5kLnN1bi5qMm1lLmFwcC1kZXNjcmlwdG9yCQlqYWQKdGV4dC92bmQud2FwLnNpCnRleHQvdm5kLndhcC5zbAp0ZXh0L3ZuZC53YXAud21sCQkJCXdtbAp0ZXh0L3ZuZC53YXAud21sc2NyaXB0CQkJCXdtbHMKdGV4dC94LWJpYnRleAkJCQkJYmliCnRleHQveC1jKytoZHIJCQkJCWgrKyBocHAgaHh4IGhoCnRleHQveC1jKytzcmMJCQkJCWMrKyBjcHAgY3h4IGNjCnRleHQveC1jaGRyCQkJCQloCnRleHQveC1jcm9udGFiCnRleHQveC1jc2gJCQkJCWNzaAp0ZXh0L3gtY3NyYwkJCQkJYwp0ZXh0L3gtaGFza2VsbAkJCQkJaHMKdGV4dC94LWphdmEJCQkJCWphdmEKdGV4dC94LWxpdGVyYXRlLWhhc2tlbGwJCQkJbGhzCnRleHQveC1tYWtlZmlsZQp0ZXh0L3gtbW9jCQkJCQltb2MKdGV4dC94LXBhc2NhbAkJCQkJcCBwYXMKdGV4dC94LXBjcy1nY2QJCQkJCWdjZAp0ZXh0L3gtcGVybAkJCQkJcGwgcG0KdGV4dC94LXB5dGhvbgkJCQkJcHkKdGV4dC94LXNlcnZlci1wYXJzZWQtaHRtbAp0ZXh0L3gtc2V0ZXh0CQkJCQlldHgKdGV4dC94LXNoCQkJCQlzaAp0ZXh0L3gtdGNsCQkJCQl0Y2wgdGsKdGV4dC94LXRleAkJCQkJdGV4IGx0eCBzdHkgY2xzCnRleHQveC12Y2FsZW5kYXIJCQkJdmNzCnRleHQveC12Y2FyZAkJCQkJdmNmCgoK',
+               'glob.freedesktop.snippet.db' => 'IyBUaGlzIGZpbGUgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHRoZQojIHVwZGF0ZS1taW1lLWRhdGFiYXNlIGNvbW1hbmQuIERPIE5PVCBFRElUIQoKYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkOiouN3oKaW1hZ2UveC1iemVwczoqLmVwc2YuYnoyCnZpZGVvL3gtbXMtd212Oioud212CmFwcGxpY2F0aW9uL3gtamF2YToqLmNsYXNzCmFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50OioucG90CnRleHQveC1nZXR0ZXh0LXRyYW5zbGF0aW9uLXRlbXBsYXRlOioucG90CmFwcGxpY2F0aW9uL3hodG1sK3htbDoqLnhodG1sCmltYWdlL3gtYnplcHM6Ki5lcHNpLmJ6MgphcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXI6Ki50YXIuYnoyCmFwcGxpY2F0aW9uL3htbDoqLnhibAppbWFnZS94LWNvbXByZXNzZWQteGNmOioueGNmLmJ6MgppbWFnZS9naWY6Ki5naWYKYXBwbGljYXRpb24veC10YXI6Ki50YXIKYXBwbGljYXRpb24veC1zaGVsbHNjcmlwdDoqLnNoCmltYWdlL3ZuZC53YXAud2JtcDoqLndibXAKYXBwbGljYXRpb24veC1waHA6Ki5waHAzCmFwcGxpY2F0aW9uL3gtcGhwOioucGhwNAphcHBsaWNhdGlvbi94LWJ6aXA6Ki5iejIKYXBwbGljYXRpb24veC1iemlwOiouYnoKYXBwbGljYXRpb24veC1nZXR0ZXh0LXRyYW5zbGF0aW9uOiouZ21vCnRleHQveC1yZWFkbWU6UkVBRE1FKgp0ZXh0L3BsYWluOioudHh0CmFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhcjoqLnRiejIKYXBwbGljYXRpb24veC1jb21wcmVzc2VkLXRhcjoqLnRnegphcHBsaWNhdGlvbi94LW1zLWRvcy1leGVjdXRhYmxlOiouZXhlCmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbToqLmJpbgphcHBsaWNhdGlvbi94LWJ6cGRmOioucGRmLmJ6MgphcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmdyYXBoaWNzLXRlbXBsYXRlOioub3RnCmFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uZHJhdzoqLnNkYQphcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtd2ViOioub3RoCmFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uLXRlbXBsYXRlOioub3RwCmFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQtdGVtcGxhdGU6Ki5vdHMKaW1hZ2UveC1qbmc6Ki5qbmcKYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5ncmFwaGljczoqLm9kZwphcHBsaWNhdGlvbi92bmQubXMtZXhjZWw6Ki54bHcKYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5pbWFnZToqLm9kaQphcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0LXRlbXBsYXRlOioub3RzCmFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC1tYXN0ZXI6Ki5vZG0KYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0Oioub2R0CmFwcGxpY2F0aW9uL3gtcmFyOioucmFyCmFwcGxpY2F0aW9uL3Jzcyt4bWw6Ki5yc3MKYXBwbGljYXRpb24veG1sOioueG1sCmltYWdlL2JtcDoqLmJtcAp0ZXh0L3gtamF2YToqLmphdmEKdGV4dC9yaWNodGV4dDoqLnJ0eAphcHBsaWNhdGlvbi9qYXZhc2NyaXB0OiouanMKdGV4dC9jc3M6Ki5jc3MKdGV4dC9jc3Y6Ki5jc3YKdGV4dC9yZGY6Ki5yZGYKYXBwbGljYXRpb24vZG9jYm9vayt4bWw6Ki5kb2Nib29rCnRleHQveC1wYXRjaDoqLnBhdGNoCmFwcGxpY2F0aW9uL3gtZ2V0dGV4dC10cmFuc2xhdGlvbjoqLm1vCnRleHQveC1nZXR0ZXh0LXRyYW5zbGF0aW9uOioucG8KYXBwbGljYXRpb24veC1nemlwOiouZ3oKYXBwbGljYXRpb24vcGRmOioucGRmCmFwcGxpY2F0aW9uL21zd29yZDoqLmRvYwphcHBsaWNhdGlvbi9ydGY6Ki5ydGYK',
+               /* only first 1000 bytes */
+               'magic.freedesktop.snippet.db' => 'TUlNRS1NYWdpYwAKWzkwOmFwcGxpY2F0aW9uL2RvY2Jvb2sreG1sXQo+MD0ABTw/eG1sCjE+MD0AGS0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwrMTAxCjE+MD0AFy0vL0tERS8vRFREIERvY0Jvb2sgWE1MKzEwMQpbOTA6YXBwbGljYXRpb24vcGdwLWVuY3J5cHRlZF0KPjA9ABstLS0tLUJFR0lOIFBHUCBNRVNTQUdFLS0tLS0KWzkwOmFwcGxpY2F0aW9uL3BncC1rZXlzXQo+MD0AJC0tLS0tQkVHSU4gUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQo+MD0AJS0tLS0tQkVHSU4gUEdQIFBSSVZBVEUgS0VZIEJMT0NLLS0tLS0KPjA9AAKVAQo+MD0AApUACj4wPQACmQAKPjA9AAKZAQpbOTA6YXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZV0KPjA9ACItLS0tLUJFR0lOIFBHUCBTSUdORUQgTUVTU0FHRS0tLS0tCj4wPQAdLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KWzkwOmFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ud3JpdGVyXQo+MjA4OT0AClN0YXJXcml0ZXIKWzkwOmFwcGxpY2F0aW9uL3gtcGVtLWtleV0KPjA9AB8tLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCj4wPQAfLS0tLS1CRUdJTiBEU0EgUFJJVkFURSBLRVktLS0tLQo+MD0AJS0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KWzkwOmFwcGxpY2F0aW9uL3gtc3NoLWtleV0KPjA9AAhzc2gtZHNzIAo+MD0ACHNzaC1yc2EgCj4wPQASIyBTU0ggUFJJVkFURSBLRVk6Cls5MDppbWFnZS94LWVwc10KPjA9AAIlIQoxPjE1PQADRVBTCj4wPQADBCUhCjE+MTY9AANFUFMKWzg1OmFwcGxpY2F0aW9uL3gtamF2YS1hcmNoaXZlXQo+MD0ABFBLAwQKMT40MD0AAsr+fjIKWzgwOmFwcGxpY2F0aW9uL3Bycy5wbHVja2VyXQo+NjA9AAhEYXRhUGxrcgpbODA6YXBwbGljYXRpb24vc21pbF0KPjA9AAU8c21pbCsyNTcKWzgwOmFwcGxpY2F0aW9uL3ZuZC5jb3JlbC1kcmF3XQo+OD0ACENEUlh2cnNuJv///wD/////Cls4MDphcHBsaWNhdGlvbi94LWJyYXNlcm9dCj4wPQAOYnJhcw==',
+               'image-jpeg.snippet.jpg' => '/9j/4AAQSkZJRgABAAEAyADIAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAUAA8AMBIQACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AP0B/ah/ZF+GfwM/ZT+L/wAQPgbpGr/Dr4neCtB0b/hCLzQ9T1oaWdT1LVwACdC8QaIAe3JJXHQc1+BkP/BRH/go78MHSCw8TeD/AB7bcf8AEn+LfgMa6RgLgf25oC6F4jyP+w4MEYGMcfXeI1ank3FMJJvVRlFuMubl5YOKlFxqO65tVJXTTvZt2XhtSfEOSe2SfKn8T8u6vQ1unfTq+x9V/D7/AILd+P4VtoPi1+w5ZXfTGr/Aj4zg4wMH/iR+OxwR0P8AxPBg+/FfV/w4/wCCzn7BniRVg8ba/wDGH9nue4wB/wALo+GGs/2VwAADruhLreD13Ag55yMhq+IeZw19/vo4yvu9H+7t6673P0F5FO7957veMb7vf97v387n6BfDH9oT9nH4wW1r/wAKq/aP+A/xGxjnRfH2icDtkbRgjHPTPOcAnP03aaZfbEuJ7e89iwBOBtHzc5yDzk8EZyeTW2Aw31l005OFmtHF3SvCyd5Q1STv5pne88xd3w==',
+               'text-html.snippet.html' => 'PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+CgoKCTx0aXRsZT4KCQlDYWtlUEhQOiB0aGUgcmFwaWQgZGV2ZWxvcG1lbnQgcGhwIGZyYW1ld29yay4gCQlIb21lCTwvdGl0bGU+CgoJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuY2FrZXBocC5vcmcvZmF2aWNvbi5pY28iIHR5cGU9ImltYWdlL3gtaWNvbiIgcmVsPSJpY29uIj48bGluayBocmVmPSJodHRwOi8vd3d3LmNha2VwaHAub3JnL2Zhdmljb24uaWNvIiB0eXBlPSJpbWFnZS94LWljb24iIHJlbD0ic2hvcnRjdXQgaWNvbiI+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iY2FrZXRlc3QtRGF0ZWllbi9zdHlsZXMuY3NzIj48IS0tW2lmIGx0ZSBJRSA3XT48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvY3NzL2llb2xkLmNzcyIgLz48IVtlbmRpZl0tLT48L2hlYWQ+PGJvZHkgY2xhc3M9ImpzIj4KCTxkaXYgaWQ9ImNvbnRhaW5lciI+CgkJPGRpdiBpZD0iaGVhZGVyIj4KCQkJPGgxPjxhIGhyZWY9Imh0dHA6Ly93d3cuY2FrZXBocC5vcmcvIj48aW1nIHNyYz0iY2FrZXRlc3QtRGF0ZWllbi9jYWtlLWxvZ28ucG5nIiBhbHQ9IkNha2VQSFAgOiB0aGUgcmFwaWQgZGV2ZWxvcG1lbnQgcGhwIGZyYW1ld29yayIgY2xhc3M9InBuZyI+PC9hPjwvaDE+CgkJCTxwIGNsYXNzPSJjb3B5Ij4KCQkJCUNha2VQSFAgZW5hYmxlcyBQSFAgdXNlcnMgYXQgYWxsIGxldmVscyB0byByYXBpZGx5IGRldmVsb3Agcm9idXN0IHdlYiBhcHBsaWNhdGlvbnMuCQkJPC9wPgoJCTwvZGl2PgoJCQ==',
+               'text-plain.snippet.txt' => 'ICA1MDAwMDAwMDAwCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gMjMyOTkzNjQxNCBAIDExLjUuMDgKCgogIDUwMDAwMDAwMDAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAxMDAwMDAwMDAwIDE4LTI1Ci0gMjUwMDAwMDAwMCBhYiAyNgo9PT09PT09PT09PT09PT09PT09PT09PQogIDE1MDAwMDAwMDAKCi0gMTE5OTA4NDUxMCA9IDMwMDkxNTQ5MCBeID8KLSAxMjEwMjI5NDYxID0gMjg5NzcwNTM5IF4gMTExNDQ5NTEKLSAxMjI4Njg3MDM3ID0gMjcxMzEyOTYzIF4gMTg0NTc1NzYKLSAxMjM4MzMyODk5ID0gMjYxNjY3MTAxIF4gIDk2NDU4NjIKLSAxMjQ2MTg4MjA1ID0gMjUzODExNzk1IF4gIDc4NTUzMDYKLSAxMjczNTEyNzYyID0gMjI2NDg3MjM4IF4gMjczMjQ1NTcgCi0gMTMwNDc4MDAyNCA9IDE5NTIxOTk3NiBeIDMxMjY3MjYyCi0gMTMxNTU4OTAzOCA9IDE4NDQxMDk2MiBeIDEwODA5MDE0Ci0gMTM0MTA3OTYyMiA9IDE1ODkyMDM3OCBeIDI1NDkwNTg0Ci0gICAgICAgIE4vQSA9IE4vQSAgICAgICBeIE4vQQotIDEzNDc0OTE5MTcgPSAxNTI1MDgwODMgXiAgNjQxMjI5NQotIDE0MDY1NDQzMzIgPSAgOTM0NTU2NjggIAo9PT09PT09PT09PT0KICA5MzQ1NTY2OA==',
+               'text-pot.snippet.pot' => 'IyBMQU5HVUFHRSB0cmFuc2xhdGlvbiBvZiBDYWtlUEhQIEFwcGxpY2F0aW9uCiMgQ29weXJpZ2h0IFlFQVIgTkFNRSA8RU1BSUxAQUREUkVTUz4KIyBHZW5lcmF0ZWQgZnJvbSBmaWxlczoKIyAgUmV2aXNpb246IDc0ODMgL3BpZWNlc19mYWN0b3J5L3ZlbmRvcnMvY2FrZS9jYWtlL2xpYnMvZXJyb3IucGhwCiMgIFJldmlzaW9uOiA3MjIyIC9waWVjZXNfZmFjdG9yeS92ZW5kb3JzL2Nha2UvY2FrZS9jb25zb2xlL2xpYnMvc2hlbGwucGhwCiMgIFJldmlzaW9uOiA3MTUyIC9waWVjZXNfZmFjdG9yeS92ZW5kb3JzL2Nha2UvY2FrZS9saWJzL3ZpZXcvc2NhZmZvbGRzL2luZGV4LmN0cAojICBSZXZpc2lvbjogNzU0OCAvcGllY2VzX2ZhY3RvcnkvdmVuZG9ycy9jYWtlL2Nha2UvbGlicy92aWV3L3NjYWZmb2xkcy92aWV3LmN0cAojICBSZXZpc2lvbjogNzE1MiAvcGllY2VzX2ZhY3RvcnkvdmVuZG9ycy9jYWtlL2Nha2UvbGlicy92aWV3L3NjYWZmb2xkcy9lZGl0LmN0cAojICBSZXZpc2lvbjogNzEwMCAvcGllY2VzX2ZhY3RvcnkvdmVuZG9ycy9jYWtlL2Nha2UvY29uc29sZS9saWJzL2kxOG4ucGhwCiMgIFJldmlzaW9uOiA3MzAxIC9waWVjZXNfZmFjdG9yeS92ZW5kb3JzL2Nha2UvY2FrZS9jb25zb2xlL2xpYnMvdGFza3MvY29udHJvbGxlci5waHAKIyAgUmV2aXNpb246IDc1NjMgL3BpZWNlc19mYWN0b3J5L3ZlbmRvcnMvY2FrZS9jYWtlL2NvbnNvbGUvbGlicy90YXNrcy9tb2RlbC5waHAKIyAgUmV2aXNpb246IDc1NzIgL3BpZWNlc19mYWN0b3J5L3ZlbmRvcnMvY2FrZS9jYWtlL2xpYnMvY29udHJvbGxlci9jb21wb25lbnRzL2F1dGgucGhwCiMgIFJldmlzaW9uOiA3MjE0IC9waWVjZXNfZmFjdG9yeS92ZW5kb3JzL2Nha2UvYXBwL3dlYnJvb3QvdGVzdC5waHAKIyAgUmV2aXNpb246IDcyMTQgL3BpZWNlc19mYWN0b3J5L3ZlbmRvcnMvY2FrZS9jYWtlL2NvbnNvbGUvbGlicy90ZW1wbGF0ZXMvc2tlbC93ZWJyb290L3Rlc3QucGhwCiMgIFJldmlzaW9uOg==',
+               'mo.snippet.mo' => '3hIElQAAAACuAQAAHAAAAIwNAABBAgAA/BoAAAAAAAAAJAAAGAAAAAEkAAAXAAAAGiQAABAAAAAyJAAAAgAAAEMkAAAUAAAARiQAABMAAABbJAAADgAAAG8kAAAOAAAAfiQAAAYAAACNJAAACAAAAJQkAAAQAAAAnSQAAA8AAACuJAAAFQAAAL4kAAAWAAAA1CQAAAoAAADrJAAACgAAAPYkAAALAAAAASUAAAwAAAANJQAADgAAABolAAASAAAAKSUAABIAAAA8JQAADgAAAE8lAAAMAAAAXiUAAA8AAABrJQAACgAAAHslAAAIAAAAhiUAAAsAAACPJQAABgAAAJslAAAKAAAAoiUAADIAAACtJQAANgAAAOAlAAA+AAAAFyYAACcAAABWJgAAOwAAAH4mAAAwAAAAuiYAAAkAAADrJgAABQAAAPUmAAAPAAAA+yYAAAgAAAALJwAABwAAABQnAABDAAAAHCcAAD4AAABgJwAANAAAAJ8nAAAHAAAA1CcAAAYAAADcJwAADwAAAOMnAAANAAAA8ycAAA4AAAABKAAACAAAABAoAAAOAAAAGSgAAAgAAAAoKAAACQAAADEoAAAIAAAAOygAAAkAAABEKAAAEAAAAE4oAAAdAAAAXygAAA4AAAB9KAAAQgAAAIwoAABbAAAAzygAAAgAAAArKQAAFAAAADQpAAAfAAAASSkAADIAAABpKQAAKgAAAJwpAAAtAAAAxykAAAsAAAD1KQAACwAAAAEqAAAFAAAADSoAACUAAAATKgAAOAAAADkqAAAzAAAAcioAADMAAACmKgAANAAAANoqAAAzAAAADysAADQAAABDKwAAMgAAAHgrAAAHAAAAqysAAAwAAACzKwAACgAAAMArAAALAAAAyysAAAUAAADXKwAABgAAAN0rAAAIAAAA5CsAABUAAADtKwAABwAAAAMsAAAMAAAACywAAAYAAAAYLAAAFQAAAB8sAAAPAAAANSwAAA8AAABFLAAACAAAAFUsAAAMAAAAXiwAAAoAAABrLAAAGgAAAHYsAAAcAAAAkSwAABQAAACuLAAAFQAAAMMsAAAWAAAA2SwAABUAAADwLAAAFgAAAAYtAAAVAAAAHS0AAAkAAAAzLQAAEgAAAD0tAAAXAAAAUC0AAAoAAABoLQAAVgAAAHMtAAAMAAAAyi0AAD4AAADXLQAABwAAABYuAAAJAAAAHi4AAAgAAAAoLgAAMAAAADEuAAAIAAAAYi4AAAYAAABrLgAACwAAAHIuAAARAAAAfi4AAB4AAACQLgAAIAAAAK8uAAAZAAAA0C4AABoAAADqLgAAGQAAAA==',
+               'po.snippet.po' => 'bXNnaWQgIiIKbXNnc3RyICIiCiJQcm9qZWN0LUlkLVZlcnNpb246IFxuIgoiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMDktMTAgMTg6NDYrMDIwMFxuIgoiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wOS0xMCAxOTowNyswMTAwXG4iCiJMYXN0LVRyYW5zbGF0b3I6IERhdmlkIFBlcnNzb24gPGRhdmlkcGVyc3NvbkBnbXgubmV0PlxuIgoiTGFuZ3VhZ2UtVGVhbTogXG4iCiJNSU1FLVZlcnNpb246IDEuMFxuIgoiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCiJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiJYLVBvZWRpdC1MYW5ndWFnZTogR2VybWFuXG4iCiJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKCiM6IC9hcHBfZXJyb3IucGhwOjU5CiM6IC92ZW5kb3JzL2Nha2UvY2FrZS9saWJzL2Vycm9yLnBocDoxNTUKbXNnaWQgIk5vdCBGb3VuZCIKbXNnc3RyICJOaWNodCBHZWZ1bmRlbiIKCiM6IC9hcHBfZXJyb3IucGhwOjg1Cm1zZ2lkICJTZXJ2aWNlIFRlbXBvcmFyaWx5IFVuYXZhaWxhYmxlIgptc2dzdHIgIkRpZW5zdCBadXIgWmVpdCBOaWNodCBWZXJmw7xnYmFyIgoKIzogL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0aXZhX2NvbnRyb2xsZXIucGhwOjQ0CiM6IC9wbHVnaW5zL3VzZXJzL3ZpZXdzL3VzZXJzL2JhY2tlbmRfaW5kZXguY3RwOjM2Cm1zZ2lkICJuL2EiCm1zZ3N0ciAibi4gdi4iCgojOiAvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRpdmFfY29udHJvbGxlci5waHA6NTYKbXNnaWQgIkZsdXNoZWQgbG9nLiIKbXNnc3RyICJMb2cgZ2VsZWVydC4iCgojOiAvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRpdmFfY29udHJvbGxlci5waHA6NTkKbXNnaWQgIkZhaWxlZCB0byBmbHVzaCBsb2cuIgptc2dzdHIgIkxlZXJlbiBkZXMgTG9ncyBmZWhsZ2VzY2hsYWdlbi4iCgojOiAvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRpdmFfY29udHJvbGxlci5waHA6NzcKbXNnaWQgIkNsZQ==',
+               'gzip.snippet.gz' => 'H4sICEB/00gAA2EuYmFrAO3OoREAQAgEMf99UsFf/0MFWAwRq9Yk9ZOhN41Lk4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHZ3U257nQI0JcAAA=',
+               'tar.snippet.tar' => 'dGVzdC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTUAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDAwMDAwADExMDY0Njc3NTU2ADAxMzU3MAAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAG1hcml1c3dpbG1zAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWFyaXVzd2lsbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0ZXN0L2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMDAwMjEAMTEwNjQ2NzczNTQAMDEzNzIxACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAbWFyaXVzd2lsbXMAAAAAAAAAAAAAAAAAAAAAAAAAAABtYXJpdXN3aWxtcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==',
+               'tar-gzip.snippet.tar.gz' => 'H4sIANV/00gAA+3cQWrCQBSA4Vn3FLmBM2Zmcp4UuhDqxkR6/SYpFS3VboxS+H4IgUwgHzyeS8e3YdyEdYtTXSnzPXUlnt+/CynFmms3vVZDTG3pYmjKyq6l4zD2h6YJ+/6wOw4fu/f98Ot7f53/08Z5/q/rfmMecM35+vy36TT/tuR5/t30qInrsr4y//H8enk2SA9t2f9+3W/c3v9SU9ye9j/Xsux/W+3/I/q5/xe/BQ5vXzw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PHc/fPY/mEuSJEmSJEm61if+ZvkoAHgAAA==',
+               'zip.snippet.zip' => 'UEsDBAoAAAAAAOVjMzkAAAAAAAAAAAAAAAAFABUAdGVzdC9VVAkAA25/00jTftNIVXgEAOgD6ANQSwMEFAAAAAgAoGMzOb2jm64JAAAAEQAAAAYAFQB0ZXN0L2JVVAkAA+x+00jfftNIVXgEAOgD6AMrSS0uKUHCXABQSwMEFAAAAAgAx2MzOee50CN6AAAAQlwAAAYAFQB0ZXN0L2FVVAkAAzV/00g1f9NIVXgEAOgD6APtzqERAEAIBDH/fVLBX/9DBVgMEavWJPWToTeNS5OHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh2d1NlBLAQIXAwoAAAAAAOVjMzkAAAAAAAAAAAAAAAAFAA0AAAAAAAAAEADtQQAAAAB0ZXN0L1VUBQADbn/TSFV4AABQSwECFwMUAAAACACgYzM5vaObrgkAAAARAAAABgANAAAAAAABAAAApIE4AAAAdGVzdC9iVVQFAAPsftNIVXgAAFBLAQIXAxQAAAAIAMdjMznnudAjegAAAEJcAAAGAA0AAAAAAAEAAACkgXoAAAB0ZXN0L2FVVAUAAzV/00hVeAAAUEsFBgAAAAADAAMAwgAAAC0BAAAAAA==',
+               'bzip2.snippet.bz2' => 'QlpoOTFBWSZTWZKDBu8AILbBgAAQAgAMACAAchmmgmqDoBU2iKLpSlqIhysVSwUMooZKlsiCuLuSKcKEhJQYN3g',
+               'pdf.snippet.pdf' => 'JVBERi0xLjMNJeLjz9MNCjEgMCBvYmo8PC9NZXRhZGF0YSAyNiAwIFIvUGFnZXMgMiAwIFIvVHlwZS9DYXRhbG9nL091dHB1dEludGVudHNbPDwvSW5mbyhFdXJvcGUgSVNPIENvYXRlZCBGT0dSQTI3KS9TL0dUU19QREZYL091dHB1dENvbmRpdGlvbklkZW50aWZpZXIoRk9HUkEyNykvT3V0cHV0Q29uZGl0aW9uKCkvRGVzdE91dHB1dFByb2ZpbGUgMjUgMCBSL1R5cGUvT3V0cHV0SW50ZW50L1JlZ2lzdHJ5TmFtZShodHRwOi8vd3d3LmNvbG9yLm9yZyk+Pl0+Pg1lbmRvYmoNMiAwIG9iajw8L0NvdW50IDEvVHlwZS9QYWdlcy9LaWRzWzUgMCBSXT4+DWVuZG9iag01IDAgb2JqPDwvUGFyZW50IDIgMCBSL0NvbnRlbnRzIDIzIDAgUi9CbGVlZEJveFswLjAgMC4wIDI0MDkuNDUgNTY2OS4yOV0vTWVkaWFCb3hbMC4wIDAuMCAyNDA5LjQ1IDU2NjkuMjldL1RyaW1Cb3hbMC4wIDAuMCAyNDA5LjQ1IDU2NjkuMjldL1Jlc291cmNlczw8L1hPYmplY3Q8PC9JbTEwIDE5IDAgUi9JbTExIDIwIDAgUi9JbTEyIDIxIDAgUi9JbTAgOCAwIFIvSW0xIDEwIDAgUi9JbTIgMTEgMCBSL0ltMyAxMiAwIFIvSW00IDEzIDAgUi9JbTUgMTQgMCBSL0ltNiAxNSAwIFIvSW03IDE2IDAgUi9JbTggMTcgMCBSL0ltOSAxOCAwIFI+Pi9Db2xvclNwYWNlPDwvQ1MwIDIyIDAgUj4+L1Byb2NTZXRbL1BERi9JbWFnZUJdL1Byb3BlcnRpZXM8PC9NQzA8PC9Db2xvclsyMDIyNC4wIC0zMjc2OC4wIC0xLjBdL1Zpc2libGUgdHJ1ZS9FZGl0YWJsZSB0cnVlL0RpbW1lZCBmYWxzZS9QcmV2aWV3IHRydWUvUHJpbnRlZCB0cnVlL1RpdGxlKExheWVyIDEpPj4+Pi9FeHRHU3RhdGU8PC9HUzAgNiAwIFI+Pj4+L1R5cGUvUGFnZT4+DWVuZG9iag02IDAgb2JqPDwvT1BNIDEvQk0vTm9ybWFsL0NBIDEuMC9PUCBmYWxzZS9TTWFzay9Ob25lL2NhIDEuMC9BSVMgZmFsc2Uvb3AgZmFsc2UvVHlwZS9FeHRHU3RhdGUvU0EgdHJ1ZT4+DWVuZG9iag04IDAgb2JqPDwvSW50ZW50L1JlbGF0aXZlQ29sb3JpbWV0cg==',
+               'ms-word.snippet.docx' => 'UEsDBBQABgAIAAAAIQDd/JU3ZgEAACAFAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0VMtuwjAQvFfqP0S+Vomhh6qqCBz6OLZIpR9g7A1Y9Uv28vr7bgJEVQtBKuUSKVnvzOzsxIPR2ppsCTFp70rWL3osAye90m5Wso/JS37PsoTCKWG8g5JtILHR8PpqMNkESBl1u1SyOWJ44DzJOViRCh/AUaXy0Qqk1zjjQchPMQN+2+vdcekdgsMcaww2HDxBJRYGs+c1fd4qiWASyx63B2uukokQjJYCSSlfOvWDJd8xFNTZnElzHdINyWD8IENdOU6w63sja6JWkI1FxFdhSQZf+ai48nJhaYaiG+aATl9VWkLbX6OF6CWkRJ5bU7QVK7Tb6z+qI+HGQPp/FVvcLnrSOY4+JE57OZsf6s0rUDlZESCihnZ1x0cHRLLsEsPvkLvGb1KAlHfgzbN/tgcNzEnKin6JiZgaOJvvV/Ja6JMiVjB9v5j738C7hLT5kz7+wYz9dVF3H0gdb+634RcAAAD//wMAUEsDBBQABgAIAAAAIQAekRq38wAAAE4CAAALAAgCX3JlbHMvLnJlbHMgogQCKKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==',
+               'opendocument-writer.snippet.odt' => 'UEsDBBQAAAAAALpueTpexjIMJwAAACcAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHRQSwMEFAAAAAAAum55OgAAAAAAAAAAAAAAABoAAABDb25maWd1cmF0aW9uczIvc3RhdHVzYmFyL1BLAwQUAAgACAC6bnk6AAAAAAAAAAAAAAAAJwAAAENvbmZpZ3VyYXRpb25zMi9hY2NlbGVyYXRvci9jdXJyZW50LnhtbAMAUEsHCAAAAAACAAAAAAAAAFBLAwQUAAAAAAC6bnk6AAAAAAAAAAAAAAAAGAAAAENvbmZpZ3VyYXRpb25zMi9mbG9hdGVyL1BLAwQUAAAAAAC6bnk6AAAAAAAAAAAAAAAAGgAAAENvbmZpZ3VyYXRpb25zMi9wb3B1cG1lbnUvUEsDBBQAAAAAALpueToAAAAAAAAAAAAAAAAcAAAAQ29uZmlndXJhdGlvbnMyL3Byb2dyZXNzYmFyL1BLAwQUAAAAAAC6bnk6AAAAAAAAAAAAAAAAGAAAAENvbmZpZ3VyYXRpb25zMi9tZW51YmFyL1BLAwQUAAAAAAC6bnk6AAAAAAAAAAAAAAAAGAAAAENvbmZpZ3VyYXRpb25zMi90b29sYmFyL1BLAwQUAAAAAAC6bnk6AAAAAAAAAAAAAAAAHwAAAENvbmZpZ3VyYXRpb25zMi9pbWFnZXMvQml0bWFwcy9QSwMEFAAIAAgAum55OgAAAAAAAAAAAAAAAAsAAABjb250ZW50LnhtbKVWTXPbIBC991doOPQmEyc9JKrlXDKd6UzSQ+N2eiWAbFo+VECW/e+7gC3LSZUwkxmPLS3vLY+3C3hxu1Oy2HLrhNE1ms8uUME1NUzodY1+rL6U1+h2+WFhmkZQXjFDO8W1L6nRHn4LYGtXpdEadVZXhjjhKk0Ud5WnlWm5PrKqMbqKc6WI83uZTY/gMdvznc8lB+wZlzzlzxzBYzazpM8lByyYOqY3Jpe8c7JsDLiuWuLFMxU7KfSfGm28byuM+76f9VczY9d4fnNzg+PoIJgOuLazMqIYxVzyMJnD89kcH7GKe5KrL2DHknSnnrjNtoZ48qKqbrvO7ojtesIauiE2uzci+Ly8Vyy/vFdszFXEbyZqco0fYDB+PdyfesGq3LkC9swqakWbvcyEHvONMYPUQEgbNMq9vLj4hNP7CN2/Cu+t8NyO4PRVOCWSDo4b9T/TADfHgCj5NrTp0PjBCDdBuMRpeAA7Npn618P9I91wRU5g8Ta4FNp5ok/ONILLY8MMCz3Ugu9abkUoA5HgSViMYQ==',
+               'text-rtf.snippet.rtf' => 'e1xydGYxXGFuc2lcZGVmZjBcYWRlZmxhbmcxMDI1CntcZm9udHRibHtcZjBcZnJvbWFuXGZwcnEyXGZjaGFyc2V0MCBUaW1lcyBOZXcgUm9tYW47fXtcZjFcZnJvbWFuXGZwcnEyXGZjaGFyc2V0MCBUaW1lcyBOZXcgUm9tYW47fXtcZjJcZnN3aXNzXGZwcnEyXGZjaGFyc2V0MCBBcmlhbDt9e1xmM1xmbmlsXGZwcnEyXGZjaGFyc2V0MCBCaXRzdHJlYW0gVmVyYSBTYW5zO319CntcY29sb3J0Ymw7XHJlZDBcZ3JlZW4wXGJsdWUwO1xyZWQxMjhcZ3JlZW4xMjhcYmx1ZTEyODt9Cntcc3R5bGVzaGVldHtcczFcY2Ywe1wqXGh5cGhlbjJcaHlwaGxlYWQyXGh5cGh0cmFpbDJcaHlwaG1heDB9XHJ0bGNoXGFmM1xhZnMyNFxsYW5nMjU1XGx0cmNoXGRiY2hcYWYzXGxhbmdmZTI1NVxoaWNoXGYwXGZzMjRcbGFuZzEwMzFcbG9jaFxmMFxmczI0XGxhbmcxMDMxXHNuZXh0MSBOb3JtYWw7fQp7XHMyXHNiMjQwXHNhMTIwXGtlZXBuXGNmMHtcKlxoeXBoZW4yXGh5cGhsZWFkMlxoeXBodHJhaWwyXGh5cGhtYXgwfVxydGxjaFxhZnMyOFxsYW5nMjU1XGx0cmNoXGRiY2hcbGFuZ2ZlMjU1XGhpY2hcZjJcZnMyOFxsYW5nMTAzMVxsb2NoXGYyXGZzMjhcbGFuZzEwMzFcc2Jhc2Vkb24xXHNuZXh0MyBIZWFkaW5nO30Ke1xzM1xzYTEyMFxjZjB7XCpcaHlwaGVuMlxoeXBobGVhZDJcaHlwaHRyYWlsMlxoeXBobWF4MH1ccnRsY2hcYWYzXGFmczI0XGxhbmcyNTVcbHRyY2hcZGJjaFxhZjNcbGFuZ2ZlMjU1XGhpY2hcZjBcZnMyNFxsYW5nMTAzMVxsb2NoXGYwXGZzMjRcbGFuZzEwMzFcc2Jhc2Vkb24xXHNuZXh0MyBCb2R5IFRleHQ7fQp7XHM0XHNhMTIwXGNmMHtcKlxoeXBoZW4yXGh5cGhsZWFkMlxoeXBodHJhaWwyXGh5cGhtYXgwfVxydGxjaFxhZjNcYWZzMjRcbGFuZzI1NVxsdHJjaFxkYmNoXGFmM1xsYW5nZmUyNTVcaGljaFxmMFxmczI0XGxhbmcxMDMxXGxvY2hcZjBcZnMyNFxsYW5nMTAzMVxzYmFzZWRvbjNcc25leHQ0IExpc3Q7fQp7XHM1XHNiMTIwXHNhMTIwXGNmMHtcKg==',
+               'css.snippet.css' => 'LyogU1ZOIEZJTEU6ICRJZDogY2FrZS5nZW5lcmljLmNzcyA3MDg2IDIwMDgtMDYtMDIgMDM6MzY6MjBaIG1hcmtfc3RvcnkgJCAqLwovKioKICoKICogUEhQIHZlcnNpb25zIDQgYW5kIDUKICoKICogQ2FrZVBIUCh0bSkgOiAgUmFwaWQgRGV2ZWxvcG1lbnQgRnJhbWV3b3JrIDxodHRwOi8vd3d3LmNha2VwaHAub3JnLz4KICogQ29weXJpZ2h0IDIwMDUtMjAwOCwgQ2FrZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAqCQkJCQkJCQkxNzg1IEUuIFNhaGFyYSBBdmVudWUsIFN1aXRlIDQ5MC0yMDQKICoJCQkJCQkJCUxhcyBWZWdhcywgTmV2YWRhIDg5MTA0CiAqCiAqIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQogKiBSZWRpc3RyaWJ1dGlvbnMgb2YgZmlsZXMgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UuCiAqCiAqIEBmaWxlc291cmNlCiAqIEBjb3B5cmlnaHQJCUNvcHlyaWdodCAyMDA1LTIwMDgsIENha2UgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogKiBAbGluawkJCQlodHRwOi8vd3d3LmNha2Vmb3VuZGF0aW9uLm9yZy9wcm9qZWN0cy9pbmZvL2Nha2VwaHAgQ2FrZVBIUCh0bSkgUHJvamVjdAogKiBAcGFja2FnZQkJCWNha2UKICogQHN1YnBhY2thZ2UJCWNha2UuYXBwLndlYnJvb3QuY3NzCiAqIEBzaW5jZQkJCUNha2VQSFAodG0pCiAqIEB2ZXJzaW9uCQkJJFJldmlzaW9uOiA3MDg2ICQKICogQG1vZGlmaWVkYnkJCSRMYXN0Q2hhbmdlZEJ5OiBtYXJrX3N0b3J5ICQKICogQGxhc3Rtb2RpZmllZAkkRGF0ZTogMjAwOC0wNi0wMiAwNTozNjoyMCArMDIwMCAoTW8sIDAyIEp1biAyMDA4KSAkCiAqIEBsaWNlbnNlCQkJaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAgVGhlIE1JVCBMaWNlbnNlCiAqLwoKKiB7CgltYXJnaW46MDsKCXBhZGRpbmc6MDsKfQoKLyogR2VuZXJhbCBTdHlsZSBJbmZvICovCmJvZHkgewoJYmFja2dyb3VuZDogIzAwM2Q0YzsKCWNvbG9yOiAjZg==',
+               /* Added data */
+               '3gp.snippet.3gp' => 'AAAAHGZ0eXAzZ3A0AAACAGlzb21pc28yM2dwNAAAAAhmcmVlAAJv3G1kYXQAAIACCAMmICAgIf//MQEBAQ//+YgICAh//8xAQEBD//5iAgICH//zEBAQEP//mICAgIf//MQEBAQ//+YgICAh//8xAQEBD//5iAgICH//0DzweeDg7//8B54RNBwoXm///oIqXCKmE4wMf//QRUuEVLhgY//+gipcIqXDAx//9BFS4RPjAr//9BHXCKlwuMf//QRUuEVLhgY//+giphOIqXDAx//9hHXB54WVCO4O//+geeDzwcHf//MODg4O//+4cKF5sOFC83//8xgYGBj//5jAwMDH//zGBgYGP//lGBUYFX///MYGBgY//+YwMDAx//8xgYGBj//6iyoR3Bwt4R3B3//zDg4ODv//mHBwcHf//cOFC82HCgOB+f//MYGBgY//+YwMDAx//8owLjAsqBw/7//+IjwMhFQqJxMfmxZ///xCiuehoYGBj//5jAwMDH//zGBgYGP//qLKhHcHCyoR3B3//zDg4ODv//mHBwcHf//cOFC82HCheb//+gueFzwwMf//QXPC54YGP//oLnhMfQ6MC///4EbXCGz5wYFjP//2FFao8LnhJWDhgQv//9Bc8LnhgY//+gueFzwwMf//UW824OFlQjuDv//mHBwcHf//MODg4O//+4cKF5sOFC83//8xgYGBj//5jAwMDH//3GBQuPDAvp7//+Kq/Y8WzXiYIa7hMD+NO//+okX8h4YF7T4x//8xgYGBj//5jAwMDH//1FvCO4OFlQjuDv//mHBwcHf//MODg4O//+4cKF5sOFC83//8xgYGBj//5jAwMDH//zGBgYGP//uMC7xgXf//8xgYGBj//5jAwMDH//zGBgYGP//qLKhHcHC3hHcHf//MODg4O//+YcHCAh//8YcKF7ZAICH//zGBgQEP//mMDAgIf//MYGBAQ//+MYF3iAh//8xgYEBD//5jAwICH//zGBgQEP//iFlQjuDhAQ//+YcHCAh//8xAQEBD//5iAgICH//zEBAQEP//mICAgIf//MQEBAQ//+YgICAh//8xAQEBD//5iAgICH//zEBAQEP//mICAgIf//MQEBAQ///eBAAAbGliZmFhYyAxLjI1AAABkAEARwAAgAIKAj/9JKHd/BFeEASRHByAJOpqoFPBrFPgM+GoOAIg4AinU3wKd01UCng1BwBEHAEU6mqgU8Gs1UCng1BwBIHAEkwMqaqBTuGoMAIucmBiDk/04BlwOACCRTiYGEIwKd0U+AyGQMAImwcARTqKfAZ8NZqoFO4HAEQcARSsmg==',
+               'ms.snippet.avi' => 'UklGRlwRBABBVkkgTElTVIAiAABoZHJsYXZpaDgAAAA1ggAA6IAAAAAAAAAQCQAA6AAAAAAAAAACAAAAAAAQAEABAAC0AAAAAAAAAAAAAAAAAAAAAAAAAExJU1SQEAAAc3RybHN0cmg4AAAAdmlkc0ZNUDQAAAAAAAAAAAAAAAABAAAAHgAAAAAAAADoAAAAAAAQAP////8AAAAAAAAAAEABtABzdHJmKAAAACgAAABAAQAAtAAAAAEAGABGTVA0AKMCAAAAAAAAAAAAAAAAAAAAAABKVU5LFBAAAAQAAAAAAAAAMDBkYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==',
+               'video.snippet.mp4' => 'AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQADCWltZGF0AAAB5mWIgCAAN//+7wAEofgU2YHQq/BWUy0hhtIcWNEPZj8TUmcda39j/3CAE9V7yNXmFX9hzYLNV62ekCaRW6BMOIG3RJ1ERdmFqZlUbUzgmYMs2wHZ036N7aeu//KR25OlAmkrOYLCjFgHqBjD6+B3G4TNOXNT4DGXbVcOZvN3BK2Nt7+frqdfcWrWx0QZI+tb/Din13vCT0eFEupxvag8itVV2lvD/mwkQ6fdmi1Qb1t+/GksqrTsrdJTj1eL4KEOopeUj8girtCttsXvZbwW4aQpreWe5mAcnKBU2yYlhDWS2t8nRyeJ2hwmzXWKBmXobFUvX8sJgSUFYteRs9Nor8d6SO8sjzZsck2bwQYxOC1WAw6SfLMZk7+SJ6b/5o0gCCGBaCUnx5WxeJGLcu2KycZ5DOD5TQ0rgoYmyQhjcoat5yiYwMwiRRQNfodt4xTfl3TOrLdoT81FF7lYwbzROgZU1oZG393XxDxEZS76xMv2IrZIoxh2D1Yx5vZvQ5rZrq2RGTF44Tvmnq5omWHky8wImoYtik1sILsACxRgSeHUMzkRqRcx9BKuJF9VA4Ah9h0pNMiUUz18b8BNE043iUnHbZj1qHW2Nc0BZoul8ZZpWT4Z6tENa6vEtZBYyPn1VPd56ZcLvQAAA9BBmgEBsl+ykgDVv77d57uvqfVO4gFbWl8lAbVKgXn1OLFWVM3/1DLJqwdE+AJPAAht6qmqnmIhXmRpk6gyzIZ+9l83M76s0QQ+M34nkhBjjalLHxzT9tgr03Z3GYTuFXme0BX3M7iKjy8W6TBVydNnQuMfvLcXAcwMXHju5p9RLEq/d9UeeCwmknRpLF7joN/nSJYtoYuiAxsjXbTYSODM9dfrzKojnHGm4TxvO8n12bYTtk1MA8tO4Mr9gFCoi/Tg1W46gi9vjOyHLIU2WFPzUYxrMmWpdtkH6PsAuepBezN2nObR23UVy7nTGG9+FeL02IKR2Abb9rHlIc+90+BLgvls//pkV0YZjwuS2WxKc7p2fqGEyuyuSBd/t5veMLRQ9AcKIf4uzjf+/6t/J93UOT4xv93bRFB/YoDZbpOfx6UcqrTlZjoO1zt84UXOKm3ttQyu/sSrBAHKFNZSkhB0ay/eCsTyyIGDU8KDGXrwlSSv6lLW6TofXokrazRpganHToPDirDdy9IqMnUmH9CiLRnWo+1JjkqvT7l5of801iCABOB/+ZBzNrhZwUmTXRehpDG6/sav2eyhWEEkcacBLHxN2JeQoYHsiQ==',
+               'flac.snippet.flac' => 'ZkxhQwAAACISABIAAAAOABZACsRC8AAFM751BFQL1JOs2YNBQQ9rhvVWBAAAKCAAAAByZWZlcmVuY2UgbGliRkxBQyAxLjEuMiAyMDA1MDIwNQAAAACBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==',
+               'wave.snippet.wav' => 'UklGRhzPFABXQVZFZm10IBAAAAABAAIARKwAABCxAgAEABAAZGF0YfjOFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==',
+               'audio-mpeg.snippet.mp3' => '//uQZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAEqAAHoKAACBQcKDA8SFBcZHB4hJCYpKy4wMzY4Oz1AQ0VISk1PUlVXWlxfYWRnaWxucXN2eXt+gIKFh4qMj5KUl5mcnqGkpqmrrrCztri7vcDDxcjKzc/S1dfa3N/h5Ofp7O7x8/b5+/4AAAA5TEFNRTMuOTcgAaoAAAAALhgAABSAJAcCTgAAgAAB6CjVWo+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//uQZAAP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAETEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSZL6P8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==',
+               'video-mpeg.snippet.mpeg' => 'AAABuiEAAQABoZ29AAABuwAMoZ29BCH/4ODmvcAgAAAB4AfcMQADX5ERAANDcQAAAbMUALQT///gKAAAAbUUigABAAAAAAG4AAgAAAAAAQAAD//4AAABtY//80GAAAABARv4bSlIi5SlIi5GEYi7/4v6c+MRYf0fj40iLD+j+NIiw/o/jSIsP6P40iLD+j+NIiw/o/jSIut4v6eMRYfzP6RiLD+j+NIiw/o/jSIsP6P40iLD8fR/GkRYf0fxpEXnKOlmKO0sRcpSkRcpSkRAAAABAhv4bSlIi5SlIi5GEYi9HPjDxiLlKUiLlKUiLlKUiLlKUiLlKUiLlKUiLSMIxFtSlIi5SlIi5SlIi5SlIi5SlIi5SlIi85R2lmKO0sRcpSkRcpSkRAAAAQMb+G0pSIuUpSIuRhGIvRz/GHjEXKUpEXKUpEXKUpEXKUpEXKUpEXKUpEWnml83iLNKUiLlKUiLlKUiLlKUiLlKUiLlKUiLzlHSzFHSxFylKRFylKREAAABBBv4bSlIi5SlIi5GEYi9NIeMRcpSkRcpSkRcpSkRcpSkRcpSkRdWDKANqucBvEWAMTANpQMxAbxFtymrKsst9WRFylKRFylKRFylKRFylKRFylKRF5yjtLMUdpYi5SlIi5SlIiAAAAEFG/htKUiLlKUiLkYRiL0eMPGIuUpSIuUpSIuUpSIuUpSIuSlHzVYYfEXVzrTUBp1bivEXPNVcMrPvoizSlIi5SlIi5SlIi5SlIi5SlIi5SlIi85R2lmKOliLlKUiLlKUiIAAAAQYb+G0pSIuUpSIuRhGIvRGX+LxFmkH9H8RZpB/R4izSD+jxFmkH9HiLNSTK1/Jg1oi6piXqzhsz+IugDMK//vIUXEWxZTT2b2h/EWaQf0fxFmkH9HiLNIP6P4izSD+jxFmkHo8RdBR0sxR2liLlKUiLlKUiIAAAAQcb+G0pSIuUpSIuRhGIvRz4wjEXKUpEXKUpEXKUpEXKUpEXKUq8GRF2Uh80Yixz6Y+nPpj4i89o59ntERZpSkRcpSkRcpSkRcpSkRcpSkReco7SzFHaWIuUpSIuUpSIgAAAAQgb+G0pSIuUpSIuRhGIvRGHjEXKUpEXKUpEXKUpEXKUpEXKkM6q6G7RF1BurrPvvRtEXfz6sMxshK1P9oiyX21fD94xFylKRFylKRFylKRFylKRFylKRF5yjpZijtLEXKUpEXKUpEQAAAEJG/htKUiLlKUiLkYRiL0c+MOfGIuUpSIuUpSIuUpSIuUpSIuUpSIuSkvzUiLX/zQ58Yi5SlIi5SlIi5SlIi5SlIi5SlIi5SlIi85R2lmKO0sRcg==',
+               'video-ogg.snippet.ogv' => 'T2dnUwACAAAAAAAAAAAAAAAAAAAAAPzksaYBKoB0aGVvcmEDAgEAFAALAAFAAAC0AAAAAAAeAAAAAQAAAQAAAQADDUAAgE9nZ1MAAgAAAAAAAAAAAQAAAAAAAACXJuN7ATN/RkxBQwEAAAFmTGFDAAAAIgkACQAAAAAAEg4FYiDwAAAAAAAAAAAAAAAAAAAAAAAAAABPZ2dTAAAAAAAAAAAAAAAAAAABAAAAuRBrAgEygXRoZW9yYSMAAABYaXBoLk9yZyBsaWJUaGVvcmEgSSAyMDA3MTAyNSAzIDIgMQAAAABPZ2dTAAAAAAAAAAAAAAEAAAABAAAAuWmlbQEXhAAAEwsAAABMYXZmNTIuMzEuMAAAAABPZ2dTAAAAAAAAAAAAAAAAAAACAAAA2njyiwv/////////////P4J0aGVvcmG+zSj3uc1rGLWpSUoQc5zmMYxSlKQhCDGMYhCEIQhAAAAAAAAAAAAAEfThZC5VSbR2EvVwtJhrlaKpQJZIodBH05m41mQwF0slUpEslEYiEAeDkcDQZDEWiwVigTCURiEQB4OhwMhgLBUJhIIg8GgwFPuZF9aVVVQUEtLRkZBQTw8NzcyMi0tLSgoKCMjIx4eHh4ZGRkZFBQUFBQPDw8PDw8PCgoKCgoKCgoFBQUFBQUFAIQCwoQGCgzPQwMDhMaOjw3Dg0QGCg5RTgOERYdM1dQPhIWJTpEbWdNGCM3QFFocVwxQE5XZ3l4ZUhcX2JwZGdjERIYL2NjY2MSFRpCY2NjYxgaOGNjY2NjL0JjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYxAQEBQYHCAoEBAUGBwgKDAQFBgcICgwQBQYHCAoMEBAGBwgKDBAQEAcICgwQEBAYCAoMEBAQGCAKDBAQEBggIA+L8t9ANMxO+Qo3g6om9uWYi3Ucb4D9yiSJe4NjJfWqpGmZXYuxCBORg9o6mS+cw2tWGxlUpXn27h+SdxDTMrsXYghfIo8NVqDYyXj85dzEro9o8k4T7qqQgxXNU+6qkV2NBGcppQe0eddyQ4GVrMbfOH8V4Xgl52/4TjtMPaPOpImMBdWszKag13wyWkKP7QL0KeNjmXZGgdyg9o865Tba72CuClUYEXxJ/xaLWOQfcIh3Nr/cQtI2GYsrQG6clcih7t51JeqpKhHmcJ0rWbBcbxQiuwNJA5PFD3brv/7JjeWwUg9ngWnWdxxYrMYfAZUcjRqJpZNr/6lLc7I4sPg+Tgmlk2jwW8Bn1dAsrAi0x5Mr/6lLchNaPXnYDaiL/gex8voTcwnZ9LbBWuBNLJrpigA==',
+               'audio-ogg.snippet.ogg' => 'T2dnUwACAAAAAAAAAAAYMQAeAAAAAPC7ALsBHgF2b3JiaXMAAAAAAkSsAAAAAAAAAGsDAAAAAAC4AU9nZ1MAAAAAAAAAAAAAGDEAHgEAAADLhZ8SEC3//////////////////3EDdm9yYmlzHQAAAFhpcGguT3JnIGxpYlZvcmJpcyBJIDIwMDUwMzA0AAAAAAEFdm9yYmlzK0JDVgEACAAAADFMIMWA0JBVAAAQAABgJCkOk2ZJKaWUoSh5mJRISSmllMUwiZiUicUYY4wxxhhjjDHGGGOMIDRkFQAABACAKAmOo+ZJas45ZxgnjnKgOWlOOKcgB4pR4DkJwvUmY26mtKZrbs4pJQgNWQUAAAIAQEghhRRSSCGFFGKIIYYYYoghhxxyyCGnnHIKKqigggoyyCCDTDLppJNOOumoo4466ii00EILLbTSSkwx1VZjrr0GXXxzzjnnnHPOOeecc84JQkNWAQAgAAAEQgYZZBBCCCGFFFKIKaaYcgoyyIDQkFUAACAAgAAAAABHkRRJsRTLsRzN0SRP8ixREzXRM0VTVE1VVVVVdV1XdmXXdnXXdn1ZmIVbuH1ZuIVb2IVd94VhGIZhGIZhGIZh+H3f933f930gNGQVACABAKAjOZbjKaIiGqLiOaIDhIasAgBkAAAEACAJkiIpkqNJpmZqrmmbtmirtm3LsizLsgyEhqwCAAABAAQAAAAAAKBpmqZpmqZpmqZpmqZpmqZpmqZpmmZZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZQGjIKgBAAgBAx3Ecx3EkRVIkx3IsBwgNWQUAyAAACABAUizFcjRHczTHczzHczxHdETJlEzN9EwPCA1ZBQAAAgAIAAAAAABAMRzFcRzJ0SRPUi3TcjVXcz3Xc03XdV1XVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVYHQkFUAAAQAACGdZpZqgAgzkGEgNGQVAIAAAAAYoQhDDAgNWQUAAAQAAIih5CCa0JrzzTkOmuWgqRSb08GJVJsnuamYm3POOeecbM4Z45xzzinKmcWgmdCac85JDJqloJnQmnPOeRKbB62p0ppzzhnnnA7GGWGcc85p0poHqdlYm3POWdCa5qi5FJtzzomUmye1uVSbc84555xzzjnnnHPOqV6czsE54Zxzzonam2u5CV2cc875ZJzuzQnhnHPOOeecc84555xzzglCQ1YBAEAAAARh2BjGnYIgfY4GYhQhpiGTHnSPDpOgMcgppB6NjkZKqYNQUhknpXSC0JBVAAAgAACEEFJIIYUUUkghhRRSSA==',
+               'javascript.snippet.js' => 'LyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuMy4xCiAqIGh0dHA6Ly9qcXVlcnkuY29tLwogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDkgSm9obiBSZXNpZwogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcy4KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9MaWNlbnNlCiAqCiAqIERhdGU6IDIwMDktMDEtMjEgMjA6NDI6MTYgLTA1MDAgKFdlZCwgMjEgSmFuIDIwMDkpCiAqIFJldmlzaW9uOiA2MTU4CiAqLwooZnVuY3Rpb24oKXsKCnZhciAKCS8vIFdpbGwgc3BlZWQgdXAgcmVmZXJlbmNlcyB0byB3aW5kb3csIGFuZCBhbGxvd3MgbXVuZ2luZyBpdHMgbmFtZS4KCXdpbmRvdyA9IHRoaXMsCgkvLyBXaWxsIHNwZWVkIHVwIHJlZmVyZW5jZXMgdG8gdW5kZWZpbmVkLCBhbmQgYWxsb3dzIG11bmdpbmcgaXRzIG5hbWUuCgl1bmRlZmluZWQsCgkvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKCV9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAoJLy8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGUKCV8kID0gd2luZG93LiQsCgoJalF1ZXJ5ID0gd2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewoJCS8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJwoJCXJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7Cgl9LAoKCS8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzIG9yIElEIHN0cmluZ3MKCS8vIChib3RoIG9mIHdoaWNoIHdlIG9wdGltaXplIGZvcikKCXF1aWNrRXhwciA9IC9eW148XSooPCgufFxzKSs+KVtePl0qJHxeIyhbXHctXSspJC8sCgkvLyBJcyBpdCBhIHNpbXBsZSBzZWxlY3RvcgoJaXNTaW1wbGUgPSAvXi5bXjojXFtcLixdKiQvOwoKalF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZQ==',
+               'postscript.snippet.ps' => 'JSFQUy1BZG9iZS0zLjAKJSVDcmVhdG9yOiBjYWlybyAxLjguMCAoaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnKQolJUNyZWF0aW9uRGF0ZTogV2VkIE1hciAyNSAxMjo0ODoyNCAyMDA5CiUlUGFnZXM6IDEKJSVCb3VuZGluZ0JveDogMCAwIDU5NiA4NDIKJSVEb2N1bWVudERhdGE6IENsZWFuN0JpdAolJUxhbmd1YWdlTGV2ZWw6IDIKJSVFbmRDb21tZW50cwolJUJlZ2luUHJvbG9nCi9sYW5ndWFnZWxldmVsIHdoZXJlCnsgcG9wIGxhbmd1YWdlbGV2ZWwgfSB7IDEgfSBpZmVsc2UKMiBsdCB7IC9IZWx2ZXRpY2EgZmluZGZvbnQgMTIgc2NhbGVmb250IHNldGZvbnQgNTAgNTAwIG1vdmV0bwogIChUaGlzIHByaW50IGpvYiByZXF1aXJlcyBhIFBvc3RTY3JpcHQgTGFuZ3VhZ2UgTGV2ZWwgMiBwcmludGVyLikgc2hvdwogIHNob3dwYWdlIHF1aXQgfSBpZgovcSB7IGdzYXZlIH0gYmluZCBkZWYKL1EgeyBncmVzdG9yZSB9IGJpbmQgZGVmCi9jbSB7IDYgYXJyYXkgYXN0b3JlIGNvbmNhdCB9IGJpbmQgZGVmCi93IHsgc2V0bGluZXdpZHRoIH0gYmluZCBkZWYKL0ogeyBzZXRsaW5lY2FwIH0gYmluZCBkZWYKL2ogeyBzZXRsaW5lam9pbiB9IGJpbmQgZGVmCi9NIHsgc2V0bWl0ZXJsaW1pdCB9IGJpbmQgZGVmCi9kIHsgc2V0ZGFzaCB9IGJpbmQgZGVmCi9tIHsgbW92ZXRvIH0gYmluZCBkZWYKL2wgeyBsaW5ldG8gfSBiaW5kIGRlZgovYyB7IGN1cnZldG8gfSBiaW5kIGRlZgovaCB7IGNsb3NlcGF0aCB9IGJpbmQgZGVmCi9yZSB7IGV4Y2ggZHVwIG5lZyAzIDEgcm9sbCA1IDMgcm9sbCBtb3ZldG8gMCBybGluZXRvCiAgICAgIDAgZXhjaCBybGluZXRvIDAgcmxpbmV0byBjbG9zZXBhdGggfSBiaW5kIGRlZgovUyB7IHN0cm9rZSB9IGJpbmQgZGVmCi9mIHsgZmlsbCB9IGJpbmQgZGVmCi9mKiB7IGVvZmlsbCB9IGJpbmQgZGVmCi9CIHsgZmlsbCBzdHJva2UgfSBiaW5kIGRlZgovQiogeyBlb2ZpbGwgc3Ryb2tlIH0gYmluZCBkZWYKL24geyBuZXdwYXRoIH0gYmluZA==',
+               'text-xhtml.snippet.xhtml' => 'PD94bWwgdmVyc2lvbj0iMS4wIj8+CjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgo8aGVhZD4KPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJIVE1MIFRpZHksIHNlZSB3d3cudzMub3JnIiAvPgo8dGl0bGU+WEhUTUwgMS4wOiBUaGUgRXh0ZW5zaWJsZSBIeXBlclRleHQgTWFya3VwIExhbmd1YWdlIChTZWNvbmQgRWRpdGlvbik8L3RpdGxlPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIiBocmVmPSJ4aHRtbC5jc3MiIC8+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1N0eWxlU2hlZXRzL1RSL1czQy1SRUMuY3NzIiAvPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IGNsYXNzPSJoZWFkIj48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PSI0OCIgd2lkdGg9IjcyIiBzcmM9Imh0dHA6Ly93d3cudzMub3JnL0ljb25zL3czY19ob21lIiBhbHQ9IlczQyIgLz48L2E+IAoKPGgxPjxhIG5hbWU9InRpdGxlIiBpZD0idGl0bGUiPjwvYT4gWEhUTUwmIzg0ODI7IDEuMCBUaGUgRXh0ZW5zaWJsZSBIeXBlclRleHQgTWFya3VwIExhbmd1YWdlIChTZWNvbmQgRWRpdGlvbik8L2gxPgoKPGgyPjxhIG5hbWU9InRpdGxlMiIgaWQ9InRpdGxlMiI+PC9hPiBBIFJlZm9ybXVsYXRpb24gb2YgSFRNTCA0IGluIFhNTCAxLjA8L2gyPgoKPGgyPjxhIG5hbWU9InN1YnRpdGxlIiBpZD0ic3VidGl0bGUiPjwvYT4gVzNDIFJlY29tbWVuZGF0aW9uIDI2IEphbnVhcnkgMjAwMCwgcmV2aXNlZCAxIEF1Z3VzdCAyMDAyPC9oMj4KCjxkbD4KPGR0PjxhIA==',
+               'xml.snippet.xml' => 'PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KPCFET0NUWVBFIHNwZWMgU1lTVEVNICJ4bWxzcGVjLmR0ZCIgWwoJPCFFTlRJVFkgYmFzZS51cmkgImh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDYvIj4KCTwhRU5USVRZIG1hdHVyaXR5LmxldmVsICJSRUMiPgoJPCFFTlRJVFkgZG9jLnNob3J0bmFtZSAieG1sMTEiPgoJPCFFTlRJVFkgZHJhZnQueWVhciAiMjAwNiI+Cgk8IUVOVElUWSBkcmFmdC5tb250aC5uYW1lICJBdWd1c3QiPgoJPCFFTlRJVFkgZHJhZnQubW9udGggIjA4Ij4KCTwhRU5USVRZIGRyYWZ0LmRheSAiMTYiPgoJPCFFTlRJVFkgaXNvNi5kb2MuZGF0ZSAiJmRyYWZ0LnllYXI7JmRyYWZ0Lm1vbnRoOyZkcmFmdC5kYXk7Ij4KCTwhRU5USVRZIGRvYy5pZGVudCAiJm1hdHVyaXR5LmxldmVsOy0mZG9jLnNob3J0bmFtZTstJmlzbzYuZG9jLmRhdGU7Ij4KCgk8IUVOVElUWSB0aGlzLnZlcnNpb24gIiZiYXNlLnVyaTsmZG9jLmlkZW50OyI+Cgk8IUVOVElUWSB4bWwudmVyc2lvbiAiJmRvYy5pZGVudDsueG1sIj4KCTwhRU5USVRZIHJldmlldy52ZXJzaW9uICImZG9jLmlkZW50Oy1yZXZpZXcuaHRtbCI+Cgk8IUVOVElUWSBwZGYudmVyc2lvbiAiJmRvYy5pZGVudDsucGRmIj4KCTwhRU5USVRZIGVycmF0YWxvYyAiaHR0cDovL3d3dy53My5vcmcvWE1ML3htbC1WMTEtMmUtZXJyYXRhIj4KCTwhRU5USVRZIHByZXZlcnJhdGFsb2MgImh0dHA6Ly93d3cudzMub3JnL1hNTC94bWwtVjExLTFlLWVycmF0YSI+Cgk8IUVOVElUWSB0cmFuc2xhdGlvbmxvYyAiaHR0cDovL3d3dy53My5vcmcvMjAwMy8wMy9UcmFuc2xhdGlvbnMvYnlUZWNobm9sb2d5P3RlY2hub2xvZ3k9JmRvYy5zaG9ydG5hbWU7Ij4KCTwhRU5USVRZIGltcHJlcGxvYyAiaHR0cDovL3d3dy53My5vcmcvWE1MLzIwMDYvMDYveG1sMTEtMmUtaW1wbGVtZW50YXRpb24uaHRtbCI+Cgk8IUVOVElUWSB2ZXJzaW9uT2ZYTUwgIjEuMSI+CgoJPCFFTlRJVFkgV2ViU0dNTCAiVw==',
+               'video-ms.snippet.wmv' => 'MCaydY5mzxGm2QCqAGLObBECAAAAAAAABQAAAAECodyrjEepzxGO5ADADCBTZWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKXqAwAAAAAAAIA+1d6xnQFQAAAAAAAAAJDahAYAAAAA0NSrBAAAAAAcDAAAAAAAAAIAAACADAAAgAwAAEAHBAC1A79fLqnPEY7jAMAMIFNlLgAAAAAAAAAR0tOruqnPEY7mAMAMIFNlBgAAAAAAkQfct7epzxGO5gDADCBTZYEAAAAAAAAAwO8ZvE1bzxGo/QCAX1xEKwBX+yBVW88RqP0AgF9cRCsAAAAAAAAAADMAAAAAAAAAAQAAAAAAQAEAALQAAAACKAAoAAAAQAEAALQAAAABABgATVA0MwCjAgAAAAAAAAAAAAAAAAAAAAAAkQfct7epzxGO5gDADCBTZXQAAAAAAAAAQJ5p+E1bzxGo/QCAX1xEK1DNw7+PYc8Ri7IAqgC04iAAAAAAAAAAAB4AAAAIAAAAAgAAAAAAVQABACJWAABAHwAAQAIAAAwAAQACAAAAgAQBAHEFAZABkAEBAABAUtGGHTHQEaOkAKDJA0j2aAAAAAAAAABBUtGGHTHQEaOkAKDJA0j2AgAAAAEACABtAHMAbQBwAGUAZwA0AAAAAAAEAE1QNDMCAAsAbABpAGIAbQBwADMAbABhAG0AZQAAAAAAAgBVADYmsnWOZs8RptkAqgBizmwy6AMAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAEBggAAAV0AAAAAQwCGgQAAAAAACK4CAAAcDAAArgIHe8DzSxagqoK1ASIV+6/UjwV192k9BXX3X0FdfdfQV1919BXX3X0FdfdfQBCn91+fgrr26/YK6+6+grr7r6CuvuvoK7Se6+grr7r6B4j4ie8idBVQVUFVBVQVUFUjp8FVBVQVUFVBVQVUDKoLVBVQVUFVBVQVUFeROryJ0FVBVQVUFVBVQVUb6fBVQVUFVBVQVUFVAHT9PngJVBVQVUFVBVQVUFeIq8RQVUFVBVQVUFVABa78FVBVQVUFVBVQAQcC6BzyyA58JwFMDnoBfBz4KNfHlX/9dBVQVUFVBVQVUFeROryJ0FVBVQVUFVBVQU+nwVUFVBVQVUA0/iOdojAFUiGZsieeeAc72LQuVZXAJWgqoKqCqgqoKqCvInV4igqoKqCqgqoKqB9Xr+fCq6+68Krr4+FV18fCq6+PhTgMuvaNngVOGWuGoXt14AuAsD7afL4WgHDf8eIO8B14VXX3XhVdfHwquvuvCq6+PhVH4+FeIq8idBVQVUFVBVQVUDzUj1BVQVUFVA==',
+               'video-quicktime.snippet.mov' => 'AAAAFGZ0eXBxdCAgAAACAHF0ICAAAAAId2lkZQAELUZtZGF0AAABswAQBwAAAbYQYHGCNbfxtt/G+38y9f+v9I/8j699pO38j699e38j699e38j699e38j699e38j699e380H/1/f/kfX11//yPr317fyPr317fyPr317fyPtJ317fyPr317fyoeIpfkTn8bbfxtt/G238bbfxtt/K6Rtvfxtt/G238bbfxtt/G238bbfxtt/H238bbfxtt/G238bbfxtt/K/InN+ROfxtt/G238bbfxtt/G238rqN7b38bbfxtt/G238bbfxtt/G239Tf29v+Ntv422/jbb+Ntv422/jbb+V+Im/ET+Ntv422/jbb+Ntv422/id5/+Ntv422/jbb+Ntv422/oSgXMGPJ2DH/uQFUDHmAvAx/5ffHlK//rn8bbfxtt/G238bbfxtt/K/InN+ROfxtt/G238bbfxtt/G238re29/G238bbfxtt/G2387nxG5aI/qdIlqbIpnn/VL6ihcpZXfG338bbfxtt/G238bbfxtt/K/InN+In8bbfxtt/G238bbfxtt/S3q/n/pbfXvr/pbfXs/9Lb69n/pbfXs/9bkBj6+o2e+uUi1y1C+uv+rALL62n48LfqW/49aLzHX/S2+vfX/S2+vZ/6W3176/6W317P/S2z7P/K/ETfkTn8bbfxtt/G238bbfxtt/C9I+38bbfxtt/G238bbfxWo04F3xG7sPf71I1IRukbhH8Mu6Rt/H238bbfxtt/G238bbfyvyJzfkTn8bbfxtt/G238bbfxtt/Ebb38bbfxtt/G238bbfzuWqcasp76km3LISx5fjvt0jTahCyxztjvlr947r2n38bbfxtt/G238bbfxtt/K/ETfkTn8bbfxtt/G238bbfxtt/K6Rt0jfxtt/G238bbfxtt/G+38MxJa918rtfWpG/jbb+Ntv422/jbb+Ntv422/lfkTm/InP422/jbb+Ntv422/jbb+VvbpG/jbb+Ntv422/jbb+Ntv422/ldRvbqN7+Ntv422/jbb+Ntv422/jbb+V+ROb8RP422/jbb+Ntv422/jbb+V1G9uo3v422/jbb+Ntv422/jbb+Ntv5XSNukb+Ntv422/jbb+Ntv422/jbb+V+Im/InP422/jbb+Ptv422/jbb+X0j7pG/jbb+Ntv422/jbb+Ntv43m/l9I+6Rv422/jbb+Ntv492/jbb+Ntv5f5E7vyJz+Ntv422/f3gQAAGxpYmZhYWMgMS4yNQAAQgCTIAQyAEchAEmQAhkAI4AAAAGzABAHAAABthDgUYI1t/G238bbfw==',
+               'video-flash.snippet.flv' => 'RkxWAQUAAAAJAAAAABIAASYAAAAAAAAAAgAKb25NZXRhRGF0YQgAAAAMAAhkdXJhdGlvbgBAHtT987ZFogAJc3RhcnR0aW1lAAAAAAAAAAAAAA10b3RhbGR1cmF0aW9uAEAe1P3ztkWiAAV3aWR0aABAdAAAAAAAAAAGaGVpZ2h0AEBmgAAAAAAAAA12aWRlb2RhdGFyYXRlAEBuW4hvl9itAA1hdWRpb2RhdGFyYXRlAEBQIZKbewicAA10b3RhbGRhdGFyYXRlAEBzrayQnuyIAAlmcmFtZXJhdGUAQD34B3CF6WoACmJ5dGVsZW5ndGgAQRJ+YAAAAAAADWNhbnNlZWtvbnRpbWUBAQAKc291cmNlZGF0YQIAIEI0QTdERDJDMSAgICAgICAgICAgICAgICAgICAgICAgAAAJAAABMQgAANEAAAAAAAAAKv/zgMQAAAADSAAAAABMQU1FVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAADcCAAA0gAAGgAAAAAq//OCxMMAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAADdCQAHFQAAIQAAAAASAACEBICgAFoSJhwcHB3//zDg4ODv//mHB4cH///YWrxfXi9NjH//0F9eL7ScYGP//oL68X14wMf//QX14vrxgY//+gvrxfXjAx//9BfXi+vGBj//6C+vF9eMDH//2FD4rrxV4t//9BXXi+vFxj//6C+vF9eMDH//0F9eL68YGP//oL68X14wMf//QX2k4vrxgY//+gvrxfXjAx//9RDxoOEPNODv//mHBwcHf//MODg4O//+YcHBwd//8w4ODg7//5hweHB///1F6bGBd4x//8xgYGBj//5jAw==',
+               'audio-musepack.snippet.mpc' => 'TVArBygBAAAAAKBcAAAAAAAAAAAAAODDAAQAc////w/w/////wBAAP////8EAP////8PAP////8AQADw/////wD/////DwAE/////9MJ8P+z9aZg+fwzW0rZxbxg////GQAAAOzzz93zzz7/zz///D//7PP7/DPPSuY8Pu7u7u69zhiPe4u62NY3lo1+cGd3f1VVvf7+ouomvX/f1rZt27YpmfpIvW2biHTc4YCIiIgY6/8n2Dknxo2rhep0L/Z6DgAAACi20Y38DjQAFOLMBr8fEHj3+/1+n7if79E6NBoulzehm+0YZO1CtbQBsRI8EREREeqfZxFW+R4o3Gssq7DQZaMAAAAA2CjZvQIeHb3AELApAQAAAN2vFdESvWNVd+V1AQAAALRi1xUAzM6ze9Rs1rDbtm0xSdO2be7SUrWrP7FTtG3bdioEJ4Tcy5C7/eDQxEryVVURu3lt/89IPNu2bRvIsnJf/o7oFFVFXbZVmXJV2bjv+v///33f7/////9+7vf///8KIPfv1kyhtufv19b//8HGG9v+/5p4AHZOgvRJgzkzbPPnDjdqt7afoqK2tvvq1fwSIEFVquvdi+Os/+5m/t8YfSK8LVK9rJej++6w+2lqypXPXnWjQRJ6lbbD3XTmkr3v83y9ubvx1MKBG6rbOqypNtJ9zRvtm21yIvxYXP9v48aDGIZgURE9STIzPeVe7wQ/uAFbUSbhPmbHvTURZIc6kEGfXQZ9dkVyDDUnHEPNiYLnMYCm6f2/f9A18/////8fRpNUFpl47BgUeTRAkgf8kQdEeWSPTR5fAWTZ+ncA+bD97b/4O4F8UCzaWMpJKto3yHsV6J/8g5LW7Mxtrc8nWEs7qhrmAmbEbktJpl9NcslCpmSYTyBAwijOW94CRauTXpQEJKSQRfSFEOYgc1Vnb8Nlchz3s3hHUFRFAO/tg27gP4TLoxG7IbfUwkAIUE5nbTvv7pKmZMnxQkZfMWcxjbyANTCgwPX7LZxXgmdaH3mMiwjW4U6hwCnEZFkg2U0Tt8Varyx6pEe6la/56stKD+zPvzPxvAO+VgzDF+qYNDfyFpjoIP8neuXf3wgQslG4Ht7m28IC+yO0kkELzPvrwdRq9OlbqJ1to8y9k5j1TWQQ3fWz2xQmwsOEPMcItaTub95bv2dW8kNXWJfU22kbP+n9dPQzL7oPCAS2RX1C4OFl6MxF7mNYLe3c5UPzs2p4pKBnD+6MhPb+RaC9D3W6Nqcyp7UFRwtpq5tM9YPUrtYbAID1UHK/LLFkDCwxbWTQAFaxNKsX8K6tz/v///9/nJP+/E4mcSMTkrGDh+PM2A==',
+               'audio-ms.snippet.wma' => 'MCaydY5mzxGm2QCqAGLObIoBAAAAAAAABAAAAAECodyrjEepzxGO5ADADCBTZWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwIAQAAAAAAAIA+1d6xnQEVAAAAAAAAAJBScQYAAAAA0EyYBAAAAAAcDAAAAAAAAAIAAACADAAAgAwAAAD6AAC1A79fLqnPEY7jAMAMIFNlLgAAAAAAAAAR0tOruqnPEY7mAMAMIFNlBgAAAAAAkQfct7epzxGO5gDADCBTZXIAAAAAAAAAQJ5p+E1bzxGo/QCAX1xEK1DNw7+PYc8Ri7IAqgC04iAAAAAAAAAAABwAAAAIAAAAAQAAAAAAYQECAESsAABAHwAAcwEQAAoAAAAAAAEAAAAAAAFzAXMBAQAAQFLRhh0x0BGjpACgyQNI9mQAAAAAAAAAQVLRhh0x0BGjpACgyQNI9gEAAAACABcAVwBpAG4AZABvAHcAcwAgAE0AZQBkAGkAYQAgAEEAdQBkAGkAbwAgAFYAOAAAAAAAAgBhATYmsnWOZs8RptkAqgBizmyyBgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAEBggAACV1TAAAAAEUBiAEAAAAAAAhzAQAAHAwAAHMB4D/QAAAD/QAAAB6wTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4BAQAAAAAIcwEAAEoMAABzAeA/0AAAA/0AAAAesE5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg==',
+               'audio.snippet.snd' => 'LnNuZAAAACkAFM74AAAAAwAArEQAAAACUHJvY2Vzc2VkIGJ5IFNvWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==',
+               'audio-mpeg.snippet.m4a' => 'AAAAGGZ0eXBNNEEgAAACAGlzb21pc28yAAAACGZyZWUAAKgVbWRhdN4EAABsaWJmYWFjIDEuMjUAAEIAkyAEMgBHIQBJkAIZACOAIQBJkAIZACOAIQBJkAIZACOAISBJkAIZACOAIUH+21yAAEZ/m6TIBHAhRf79uogVIFSAgfFFjHGoEXBrqAGWLOaAB8d7QxXq3MBve63PJ07+3bIFHCFH/v9zswWcFy4qqqg+TL8VHhdIlvlm+R48H7kHOMlNy0Jd5PipjR0YapOD1X2LwTVjKKqfsT5VewjRaaXAAyKduoV7DWaUGCwhxgqGQSBAASjJwnSXLAU+sVnfcTX6J2tO04sK6divHhn7nzNHs/MjwfMcL2jIHA4hR/7/npLlU5NPaVnFgMHsGf9r1v79Xwmz990AwjTw1dPR7H9LLg2BjPy4ctfj7efaBer6ujz7o8aANfl6ulHa1pgcb4VPQ9E/3WlpANB/Tx/p0GlBkDgcIUf+/6CzJYuWKprhJAjEzQvkVX30vx0duQ2STmXkO3LLDK1002Wp/iP2sDvFCrj1gB8B9PmzaUZIYs8NGe96CpJyMhBVFC31gKJ2VuiTmzFvZ3+/gCyRoINB2S5d3IyBwOAhR/7/oKTJShMt9aSx9YmDAuYiwm0O7CfTGVI/2l32llSvBfjW+q9TJ6iv1XkwBPZEzflvklCfk/lOvG+WghmIQR7wuPCb5d1xwkhV2PlKLEUYN2qoP5tvR3/PvXZ43gfWsDZMgcDgIUf+/5+kyRGXPXUqBsvuTJUY3g6poWZCMJrK5b4eaaV9qG82MZtyRrxqPSepwtXF/OHst0XecvkfMxqnK+BcNAUnuHYGlMk6QGtuE0yGo9trN/jzl8NaNGhMQc10xhj17+6GQOBwIUf+/56DRgsVKFS5+JVhGr/ON6Adzx+0LkA6OCcX/7L81vbzqdB4fcLV/6Qni0YgXoEmBmUypMvQ1QzbL5T4KTMDxuV13X7uO+3fBTHYOKUOScJTXD1qq2CuRooDX3alPYQlm5IJgxspBkDgcCFH/v+aswmalwvLDQ7o7QqrTB2S2LUbb6qOYo7dUwLSyKCTZ+6o1TW+PbJfjh8SkwJMVY05S6vQV+Xf2Hb11fFLcBuMKrufjVDNQstoao788PbXUKSid7JUVEATHAZCtxzP7bj6/C4ldw6sG9Qvtl5foh3/qln5cjIHA4AhR/7/m7MFopcSZqxeyvzsi8MN2S0U+weDH9kF+Gp2bfd7aRWdu6onUGLuMnj7pK/Hu7tH6KT+8CjR99U9VN09nGSttlZ0bvD12ddFc+xXeGqa58wkVVskCUHKKycACA==',
+               'audio-apple.snippet.aiff' => 'Rk9STQAUz0hBSUZGQ09NVAAAABoAAcXvwnMAAAAQUHJvY2Vzc2VkIGJ5IFNvWENPTU0AAAASAAIABTO+ABBADqxEAAAAAAAAU1NORAAUzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==',
+               'audio.snippet.aac' => '//lQgAQ//N4EAABsaWJmYWFjIDEuMjUAAEIAkyAEMgBH//lQgAIf/CEASZACGQAjgP/5UIACH/whAEmQAhkAI4D/+VCAAh/8IQBJkAIZACOA//lQgAIf/CEgSZACGQAjgP/5UIAE3/whSf7/21yHCkAAEZ/m6QAAAAACKnTXx+jH9f0MgdDg//lQgA3//CFJ/v/bqIFSBUglLESggfFFYHGoEXBrqAGWLOaAB8d7QxXq3MBve63PJ07+3YA3LO459fp69sde+/Hf/CPs/HvAwc0AAAAszq7+pJvZH2u+a23cLfjr3XS9P8k/VzbM+zr0NdWyB0OA//lQgBo//CFK/v/udmCxgsYTJC4VTLug+TL8VHhdIlvlm+R48H7kHOMlNy0Jd5PipjR0YapOD1X5r+E1dcoqqtQe4vaiGA4GpQXON1FsbqqXsaXRpCkLCHGCpsiaRIIRKIThfSXLBGvwi1d9xOf0hJHKG6SYCt96FV2ZMfVtFE2eYSba5p3W34SFUrhtNJLyaVGeQIeUqRd3r0yrYwiTg9ICD3miAdeo3CKTECYBOYCZYa53Fr3XOvsPyfVvVTF+QClFe4VwwlNYuo2NuVmQOxz/+VCAEf/8IUz+//z0lyqcqxj2tnF/j4ksBg9gz/tet/fq+E2fvugGDTw1dPR7H5WXBsDGfo4cvl+Pt59oGNX8ujz7o/PiBLj9fxeVHqa0wAIs4cs33vn0/w5YnnykABUw15ajo53zlzzicSABI8QHCTgAAN+AP5fy+AAAuD+WGYAAA6S2AAAKAP5awGQPR//5UIATf/whTP7//QUZLFyxVORjXVS59/xJoDgdAc4Vf7850IngEaiRtwu3LLDK1002Wp/iP2sDvFCrj1gB8B9P75uFGSLxZ4cGe96IxJyMhFVVC760iVE7lndJlHVfdwt+75+/wCrJGoEU1VS7Ov5e3u+fTIkAAQNMecAYD+foRPHrAAXPRqqI8AAFzmDgAAF4FYXBORUAyB6O//lQgBO//CFM/v/9DSZqUJkY31xLfr9S7HhEwYFOBKJpEY09+BWj/aXeuWVK8B8lb6r9sn16/A8mAJ7Imb8t2JQn5P5ZLxvloKqYhBHvB04iVWu1KBAkA6tqfdPwRXZvliFymr1Ha5x0Nfh7NLYxr9+g930a7F6V/GRd1iRd1B3AvcLH8v5fyAAAHq/lEAAAfywgAAAHqwxAAMgejv/5UIATv/whTP7//QwaLJCpQqRjfnjR9/vJYnF5yRRHaGs1ZSsR61KJ8fAXr1y77RFu0Q3JVO87nCjQ/nDbbojzl8j5mNU5XwLhoC89wzhpSpv6TQ0NwHjM4w==',
+               'flash.snippet.swf' => 'RldTBmwhBQBwAAyAAABwgAAeBgFGCw8vvgUAAAoPAAAGAUABtAAAApUGNgEAAADJAABAACECAAAAdmlkZW8Afw8rBwAAAAAAAAAAhACAoABaEaYcHBwd//8w4ODg7//5hweHB///2Fq8X14vTYx//9BfXi+0nGBj//6C+vF9eMDH//0F9eL68YGP//oL68X14wMf//QX14vrxgY//+gvrxfXjAx//9hQ+K68VeLf//QV14vrxcY//+gvrxfXjAx//9BfXi+vGBj//6C+vF9eMDH//0F9pOL68YGP//oL68X14wMf//UQVGg4QVNODv//mHBwcHf//MODg4O//+YcHBwd//8w4ODg7//5hweHB///1F6bGBd4x//8xgYGBj//5jAwMDH//zGBgYGP//mMDAwMf//MYGBgY//+YwMDAx//8xUWFRb//5jAwMDH//zGBgYGP//mMDAwMf//MYGBgY//+YwMDAx//8xgYGBj//6iCppwcIKmnB3//zDg4ODv//mHBwcHf//MODg4O//+YcHBwd//8w4PDg///6i9beMC7xj//5jAwMDH//zGBgYGP//mMDAwMf//MYGBgY//+YwMDAx//8xgYGBj//9CrxcVeLv//+YwMDAx//8xgYGBj//5jAwMDH//zGBgYGP//mMDAwMf//MYGBgY//+ogqNBwgqNB3//zDg4ODv//mHBwcHf//MODg4O//+YcHBwd//8w4PDg///5BgYF3jH//zGBgYGP//mMDAwMf//MYGBgY//+YwMDAx//8xgYGBj//8CcBoAQTBoIQPEgaD8///iINBBiYNBCCINB+iQNB+f//UUqo8MCitXrhj//5jAwMDH//zGBgYGP//mMDAwMf//MYGBgY//+YwMDAx//9RBU04OEFTTg7//5hwcHB3//zDg4ODv//mHBwcHf//MODg4O//+YcHhwf//9Rd4wLvGP//mMDAwMf//MYGBgY//+YwMDAx//8xgYGBj//7jAsqNjAoXG///0H00MCJeaFoqf//+hZ4wJ0GgBBeyu//+YwMDAx//8xgYGBj//5jAwMDH//zGBgYGP//mMDAwMf//MYGBgY//+ogqacHCCo0Hf//MODg4O//+YcHBwd//8w4ODg7//5hwcHB3//zDg8OD///yLjAtXi5///8jAwL68X1///5GBgX14uf///IwMC+vFz///5GBgX14uf///YwJA0AKL68Uhee///YeIj1wrQaB8F9f//+hAGg/Q8Wtp8TVAF///oVVqjwwHvF9f//+RgYF9eL6///8jAwL68XP///kYGBfXi+v///IwMC+vFz///5GBgXPiw==',
+               'real-video.snippet.rm' => 'LlJNRgAAABIAAAAAAAAAAAAGUFJPUAAAADIAAAAMsgAADLIAAAAUywAABEAAAAEwAAAeUAAAAAAABRwLAAABZQACAANDT05UAAAAEgAAAAAAAAAAAABNRFBSAAAAdAAAAAAAC7gAAAu4AAAAFMsAAAVtAAAAAAAAAAAAAB5QEFRoZSBWaWRlbyBTdHJlYW0UdmlkZW8veC1wbi1yZWFsdmlkZW8AAAAiAAAAIlZJRE9SVjIwAUAAtAAZAAAAAAAZAAAAAAAIIBAwAU1EUFIAAACbAAAAAQAA+gAAAPoAAAAEAAAAAi0AAAAAAAAAAAAAHe4QVGhlIEF1ZGlvIFN0cmVhbRRhdWRpby94LXBuLXJlYWxhdWRpbwAAAEkucmH9AAQAAC5yYTQBtTUwAAQAAAA5AAIAAAIsAAUVQAACSfAAAknwAAECLAAAAABWIgAAABAAAgRJbnQwBGRuZXQAAAAAAAAAREFUQQAFGrgAAAAAATAAAAAAAAACbgAAAAAAAAACgYFCW0JbAEMAACEDgQCO453OsbV8OoCN0xtWTumNm3TGzbpjZt0xs26Y2bdbJ+Ha91m+HTDpjZt0xs26Y2bdMrJzbpjZt1jfDRlvFTjMccccV1tEbmnuhPjjiPjjsy4hdKYdHEfHHEfaHFTnt4qc+OOOOK6pAne090cdb3ulc+OG+9eY18fU5z5XujjhvhOtDhp6HDT4j4r444rrAQ9h7o4T4447RgKZBKBNwEu2QFUEqgLBwvy9KDxBO9+4xCfHHFfK91t4qcZQ4qc+OOOOK6pA9p7or44j4r5+4bZ4btsiBfXprJj7x4RMgKz1dCII44463vdbeKnGUOGnxw3xxxXWETmK87b3U7Ttb6dO1Op2n7e6nafrQianbGT1kOqXNALaO30BYSsLn1Bm86QGEb2jtNO07TTtP007Ttb6dO259P0/beGjLeKnPjivjjiutARuCJ0znPhOhOkc63ED2wFTGHSuukfCMnJ7CNojCUIpnOdQ5z5HOlc+RzrbxU4yhxU58ccccV1hE5p7o4j4T450PKc5H30hEyP8e2cukaFiEbah2/jplNOBIWV8cj3Vve6Vz47Q4ae3ipxmOG+OOK6pARtEbor4445HuoCLil7pmKfAQTxx1ve63Pe6Vz47Q4qc9Dipz44r444rrae5ojdI90ccV8N8d1O91TvdHFfHHHFfbeKnGUOGnxxxxxXVIE72k73RXyvdW97o447pG6kboT444r5XuiPtvDRlvFTnxw3yOdDdHMiI3ICOG6G6Vz4ToTqHPfNCNxPCdCdCdbzD3Q3TOc+28VOehxU58J0JwAAAAg==',
+               /* first 3000 bytes because magic check offset around 2500 */
+               'ms-word.snippet.doc' => '0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAACAAAAuAAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAACAAAAA///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9//////////7///8EAAAABQAAAAYAAACzAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAAWQAAAFoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABhAAAAYgAAAGMAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAAAH4AAAB/AAAAgQAAAFIAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAQAAAP7////+////BAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAAP7///8bAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAAAA5AAAAOgAAADsAAAA8AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAA/v///0QAAAD+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAAAABGGAAAAE1pY3Jvc29mdCBXb3JkLURva3VtZW50AAoAAABNU1dvcmREb2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASABQACgABAFsADwACAAAAAAAAAF4AABDx/wIAXgAAAAgAUwB0AGEAbgBkAGEAcgBkAAAACAAAADEkACokATMAQioAT0oAAFFKAABDShgAbUgMBHNIDARLSAEAUEoDAG5I/wBeSgMAYUoYAF9I/wB0SP8AAAAAAAAAAAAAAAAAAAAAAAAAAEIAQUDy/6EAQgAAABkAQQBiAHMAYQB0AHoALQBTAHQAYQBuAGQAYQByAGQAcwBjAGgAcgBpAGYAdABhAHIAdAAAAAAAAAAAAAAAAABCAP4fAQACAUIAAAAFAFQAaQB0AHIAZQAAAA0ADwATpPAAFKR4AAYkAQAYAE9KAgBRSgIAQ0ocAFBKAwBeSgMAYUocADgAQhABAAIBOAAAAA4AQwBvAHIAcABzACAAZABlACAAdABlAHgAdABlAAAACgAQABOkAAAUpHgAAAAeAC8QAQESAR4AAAAFAEwAaQBzAHQAZQAAAAIAEQAAADwA/h8BACIBPAAAAAcATADpAGcAZQBuAGQAZQAAAA0AEgATpHgAFKR4AAwkAQAOAENKGAA2CAFhShgAXQgBLAD+HwEAMgEsAAAACgBSAOkAcABlAHIAdABvAGkAcgBlAAAABQATAAwkAQAAAAAAAAAPAAAABAAACgAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAeBAAAAwAAAAAEAAAeBAAABAAAAAAAAAAPAAAAAAAAAAIQAAAAAAAAAA8AAABQAAAEAAAAAAQAAABHFpABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVABpAG0AZQBzACAATgBlAHcAIABSAG8AbQBhAG4AAAA1FpABAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUwB5AG0AYgBvAGwAAAAzJpABAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
+               /* complete */
+               'generic-text' => 'dGVzdFxudGVlc3RzdGVzdHN0ZXN0c2V0XHRcdFxuCg==',
+               'generic-binary' => 'CwAAAAEAAAACAAAAVIEECFQBAAATAAAAAAAAAAAAAAABAAAAAAAAABMAAAAHAAAAAgAAAGiBBAhoAQAAIAAAAAAAAAAAAAAABAAAAAAAAAAlAAAABQAAAAIAAACIgQQIiAEAAFwBAAAFAAAAAAAAAAQAAAAEAAAAIQAAAPb//28CAAAA5IIECOQCAABQAAAABQAAAAAAAAAEAAAABAAAACsAAAALAAAAAgAAADSDBAg0AwAAAAMAAAYAAAABAAAABAAAABAAAAAzAAAAAwAAAAIAAAA0hgQINAYAAOUBAAAAAAAAAAAAAAEAAAAAAAAAOwAAAP///28CAAAAGogECBoIAABgAAAABQAAAAAAAAACAAAAAgAAAEgAAAD+//9vAgAAAHyIBAh8CAAAQAAAAAYAAAABAAAABAAAAAAAAABXAAAACQAAAAIAAAC8iAQIvAgAADAAAAAFAAAAAAAAAAQAAAAIAAAAYAAAAAkAAAACAAAA7IgECOwIAAAYAQAABQAAAAwAAAAEAAAACAAAAGkAAAABAAAABgAAAASKBAgECgAAFwAAAAAAAAAAAAAABAAAAAAAAABkAAAAAQAAAAYAAAAcigQIHAoAAEACAAAAAAAAAAAAAAQAAAAEAAAAbwAAAAEAAAAGAAAAYIwECGAMAAC0EAAAAAAAAAAAAAAQAAAAAAAAAHUAAAABAAAABgAAABSdBAgUHQAAHAAAAAAAAAAAAAAABAAAAAAAAAB7AAAAAQAAAAIAAABAnQQIQB0AAAAOAAAAAAAAAAAAACAAAAAAAAAAgwAAAAEAAAACAAAAQKsECEArAAAEAAAAAAAAAAAAAAAEAAAAAAAAAI0AAAABAAAAAwAAAPy+BAj8LgAACAAAAAAAAAAAAAAABAAAAAAAAACUAAAAAQAAAAMAAAAEvwQIBC8AAAgAAAAAAAAAAAAAAAQAAAAAAAAAmwAAAAEAAAADAAAADL8ECAwvAAAEAAAAAAAAAAAAAAAEAAAAAAAAAKAAAAAGAAAAAwAAABC/BAgQLwAA4AAAAAYAAAAAAAAABAAAAAgAAACpAAAAAQAAAAMAAADwvwQI8C8AAAQAAAAAAAAAAAAAAAQAAAAEAAAArgAAAAEAAAADAAAA9L8ECPQvAACYAAAAAAAAAAAAAAAEAAAABAAAALcAAAABAAAAAwAAAIzABAiMMAAAEAAAAAAAAAAAAAAABAAAAAAAAAC9AAAACAAAAAMAAACgwAQInDAAAEgAAAAAAAAAAAAAACAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAJwwAADCAAAAAAAAAAAAAAABAAAAAAAAAA==',
+               'image-jpg.jpg' => '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',
+               'image-png.png' => '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',
+               'image-gif.gif' => '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',
+               'image-png.transparent.16bit.png' => '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',
+               'image-png.transparent.8bit.png' => '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',
+               'text-plain.txt' => 'ICA1MDAwMDAwMDAwCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gMjMyOTkzNjQxNCBAIDExLjUuMDgKCgogIDUwMDAwMDAwMDAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAxMDAwMDAwMDAwIDE4LTI1Ci0gMjUwMDAwMDAwMCBhYiAyNgo9PT09PT09PT09PT09PT09PT09PT09PQogIDE1MDAwMDAwMDAKCi0gMTE5OTA4NDUxMCA9IDMwMDkxNTQ5MCBeID8KLSAxMjEwMjI5NDYxID0gMjg5NzcwNTM5IF4gMTExNDQ5NTEKLSAxMjI4Njg3MDM3ID0gMjcxMzEyOTYzIF4gMTg0NTc1NzYKLSAxMjM4MzMyODk5ID0gMjYxNjY3MTAxIF4gIDk2NDU4NjIKLSAxMjQ2MTg4MjA1ID0gMjUzODExNzk1IF4gIDc4NTUzMDYKLSAxMjczNTEyNzYyID0gMjI2NDg3MjM4IF4gMjczMjQ1NTcgCi0gMTMwNDc4MDAyNCA9IDE5NTIxOTk3NiBeIDMxMjY3MjYyCi0gMTMxNTU4OTAzOCA9IDE4NDQxMDk2MiBeIDEwODA5MDE0Ci0gMTM0MTA3OTYyMiA9IDE1ODkyMDM3OCBeIDI1NDkwNTg0Ci0gICAgICAgIE4vQSA9IE4vQSAgICAgICBeIE4vQQotIDEzNDc0OTE5MTcgPSAxNTI1MDgwODMgXiAgNjQxMjI5NQotIDE0MDY1NDQzMzIgPSAgOTM0NTU2NjggIAo9PT09PT09PT09PT0KICA5MzQ1NTY2OA==',
+               'application-pdf.pdf' => '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K1RpbWVzTmV3Um9tYW5QU01UCi9GaXJzdENoYXIgMAovTGFzdENoYXIgOQovV2lkdGhzWzc3NyA2MTAgNTAwIDI3NyAzODkgMjUwIDMzMyA3MjIgNDQzIDI3NyBdCi9Gb250RGVzY3JpcHRvciA3IDAgUgovVG9Vbmljb2RlIDggMCBSCj4+CmVuZG9iagoKMTAgMCBvYmoKPDwvRjEgOSAwIFIKPj4KZW5kb2JqCgoxMSAwIG9iago8PC9Gb250IDEwIDAgUgovUHJvY1NldFsvUERGL1RleHRdCj4+CmVuZG9iagoKMSAwIG9iago8PC9UeXBlL1BhZ2UvUGFyZW50IDQgMCBSL1Jlc291cmNlcyAxMSAwIFIvTWVkaWFCb3hbMCAwIDU5NSA4NDJdL0dyb3VwPDwvUy9UcmFuc3BhcmVuY3kvQ1MvRGV2aWNlUkdCL0kgdHJ1ZT4+L0NvbnRlbnRzIDIgMCBSPj4KZW5kb2JqCgo0IDAgb2JqCjw8L1R5cGUvUGFnZXMKL1Jlc291cmNlcyAxMSAwIFIKL01lZGlhQm94WyAwIDAgNTk1IDg0MiBdCi9LaWRzWyAxIDAgUiBdCi9Db3VudCAxPj4KZW5kb2JqCgoxMiAwIG9iago8PC9UeXBlL0NhdGFsb2cvUGFnZXMgNCAwIFIKL09wZW5BY3Rpb25bMSAwIFIgL1hZWiBudWxsIG51bGwgMF0KL0xhbmcoZGUtREUpCj4+CmVuZG9iagoKMTMgMCBvYmoKPDwvQXV0aG9yPEZFRkYwMDREMDA2MTAwNzIwMDY5MDA3NTAwNzMwMDIwMDA1NzAwNjkwMDZDMDA2RDAwNzM+Ci9DcmVhdG9yPEZFRkYwMDU3MDA3MjAwNjkwMDc0MDA2NTAwNzI+Ci9Qcm9kdWNlcjxGRUZGMDA0RjAwNzAwMDY1MDA2RTAwNEYwMDY2MDA2NjAwNjkwMDYzMDA2NTAwMkUwMDZGMDA3MjAwNjcwMDIwMDAzMjAwMkUwMDM0PgovQ3JlYXRpb25EYXRlKEQ6MjAwODEwMDIxNTA5MzArMDInMDAnKT4+CmVuZG9iagoKeHJlZgowIDE0CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAxMjgzMSAwMDAwMCBuIAowMDAwMDAwMDE5IDAwMDAwIG4gCjAwMDAwMDAyMzMgMDAwMDAgbiAKMDAwMDAxMjk3NCAwMDAwMCBuIAowMDAwMDAwMjUzIDAwMDAwIG4gCjAwMDAwMTE5OTMgMDAwMDAgbiAKMDAwMDAxMjAxNSAwMDAwMCBuIAowMDAwMDEyMjEzIDAwMDAwIG4gCjAwMDAwMTI1NDcgMDAwMDAgbiAKMDAwMDAxMjc0NCAwMDAwMCBuIAowMDAwMDEyNzc2IDAwMDAwIG4gCjAwMDAwMTMwNzMgMDAwMDAgbiAKMDAwMDAxMzE3MCAwMDAwMCBuIAp0cmFpbGVyCjw8L1NpemUgMTQvUm9vdCAxMiAwIFIKL0luZm8gMTMgMCBSCi9JRCBbIDxDNERENUFDMTg2NEQ2OUNDREQ1NkZFNkIyNDg2MUFFRj4KPEM0REQ1QUMxODY0RDY5Q0NERDU2RkU2QjI0ODYxQUVGPiBdCi9Eb2NDaGVja3N1bSAvNUM1RERGNURBQUFEQjk3MTczNzBCMkE2NURDMkZGRkEKPj4Kc3RhcnR4cmVmCjEzNDE5CiUlRU9GCg==',
+               'audio-mpeg.ID3v1.mp3' => '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qqqqqqqqqqqqqqqqwYEOaa8ZlMXyMcXMEJMIKNsHMefEIAejF2TEizVBjDPTSZF9r5CBJ0bQyIeGXKdSGRKa8C65ARTJMJOxR+McVavaQF319FxF0pGu1Twa8LtSJMNY//OEZPoQcS1yzz2JHwAAA0gAAAAA8TYI+8gkyVrMFr4OUqx87TksRoyunEsXB4FQBAKg3F5PfHrnAfWsjgcumlCOQiCmQgZKcYLT8I+YhU/GMfPxPL6tBD1SuPvPBIbCUtnx8fpFJ2d4xDYfHUOEWwmVkyeKWg1Zr+UAL5StqhZCqTiAX0YgU4xKRgYlO7IRtOLAUFiZVo6jWPm6IACW6xGuya2LA7EF3pk/X4jFemGmSFH7PspsP1R4gDcBl4nQ//OEZP8WkStMAWsMToAAA0gAAAAAnQtE+l2ZEsiI8olq7U21WcQMQWm1G5InyKYajZdjkQF0eQNSbYOOopSSVoWgZIBQciNHopiCmopmXHJxVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVJF6SpkxiWxnBGye7wZMCEi9qBifUBKoOXCtlsk9VeJG1IDrN0orEGrxwXM4cy2tfsGy6IQzD0qht5IfvfnGSIftKyUUkrSCKJKm2BCTOQkUZvQpD//OEZPUPvStsez0pXQAAA0gAAAAAmbO5RiWk/PJyssXhS278g2h+1u7Hwa88jvS2asPN0RJ5Rz72fQewNBTg6////////2VL/+y3//4QowsEUcABmGAAY4gOYQHMOQOgwsIUWdMQU1FVVVVVBe4WNOC06lUQC9V1kK9QqIXxom5IrPezlyWIvQ4seYc41NTQ05Ubh6IyGu/tSvZiUZuWqstwtXbGNbMVEnlYokLCIqVjGiJAGFspVKgeMJCwiQBR//OEZP8Uag1cA2UiqwAAA0gAAAAAUzlLdaGMZ6lUpjUeYpZqHKJCplYz9Syo61Nmf8u3//o5UO5UcqKxkdjKxlRjKzlRzJN1OHkaKYR5kl+RabNE7lGeJzJNGIUcyfSppJFQIUcqQWDqP1OI45UkWMdI3S6FqLiO40yai3FmcY/R9F3LQXImJoE2FuM8vA/h8l8KYW0sk0zKTEFNRTMuOTiqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//OEZP8a7g9WA2SvrwAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVEFHVGl0bGUgICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aXN0ICAgICAgICAgICAgICAgICAgICAgICAgQWxidW0gICAgICAgICAgICAgICAgICAgICAgICAgMjAwOUNvbW1lbnQgICAgICAgICAgICAgICAgICAgICAAAQw=',
+               'audio-mpeg.ID3v2.mp3' => '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',
+               'audio-mpeg.notag.mp3' => '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',
+               'audio-vorbis.comments.ogg' => 'T2dnUwACAAAAAAAAAACWaMIyAAAAAAJKlWcBHgF2b3JiaXMAAAAAAsBdAAAAAAAAOo8AAAAAAACqAU9nZ1MAAAAAAAAAAAAAlmjCMgEAAADTh2PKEf//////Y///////////////A3ZvcmJpcx0AAABYaXBoLk9yZyBsaWJWb3JiaXMgSSAyMDA3MDYyMgwAAAALAAAAVElUTEU9VGl0bGUNAAAAQVJUSVNUPUFydGlzdAsAAABBTEJVTT1BbGJ1bQkAAABEQVRFPTIwMDkOAAAAVFJBQ0tOVU1CRVI9MDENAAAAVFJBQ0tUT1RBTD0wMQ0AAABHRU5SRT1Vbmtub3duFAAAAERFU0NSSVBUSU9OPUNvbW1lbnRzEAAAAENPTU1FTlQ9Q29tbWVudHMXAAAAQ09WRVJBUlRNSU1FPWltYWdlL2pwZWcdAAAAQ09WRVJBUlRERVNDUklQVElPTj1pbWFnZS5qcGdVBAAAQ09WRVJBUlQ9LzlqLzRBQVFTa1pKUmdBQkFRRUFTQUJJQUFELzJ3QkRBQU1DQWdNQ0FnTURBd01FQXdNRUJRZ0ZCUVFFQlFvSEJ3WUlEQW9NREFzS0N3c05EaElRRFE0UkRnc0xFQllRRVJNVUZSVVZEQThYR0JZVUdCSVVGUlQvMndCREFRTUVCQVVFQlFrRkJRa1VEUXNORkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCVC93QUFSQ0FFc0FTd0RBU0lBQWhFQkF4RUIvOFFBRlFBQkFRQUFBQUFBQUFBQUFBQUFBQUFBQUFuL3hBQVVFQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUEvOFFBRkFFQkFBQUFBQUFBQUFBQUFBQUFBQUFBQVAvRUFCUVJBUUFBQUFBQUFBQUFBQUFBQUFBQUFBRC8yZ0FNQXdFQUFoRURFUUEvQUtwZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvL1oBBXZvcmJpcxhCQ1YBAAgAAIAgChnGgNCQVQAAEAAAQohGxlCnlASXgoUQR8RQh5DzUGrpIHhKYcmY9BRrEEII33vPvffeeyA0ZBUAAAQAQBgFDmLgMQlCCKEYxQlRnCkIQghhOQmWch46CUL3IIQQLufecu699x4IDVkFAAACADAIIYQQQgghhBBCCimlFFKKKaaYYsoxxxxzzDHIIIMMOuikk04yqaSTjjLJqKPUWkotxRRTbLnFWGutNefca1DKGGOMMcYYY4wxxhhjjDHGCEJDVgEAIAAAhEEGGWQQQgghhRRSiimmHHPMMceA0JBVAAAgAIAAAAAAR5EUyZEcyZEkSbIkS9Ikz/Isz/IsTxM1UVNFVXVV27V925d923d12bd92XZ1WZdlWXdtW5d1V9d1Xdd1Xdd1Xdd1Xdd1Xdd1IDRk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',
+               'audio-vorbis.notag.ogg' => 'T2dnUwACAAAAAAAAAACWaMIyAAAAAAJKlWcBHgF2b3JiaXMAAAAAAsBdAAAAAAAAOo8AAAAAAACqAU9nZ1MAAAAAAAAAAAAAlmjCMgEAAAC129+JDS3//////////////3kDdm9yYmlzHQAAAFhpcGguT3JnIGxpYlZvcmJpcyBJIDIwMDcwNjIyAAAAAAEFdm9yYmlzGEJDVgEACAAAgCAKGcaA0JBVAAAQAABCiEbGUKeUBJeChRBHxFCHkPNQaukgeEphyZj0FGsQQgjfe8+99957IDRkFQAABABAGAUOYuAxCUIIoRjFCVGcKQhCCGE5CZZyHjoJQvcghBAu595y7r33HggNWQUAAAIAMAghhBBCCCGEEEIKKaUUUooppphiyjHHHHPMMcgggww66KSTTjKppJOOMsmoo9RaSi3FFFNsucVYa60159xrUMoYY4wxxhhjjDHGGGOMMcYIQkNWAQAgAACEQQYZZBBCCCGFFFKKKaYcc8wxx4DQkFUAACAAgAAAAABHkRTJkRzJkSRJsiRL0iTP8izP8ixPEzVRU0VVdVXbtX3bl33bd3XZt33ZdnVZl2VZd21bl3VX13Vd13Vd13Vd13Vd13Vd13UgNGQVACABAKAjOY4jOY4jOZIjKZIChIasAgBkAAAEAOAojuI4kiM5lmNJlqRJmuVZnuVpniZqogeEhqwCAAABAAQAAAAAAKAoiuIojiNJlqVpmuepniiKpqqqommqqqqapmmapmmapmmapmmapmmapmmapmmapmmapmmapmmapmmaQGjIKgBAAgBAx3Ecx1Ecx3EcyZEkCQgNWQUAyAAACADAUBRHkRzLsSTN0izP8jTRMz1XlE3d1FUbCA1ZBQAAAgAIAAAAAADA8RzP8RxP8iTP8hzP8SRP0jRN0zRN0zRN0zRN0zRN0zRN0zRN0zRN0zRN0zRN0zRN0zRN0zRN0zRN04DQkJUAABkAAGJIg8xRaA0gizEnKRZjjDHGGOMp8SCkVouoRGQOUiuaEo8xBil4TkSmlKNgSnGhY9CKzEXHVFIuthhjjO/FCEJDVggAoRkABscBJE0DJE0DAAAAAAAAAMnzAE80AU00AQAAAAAAAEDyPEATRUATRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJM8DPNMEPNMEAAAAAAAAAM00AVF0AdNVAQAAAAAAAEAzTUB0TcBUXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJM8DPNMEPNMEAAAAAAAAAM00AdNVAdF0AQAAAAAAAEAzTcBUXUB0RQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABFkKhISsCgDgBAIPjWBYAADiWpVkAAOBYlmUBAIBlWaIIAACWZYkiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIABBwCAABPKQKEh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',
+               'video-h264.notag.mp4' => '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',
+               'video-h264.qt-tag.mp4' => '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',
+               'video-mobile.qt-tag.3gp' => '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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkGZtZGF0AACAAggDJiAgICH//zEBAQEP//mICAgIf//MQEBAQ//+YgICAh//8xAQEBD//5iAgICH//zEBAQEP//mICAgIf//MQEBAQ//+YgICAh//9A88Hng4O///AeeETQcKF5v//6CKlwiphOMDH//0EVLhFS4YGP//oIqXCKlwwMf//QRUuET4wK///QR1wipcLjH//0EVLhFS4YGP//oIqYTiKlwwMf//YR1weeFlQjuDv//oHng88HB3//zDg4ODv//uHChebDhQvN///MYGBgY//+YwMDAx//8xgYGBj//5RgVGBV///zGBgYGP//mMDAwMf//MYGBgY//+osqEdwcLeEdwd//8w4ODg7//5hwcHB3//3DhQvNhwoDgfn//zGBgYGP//mMDAwMf//KMC4wLKgcP+///iI8DIRUKicTH5sWf//8QornoaGBgY//+YwMDAx//8xgYGBj//6iyoR3BwsqEdwd//8w4ODg7//5hwcHB3//3DhQvNhwoXm///oLnhc8MDH//0FzwueGBj//6C54TH0OjAv//+BG1whs+cGBYz//9hRWqPC54SVg4YEL///QXPC54YGP//oLnhc8MDH//1FvNuDhZUI7g7//5hwcHB3//zDg4ODv//uHChebDhQvN///MYGBgY//+YwMDAx//9xgULjwwL6e///iqv2PFs14mCGu4TA/jTv//qJF/IeGBe0+Mf//MYGBgY//+YwMDAx//9RbwjuDhZUI7g7//5hwcHB3//zDg4ODv//uHChebDhQvN///MYGBgY//+YwMDAx//8xgYGBj//7jAu8YF3///MYGBgY//+YwMDAx//8xgYGBj//6iyoR3Bwt4R3B3//zDg4ODv//mHBwgIf//GHChe2QCAh//8xgYEBD//5jAwICH//zGBgQEP//jGBd4gIf//MYGBAQ//+YwMCAh//8xgYEBD//4hZUI7g4QEP//mHBwgIf//MQEBAQ//+YgICAh//8xAQEBD//5iAgICH//zEBAQEP//mICAgIf//MQEBAQ//+YgICAh//8xAQEBD//5iAgICH//zEBAQEP//3gQAAGxpYmZhYWMgMS4yNQAAAZABAEcAAIACCgI//SSh3fwRXhAE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',
+               'video-mobile.notag.3gp' => 'AAAAHGZ0eXAzZ3A0AAACAGlzb21pc28yM2dwNAAAAAhmcmVlAACQZm1kYXQAAIACCAMmICAgIf//MQEBAQ//+YgICAh//8xAQEBD//5iAgICH//zEBAQEP//mICAgIf//MQEBAQ//+YgICAh//8xAQEBD//5iAgICH//0DzweeDg7//8B54RNBwoXm///oIqXCKmE4wMf//QRUuEVLhgY//+gipcIqXDAx//9BFS4RPjAr//9BHXCKlwuMf//QRUuEVLhgY//+giphOIqXDAx//9hHXB54WVCO4O//+geeDzwcHf//MODg4O//+4cKF5sOFC83//8xgYGBj//5jAwMDH//zGBgYGP//lGBUYFX///MYGBgY//+YwMDAx//8xgYGBj//6iyoR3Bwt4R3B3//zDg4ODv//mHBwcHf//cOFC82HCgOB+f//MYGBgY//+YwMDAx//8owLjAsqBw/7//+IjwMhFQqJxMfmxZ///xCiuehoYGBj//5jAwMDH//zGBgYGP//qLKhHcHCyoR3B3//zDg4ODv//mHBwcHf//cOFC82HCheb//+gueFzwwMf//QXPC54YGP//oLnhMfQ6MC///4EbXCGz5wYFjP//2FFao8LnhJWDhgQv//9Bc8LnhgY//+gueFzwwMf//UW824OFlQjuDv//mHBwcHf//MODg4O//+4cKF5sOFC83//8xgYGBj//5jAwMDH//3GBQuPDAvp7//+Kq/Y8WzXiYIa7hMD+NO//+okX8h4YF7T4x//8xgYGBj//5jAwMDH//1FvCO4OFlQjuDv//mHBwcHf//MODg4O//+4cKF5sOFC83//8xgYGBj//5jAwMDH//zGBgYGP//uMC7xgXf//8xgYGBj//5jAwMDH//zGBgYGP//qLKhHcHC3hHcHf//MODg4O//+YcHCAh//8YcKF7ZAICH//zGBgQEP//mMDAgIf//MYGBAQ//+MYF3iAh//8xgYEBD//5jAwICH//zGBgQEP//iFlQjuDhAQ//+YcHCAh//8xAQEBD//5iAgICH//zEBAQEP//mICAgIf//MQEBAQ//+YgICAh//8xAQEBD//5iAgICH//zEBAQEP//mICAgIf//MQEBAQ///eBAAAbGliZmFhYyAxLjI1AAABkAEARwAAgAIKAj/9JKHd/BFeEASRHByAJOpqoFPBrFPg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',
+               'video-quicktime.notag.mov' => 'AAAAFGZ0eXBxdCAgAAACAHF0ICAAAAAId2lkZQAA7JxtZGF0AAABswAQBwAAAbYQYHGCNbfxtt/G+38y9f+v9I/8j699pO38j699e38j699e38j699e38j699e38j699e380H/1/f/kfX11//yPr317fyPr317fyPr317fyPtJ317fyPr317fyoeIpfkTn8bbfxtt/G238bbfxtt/K6Rtvfxtt/G238bbfxtt/G238bbfxtt/H238bbfxtt/G238bbfxtt/K/InN+ROfxtt/G238bbfxtt/G238rqN7b38bbfxtt/G238bbfxtt/G239Tf29v+Ntv422/jbb+Ntv422/jbb+V+Im/ET+Ntv422/jbb+Ntv422/id5/+Ntv422/jbb+Ntv422/oSgXMGPJ2DH/uQFUDHmAvAx/5ffHlK//rn8bbfxtt/G238bbfxtt/K/InN+ROfxtt/G238bbfxtt/G238re29/G238bbfxtt/G2387nxG5aI/qdIlqbIpnn/VL6ihcpZXfG338bbfxtt/G238bbfxtt/K/InN+In8bbfxtt/G238bbfxtt/S3q/n/pbfXvr/pbfXs/9Lb69n/pbfXs/9bkBj6+o2e+uUi1y1C+uv+rALL62n48LfqW/49aLzHX/S2+vfX/S2+vZ/6W3176/6W317P/S2z7P/K/ETfkTn8bbfxtt/G238bbfxtt/C9I+38bbfxtt/G238bbfxWo04F3xG7sPf71I1IRukbhH8Mu6Rt/H238bbfxtt/G238bbfyvyJzfkTn8bbfxtt/G238bbfxtt/Ebb38bbfxtt/G238bbfzuWqcasp76km3LISx5fjvt0jTahCyxztjvlr947r2n38bbfxtt/G238bbfxtt/K/ETfkTn8bbfxtt/G238bbfxtt/K6Rt0jfxtt/G238bbfxtt/G+38MxJa918rtfWpG/jbb+Ntv422/jbb+Ntv422/lfkTm/InP422/jbb+Ntv422/jbb+VvbpG/jbb+Ntv422/jbb+Ntv422/ldRvbqN7+Ntv422/jbb+Ntv422/jbb+V+ROb8RP422/jbb+Ntv422/jbb+V1G9uo3v422/jbb+Ntv422/jbb+Ntv5XSNukb+Ntv422/jbb+Ntv422/jbb+V+Im/InP422/jbb+Ptv422/jbb+X0j7pG/jbb+Ntv422/jb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',
+               'video-quicktime.qt-tag.mov' => 'AAAAFGZ0eXBxdCAgAAACAHF0ICAAAAAId2lkZQAA7JxtZGF0AAABswAQBwAAAbYQYHGCNbfxtt/G+38y9f+v9I/8j699pO38j699e38j699e38j699e38j699e38j699e380H/1/f/kfX11//yPr317fyPr317fyPr317fyPtJ317fyPr317fyoeIpfkTn8bbfxtt/G238bbfxtt/K6Rtvfxtt/G238bbfxtt/G238bbfxtt/H238bbfxtt/G238bbfxtt/K/InN+ROfxtt/G238bbfxtt/G238rqN7b38bbfxtt/G238bbfxtt/G239Tf29v+Ntv422/jbb+Ntv422/jbb+V+Im/ET+Ntv422/jbb+Ntv422/id5/+Ntv422/jbb+Ntv422/oSgXMGPJ2DH/uQFUDHmAvAx/5ffHlK//rn8bbfxtt/G238bbfxtt/K/InN+ROfxtt/G238bbfxtt/G238re29/G238bbfxtt/G2387nxG5aI/qdIlqbIpnn/VL6ihcpZXfG338bbfxtt/G238bbfxtt/K/InN+In8bbfxtt/G238bbfxtt/S3q/n/pbfXvr/pbfXs/9Lb69n/pbfXs/9bkBj6+o2e+uUi1y1C+uv+rALL62n48LfqW/49aLzHX/S2+vfX/S2+vZ/6W3176/6W317P/S2z7P/K/ETfkTn8bbfxtt/G238bbfxtt/C9I+38bbfxtt/G238bbfxWo04F3xG7sPf71I1IRukbhH8Mu6Rt/H238bbfxtt/G238bbfyvyJzfkTn8bbfxtt/G238bbfxtt/Ebb38bbfxtt/G238bbfzuWqcasp76km3LISx5fjvt0jTahCyxztjvlr947r2n38bbfxtt/G238bbfxtt/K/ETfkTn8bbfxtt/G238bbfxtt/K6Rt0jfxtt/G238bbfxtt/G+38MxJa918rtfWpG/jbb+Ntv422/jbb+Ntv422/lfkTm/InP422/jbb+Ntv422/jbb+VvbpG/jbb+Ntv422/jbb+Ntv422/ldRvbqN7+Ntv422/jbb+Ntv422/jbb+V+ROb8RP422/jbb+Ntv422/jbb+V1G9uo3v422/jbb+Ntv422/jbb+Ntv5XSNukb+Ntv422/jbb+Ntv422/jbb+V+Im/InP422/jbb+Ptv422/jbb+X0j7pG/jbb+Ntv422/jb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',
+               'video-theora.notag.ogv' => 'T2dnUwACAAAAAAAAAAAAAAAAAAAAAPzksaYBKoB0aGVvcmEDAgEAFAALAAFAAAC0AAAAAAAeAAAAAQAAAQAAAQADDUAAgE9nZ1MAAgAAAAAAAAAAAQAAAAAAAACXJuN7ATN/RkxBQwEAAAFmTGFDAAAAIgkACQAAAAAAEg4FYiDwAAAAAAAAAAAAAAAAAAAAAAAAAABPZ2dTAAAAAAAAAAAAAAAAAAABAAAAuRBrAgEygXRoZW9yYSMAAABYaXBoLk9yZyBsaWJUaGVvcmEgSSAyMDA3MTAyNSAzIDIgMQAAAABPZ2dTAAAAAAAAAAAAAAEAAAABAAAAuWmlbQEXhAAAEwsAAABMYXZmNTIuMzEuMAAAAABPZ2dTAAAAAAAAAAAAAAAAAAACAAAA2njyiwv/////////////P4J0aGVvcmG+zSj3uc1rGLWpSUoQc5zmMYxSlKQhCDGMYhCEIQhAAAAAAAAAAAAAEfThZC5VSbR2EvVwtJhrlaKpQJZIodBH05m41mQwF0slUpEslEYiEAeDkcDQZDEWiwVigTCURiEQB4OhwMhgLBUJhIIg8GgwFPuZF9aVVVQUEtLRkZBQTw8NzcyMi0tLSgoKCMjIx4eHh4ZGRkZFBQUFBQPDw8PDw8PCgoKCgoKCgoFBQUFBQUFAIQCwoQGCgzPQwMDhMaOjw3Dg0QGCg5RTgOERYdM1dQPhIWJTpEbWdNGCM3QFFocVwxQE5XZ3l4ZUhcX2JwZGdjERIYL2NjY2MSFRpCY2NjYxgaOGNjY2NjL0JjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYxAQEBQYHCAoEBAUGBwgKDAQFBgcICgwQBQYHCAoMEBAGBwgKDBAQEAcICgwQEBAYCAoMEBAQGCAKDBAQEBggIA+L8t9ANMxO+Qo3g6om9uWYi3Ucb4D9yiSJe4NjJfWqpGmZXYuxCBORg9o6mS+cw2tWGxlUpXn27h+SdxDTMrsXYghfIo8NVqDYyXj85dzEro9o8k4T7qqQgxXNU+6qkV2NBGcppQe0eddyQ4GVrMbfOH8V4Xgl52/4TjtMPaPOpImMBdWszKag13wyWkKP7QL0KeNjmXZGgdyg9o865Tba72CuClUYEXxJ/xaLWOQfcIh3Nr/cQtI2GYsrQG6clcih7t51JeqpKhHmcJ0rWbBcbxQiuwNJA5PFD3brv/7JjeWwUg9ngWnWdxxYrMYfAZUcjRqJpZNr/6lLc7I4sPg+Tgmlk2jwW8Bn1dAsrAi0x5Mr/6lLchNaPXnYDaiL/gex8voTcwnZ9LbBWuBNLJrpigPMnd6qkQBJr9e5epxNLtQbnWbCJahuFlYaf4o8jvzhVSUoC6M6yYlGvwsrF5OTS7SPO3DmIQ7j3Ng/0tqKUBFc4YvWsosrHki/tu5Cbaj7MRmHQn/0yWw1FKBHCLKzdefak8z9tQiJc2HQtMnunBcx8SOe6iqkWVi+UPvfAbUT/69M8IxFIMuGKbm0XHem8MAX1rNRAdQ8Nvl1QpxWtzzk7RHpKomkj/NMjCfML51dgQ/nTuLbFc+gFNTS0OHKMJpXtEnmuRhvmDVzDe0nK7GNwEe37g7iBM9olk86qU5mT6Baw3AedmwUTeyyRNYb285XiszBy6j0yXH/HxVStYQB9exgJ8m417RdOYRZWuYDwlbFE3skehazf8KqRS+I3nf5O4zQWCu5uwDUmNqPZZImnRaycwmN9QqpGXJ1nCf43BwjCYoba+y6d2K7SDcvnCTyLD4QVKSN3haH7FJ5WscTjl1EhubhmDShtr7NLlf8KXE4xZtESMkJpdtbjm8798H1qysFEOH+4y6gqFVIdtATS7Sa0c3DOG+AfWn56ji6sKzzCduZY8CkRKAbTS6yaQr+jg9y8WmHfI+sVmLOP8gT3N6gsrqU7hPcRgmbay6SZQuC/3wdCjPDtb8cmMX8AqpORJkwx8gN3B7FaOvkLucRlANtZtJc7136ysVUkK17PuQOH0Y8XfrKzovk7cjDEGjbWbOVRlEKqW4DNo21yxlu+hIHDwvYKJvxFYrSdnS17Oj5EFSlwPRiNtWTTOjC/uw3Qq1qe4jRdDyWQTf/cg4ea7p7zE5Im1EMDOsWUqsi5odOwmlk9j/PsLQ+IfOGN5lufnaPXmcWVrjR0iBNLtJ7RgU1GcFotXwHzj9vOBooJCVtNr75hcCOLvnKssqUsWbqEPmWFKo/dQwC5jw3rLLS8CVM21k0jz5PHaJ7ROH11Ko5ZBolTNtZPY394O0SjPw6w4W2FcDcxhnED5/ypqFqGcdntAzGkzbWWTJ1fWWLvDgxwRR7jcn/XcoKikDIbapmmctDHDt1FWWIfjxGeyXuLRuhWi9QMmmZtriwmn7QK7CmoRfHUnI/Jfbo3nAqpHV/Ccwx5H1oQ0d/oBmiDbVIml0jy9LKy7zcU7nnC34CLKG6A5XhIJpW2umceD92xoLKyd71UKXwxJBtqlaTZ5UQt3Dr0PzCNFf4rsE/K1d2gqG9SmAO10XBb0+9EJeSGZtqlaTZMcP/DlOojWVjepSh4CPoSL2DFkNtUzTOX/2Acp11Bb9W8WIux5SqcEhelYDbUymaZ43J7RCi5gHr5R+srI3fW48qUi36Rz6QIVlZGC8mZNM2Btrjd/1EO06WjjcRnIXTF5gyxNM22tFvsiqApHXditKT//ELiJv4KR7CaUdQE7Dg/y+G9xiz5rLAiJCVtNrH35etqFVJcZd+BGCaVtrpJmiov+D9164YYoNy2xWQ8ziqkIyQlNJm2udF7ljgQ+fA7ZRf2j3rjcT3WK4AFGN/6fmBTULV3gJBmaTNtZcsIkfdhWhe9HH243OhiZJjTNtrKowSXo+VNRAefVlhP29uLeD+KEbieT5zEqpIEJ7/aWVjvqNwFAbasmmeLCZfLd4Nx+nXA0zbamFDLG+aSNAcnsv0JVSInltaw764ECRxKQuTr/vcqpLKyITnw21UML1xli0z9meWxg694pVPrQUAbapWk0mcePJDfcgfu2DKIT+WK9xTUgcOoR4n5V2Avju+WqDAkErSY21zyxibvXf4pqHfzq2AekcXKys83IX5ekYMRtrKTNM8riejgLKyLqFTUEb5cXhlM0zlG2uOEjlbRAebvR/P3wEblI+n9VUjfyAhKO4jixWFyVeNM22phMyx/t6DeL0Fr/7vjwsrBKuGWLTM21TML56OUnRAjhVUlKM3d9REBI4sK3JKF0zC/8bamWLTP5Qtn8PYaiqlARiyscb9krkTKJzbV/8MsWmZdawv69InkkIgeWqaghuc/k5gSCZpmbay5Y92Fe4URor/nDr0HX6ckBtqZTNM5WOF91SmAeOfhRFbuWOPVZ3HCKaiH0t58ICNQkJQ0zbamEzLG+7cP++LFZP86iCMAyxaZm2qZhfdL+n+5WVqahD5Abokii164ddj05KFp/MGWLTM21XML5+90FRS8cWEat0l+QopBvGSQxEA4HQY4M8i2dfcmfGuj/blR36WVvJVVI3jJIYiAcDoMcGeRbOvuTPjXR/tyo79LK3kqqkbxkkMRAOB0GODPItnX3Jnxro/25Ud+llbyVVSKqThP1ACJeCZpmbay5SMcIfFlYt5fei7sjo/3BbHDUpeuX9AsrgPNwuSGDEZTNMzbWW+fg7+RdAfz8+UqllYPqIvW8KA4JC9KNM22pMyxwu7RregsrOVr6fwjcJO2/pAhOj9KGEzLFeaZttbqIlNRSeRA+no7cc+hXZHANxafjLFpmTMLzbW6XqSGoQonqyulUgG8jwD5MvunWjXR/sY4M8peXbhR1GQIUZIEoutYXkyic76f/WKwbaueDLFpnv75EqpKqUBGLKxxv2SuRMonNtX/wyxaZl1rC/r0ieSQgE9nZ1MAAAAAAAAAAAAAAQAAAAIAAACbYE1gAQv/+EYIANkAAABWU09nZ1MAABAAAAAAAAAAAAAAAAMAAAA0udZcAdcUDwqvlIN3J58cng6wGA+BrAZAAUTWAo57OTz6wE8fEcN7DpVI06POk6wFoAAawFHOZYdDKDoXbz03P3n4OAPJA35jgdii2h0MoOhlB5zAAawFHPZzusBEVAtiOJwgiNhA0ioU+bzGsBQABBrAUc/Pjn1gMNvEAuE31gKAAAp3n5NMnTpSoBrDgeFbjcb77paSFkfaNyg8JaS6lVhEU8brcwge5aSq1MgEyCDAZklpLE5JaSxSr7776lZgNl9999on+j9999r/5j6++++w++++H32U4t8AZk9nZ1MAACAAAAAAAAAAAAAAAAQAAABEzdmhAv8UTjpsjZGyO3YFUQVQOZs2bOZz4+4nR5PpED7lfETmQCv0idxKPTHk5GfNjyQpBeCPxFDKi/BjycjPmx5IUgvBH4ihlReACnLvQAAABRQACAAooAACAQoEIAihRQAQUAKIBQT31tewGMLkhYNmMccKbhhb3B1LdFFEXHAbBAx2+5BB18g9K65J5cuEMcDblFH2PNiOMgbQsFosHKSaAfN+KkyBk4hoQu0N8R/RRsBsEOC5bIEG2mgQ4T84dyMLYe4HOz2Q7dHoNh3LhCHLCGsgbHO+7ClVBz8OyESu411xDJs/QXFDYf9rg5O15rAheHILqQiYwiYBzS6lwsCCj3JdiCaDOtupLwBAutLNdP7P+RKR5ABPZ2dTAAAwAAAAAAAAAAAAAAAFAAAAwm0puQP//xhaDhHCOESRHCOH2nE4nEycTj7XPzj1849fOPXxPJ9Y9fOOciAKOncCqACI2BSpEIKrYIhA87CLA1bGAdjYbAdVzOdh3A2BTtkYNfBTx6dQjYjN0GBHQAf8cHECCArKst8lBteI4M9H2Fby36KL3fpAW+NADgHBA0KBjrFR9Rjb74U/6aykmwgZAY9hC7gx9hFFE75nDfpBD587586HCwZ+s+dk06nrPVFWWhfG85JSY40fIIwpjV3hbmc5w4OLznfPnsNfPhjhz0gccYBcZOu4caJEINVzUwVcJp0mndxrJYEVNLBg4dDX45KGO3RNETvqDfU8EWEMiGe44FuA/Uq8z4YeMkw8zw+GOMVIOvAiSbeUHXEfhsKwKOt+nadDQ8xzsSvaqvM4oGZjg5gYlzjLECWK6IBwGxmdsSuxV9PotHzyNHIMCiccurqvtYsJJ5xzztehcmqEZKjkVCRIm1J5YsofnOUi+xE8Abc68ZcYTyTzzz///efrz9/rQzq+kapebz9efyK6//pP/9Icjm8/Xm8wX2+1hGQVMvP15+P5L3m8/fT//68qCpKFCTok6JTRKL9TSknWida1/FTRMpgPU+AXC7t27vO83d53ned4Mnd3ned53ned5u3d53kEK+KlxPq6M/gBEJ5hxSS33tJKOUnPQ7c36JJQ0j/aSRO3UktpaEArve973l73ve974vh8U+M3w2BPZ2dTAAAACQAAAAAAAAEAAAADAAAAQBcE5gf////////N//hGCAHeTgAAAAAAAAAAAAAAAAAAAADmJDKu4pAjFFGELiMh9r5CCh//////////4f///////////h///////////+H///////////4f///////////h/////////QIgUM/8P///////////w////////////D///////////oEQAoZ///////////h//oEQKGf/QIgUM/////41VSMEZSUpVVVVVIwIBgCAYCGFqqqqrCGCGEylVQEQIhTP/9AiBQz9AiBQoczgQQCCAQQKGf+IBEwRhMpVlqSomEYmVhGKioQwIME0IwmLLKUqRhOLBDBciJSORSeiOZU8ZTKjHE7XaN6MfGOMcYpuIOEpRCpzKykMHBhxIoQOwZ3MqcjTMuaX9KaC5Am1RNoiebt580VcrHV0O8sq8y4vU8LixVaDpxekLZ1TZQutRk8ZWQdINvLpNKcNuZhTri/K0WOlJKtK88y52up11FFTEZtFWr5Yb4luVcX4mYLvQy4Ph4XQ8dHi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',
+               'video-theora.comments.ogv' => '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UAKIBQT31tewGMLkhYNmMccKbhhb3B1LdFFEXHAbBAx2+5BB18g9K65J5cuEMcDblFH2PNiOMgbQsFosHKSaAfN+KkyBk4hoQu0N8R/RRsBsEOC5bIEG2mgQ4T84dyMLYe4HOz2Q7dHoNh3LhCHLCGsgbHO+7ClVBz8OyESu411xDJs/QXFDYf9rg5O15rAheHILqQiYwiYBzS6lwsCCj3JdiCaDOtupLwBAutLNdP7P+RKR5ABPZ2dTAAAwAAAAAAAAAAAAAAAFAAAAwm0puQP//xhaDhHCOESRHCOH2nE4nEycTj7XPzj1849fOPXxPJ9Y9fOOciAKOncCqACI2BSpEIKrYIhA87CLA1bGAdjYbAdVzOdh3A2BTtkYNfBTx6dQjYjN0GBHQAf8cHECCArKst8lBteI4M9H2Fby36KL3fpAW+NADgHBA0KBjrFR9Rjb74U/6aykmwgZAY9hC7gx9hFFE75nDfpBD587586HCwZ+s+dk06nrPVFWWhfG85JSY40fIIwpjV3hbmc5w4OLznfPnsNfPhjhz0gccYBcZOu4caJEINVzUwVcJp0mndxrJYEVNLBg4dDX45KGO3RNETvqDfU8EWEMiGe44FuA/Uq8z4YeMkw8zw+GOMVIOvAiSbeUHXEfhsKwKOt+nadDQ8xzsSvaqvM4oGZjg5gYlzjLECWK6IBwGxmdsSuxV9PotHzyNHIMCiccurqvtYsJJ5xzztehcmqEZKjkVCRIm1J5YsofnOUi+xE8Abc68ZcYTyTzzz///efrz9/rQzq+kapebz9efyK6//pP/9Icjm8/Xm8wX2+1hGQVMvP15+P5L3m8/fT//68qCpKFCTok6JTRKL9TSknWida1/FTRMpgPU+AXC7t27vO83d53ned4Mnd3ned53ned5u3d53kEK+KlxPq6M/gBEJ5hxSS33tJKOUnPQ7c36JJQ0j/aSRO3UktpaEArve973l73ve974vh8U+M3w2BPZ2dTAAAACQAAAAAAAAEAAAADAAAAQBcE5gf////////N//hGCAHeTgAAAAAAAAAAAAAAAAAAAADmJDKu4pAjFFGELiMh9r5CCh//////////4f///////////h///////////+H///////////4f///////////h/////////QIgUM/8P///////////w////////////D///////////oEQAoZ///////////h//oEQKGf/QIgUM/////41VSMEZSUpVVVVVIwIBgCAYCGFqqqqrCGCGEylVQEQIhTP/9AiBQz9AiBQoczgQQCCAQQKGf+IBEwRhMpVlqSomEYmVhGKioQwIME0IwmLLKUqRhOLBDBciJSORSeiOZU8ZTKjHE7XaN6MfGOMcYpuIOEpRCpzKykMHBhxIoQOwZ3MqcjTMuaX9KaC5Am1RNoiebt580VcrHV0O8sq8y4vU8LixVaDpxekLZ1TZQutRk8ZWQdINvLpNKcNuZhTri/K0WOlJKtK88y52up11FFTEZtFWr5Yb4luVcX4mYLvQy4Ph4XQ8dHiqmXEWgUsfr7Yte+FmdSR7F2XJ/3FX+gRYC/POE+7d6ZCinK/DEV2Z3Vbb+nvPVSwxXp3CbS1BHixdYmNddNS1EBdVy8kms1atb9nr7ZDA/LtNWtU35I0qFRecd9a6Cn+i7GWJrqLn4kDIq9OOJwqmaQmq7K+ZDkTfXSn9Nf7m0R8EJEfn6W1HMFQZcWeBFIdfZAY7XLcXQYmvGVSJGOSSQzloIbh50p630Nxr9xiDcCkCTWwgtcXtLddgyk3RBsDFJwVx+kTeWn5/LJp0bTgMPBUCzxKJrgKirb5PSkc0nqwqXkvzll1LrYcwULTE4yrSudiUAlAV425YS4UAL0WBhAJuqLN76TCSEwqmYU5esvb7jpKoclgfA/EiMUUNwpAgfg9S/S1ITVTHYaAp5CoXrPdsDDEJcColyd2A6yBMeslQQdgwNi4fo+RJl7XKbqwqxNbtD9HyTLGccAxItDBIx907fjNGB9Vtgo8C5f2VEayV+sBXjLMlYvGso9DI0ZWx9uZtEU6lUhHJipEnTXW/jxIye9fd7mMnNRCdigURCNK4m62N5D2VSs3oaUbMXJ2qvVtmz54lyF42vJVBjOB5dGHbQpTXKYJ5UGNXLxPziBE3xQJCY8AmueXK++hNXTQ+sZL/d8kWkyFViAtvhQmmyzREnqvWyKL3vtk4ePFONpiU1EuYS87Yh6ix3HGu3km3c+oFPIKd18pO+6lvOcTNQVc77rYXl6vnW+I5hy0YDWEzoH8wYp7x5E4uCzb0malreUyKMlxupNP9nS5YODG+YEslnuTzc5rmj2CGpRtxGT7UCZZZRN1qGgT2rbGwcf96CI7qkmaoPAerAkWV3+SeJ15vfs+rBebK0SDONYz0uSYYB5JMQCnAhq2P4xNiMESSx6kgGsR4qDPNDFKNVFTJuEul+s4pRAiAmXATVQnjxKpJ6EGbJIVZvfJUiiWkhwlhSLFbi7oBlhdoys6f44i8/Gy+LD9bBNureahWSAbzENZGNipcR8EvTv1jOqMYBfgXhuUbeOkKoM0cJ6AddAdUrmCPp7wVJhtOTPSuway3RZjtccMJGDtkCj80rj3o2RXGxXFCEuWkNUm3Dk9tyqYOClqO0JmFpRu8la8I7cgV6Rj2ukKcppylQJbnzbaRdUU7SCJi6U2CxqJQkUhS+mE91wh69T+2mOQ2OSm5XVyUeZepHCRYsfsJUZWtm7bBCj217CPMwN/aamFmew0DaKcT7TQCoccZI5uuvopHCpnJstgxodSEA2xkr0kXbR89ck0ny3e8VKERhNrXiKeGyGMD2mxnbLNIH2VLLmIRZ8qOUPMXzpnzGuFy/BgT7BCYyc2oR8bC1hG3prSZzWi4JBM2u0u3ypPEn9uok8kVjShA4scX4fuJTWSuDzP86EYlaaFSNKhkj3OWi6E4eQ2WIOyCCivxIojli6P9AKfMMt+puqhqqiIplP8rf6XsK2ehEp9oxsf4K8K+dxxfEbBngyrdE19Xk1fznLRdMiy3Re24UAceFLB2ZKj6FCb3fgUfqbom8/Hz8JHEwiV7b/+OrAioqMcwFTDRxG5hzM19rASP0/gdFltV9EsKVPNGl2UlZIIxJHEJhqIz8acYG5Y29IeqnO3H85k6Xyy3Zp1R19PceuYXHFmWKOTH6ngDuCg3qpveXo7eVeVYNtlldJE/WR30zgWmTHR0I4YbsOTHOmlIryR12uykW/S1+y66a0+X1SfaFRp3wpoSMIECpQscZyZsrhof8fh1ce+kKXB/mmIykPu1cdV7+xY64WAFGBxwmQ3J5i2yk9nZ1MAAEAAAAAAAAAAAAAAAAYAAADWcidQA///EFwOEcIqIqIqIy9vjOJxNmzZn2OfnHr5x6+J8o9elPjHr8Hcc5EhyIfABOU7gBABI2BIAACtgigAYBgRRAAsWwATAEAAoIj1rltRYcQwFhznwDvzLA0Iot1xFNZXCEc65xkcYrcziOiisL2wUiLFugcQhcRYt5EL4rH3mNCDgBezgYWBxA/QIY48jjX79eig6/ClHH5rb7m444uKvEf7gzjeH3NJ/gsYvD6JpKY/wpMck0TafXi5xDhY78QcfhX6e5MUH++HmmVxdgYEcBHEAjzWIgDGNXheeso8+EfFTpvNIKcx5UghBb2Ec/b/o9B6QelScsIcPKOAhkebHO4hag0hzXJU9Dzz58lg+b5jnjRJwMZ/JB8HAVYTRiOMgZEPzZa49NhoVL3ixzPRI4GLiBiJLFNFWzSHLhoC0gYmSKerx4uyV4hxpAAZ1I1uCazQRPnpSni7JUvC7DWteAxTpgjiqTJ+BwiBPAdNsSxuq8uN9Fsa7UJE8o6eUh1sg5nP/6z768w9P///8g/fXmJD8Tr8T8f/6Uc//fffYArecgPT68/Xmf8z6Xm880P05WgJCjl0VPh+hlhVLAa3PV7SL7SKpBO7du7dN3bnI1u7d27t07ducjfB/OAfn4H2aUD2HM/wSd/6onj+KdUrFr/SWQooootcMOjh3sqa99Tqd5vh8Pifj4fD4NHMZo/9sABPZ2dTAABQAAAAAAAAAAAAAAAHAAAASvNZSQP//0BbDhHCKiJIjhHCcIseZxOJsycTj4XPzj1849fEw8R6+ZhX6R6+cc5GB1kVlhicH67qMHr4YZjBOX4mAVABUH3jUNMbAxV98EQAHwF8zI+sAAfN99sCZnwCRBmNYKmD77qZ4U3g/QhC6NoAfLP1zilT+AemT0ko4uddwGjnYlxzuI4q2u1YFF76R6ebIYEIBE2HH9sTGmpy1ZI4VSTCwhyxII64pUGyOuxWFYVh/nziKRj5xGcQ44H6Jzszjecz4qcdG/4vOTNPNNHwMNUSxXjnR52Xzrm4yfo5hGsUBxHBviLSsOdwaABCDELz/5UlZBPqVay1WHFKjTpknRigF1xwXY6IcU4lYBY5YQcyJk+0AJXAHMyFeUY4FJxGczORdrDHDWkYRaKI+hGL9aYjBaELj4YIjh6UIfosPdFewgpClHQx2BnHwqcIF1yVi4P7Q/xCNjIpBdjsQ8w3L/50eVbmTzCRB7LBe0UT7Ih/JIg0wTgZYJC0mk08GyMJ7N376mZE4SwJE6PdctXEhRuT7SYRmQRAKBJ6IxgWtYg8nAk0TExNT8cfQmiIOBCSXKERz/m//n7777felZn/6Ny2333kjfcffQm/sH/6R/+++rff/b4/8GrJNsF9998Nx///+QrWVsV+g120pGTukrJKyakgrJJIGMXRCM5LgakqAhBSjRl2HTp06dOnTp06D3SLp06p06dOnTqigSRJpv5NLTWD7JJKSTqacjpEPif5bkn3aArg8B+/QwUBLhLg0XBsT2dnUwAAYAAAAAAAAAAAAAAACAAAAHEjIjUD//9pXA4RwioiKjhHB6S+JxOJs2cTj0c/OPXzj18SnmPXyfhHr5xzlPEzzacVI3J9yjhwWxhUBAp8lEzBYgiBfb8D4YpFQJUJ98BVEAEH3wCgAfCHwKqkA96ueXwDLuvgBddT4AAZLKzG/y71w5eGW3YjPQDjQz3ELO4QgrKkFPJ40NiF2Tjh1WyN0ejSOHHEIYLDghG+oHPzNYjx6kMUvSV6YzhWWFg/mwCOhkBDIMi/Kw4QI++hw3M/+5nGA8oOq/T3BxGnUgVTW6dGaMbxFGFNMUUeb+mrom3Nw+5uB0fv6K8Ubm41+onPoxoo+/voVM/ZiEHQhHGpkQjDTheVl8cPhj8fuhgCr0xvJvb27lsD+8pKAU1XwMm+D9C7zeHorAp4I6BHQOAcEdcYJR5XMZ4pB/opAjg/3UflOs6zxZi2H6jm1vavV3V0U03iHAWaepsdwsdGZAi4WHX7DvdD8fPQS0n5jsYbJIH2w896XuEtEtIn5s72KZmWJnTFdQgNWpDphYm1OtQXjaBfBXGo0fqI0FBhdqs1qc+Bg41pzvcFVg/rVMurVr9eDMk7mimIAEGEAmteAxykS3qsAFMVew2oHO0A8DwBL////9998dDr/+hS8/ffNJQGn4/UrQlp8n337/0/Iz2pQKy4c9OmrjT/fTm1//K+P/6uQQSKY0dRYJUmqnRVDCIdZlAYhOZqbsvVyLI2RqR+vjt/b5uUFdz7lnb/ATG6JBMlACC+/mfRa8AkgLLehzpA/4fjHENGBYH0/QQR2DBTH54uUocUX2a/icTXU8LtQxR2tSHw1UonN9bfDYBX23rAT2dnUwAAABIAAAAAAAABAAAABAAAABlWrVkM//////////////+l//hGCALXThqoGg4YcBOND8gOawiwAFLmJdCtXJx66CGUXaiif/8CARt+bBR2STrqZcEWPAJwjQraSl//5757zt9AMk5qClqGfkgKOXWC0kBWnYmzpq6Q91CkvGyoiYejJg0gtpUUOAZ/PGTcjHOMWxLfOgg3AZuMHdBtxILlWhyjPjv5IkJOTQuqV2dMMzwrkM1ouIX0SGaRpFpEhJBxKTKEhlQpplXpCBgSgsYtB6AUm5l7UkK2IDVNtsRT5FHBZTWr7RQqoZcFQ9V94R92F4NdPmJWrKTalF4lN4ZW3t9dHBNXkaD4C/Q8bglLuqGbMSXvjOM8/wjZrL0adBAbuKo4RIZ6QkUSy478Qbygw61wkOscCSFUviUQqmE9qoqReFeKYDLJakEKk0GBwxMEuFmT5HTVQFPMmsRR6wWTzGgUQaK/f7Yh6yskdmYVSLpwqD2irau5BFxFV+fAGOSs+HLPjSdPmw2NhLmVw9FbQ6boMLqHJSPL78Vq1bvrKvmKEecCRgypPQn2gTAVJz97Pk8B92vg9LAiEVFQQyp6gd9jQUMmY8i+BGhbKOqpSRPJH0XKZ0QBvi/HGx8+hpITp5HQrApzlJ8rX+vMWEnYslatBUBGn8GfV+YPSIvPVhbdDmKKR6T7VXq3QXc1DFkYHkUcUR/LIuPVEX6eix4NcaYKYbAmvWMzBizcM5A4G+bSVJ9K/flg9LIE6jw6CoGyxT2NAo6WkPd53iMAmhROvO9Km4WGhnKQc8AhD4W1GlOTN9j6yO6yYPh7HmSPb2El7EEN9raRg0hbBVlkVfeNCh5x2iHKvQtVxMQRE9ZGAR9Ln+doV5+hgPj7O/d98Sd8JVDW26yXSEjYw5O0XIwyzNF2fl4kUXGyi9wqURX/URQNxNS78kq74ovZQKFaG6YoUUgQtZQagutHb5frzhgwM6XMa2WAV2Q9bkBBFFTtFyQklM2QVvTExwjqLqwSEmJPc2PWNv8ar0pTRpsncAyAPiJ6EZ6J+B5yoCcvCKg1pjwXEavvlYUoE68ghfzL6VQELC78ZnClVruPigRiSlq0JfLyBHuCMZbwoPQlbel7mltTFZwXT3UJWaYTmtL8ZMPAFACjEIxjLDa8Uof5CMZQswxXIRq601DsulZGthsg1z/CdUKUo0dfmp3Fu+ZIUKPiEb/3syJynS9cJslwIkxkHwLBjfirwheTRGep+qVdzElELFVyYSZxDSHgtJ220U0E1GDz4UpsAsy6DokLpCpBtW9OYkweIaSKETDQxlj7TN8aeJZ+1z8WCEnhDrBQ759G4dwZnLNKU0usnzJP6wM+2YfBcAQUO/5EicOvfg2Qwb6ksV0fQELOeUISc4R2wtcH5dze2MXAX2cs5gFxHHjqhzFD1TKZc0jC1mDpBo1lm5OhCBsxCRYkc/6U0GMoj7GcMHLx8gaUlYlW3Kc/N3BZl9CcoALwLkEhpIBRExF5T8iVgDYxnAeq4oRtg7o1xrGXfQIzDV3UUDYdOsdejcoDltSRUtQRiAvUXcZ2TjNHAoME10LYlrDkd5DiAdcH1fVbB5AOIJOL3GpIPtHy+DnaE9op7nEG3CLXrxVRd0TtcpG4GiFAELBgQoQe4N4ihS1mWPWTMKgBpBWZUF9RseJ1wJ06Wizhm0k3ATLBTHU+c73PKR3OTDxzcju2wchKS7eX6UD0pwF1ZhvJ6ZLIpAdM0K5p+dJGemp5/STMgRq/B+bRDEFUz2tUVcJfCuSj0xdMjYaeXH69lPEHe1HaJcIApRe5vNAQ81NeUCXH1amTpqpyXjn4BGlH5ayUYhJTVN3WHK3mWREHIqrZukdC/0wkIs95EieJmYANuJKlBQdPWSlt40rL5shIghT8qRZwSwY9QEO2ZNPm0D0xo5SlqEva6f4nuH+AZ6Z4ASr/V3qDSEbjg53VWJYpo6yszCmImzk2KwpEbVyadtRgiyP37cGrxTNegcFEqGN6IElUYn2q+6YtoU4Xyy3eZNeSLPbNikLp3W5RBFxd7jZkZq29QLQ101oqrLtscklSKzVZtMx9+lhG8KsCUW1JsYmPTd6xs/PCzw4QnrpIQf8GpQu28Oo22SHPaGBjkV6s8MM3SI9hXEyrZ9c5dMvqpMt+ABXADzgAnvPDlt1YFmUCRVe4V0T1ZC/1zcGZhJY74gxP82gbq+zI251SEtobclecSzp8InJLViTVnk/wFKR3xE/rb8p0NZcml0CDGVRCjTtCEOj2hsTJaQYHOFMhqfarpkZhZIKgiuSiO0RhOfDNWsgm5cRbWFLo+GFXeEYRGFWTOAQtbGwx+5EjwEDpA0zOyDoePsI3LmhU89l54WbYkkxXVwOMXNMk80Kco0/Dttwp1kVgu66PsnUemKKBwYCHOLgjfDLoLb/XgzLEVSOJ+3ZHGKF4TAt7nM/JBzCuMdQK4rKqHED0MJPjcExaiTzobT/fyi7Tf3tYIP1ibIfZUJPLLf63yaTIyJ2XCY/QRo2ONyhFdHqnXlzi1NC1LSfCvALjqJEK2QeVma1rKkB/fdpiwEXhkLOKgSPOyru9Xr46HAfEuxiWVRw7sXdbwWRwXxsjg5szC108ugp5aZYKnkuHCiWERlxEWdSV19giso9BISTzq+In6kQFFgX9HjN4YZ22xl5c5Hdkdtib8dtUepvJoZY1sglYUXd09xbR3kA7tXbWQot2moUWtLSnbPdqyYBATcrwhl6HgUNWyuVWmsmQZxjqiocSyy5LR4MZHZ8t7AfmaH4j21syWPdOykmsjAiaqJc4E7chTjZ9Sk9WnJNLYcQi3yueVZYsmVkpGWScei9yLXbku2veZ1Ca6pfJc5Q2ksbmmVp3O1ZAgCNIDOuYz3nLUNFZ1dRkKENh6Vy+kKibLi3GuhYgWvqLzLVO3mEYLrvuVPo9JQgQpE7HjRaiEnR5ggt1zD+imBEjfu+VUSw1A+rjLohy8lVJEO0mQEtSKeClg8DfcFkyAiUOpRmeUeqqMDNvUCqOiczrkthMyI5pDGJiBRxmSdOtehKG1BQ5RTWndq2SwMuNT2JqEQt4R8xuM4SY4knRoAW8Sfot4HyNiUdvym6XBLR0ZYSc09DH9Z4yziuKD52NSs27V0RcN2YdRkcckh+Yvnn3ryGxKD0rCfBhR92VOnThADubRezTpbCGpZiyPbxChqiIMeQozLvG15TbWWYCYckoMpMOYorBrEMDIpCZpWLcwUncW4Opby9WG5tEF9IIp0ANAurCfd0yidymPyKSI46SCEUeXIBE/cCcJ68CMe4wZWyrFMCZWiHY09f0HiGWz23rESRccQYBbbheInGiTOZnL7BGEX4OAjiPY9D/F8xnN4LwuhZxXEAlaRTSV8CDjJRTxD8OvdI4XqRlvx6gBUHAe5r9JzdWPtyNuXuiT5mn0KhhDx00y4n1c6IuhxSvz0nnH0y2F3YFFfgp8WUOU78bNHvD2ye7TziO9TO58KOoj4szGgR1mgWFcwh2t6JL19GFK+Unn1LeY4cUV9PD+mvLEMDY6mEVW+PfweNMWfb2lL/9jSvzKVzyGOmjQljc9T1+Xrs35S/yvjmoQnoSObsvymaUDaCCv29NTLFbNaXEWnxXY9RAg4fjbV9UQ2u+x0lhRSyrthuVPbJd3vyWnxuYQ/4RPp3p+ezpmmtzW2yJsSyH6z2olckUNoEXmJFNm5FCwEJycc1m055FJRFOFqkuuyWWclSxKgYpdUMVTeCHGYZRnGc/anGOwBojsMwzDUW6L65THgOg83qv1dSRbCbIUoNW+24WBnNeLFbU/DVE3hmARNxq+gzdNFw8LopgSBHJxICB2IpxO/Ehk8Hmok0Jyxr4QxGmNvZhNAupjVJqBQtFy+mscf0iO72WsDuckqDavOXWKFAM+km5aWIGlfXQyLZ55wfrt7bbBT0FZc9t45xl+vdbujrs4oIa76spTo1tZYrvvUF1RnTZkGZ2VfESEAZsT2dnUwAAcAAAAAAAAAAAAAAACQAAAFa517ED//96XA4RwioiojhHCehHgcTibNnE49XPzj1849fY8x69P0j18q5yPSPs4vmfciioqDjEjaU+SpTUDkoWHB8D4YhIAICgCkAqgUEUQHn2QRs+LS2BfS1fb42rK2oAlV982szBt9gXdSPP1HrRLA/RYc4eeIZ4hkGYlUnB5fDoYGg7iLeUPxR7CCsKw1XEI8rnYCwEoHk3wQgEWxPTU0r5inBBXppp0Vno/cEAu4QyOeeOIsM/0UVh9b5bgg1vW0c44ji+tiz7iCERUFuRzzvRGgMCmn5vVw1ej5Joy9WP3J5wQhAgzNHRmleisC3EEWBcDvJhaeFhifKlUmmjVYXkEZ5VNZZUGOj8u/N2z4v1SKpWD1Mn0r3v4h/4V2eoX6rIrLIClc++XVGhdHFztcOc6EdnheESYzWQjWgtCKA58uLBfyNGw/Y/5J6S3IF3EDHQg8xwQIt0IXt16KtsWR/sRyDYCPtxSQ/fzOQxNYIMsV1oP2vliuoQ0wAWL6FPKSlPPF48cF+ktQj5g1AZ/3EHasdx3HcNfbVrGmPiXDEumoREgyW3w8ZRIj2nxPlPCNIkGeXG2+2arWAIsE58GfezgRImE8B+doe7///8H7776a0Mj/Q6a++++/vP2h+L7+Sy/uGVx9999OR9SV+A/P2Zeb79/Pz+/JlKP/z8/8qKDU/IVEmilUUqbCwFhnIsDUAk1HkxIghwggO7cm7du3ZO7d3ned5u3ac53bxNwH0qeBxwJxbn5xQQW7mg2BiSr/fZcO1HKuN3RooroKKfoafJoJoOapYoYwUUXVEBOJ2uoNu97xb7p8Pjb4fL5geuPhLZJp4dUhx2pWwfvWBPZ2dTAACAAAAAAAAAAAAAAAAKAAAAg1o6IgP//6JdDhHCKiOEcI4TBGS+BxOJs4nE493Pzj1849fY8x6+OnXzjnIy6+zwCGT5iAMfgfZ00HSH3A9PwATlO4pVQKEloKoAAKrQQEAYBA1aMAaFWhVJYASiwENUzvK1CteWC4jiBcfljGAb4hfcoum/MSTyUSw6hAgwnPPPhFJv5vf1z/3p6v4ItpQg2bNmWLynAAXCqVTIzI8h0Fo9aTOjLk7Bgp2YimTGH3oXoPsi8piLZwd24KeHXOHmBDrJRq8rj0ODR23jmk+1v3o9vEa/PajTKummeZ5MT9Uf1auk6zLvIySKtVq/B6O3p02+x9hK8kMzSsEfoM0cWDLFzfO1MoUmve9Mj666T+4dxDUn0M3BzNqzQPosiwaWvpObff/3++TvsArmLlLOC/ZPa+algDpw28ESfgHoxz6+0mxT82rC5cH8A3m4/5Z6qfY+zYEkLQUH34BRogDqXM2wb+FxC/69gsW+iDBfvDEPLO/OfrOkACP9aO9rWEHWG5uF7VwTQImpXqd7eCPHp1NHlEKU3BYnHqs1s68mJ5bXAZDbt2Jac7sfkl7SOliWCf6wDsi116vi9vaFjVhoWg85TV17q1exuLzXFr/Wv6m9ZrHnfkUZaD6j/vKdTwTG68IOrPWtU99zvvnnmZWr1aod++kd9nzzM+erUQfVqE59PR70Z3Jk6H6Oj31Fs9A88pPPfc7FtTyH25y7AmrQwkmhhwKgO5AOJnNa3KYmJgkaxKu8PYflBO0NxbvUWidu3bt2nbswfydoa9o0E7rRAnflPI6PVoJWnHGNwecJEqjQgqMsESSMxl9VNNCs4QVMBfSFSVUDjii0GiggyFFgGSFFFahCekdaJHatk3hiJYjEnmbgJevXgBRrNKaZxbULL0zwTcEaasBPZ2dTAACQAAAAAAAAAAAAAAALAAAALCB/qwP//5NdDhHCKiJIjhHCZgizwOJxNmTicfI5+ceviEO/YFOwp18Ty/SPXzjnIx5fZ8HD5H1MPsB8MAQBBJ98BKgAQlBEAAAAFD4A+hKgFR8AJBCIfBO9X+iK7yL7IlCDZvyDJQbBcXBgIVnRbbb5iSd3iACAX6EMP4wAYTmbX9B1egPVeuwt+mwAvswDyICQiYDouH3qaxnDaOr2Jtnt21L2qb55OG3J71DDYvfnR6v7571/4e6l+RmR6+oDL6gi47zzzZP2XLm/OwJqvO/kuI0NYeVbpNtsVZnJe3up3prJyOTMGrTWT4B2eaq50O7Ijq50ae1HmRAhG+IXAwB9m6ikFopnPI0eP4JX92YnzGk5umZuUE+i+fUrtIPwjDm73GxnLNK9qEcBHNmzYgRgEeVlfNUuH59FweGsnT2yAOkoXRlEbM3PGHRsphhi9CyEWrNTv7Fzbi4p+zkct/zdoR6Z0e9OvixAx347Wxagftni2Y1okMT/9fvqaAMV2jY4QejrBMKYKOdQwQU2NPBi2XgldAPXrqExsvcdlhMaK2bLG7ZN6hXUlZbRVcwBxTaDz01N62lv9ACqgQbIHcu1JM5DFLFKOiOq4CJAiP/2/jxYeSecJ5RxszgJ/z/ebzefv/zpMkzOjCyJuGRZGJDSxOh+P9KyZFloh///4PyB//99Pp9X//+D77779/vobQGXw5IxWoO8wCE2CGKBWsE7SN58EXwnmUhOP60TW+f+AO3dmsLQejxagiAkA7t26Wm6bjFNgD29tEfe9s++0snrbKfXE/7sT5zKUgw5iSwK60w+IA/iEeqHnkXDBGgeJJUkKLgt9ArAo5u1wnGC4KHC+zh7b4j4rz4474tPfjgJ1h50ZMtbYQBPZ2dTAAAAGwAAAAAAAAEAAAAFAAAAspfpKgz//////////////+f/+EYIA9BO8rDyefHv8NPwtvJO8oTwzeYkPaeItia0shmdMoMh/gKJHXow1FfSC2+VgKbNj0x5q+mKRBVm2uA0B9narxeuSeJLYUzxCU2U9FbtDv9wce+Hh61VQRMu+OpqxEn3WU8zfjXKfIs3YVWSuwmDb1aYt65jtjBouMB54jPSflgk4xiI4ZnpyMovZOFPppQiV8bTljpmgkt5WIhlMxjUsBc7hOSJ14NTQleTr/34UpdSDChfdH9QRdE2zaBStIrXo3JaWyJLAR6UY7Jn6x9oPjSrs9JF/rrV72G1G4iZYk7DGX0UrLTJAvkJEDlMojTZediU+kzAC+INRwNAvwpBRWHNTiD0x8sdML5uU3hKL1HIuDk0gb7yApgic7jWpb9FW+s4Md3dCEF1J6zZQKTsan1uXOaAFyzFNZfKYO7nKifRXHs6BFrr4IGshJUUQzZ1Dm5NFlD/OsZ+3WdwcbnX8eqcD22ZQZiWmSKYEJmTH6DXtF1jd/O61UVI2NF7HTPN52JYYroI2Xu2RNBkZKj1Mr5PSuSMkHfeoP+D3SlTg+D9kXEXZ4TQE+DxDWlbH5CeroEeoLvU5U0AfUONkwZ8MKIPY7IH4I8SiZyW3T5FCm8YXB7qwViHJ+MP1hzm1eoWWM0YF/VvBi0FSO4Q73o21JU5MTbq6Tc5pfCGipigrCvAIIfbYSj2il81F1DY404vhdEmZoNqYcEXds9nc9BcJ2i6rJ2Yhilj/hI/ugabiPM2EvJUEqNJR0L38+/TG2x0EhErZZwEZ+h1QQsTPxAxQ9STEkwk9CII2pJIpIq0CP7A4xNV0o90WK99orO/qJF55B0yONtiQpmtROkgpt6Tka0XuVD2c5e6DMM3NNf3b6BJc2tAuYjW0aU9J6ypYUWoYpb1DYGvMkG0S4idiiTkUZZJqbkQpRhIA4So0+mFhhy0GTXhZR2w7mdnAvROZds5b8PHVGeucTfhWZNty67yizyHQRuHMRMmplOJsSGGbafhj13HB/gwXUF88l+Gs86UzsWecOln1RXcqRAjLARr1CPsaRmblk9b9dapmdfYDvcgLmZZqPuM0enLqOlCz3V0gyQuZkW7rvR81LNcjTTpFzJ5Ucr+GZIITW5S9xmwJTMDMeRJxv8Mq3THfImWTdLgLGOLYIsGXVGYmtCz8hZJfa4WKS5eU9uFoxUsvdDKF4dmvKLlaRPk1ucqtCt459X+kla4gZjqvNJU6gScbQ3+YGtYWjvja4+qxYbrOLaWvFZrZ0QYRR9dMaE+gusOsXoJh/j5QioCHDQ3JrU48nQuBCRFII7lt1Zgaao10AxgDNH2Y+PhLHCmHF40K02FLBTIL5dG5UJTCEhEDdU+IQl4E598aYpEKkPcO+IFH72EYeGw+UEhO5rIt7tnmbnZNmGsB4Ue7Wg0IPc6KTUscQTS2JTureQVLw3kkqLw/7Bgq0ouia9a7ZflV/cijiTSLz2OKnl5XkUBmUOLnW3IyIHZoDapntbZkLBI/7r87nh+9CFJzyaREjyClWvkXaGhRVWGLDDvSG9X/ldFxdmkIL8xQ0HiJx2Ilpk5U7d/5VYp6URdXYArqAqfcbV5PEbm4RSjHcjuRD7cZRbGom6nE+MYIgJq173sjDceKWtXYRbizWDx6zuVmDK3CmtRaTZFUfZEqMQVqZDKA57RAdP60kDh9IgHUldZo9DnYAzCdaqruWHI2ekq8CWkkacqGD06XiRUjvX2YUbf0EswwOJJYWO7bc2Gpho3Iuu7Y9384SuRjWXuNj1EW+2qbGh9DE3tstSktFXorBXKZmP9cg5YuuI90r5JhkKQNl5Yrzt4A22qYFqqjBNQscSFMCGm5HpBi7kFrzpy3LF0Ugmy/vMin6uwuLDSTNnbh4oD7ngNo/de8WeJ7GaAjAnw9ayHKhJKhAxgxyWxVbUJN7ECEU8DHXYdU8A4L5iyS4lD5idCG90cQ5f0LzlVPTwdCH5tyjVD7i+XcIjIglZgwvOk1JOV+ypundegf5Fy9FJvSYi0gswvYpMaMiJYuKZ9LaFGWQiT4/+0yirGHh9veT7f+spWo2XpVIoaDMkiyG1ifxqy07SSMq0Xfn5qhLhT1U9wNbgFFOYnWjULQVPYARIx6siGri5BTR/DOkgHeD0oea46iyqm3eIE2ze7R5CLUIay4gJwxklZz+KejtLQDWG/9LkDkeUY0n2AiwNqgJHCAekfkWiKtkSjKP5ZWDYniSuLTpqkijCeaopyLnL8ylack7TmwoQKuXEniuB0Tts5/YhiTWzRu/URo8Il1mZlLiLmCIUrTaJ7y5H2GU63ML5rYIyl9cg17Q9SIovz51pXc1ahn8EnZslpn0ZBpR2Njo4CKHrABGgcYdO9ANiFLJfqgJAFvMcM2fMPQUeZ58iDJhrTdDoGiqiOBonEZFsBtsiUXpeg3JbAc7n/iIiJ9MFuA9zq7sYvWFAI6KMVEe0MOth0HTOkx9DW0FtvZlnaLQQ8L7lmTjcY19gan7EWc7hfS6cdSD7EqqQjJxadoFUqmabqdo8HEqUOGEHDUNRmPlzN4pWiDpqqzLGWeDFO+fedUGO9TNUePqiQz1PkfwesshRXYYgKmgAgaiNJ+5L/mnCv188bsLqIvUF9n+HdhIcAim6JorsOXT8sWTKlSzjPrOUozSFujgdnJY6T3yXvx9v95Jlasp8I3bZ97C/qPROP3CbobtVP1MlxMnI1RRE5I+h3+PNqAiB8zGS2wnkc0RLHP3Zk3JF8eu+lVdxVyKXM0rkGnolsZBf6DJnVHWWl3GSs9aIsYqqFCel/sM3TxKeEIgO8dQwkokgppk/0c16xn2clNKYoSQFvVle46dHOoSrl2Xe+mWM/iydI+wc6zGC9Z6tCPR6Ws15Z4tqcCTDVYhdJ+Uig27svLRFgio2Ck4s7MdNNz9xuHlRt1TKU/pZipIrF2a9DlbRSW1uyfol+3/qMQKLnVHE90XaOxKOQxlMTejrRBVVHPQhVDSPqMQUckBiSfmDOIWAQ8SV4zhGEVEuRWDnisPkTY6JdDADOFHFCEHX0ujgl+OsIQNULuVUS8eUXY/50C6MAgCNJRDRlAK4b6fAYp3GSnoVDOeUP1Zg/m0EWeizBrm8JkVZWJo5XJdR8JT7aYn0QK9KVi5WaWPOQlKyOhAymCskQToqfRKupwvJBlh8O6FnRAdlU7SCLu2uoVs1JCTCkzK+T8uqApqTVORhQiNsNCdOduKg/hoaeq/Rb6Y0r4nJzXnLLty1uC8q15UzYor9khaEu4paMGhJX7S/21b9M3o06SpSY9lU93KLiipuypfZDDl9lSM1DMFFd3JRFSbqUbdJJV7z5DhsxhVjpKXychMUnrOL229ZpaL13YsfRooQJ0/wphM+AsqdJYa9QNcqJqmdiSGfV7EtS7GQ83076KlKO7RWDuimQ04vAu3eI/uKeqaSfHLLmzRBF9JIffvVbIiUCAmUl3cHep59m2ibZO5/zkE+5BsI/Zp5tqGUaWIWGCEDUkGYTvpW3lh2qywhhqcvDAFsFM1nUDdbGlEiq6SoTN+LFOwUZD/MzcrE4E/jbIHMLIRUoE/97WaQnLFyDgZaM0V3reoy9aEkmlIpIjDZgm4kxby1byluhQEuXdWCN7FeMxSC7yZh4nvETsCtvrT1o70xp6Kp7NEmbm2epS9pKcYyeJ57GhCiFcc9/Ze65qG78NlS04PkXLyR9V8pJuT0XPrE4eeokFptauZ9NKcOzQnliOX7lkUSPf7WdsEW0pamcnI4CocmSc4p6ocFvaHE9UW9FeKwUlE9m2EhQ+amCARSKNNqLKz7YJSMiYBM6p2Sf+sirlXIzvr8jrnuiKjnYWUYq7LFunPF8Epm5GkB66Wt5/bAiTkr729k9Z/3WfYy/I0jV5FM0BMOUZORg7P9zeSEsghhJUjLrzzRKmUxHBKQWbYs3eIPaTAn8G5S9yBSjQEnWZH7LTpMyyBCcwba0EFOLX/OxRBZK7Fl+3o9tD1U3OKoGgJrybWMMwqfNdJV4kowkS0c4e83qFtN5NW/ouaxPZ2dTAACgAAAAAAAAAAAAAAAMAAAA8Ad29gP//5JdDhHCKiKiOEcITZHqcTibNnE4+cG/HDv5x6+J8vfp+kevnHOR9Ps0/B2YcaBJAABfAAgAgXsRCAHiKO3yogChOg6VRADApnYxyLB/bhtq0UnedghfZ0e8QH39jOBs2cNghG/5OeUKBHQuKTYgOjo+r1Y9PCqPUHz+rprm4XgLRHRwGdhxT0CECDYmuv1r9fkQcVoXsD1MjQgOvt7hurU/bbht7yN9s11PprZvwvmy3EoqW0O4K20zXCPcFd/2IGDoiBzcoqvKLmoatGuryiQ1oTWSTpVjPGyT5xqpXO1Oo/QKNDkJ3uYBnJs15xDL5m+IXEJ+AJ6FxCnm/pwBaVaz1o8e3UlQOGrW40+b3HlVx8YpolYXhCMATEDDSLLDoJVpmrF0YRGwBG/swHwac9HEPA3pNvBHRu7qiJoXlAdG+wXpOb//f2WeybRhxgnEOG4C27JanOiTfF9FwMHDozRA47xgMY4y+ciuxXYn4uTCfRD72L9I0AaeWgUTPvUacfI/SFPDQ4aQ+Mj0tKYSkpRzE1UAVi9c6OWlSFb6CahhbUekKj9zKPSJVeFAYvrpjXFUmVoEADj1YbMkMZUCIBeO0wulNsThHr5st+3OHP8////JOjNT/8jr/fc6OjqwsNfmf/kUJl9p//0of9anX6vgUrTNjPq/T757sjOf/6/ffYLqqIqKN4Jvh3JOeFD796GGJKFwYnLZN40T4vgJNh5BcTcAN27dN27du3Ys5m3I3Vab8WETfYcLN4wvutRL4P3IALk8kgm1n4MJLlEvOfA37yL56JfJ92TfB4Rx8fOv6iRPWzQosGF6oXwsUOQwvXOnDkYJHa6jjS7XT0c1jx8bfEfOOoLHXiC+C1eZVP19AE9nZ1MAALAAAAAAAAAAAAAAAA0AAACXKnRqBP///wFdDhHCKiOEcI4QnBK8TicTZxOJx8wc+cVn1jwHxPlFYHzit+kYHI+mvRh9zDwfYNASoAqvM+96ux2ygE4VfToGAAgKFHF8QBQl8yjK0B4ECnTttj6iPPwH8fMjOx9GoB5XLzAp6EUsEOL4BAeaZJisL5/ZZ5ltopv/OhWsm+wwf6sYHv6a726J1NMd67tZYYfaTqJNJ0uCqyzKpifVGogXMBgDAiJjybAcW/j6kdRQgNuassbzH/mKOzLr21fpx4dFDVevRetId0PsWAQgfZkfmP/WE+1L3EZ6NDHD4KngQuFQuQLaAwSy6OTqqzseIeD7R/tqavl0alfVd+wE7gVOeDq3MZe5YWfbtTB7kwZZYfbM8/gJbB10KlgiPo8KkhP94gnaX4gnbeHvJ5/hBEzyuMIZobvsaBfA5/MSefF/aED7H/jkwZZLNeuj1RAIvPy+lgiiSLwvnnReIXMwdAzJzMU84nMeohB5fYF0cxy+by8T7D8ddZf5PtCql4IXOIENARxxOf4mOc6DqFJeQ/DHuQh+/xvYmr8QTPs+jDjROsaMPT0pJnbGJBYqY1CrZqE4DhoCOGiFIkMLRekaqvcP0nT7ZL5JlPK0p5pKXjwcXjoEcdYNa50CBRe4p08ItkkPPEzaQylMUhL79+wC7Hpg2FbsmMhssyLeszsQQeTtjrtjGUE+ULMgLETHy4+wew7El67MBYmwTyhy//vt9hmjrXQzpj6Wmj//muia9Lll0+f74wcjWlLMXPRF3/T6fY//4K3kfn5z9PsfOv/ajDx9OD//99LDATJIK4DQafQFVwsIClFbQxRWoWaehhhdENvXAqYN2BBnOtDUBFTCdLu3bt03PuO4Hd9qLnz24AWmOybsGfT7+HFd4lrUnK1rTtvd5hP+t+N3Ye2w+CSfV+E/4RnZu4nJ0kQPeHQfsSERjReC3/qhsRYNOdMuKkLRpGO0NtTnSqySJgyRQOxKW3QnXY5Tgd6c7FaHzs0+KJyUW9dIz5rU+cGJlUxRdH7wT2dnUwAAwAAAAAAAAAAAAAAADgAAAO06OOQD///gWw4RwioiojhHC2A4eJxOJs2cTj5mh849fOKUPifKPHwfpHj6xU5T0YdOHo+h9T4BoCKBJ5VXwAAB7zUqKIgAe+GEIXdm+AASoiVznwAgUSZHyh2+mseyCG5q2UptTUGTiEKeq+AZvg4Wnz5g1sKQPzjlaAT0IY5ducguirq6vVe7OX2wgEOcXfL4dHMg6JRwBxGyOikoHL5cH84nipCw/JN8Mfhe43ZxXKmRTeZDqaJwvpgxyWUIYHHD/hYo9FbLWy7/H3z18A9gW7zODiPvT5czinqmKgs+OfWY0KPoAuxTezmuh5wrPIqLqYLiOQa2HDuUUDkGw58OUUKtlo3xFNIxXwDseewfjmHYMthNYzxG/H1V5op+JKMUY4HjCEIQ4HlHH+XvY1o7w50UUUUKtl1wEKlcXcRxxx+50cC+OPzWxSs+97wxnm/r8qeOKFhycZ+Xuxff7Dhsu9FFFFKP1XwCGZHcUrjgI5MP18vvBj27PlEClETNZ+goY4a6pXC0aA1SvCrPzaqNWKKSTt1txUWtv2QMksDQBh3SrLnW68/1HdtlRSdCdvBFOIStTow/gB+A/dcnwpOz3BS0wcMGZq5WqLTJUDBzgzbLOhFarDBpIEBQZO2mDJUDaoUcSOCIXaMr2MPFdXqLuhSRqFBhQKW4OIgKFhilKdFKen7uZoQhKf3ANJ8Lun7r+5+mkIxwdAfoqhJu7seCX5LRgEIQ8UpxCUV9541SloQhCRXY8EIQmuQRnyCSPsggxlBAxtL3uliWYBIWGErHBHIuPnbstoGHZWqV2cHgk4NexD9eRfOyWJ6S/MPZsDILRrBCGRQdxrKSi8/DAkVXisJIunwdTXR4T2+zqawPgB92G6wa9XxLRtxbqIF5N6Qe7L5fCYBaOFiavthAdpV66ygcG5QikWmBSKsfl4Ge3+oMWwxgYs447ef6phYs9pwa/CDOGUPCcN4PxXxgGzGQ0MEEloBPZ2dTAAAAJAAAAAAAAAEAAAAGAAAA69MpNQz//////////////zj/+EYIBMVO/wH92fzh/QH/hwHxAWz/1OYgoLnOg5cfqWVN9+LR/eCHAmWwIwEU0E77eEx0ru+4RLTuEhDDGCG6NpI0Qos9Re1YYIH/jxIJkynlgUyVGobLdI3PFiQYTwuiacRIXiGM00EnyVFp+4R6xchhudyWzO1xzYzq7KY/fNJpkJu0PNTdv+NhLCuXc3ust0TkEjUmCsE0tKUTdrJyuokndRxaO7IjdcMwpiI627fSOTlMTU0s6N/tRHrQ09FJNGKM9GYekge0QrHYw2WdJjuozaurSUVVGwJsuBZ9hbeTZhN9s1pH+VdEPRMQyWUpDJv/T2qHH1bfWnYEwMF2xwUL7EN4CT6pK8gbr5sIWNL0SEBY2X4+QpIlZa7PeoPkdqlvN9T4XWtoZ931tl9Fjxc4LL45hCoxzarRc4xlFvdr+BUEau6UwGXoNUZ6gXVIA3OYeow4pnUo8LVJgGzNUnfnqpm6exe5uyE59YjA4NcEjNEt1hJJoM3gppCZYDxUDIzvWIQuaSpaS6GpMQyAEKpAwVCd6mK3NFPOsTXFaFn7vnjVN+N9oUJayn8ZZdVGECtVdL1vsjgNFT1HID37900ZVRDWDI8+z4r32kqvbgvdj4U9C83woVibvo6Pb1LjGFc3cab6D0v+hClvHd5Kl9QgZuyu2jq3FJZUUSC6znoTTZAityYJkNoRctkpWWDp7m0ObwltL5t2hBU5LwWIs+Im7h0ohettN7pzldCLHiKKbX+orl2Rc5h4u1CZ6BDXK6SZ96kkZYtlEpueKTG81UiWITwqmZ+tz921LH27UlJB5GQtbyBOYg1gbR7iKIqWlIqU2Sxtvbd6U5aask/pM1DcMSgCaMOlcgHbfzLly6d+AxE0+9lKUz9Fu2JGczDNIWelDBYlBJLSL+Sr7/SgsSin+R4QtaDcHAf0xIRQesUIEQMi5iIU6UzLrC4PRoS8Yc7ARrPseXdBe7vv0l0XFwDsBRbAzFWR6eN9QiUM5G+ugTnkTO8evd3K4o1P2o7cSyFikCGyNIzEPNA/BAUwbDeY2oJfp6cu/40iRN6xtANjI3BgSyclIn1ydXOuVd6XlX8qUq6seteWFNgXgNbays+sumucbZN/3oY4v1orXO84aMrZNXaIK3KdhKccTeiS03MtIvSih70Zaahpyc+RRzcta1WNDVtmVxXVzx8hOIftf7pE70P205uPwtbZYHBFQC0lVwCJ1xaNRjJjH2WQUZdQRF21m4b8XgMcVVCX3SoQoh40NmLQ6yevUEohynN+XtEYJavCd7S6kw1oqeadKriEv+UDXtm4hC5S5EmFqLpZwkJnwihKIA6D8ElQVTOW602KEjY54pm3U4PlLhEVZR7DU5vd8RK3tzMAtE+JLh2R3syzRmlAb+KyR7BPPCt6o9qMykjQur0dBSTfOu/GzwG0as7D7GiQcRbc3EGm1YmCk9NEyMu1Dmp9IXcUaVCQI4wE5EJdvcE3cKPuGKc9JGCzOM1gtKRlDOXfUq01Qg1H00qvHQRhK0HaI31cK66ZV892kKnpWU6ldvyzCFyxtMMiIfE2jQ/Yn4LJL7BRdYFTHzSf8/hOjcG5DK09fBgjKIBzEpPnJitLAvPwYp9WQyrWqSfPnfK7DoCZIW5KXwlQrfHcxK6xL5kRbTW6AKv/15rk8TnFIM2HS1StLrv/D8ZIssJ0ToNKusQOj3NlJefJdb5yBfvxRCWXvpoU4J6PqhLAHHpV8LVQu/FUp+lg4x8yvoLETGao03AJ8KBr+v45SQNBehyJUhM39djibH0arf/zMVbp78vQdYvUY0rMiAN9Q+DX7azaedtdKtg8AmbeUWeqHlm7PmahAlWguUIbgg5UWNcXslaYK2x0AJ5XpI4iPle97ltDSsOEjTb1z6Ju4mTTmYogsGlVm5bHwEZVZM2Nn6Mq0kj8oTOkalSTNEItPhVCRLHOTaRSVfzuwOTEO4QwS4LCXJfNC15wYqZERF3RLLg8puKOZu8Yk4lXiT5T1l/s1jodPsjrVRKFHFAQZVR5OqK6GOc9UdMmk4SDRqsGKXvvC4biBOdmCx2ELE/YIGS2TvkSxDvZy9R4dcyOQFjdigdiU7h5CNVYjEv5DxeZGEa5y97bCXhBZWaPMwcukKA35KXlxiEyTPw5S/tS0HzVOAn2u0xaEGgYxiuvOIIK22r6yg09Ue8vrrxV6vGDN6EBo+N0W2ek0tLilCpJcl0yRhLfilTzJ0RyRo4p4IIC2BIjUCAqRzdgXS4PUtp7tsU64cd8OmcHpREEFtqdgymmLMlzBshxwBOGS2HyKWs7xs1IiJWCyRmLok5/MKygDW28I1hVh1cUKlBPr1pDYLgb2Ipk5W8WyRHk4H0N4+meL56a00qiohVyFWJz2ohFHT1mbz0aimd2k73zTxR9xUncWXdRI5kvvX0REPlyj2dGEOEs0u56pbpd6jpEBVvW3XtzScweXIIzztyvDY/+88RMQNK2RKFldxDWTVhoj7Nj6VFyJjoLQ+uS3lzZC0OvtUoHJEyEUE63UfbAjFebtOacrZMcQWXm9KobTsiXFmfGgLAxN73FAk968M4ZZkWqmZabA6WGJmwzUR+DK0+ZlZAdF9kEQPYUAii6nOPYndqImQaJDjy+sl9m69BQ+7OC09YX58Bz7zJ5b1B33FCcDHEzddhO4h8lIe0QWZWZqyARIlQiaF4SuH6gwpf0Sixs6fRknxbK9xEpAzGPLaKM2xycZZzHm+xJA5vkEoOCw961WpU1YovfBarUTjDOOOBfGTqOmRQiZlyMFkKWtd3N4+2H6FXd69mHsN0ToqqQKMOCGgxDejzecuEYem7MH2LXoplWdc39cXl3yeIZF/0vaibaHKQHikbpd/PbIMWGTSocwrLTe0Qkk6bj1ID7aziE2hJPFHl1iNTisQSnPxdJ3FgZmlT0NpFldirCJ4qJ2rlkJRawczx7FB2FEcZCV6hzOc0qfkKQAUVRzOrTFfye5+VFjIgZzp2+n8DK2LMjkFGSNlhqx5yRmQAii+W4wi7dirpE3mvXTHF8GARiIP7yCEIt82I3AZPbQErZwNegNKGLmMQq6VWwj2yU+h4xjN6FFXmv9lZVLL2DJ7wuHCTboojHoDGkMEJXPCU3F2csGF65H0LRoaPB2wx8tSvJ3Z0Yk3puVe3504dRTszkXBzL4SjyJDC54R9WaPGXabhplypDNofNqhYXgIV+AxRBvEZ/QmSC1+1dsfgyEXBOW6SSPqTJpS8msjyjTG4Cn+xBsWTDdMpuTjsztcw73Os0cZVH0XfPttVJ2lfQl3YEoJmLDAmTrg9Zf4O9pvlaRA7RlpKFrqMIt/0aeHJkWi+k69/Qhz3zypNeOz4//A0Ch+YXZVHr6ngpdbUeTkvYt6jhmH/hvzEvlsyOscT1CAUiNMjmZsQ36qIaX+iHZtoUtJ8SzBsEdGvomQ3HlrnI/evdivwFOSR5W2IrLzUx27F/kVNhPwIKt5vuoyWT4j9EnFE83u0gieFI6agMwFcGmYesEhZcrHtQ/4koNFTl0oqOcTP8/aghx/B6TF9wiFZLmISgo+h2ihivhDhtoOWRA5Bxtt0MBdHl22qqdoQamyYjVjWv+7yXFxb1XOyiZVsFqe+hlwUGVm3GvYEh6mLk0aweSUq3cUf3ou2U+ax0tojMbzEMF0hEnre8lJKxTr+nsYco3Tjjw6Etmae9R5GwCTLPFicE6m0lL93LMVKzrHxiuEymGfoi7I9DGj4qHNQzkAwVou3Hu+QxcRje+wKnPFLJaWf2raiulfdPbzKbKRFPdYsdRzmysnMbS1i6qE9nZ1MAANAAAAAAAAAAAAAAAA8AAABnB6q6B////////xYUB/V3asHENy33rK5hZB9+9/3v///Qeio/8U0pr5vs8VAU/abarF9KToQn+5jdz98mzL/pRA8A1wNaA2hy2rwIXLl1y5WW++677/46Du/7//3MODkeKRLB8/0NOKFUwrlKFabzkdUDq7CqS9yXiK20tTZZhvazDHDSTTj5Qg80HgNaA1orwIXLl1y5WafrLQ7+G+Rz3/xnHJfI+B9DSuPfKuhcCboEihKhBXLXqhYWXr5tKhigutZ61XVJbmsm80AWbMZ2Z8k7NLhABpPM/g1soRWty5dcuVlv+skoj7/0P3+MffSf+BDHj2XVqqhetV21lXG16YoT9AcppUErbmnWaBMSn6AU7zRBiJtQf007YEZzgaOBrQG25V4ELly73NzI/uW6jof97/Rij47DY0hQpgwqCoe5XIWaEbPvb/2WilElqhPbrTF8xOh+WpgdDR5o8A0BuQGtFaR8MW36od++iDeqD6a3MXv5Gmho8NNNJCWyrEB0OgZ7nmUqe0oB0KSMPQHpSRSYdM0wWGsBGB0plPOvQyjrTAHSkEwWBYdNYCMOmcYenlhSaAfcUW/aVc63cbQqUWvrly5vqCTxdP+6ey6fdFSp0rVGUU+UVc1zq4jr3jWsul5lawdH6Ln1o+UrGas2GQSyZh1VqJ6c3Mf5/6pW6VKzKtQPlFOkCA0HcbZdojkCBA/ovQXkhdmlIvzhbeCzMoCFXLwhlnWLoEGYf4wdWvzTAZhP/5hB+rUulat8q11aVc1x87d90vZeWdAMlv41+rI60xj3NQau6Vug5x2H5f+7+/6tW6VKz60p0UVdnZ49eOmBGBSmD/FUB222gn24B/jz/OzDm6Sz7mP9//VKnSpWfGUVdaW+Y7qy6+6VKrloITx4iRIkXdt9qiRdzG4meuiJEiRPHjx4iRIkR79/q/vEXfK8O39Ei098Fl5FE0Z0Und10RIkSJ48ePN9aokVa1G8N5sXYdRjnNc4wr0O328FbdFndOCSMcVCKfyi/3n5dIuRInjx48RIkSJ5sXN3zXszlQios11up24rKMz22/0SJ57pEiRInjx48RIkSL9vt7bcj2/0HWJzP3VEiRIniJFt/n0RokXG5RtkPcbAgPNphH7a4KVbZSXTPeYH5uOGjRhNIJIIIJNQSSTjJNIiyO7gkPYDZIgvAEIQmtbsBCEIVP2gLAQ/+1BCimK/XMMesY+5G5ufsGPOdshpLcxwPGAzzQz77mgQO8Y7I1FcVEto8/OM0QJEiRIk3JEiSnpKxhaKIsyISTKRIkQMSJEiRJ2Tmqq2Z59JKCpzwaRG7fnsxsw/KKttqsWLFkTisvCSSSbSrSu7f588kQ0axZxYu4XPN/yPjuKSSSSUO0pW8UPOnPFrR11JWfK/FbadaVOJUEqFFpVtuq5dYQOuiF73dnyYnIFLfUKFCi2221697P5Hs9rt/79gfqCVCi0qrtUkn2tR1zMytRjPOnTmZjcrWted6g1zMGNWGH8GeAH+gZSmNyt1G3BLjsczuYPMq/9TZ3l1tKtYzO6qZSjcrWtW4/heun1g8KXUFxVrvKUpRuVrWuz5mcxJXz4AA2mUpta5iVM/v7+/o2aNjY2NjZjEFuRsb/f3kONjY2NWP7dW5/djf7fnAfmNjXo2NyNjbKjcPzGZX53nv9G/38aFXlxpfdtco2qpVNz+/v6NnjY35dPUJuf39Gxs0KSzBb9X60AVHmMymZpuzI56zGQYEBuR0iB+wewDRWUoEGBp+LWUFQk6dtczkdbGqaZ13w8PHx8PHx8PHxV+IszGilKIhPPPPCEIQphZWemJliExp0Y7GnTItKOZjix6pO9B1cDCkwxMMTDEwxMMTDEwxMMTDEm4YkpdScPvk7bDbDbDbEiS2w2w2w2w2wzUIAq17Ju0rWgLnrNFbEfixJn2LJZj4/UicxLKaVd4BExqKK02tMcs0rTA7GIyZMZ6Sb093LjUmb7A1HY2Igem7u4V2xJTcu0wWb2QfVd2dsmfWPTd3t222WDbZk6OPXD/iWGua22w91QIDbfutsstGUwf0jLZKf1HF6/5mZmZmZimFKAnT2dnUwAA4AAAAAAAAAAAAAAAEAAAADZfvJgE////AFoMEcIqI4RwjhLqyTxNnE2cTicfKDfInzj184pQ+z4j1848fWKnI0/Jh8z2eD7nsADE7uKUAKlRAVQAPBSPNgBwBDADlhwBQnbNsXSyAEnbDNc42FkMP7e64LR4WdCNyIEGwQb4IFPQhTlM+nFX1vxkz51bKmTV1WbRZ5G74NFI7qvqzm+us7/DgWVte+wEIEIwzKNiPuQ8/hPQCbu1TIOc1ySNMnOch7qmjbV9GvzSf/EybKSYOuMDqyy9LMmr9OEtbATpd59NiOpgC7mT3Nm4a3cblztPlhNV3qana0yfVqfTgzunRPlWm+T+K5zAITk2H9lltqCvMhwUrNd0KSaBytwPwQpPpvtWfXJnIj6mmtsS5JbLJ6+DodXNlaV/jBh5lHLLLFk5E9SdG/msRvjBcg39nHZFoy6FxTyVkOwEEyphCDq3KOec3+HLnCCDmw4pidkezfmNDQ36SB1K5A5a44bE4HNuOJzy/Q/+yzF+HWe7E1sUSVCJsQvykKgAPSbu90uf1EPASdurEUSLV0Ndrb8jPksTViFzcbgVwOXt560SkWihUSoprHkZt7D7VNQuYRSjhof4AsS9UvH7wSxSot5E4dIRLOqQ41LJ0OVFcPH+5o22JWwk+8aZmK22TaKFKhnhxCgI4kItpFiYv1siAYtxWNUUcn+o44diRYgthQIxKzYeNN0Ez4Ak6QhFD+Knun6qxXDkW0hFGfjEV7AJIZrCLCQ02VyMOwk0RIS0IQ0aSCPWQ0NBaEOaj56diaMHaFh7kRRkuhDG0PuRMDBYdZpasfh4xssJ1BOrB1VQZOV3/Swy/eIc7LP2PY7P2PZsdnsjYmdmzVl7dUOps06T/ofUGjf18PIRbMTYHT4lzJYsBA1RGqPmUWegFkknret5BhV3N7c5h5G825QuTTC84HO9uikHjA69aLT+50+qlHXqqEJFozjfw/foGgvZ2BT27MUQZ+E5nM5s5nNi+nNxMVi8mnP6qzizKYQO7sNVfEhnDOzIwYSGrq2kp09nZ1MAAPAAAAAAAAAAAAAAABEAAACUBTOGA///f1gOEcIqIio4Rwg0RJXJxOJs2cTj5Qb84pQ+cU34lPMePqfCPXzopyMfZ2cH1MO50ewPgAa4t8VUYBSUg2JWA+H3O56tjGOEAQGwxa8IADuTBXvdbnAFnjYy9wcEHnJ3ujyW5BfVGwAEAhBzYCC+SOc8qfp9Z1v5Iftuimcjeb9HXahhs98vh+P/CHVhZrfp6tOaQbA4p2GxXy8/qeQIRw2R1q7pJpBrPq5FXSP56a04R9/SsCDf7OjB9/J+LlliIZ0XxRsuI+ZN2eM6Lgj5koT8GTk5xsyUGlk1XjMDJa0+jTdV0y/rL9EwudAV/ugApsuJzlw3k8Qvc+nmyxPXtkQTmuZfFhxkgue1aI7NFpIpCW+ZFscJiavVy9mhatfyjD55ZuWfYG+n6LhvJP7LP+gVooN/oxdAIOPO/PYCEMssQ8NEltvlzTjPquC89+g/R5++uAIQb4w22WPannQuhHHO5g6ETYdWhsQjs5dPPfoevZYofo79+C7gTdDD0hyCSFGWIn2GMI+j0PSJrh+G6VbQOOtbSUMr2r7ZccC8ZxStl5WU8aWmkRNTqy4/merRDOU8JSyLqnukPHgMQ5mumCP0VW0ED1wvgxIdqT2R+1sWUjCLXCSx2FjtSX7H2R08J4TYVTZ/th/f3/+DcT/H/50LwD2kP99PzeT//fQD2v5/nIrSXkfqj/fffYH/8++n3/0FLslNGqo27kdzDRTR1sBerzDEWfY/4iHwC/HisaJuDobUW27dN26bt03bocbp28Og7f4MsBGVxAZ+HtoBixipU5h9WMGmuv5cFFCp7D34aWzXZr0U7gpigOxRZx/DBpw9FCa6Kr/MY+rmToBPZ2dTAAAALQAAAAAAAAEAAAAHAAAAGd52dwz//////////////zT/+EYIBcJO/qf+iv4B/dH+Ff+4AVQCPeYeEsBAhCMeGWBt5MLevfsHEIJa4SJY6Dk/4/hKOafiy//9jlp90O6jS+yeousMMxt1G1KadbtCeXyJJcYn4J35WUIHC+HslEU1epZmZlvJ9xUKfnSss0wQS/VihVx8phhy+2+GPTlGCUTUClkRuT43WbqBLljIAprLsu2qQSTSUFJfWxP4sicw0icxZBi6HFcnGaTcLHdVQziZ4J5q7sL02r9CQPdq3ftT6xt+tBaIYgyb3bzPnDkFxEBbtumvYP+iWyTd7+Vby1nxMIZDgTkTO9unYCTLPjK0Wi1KuUzTwqy3v3VYzFaVgIJ9VFdpojkK4g62686yhVNsrpl96xtakVwrQWG65Grmi5ZKipTB/SMulYBmypg5C8BTz6zcMI/nQVXwPYe+6exhOO1JBiF1msHPyeIgzItTVlOQ5BJ0IuSV0KCPyalnD1OoZcE7WwN8RRMEgS4g7KrwuaGqV7EayKFtbncp1SOQlisqLeCfGDEVSQIUqTj7nElW2hZYobjsCzqEOMu34Xe1RDHZoCsldSCLH6a92SEC3BiGPCixLbSHtumprS1NKxE/R3ItvcqxVIIdcPDsopjVrs7cqN9CXuG+ZbE5bUWRRmSok5Q+fPFfdNdRWx62z/ai9i48FWXtnGLXxMiW+yvtSmmA+m+x7x3mqGXv6ZoKwihtgMkrAhEQXHlc3t65cO7961DHWKQyQsoQeHWJUiFCmJIRU6Lsw+ElWSspa7eHSLxFZwjumJc52kYsiKErpct/1/u1pdWI12RyGhoy4EuumFQeofU3JeCOItnR01lmClHmV5rWRsTGThliZWd/facirYIjWZx/7lXgWGoCXIQ40WRcWTuKD58TVGc8oxqIV1ac36iwcRHqVaDHCncs7thUj9Q7+rSrkOcVT5BI+Vrk7KpDHe2ReUUZO45WoLbZVIMP5OLQY3CD3BGgdg8jxS/gLnAuMlJHWiULEiT1LhT2es0+zEUgsLTDhjwqzTWZqCGeDCo5vBmWbmSMbTbbz97tu6Ew0jfkhItpxXUW3zZJ8aQJHPmBoZ5qO+mfEEVgN6w7iw2PunGmuQiqpS6CNCV4m53ROvEeQjRUMY2IhPV6CY1ecv8uiaM05s89zLLcoKDK24NopqsffgKF+/aGxMDq94c6SqWTc1dSIcSY9W36UGO2YD/y8RbQ0DAi5nNV9XUD+BlI92Liwa5nbHMaTNEKkq+i+ncwYisM2OOr7zey7Q/IsCHNKSgvqdhA9P0aB8s9SCv8sbGYAkm9FMKT5QKxWnuJfZRcngq1v2GhAmTXf3NCxoU1fxNiZ0KFVhEiQFvmJAdYqVMnJb0kytaaw9cNay0e9kUJRHw0ZGWREcMUQLYaiIiouEnyBD5PAk5CZIRdUlqPGyRGKaLCwerEBIAqWpzc2idHFKZVdVwoljSk7igrjoJNqzujWRIo89gpqKKNfli3D3oeKpto1TsavR5Drdx5avxOWhLA5t0fj0uzq9Dpv0VqelzGEjzaoFcUhbVQT73wkUURs0JUM898azrIPpF9m+ZSSdt7FSUwUXDUMZnyu5lb0loS8EGTiXEYx/DzIJaTk+ooavtagx2D7LMXT8i/12an2dDtehjZ+ILhVOeMxzNP07zonMzGXSDlXkuJ/EFlgh1oECOGuDGlVDyPqazlXjWCnsEVHCMxQAhDoWCc7XwsdfjY2TZ88iylyqrqLinf9/Z27DihKccs9V3tVtwc6woVqp4HhXPwuvkN6SmlkAQS6HWVhNe1gJ0pnAK8naBpsKnbtuWkmS2oNfbwNQRFJnfX/OMGUyx2X/UfSKQ2vVXLro+mvhW54Jip3sohVasfIT86HOdO4D06BePK4qZ2xGLmStQEWbVO0tRRyCRp8oHKv+JcwKCe4FyaZExDzkIgcRr8mGiPTc81EDoQhGENvGw5QvY965Kh8nr595hGXkrjGjbnHeY08MBCL3D3tfW0eVACYs3rCziSomVfh7EYvUb7aCCr+EuOPkksF1pE2zu0OTeYaCF8ItdtDeU7NxsaLYict7hoWx/uoqDO8mXdvrKovKH30M9YB61tSiO4V9CFPuJgUqM+x9r4JC9jxEZaeOOrHSOLaTXfUQofiwplWUCRIyQOPcoVCrqY2UON6Fro/n63HMKpKC3KgpvXklQHRD4kDTAfQjnVx2za5ZGzKSo0jf3yxVol7VJRd+vFAEyuifIJ1N1vkSxFIImp8JGoeo0w2n4NN/uIkROEt8KlTTRXUqDuqD9ErMUnnW/JG2aaK/ctE8hD0QJM391/ujUM4+0eW4rIwpCUglu9FkVcvp7xD++RmGkXDYzMZAg3S2K584TxmN37wr5w15om6MbU2JtJatYPsF+RbiJvQKbBjyY2ivW6/htDWMLbGdjjaaJhK3HqkqOIQeUstPQBKnfryvJm0UFcb+WtNj+uTm8af1r8I96QjI2NgFthSFIijYuzJUqTFJ4LLy6yK3PyowcgUK5FHvDYMEpAq5nZ7pae3gqhO59vFDOM7yfFRm1m5Qw2HUx5joJuYuJMTxk4jZ573ZslXNgM9ZEUSHA66AvdnVOpVE7y5oon0qS/jshK9Vst+iV6UzDUC1O/roDZlYWgwmTSyrLOmEZVbC0f4ENQbx/f2EDma3OOZ20FpQGM9ckSiuujJ89XkBF1liFCIJF9R/9fIPfekiZCTwbXNRFfGrkE0CxIuQnEvUxD44qzQ3nVPtkfFevBW0cnERqn6utS3EAXW1GI/2JuaPQhrkz984xLNL331xQ+GU/5YtK4ImkMqDAVNES+URZYaqss4jhUdJ86ncOi0TYVT4mpJ/XtJ28dcqs4wcnSa/oKl6my63UCb60m5BeoRO60BWYDAHEQk/wLYa26QR+AgxEP6CgWLvoH05iw7EkQ8T01wXh2r9C1F8R0K0B+GuJ7bYdchHMs3RHCs1ZsvneJZCRs3lbo/bzBKkDbBkq8E/AlWIGvB20/FLEE1LhKj2Yyb9v74LF3xd6PQTSyOounk35+UPoDOmhaHBi1RbxEjwXZW7mJYZ7YJEEHWoPPpFJzdhUOLNEPvNEJEmShviaVSZUL569FLnAQ40yih3lYE6Lztk8Nst4jS6ryhmXcFkdN+UoRegiMQgUFqe6mXXV3q0QYu825vDKwJf+K6NbAhla0XiupRDBhTLwgEdgAk/VWwdKxRUVNpIC5q2vbiVF+LbMO5xhDtRAr7BjMrWDIES5ZpejCnkYqjvE0jsEIS5zuqY8hFCWNNJTVOnRf7BIn4C2dNw9uRNb5olHafTlQJ00nqBjiISzHcYRobHFSHYwVXDM9iwYkTL7G3dmV4FSeftobkp+6pqq+UVZ6Wwh60cZT7tO2IiCo2vS7o8wYn/tcSCUCW0TSXkdXeAUpOGDtfLtBbPnLY1uimBMy6xdIG6S2SO3UkOv28Jf06IiT/lACsYghgHHPyKJ71JKCxFPMilNdv5LVSll/Xa7WT/JpO2QYrLXTvN0HhzINld/txonlSNt97Hgp4n7Ss2qz1BrHkETVsfGEkii5okVNfsckEgcrJvaaNTXneYVp/FGTPMsU/z1U8Q27J3SRepG50FJS5fmCvSzQlxGTIewBYELcZiqBwPESjSSJLyJ95zo0m3GRHszB0LUg6y/na9FzkczTgQnbrF4ie/j4eMnVKpSlUS1Xmqq4U7Ebvyo/zNleom5eIXnElYvBqIdjX83RyCtW9fW3heUzSPWu5X350Ra3ktsXrxkRFlYSwunf+8x62SZ4WUdeDCAsMX7X/SWxa6ydAxY2NE7Y0D71T2dnUwAAAAEAAAAAAAAAAAAAEgAAAG3+oVED//+SWA4RFRURURwjh8ogOJs2bOJx9IL9Y9fI+MevZr4j16fkEevnGByNnZ8BeBOQE5TvRbbaBGWEA1tIEA2yghGAMBQNYMAaGEGbNIAYrUSxAk53Wl8As3ha4BD6CIAQtcyGgjXEveW6YjVYoTNH/cj+i+x/mROkJqQYfZDSYjTX2T7I19M7IEGOcQv8oWciOIE6UAjAh1c/ETyMcoTQBbphliKL0PskLLWnmZA50cPz7ODtPeY6+DB+hplyodzcDRueBCi08yuujGU+JjbmH0jEUEeLO/mKE9jVkW/N2cyYl9mwWck9wPNVXxkB+Xu9CEKpny4s0GYPoKE6uI4j7eZRMS0MMJjefKNme9bUH9nwmLLFGx/MPst7tvnnngg77LTIgFzG5GfAWY+ho7cQX+UIdaOgTqwY6Bz+am1GQmurtzor4/nlSvfZf0H+BO0PMF/XOicHKzuWZ3QCI6Ort0EKyDB0RgReGPiziECyy79+jg8BiOnZaGlot8Ubjkvq+ZzseBtCdY7GxdGRfWtNtGaMZ9mceAHri0sdmexp4oiUpjdZXh7Kj/RKaiFlM6ZlmBz+48UxV/5ZUXYcccMU58aL1XthqgIWCuwXmWHbeYdkYRtk2Rn/avlnPPFX/+X0NsSYER0TCOkoJv292YAEHw+++GRPvvvoKVzqo+++P0sJw92TIAyMitjSk4x/FqM2X//YvsfP2L507F9F4QzdRBVYg7LYqDDhDYJx9zeZ86VQl6Pw4EAiQISlBu3bpu7fNw3duXc6WGN49boRqHPE/0TBvMRIPB3OP5T/+3HIaXThiUCXqS9/NUiTgoYT6kFAehYD/AGddAAg0LARYLsVqXlS80maoWl85BbO3eYbSkuH/fhPZ2dTAAAQAQAAAAAAAAAAAAATAAAAoQHjUAP//7JYCKiKioiojhHD52DZs2bOJx9Yc9H1jCfI+cVgfEr4ilD2fSKb845yIfATkAy5P4qu0GEUSxsVIDAFLY2MYQBAMNi0GAEaTGKiAAkNhgIbMEOZwjaDvK11AAIAxK1zasyhUKNDeOnZZp3d61HQw7R6pA6v9f31xzg2kn23vsqIn0x8eW/vMREfLTGIyyyjTODz+i8wAIbTIQjzihamWPqM6kmrDvf286+nClZjx85zlB55NkiqXFN437Tr0wZZZZY0zW9t1Vsa5wx56uPidkXk4OYuVNCfSkegp8GcPDzSCdnuhsodkZZcQn2jnRGJQLMv5xTcOjtOXEcOtNHn4B9F8/SHEcwIELz+BfrpUvzmytlk1WJPwFXMb7Y+3U4fZl0VUQv9MY8XnDp9mxKNMmMjL4zbPooY4hDQUoBAvOMkSLzYAVjsH2WfLBPivsQoVRKl5E+0NeND48owNz8y9h50hZds694ueccQj4P8DYCxR9MFi2mtl0cDjz2SDZGHGjxjo7Ca6UBZ54ffitaSjEDOyeB7X2ewMISZrRZ9kL/8f+LCqz9/+fdMUScS0C2WDSUNQGVwvORBnkerKWUsP3pFp4rCSX7IxIqPvOnNDWqZBVZUekE1N+1JYx+XAQDydqSZwvmvhE5GxT0M5Gc565zfUn3330AzB8zLLqIT9998T8T0zm+UP9KivH3HYpxPwt5QfUH33z/T7l17D9992KfJFSNv2nQgOSiNFIXFuZRLCgbWDS8CWD1cndKOfAHho/A7TzN8J6Zm7c+7t3b90Kzduwjntrjn3oZmRNDX57A/H0T/N0f6GcfYSRJpLy/50/486SCWPXpac6X4Y4vrYq3zqUlPpRRm6edAwkGl1h1AcuMD9FgBiWG3Zww9O/+gM72+MP59F4RbErjzGI6jf94AT2dnUwAAIAEAAAAAAAAAAAAAFAAAANfvUuEE////PFgOEcIqIqI4Rw+dKcTibNnE4+kOfOK584rnxKeYpvJ+o9fOMDkQ+Z0dicgKOneNrHreIwytRHd9g8oARRAwwgwCEXYABooQdmaIDzccsc4D4dPW8hdyYYWfxTgWon0EQhGlCcAnrXy8vAp0k9aRdzxA7R9mx1vwJnmu/wfJmY2ibJXwUyfnx8aZv6F1/rqjJHDLLxp5c4KJ7QU8GUScRsXEIHVlqvbq+zsZ1NL6/Nnh2vG5pg4KJ3sAOnNgSIXoeereNNcdNA0OssuaeREtZ6FU+awI2wKwcH2uB6mT5U5Ohc39kOp616664iySkjD1ASffZ9saXJ6tt4s7fOGLhFlqsafI/qZll8stO4A8rXdEr4H0roUgShdHGsj8m+cojVY2/3Ec5MzvMENO0Krzmzu68BLSTE5fB+fLoQZ4MffHBDQ8+80rjoD9AVvgiR5nerqGIYqcwCOLbebed9q+AL+jB0ycxzG+8wZZZPSoND3nLs46EE841EB/dacUqdPGy/MGao6pKk2n2fNx3jUzhbG71StZgzyqEscGHElRJCkX/e45nd8E541YgLgFi044w4l/UAlgcC05pjoPsVdFrgq5+cg5rrrnixEEStBJdGY1Vwy4oeDAFjiDDwey2LlmIwMj0zbXXuCNGIh4lQTonDDlQQ1jgjUQlztxxYeaYDhgjDhpPBMcEagqIdJCgG0kp16+690ogIQhDXKc8ZOvXrfebnQBwUIaO6mdgJ9fz+BpDSjRQhCGkVdBFCEDgRgyzAwRYSKV4Nwd2Dl+dnrY1kJF/zJ9YS5GhV44JtMupGQi59yYqSUm0OsuuE1mP6rXFrldHBy66wpbzA88fWFzZiGRd16HxKwRDpsezbsc9egjWyz5TQOcweOy29CLq1+1y3sAm//2sHSUaQf3+9gsNODGYs2+EISOtrGNuTKypwrUWOGdHGBhhHNMDrI4U0AsxwZQgVjaMeHb7F6+cH2jd95tHt1fK8c6ePGxGNDs5saiTfvJRgH3+xf+tmNi+7Kiz96Lg96OHa9UTU7tTtg+nE5acfOGUU/RTicQQkDYw0l90Yx2L//jH4uSbHH7CAxpIyZtJi8jFY9qgE9nZ1MAAAA2AAAAAAAAAQAAAAgAAADYb75oDP//////////////G//4RggGy075i/uO/Nf7avjE96f3sfi55h/qvFaEwxOJnz1ew7Y9J4cYWZv9zPWrR+FgWrwNmvJD4ctnVjLA5OWz/lxMyGXkM4j1+laAmB0EtbfY+VZ4kwWX2qyRyAJ0rN+3be2BlVciejwGp/meZKXTuOZ2wR2L/ef1B4YP8LbuWLTrIlDTTYMBUL5BLyfJOU12nRsySzjL3ASCNES+2uMdzvUmK0rvDbykNQ+KZWFUqsrZAmf27v89Mknlijw6BagiyC35dGhxDRYlkJ1mVTFZ9dOhau42BZ4lWWblSSXJBUiGS524Kn3EyGxJT0/USElJWFEXd4DxWsiS6J7wEyQ922Ne3kKN7Jx4WYTiGzjNUXyUk/c+p7boN4MjVaUbkUV4m+1U9sxks6rz1SrNRLCtvbbDB/G2GYKSVitWpWEUuWhpJjZaarmp6OZyQ1ZTi2AtYtIcoViHeX9b8tLaOEQKpaYhTgKqHXUXgojCOjhdcXAjkUt7KTIqq0OVQGDzh7Yr7G19KMoopG5OhmaqLgFLzqJp3K1UrrI9Bo4FpOkGRhlFSshZRn0Y5LO+iHIvyMGmLull1GP89vZFAEEQxHteMILyKcFnRi8HFSkncirGYaD5b9cWlLcV1+tUKNOv+hKrE81bTA0jK0z2MAnJj+e7vLsZYy0Dbh6qRum2QMoBmP0/aoUBQIHoS/kuCpmSxHbhfVO3+Z1DXSbyMdXnoPpoi3LA1yHSjhq4j0DdthaBwitttpEvaRRPYEkMivGwrOTOgp/KP6zUmNLpdNVAEuTAoByuPw8y9VyY7988jU10E0yN93VvadwcMyN9Eku+QyBEk1tni2uIagw0eMBSKYE5VCdIhsYg6dPLIUmuLfI4C2LeaHoUpxmCnAIUUZ7Hvcfy+e5d9A60M9GXV4ynNEOb0Hnpyx6iDNArXb7EN5BIjSCojX1aZarkdBYly4YUKJFj4MX2H1EVZU9xFO3a3xrXd2s9jTiJG/hqj+NAiaTPpGSGutStm0WGW50N6gPZVO1dOyW+QlS8kDZYqjw8iGqdznFoIqPqCkysb6yxwVURSqX0jbRk2HTWExanKhiw2jzZbi/Uj/tEG/X185XdnirYtFdKVVl3LgiMNipNUPsAnnULfH0GadQVTQGSdulNKtsmI0PxlXzUwixYy78m4lcadyYzzLyVmWMrDoEjBxmWQIi6jai5rZOp9ANtp32J5zWnWEkE7c2Qc+NyTforGBLOesaHfUQaxwRHCF1oj5XMclNofdWDJzxRFVJl1a96k5wXhTdUERav9rym1roRAvz+F+iZgrwz8lVxhp6Kwq2FgAxaREK7ciQrxJyhNZeWxd50dNg5d3p6RyiUEmrq4BBG4IUQgq7Y5lCWpMHyV7MftXY8TcVIj7ctUdSnN8QnloBg2YoWKS1YP9dVCiR8MtCE3rpJJDE4XDbZiDwR5s8QVeUNvxGECrNQYWv/z90CEq55r3bf6TrQqzmWlVyHW4gpH/+yrRVXxR0mNE2yDaJAmFZtpdErFzUYz8XUi6JQlcMJv2UosaoyWftClUVrMvzqhigyW/JY5Sy35kuBt0fO1Be3QIgmCVrMlkyranGWz5gLC2tX9WQ/71TZXKwqnaXtElpnsaY4hTeCFIEhRDyrwZES8rLRHl9LvaK/z22Wj3qw/UgTu3OMhsCiicI2TVNDbuStDadGqcrdipfZSq9dImTtcGf3l0efaNO70aY0uWsiOjr2kwqjNJWMrjETWPGWeU+K7E513oS04Hm57X0NRsYrEkUref6Id9hK9G6CuiwJCtuxT/jx0pbjwFTKvkvoL3RpM8f4TtICwM+hM7lGKwNk05byCubDM1WOhr+gtFMTZPfal6uwhQ8VgfWziJTic8mP39+9a9roGa8xDZZANBfHiM8YwR6JPJ7kbdX3/puVbipWOetbi42FApCd99Z9HK9RcF2Wg+moyyrDmiLfR1h4EKjyWhVToIBVu0aQSlp0UxiDIQQwlIGTb/qn2Cr4hgAUwor5sJP4JMx+84yp1ZRNCIiFFcSzITtZgti/IfuGnYFFQXYI+JG5BFkNBkFkRK/KZw3WkIHf+CbJ1LLMrk8acjhmlOEoyHAEADhMMvzJTrjCGfhFGbWjwexiB1r1m+QHQv0l1AjyH/WOs+Mx0OEJjjT0WQfw4uIx09JlPd2EkP0WdiFeLt9JVj23ckCxA3hbA02B7IfO9itn/h8hTEIkzwbrNzyfRgR4TYQq9JIE/XnjRkMSI3AwTWfQCDIwIJpKSy6cRD31wTc+89FcEgZrrnl+RLXQIIG8916eC/yUE1w+457r8XGef0CdsMYwRWJYpekVi6GGWYmI0cUY7gpzTMNIEoIZHvsRSJ4yHyOH89gLunfMSO9ZZdybNVGsZ/CeWRsKLvewlK6fHgvBLYwp/j6jMTjRqRoqZwUfZXGoVnnIwXoSv2pooqQVDgSKMyhDz+VvSSfbvl0Uw1sMwmpw0eLFn5VODXpYr0+nuUJBd4NkNZMW9zCU9GJsAJ8nWc95OPqQvpXsjzul3yyEaazJYXpcrzsjD9pMDpuIG0UAKTRiGURIzE8SOJexaY01KFN5PcjD0L6j/jynRFHX8w6ja9hKiEvsCDHWCw9ghQPGtAGFp4ESBU3epNHCAD63iTXk8SwtdCkhPsclAhXBEy2KwNn2VaRwTFTW8+mXHRs5JCPRIoblHMmJ+ZQHceTMxvHqjWOYTfp/pPo0Ref+4zzTFHHRbE1WPrR+Cb9wbzns0aSprgSewtAV9zCYVKRJkiXv9U1Tuc27oGYcZh7nwE0WTsK2iM4QOtaS7oOwsEVZ17AiQixcFneG7Kak3Z96uM6maRB4lYzX4M6s2fw6AG/virndiO4BGLAhcUCOiYGMm6MGxuKvEMIVAl2RE6PsnZhiaeOAj++tFmakXRwwTl2UdmdDfGwIGTYSTTZH1uyp7IICoqONi3MR6dQIuQFhyV43wnA1pt2aEBOPmLtahR6uqSptxL0q+bx6c8brWEpGWNzKRYVskRvXLQVDa4dTMHOaCkKnHOAHJPiV2dQCd0FsaBav4neWYtSBVCHlIL70SxMfEajrD+zwnBObYqXBzbSVLv798LqzbjFrsykcuLuWllQGnRBrsu9lh74mPWb4F/Kxj3rLQib6baMKkL6fWxSNAsKh2weQbTqsh0i3RosK+Vhep0bpPsiLkfaKxNjJRh521EEzXxrAg1ZEAU9KL8XcKxk/YXSh0PBmkV796S3oHDuVTObkjD5C3EvH8Sxa91MjOnGGaCkqMwRjyqQjtibJ3ALnHVUI99q9P7Y6n1xMsQyKYIGScokbNunnsUv3ZZFu+vulLelaLSnSdCxCLMihm2NrGS46VL6/l5FdCA07Yqa3OValGrOdEnjPxuCqbmxcdZoxj14kA9acOMito/sWaDmyPvQkQ/BmOQd8rf9fw0pRpnx7tGOt611Vg/2Hp0DqiwSjoRif15CILo7Kf7tp2PkTOBLZDaCTUly078QxiV6Z5zRlGm86yQqR2luEcqr6VSgECcyD8lCYm7yRFgzTXGucODI3mbzySASZYniN9r9eJY0O/CgdIUscqFFfXRBnCFNCxYoc85xSSmSo+cKjKfb9vHcb081WL+Lld2n7XN9VzbYZ563sYgU9qv6f0o9AjroijJNr4cIhCavrSamqPTF0/v7tPH8lpROBJByTkSB1VEEzVxe3TQcgglBU3kpoQc+ZKEbCMpMYRjbuN4S1e8D4U3EvKXJSdiogS6KGB4Xwjr3jeCI6GRAz/k9nZ1MAADABAAAAAAAAAAAAABUAAAAzkSA5BP///ztaEbOpWTqdQqfA7AxxPqJPYHWJAV58Hy+cIwQCnzPyR4E2T5+QhHEBAwTJQeDs0JxMtwSqUC/AWHkHoDIBezZbeWK0ACHhABBA7ApGiVrg9eaV3hCmBbCA4eTs8ZB7769AL6iC++869ACogQ0QfAhRt8HwD6H2KGwAA+X0NsjbD9/Uz1WMHbhKvnIiAx7LaGKZX6AvQSr6oUKUDDuQ+SSXxLXo2Ff+MvNtmIkN6bKiyb96BnbeBQY3iXffu33tN8DqmPcPr9yJ3W1imrKZpm/rMsJv/LaZY8t13/T0pMs833fpRYUoSm0HWPp4+4wsWFfEd3iR7vHvCPGvs3bGzC2g6hegcr3GJyaxXq+r9cLT8splFpyhR9Eka18fp8z77WD9S18eg39G9CKvp311WROXyi6FP3sWcHoIoRvrF1nGmb/jpOjcjf8KAB8m1GfeORuq7CLByL/HKjb/D4zb7b7Xz5h219xwmG7+5N6n36x8PbLjfY66ixQC7ZegDb6x0ITA3Hdvt1V8adZuNskJwixoZmGsDzdGqdI+Zv9xE8MsMYlQCzs2M2JwhkuSPc4WE81Ot/85zF9T0zTskRLooa0dmomWXg190fN+6lbly9KtudAnJibM2Q+RMtFUrleCw7cWGTDMMwxi7IFXIHHgnRfIzDlxbTgiHCIRIdlrGytOR+FCw2alQIFsNFX151W+/nvuAAsJpXNJdQ+c+q76XXUA6U6rlU2W7GG2RrnHUX16qYWMLIRbWlHi8cxRbDGkX//5j8EQ5gHgWNxk3EkXflYF0uwBrYJcU1V3jzkf+XZNKzbGylp4YhbZcWRqr5ufn6XKbz3Qu7dc/NFw/+7nsSdAa5vf0uFXc8OuGluyo4RM2bhOh8+HRB9oauB0P+99lF7+s6WHZrBDFl3TTWFnVQwdGwNBDWHSnwj0EdV5gz+5A643Wdra4ke8HChRQrDOlVVIBdzZQI3TqCfl9mJX9T/5VXlc6X7rA6LaXjdJ9c25pzTtt8F+wvSAmNltlrY1SnB7zhAJbiyeMDWggELjMqjrB30+Vnt/KcqKKKL/QxDo34MMJDdUBkKMk3XvV+V/4wFeaqgmCq6t9E9nZ1MAAEABAAAAAAAAAAAAABYAAADkcOKBA///gVkJsjZ1Op1NT4GtEj8AMM7xMVwNttzshSqbh4PYCqAmbLS3nuPQJVBACGQ7PJsAKgQSAwKlMPBDQJIjKkDDZEDO0WHFtw9kHOQ6JvrbclH46IUgNRjV3t5NPwInICcp3qtuvXQH2+BDzfdxABqAB6IMBAAANBoZgBixAD9/QzNvBHb53OXj/saXFNWu6sakf06u92EL/cYb769Ng5Pjt91ryKiu4b774e0cdGZQFXlbfV2vl0u6oVxVKEh570LHlUoZrJiodY/q8tzyP6GeUkewk7E4GWn7nVlP2VjDKvl/hxY6LXcg5c61mWtIW3P98uX6zW1tfoA7EV+sxHri0u2eyxbpj71HOaypxndQV/hvHXjJch2uTlHNifYtpms/car3s2Bh9/s7AiKvk94cb4b7/XJSnWfv9zQk/f1qI0u/TdHHbtkK8acowzvGRvsPaNA0E2nZZDuKbh3D1rhwHp1XHKHJtFFOYK5PFPzCNK5pRUvih9YnIhVotmCYsy190a7xxDPG6eVeS+RScKVrlCiicimEWZOLnYpWcpxMOc1dGdH/N/mUpTl3jLZOfTg3mTtdEbDvDSoGtUoPWg+fLl+efeZdaO9ZVNbMOhTzkUR+jWun73X3inOj+blKzFW3D/sG0AX5gSs0oppXfcOLbAGw3LWjcBtgKBhsmtYbhmBc1s6nebVVPpVO3UUPo/My7GttCqGuEXRAYPE4nvnntMDzEgOcFIE8aGecYB8DUHmc7QznHGDgX/4QUezw5TeRvvBYLp7Mkuf3EELcrAy8EKLImzJINcFdafcSk1qs5F6GzwvVNP1x/ItxENuJ/DYFUY6mDCRGNwbHUX2ewHnhsE9nZ1MAAFABAAAAAAAAAAAAABcAAAD/fDhoBP///yVeBUibKt4J1Mk+WaFkfgCBnz6IrWRV9AAvlnsggxAShZPrOCnfwPk6yVO2Onx6ExpxGQCGgCr5aL9gTwJRKdHZEaNwcPJSnwYGYCQKQBcPyInICdh31W22giFRm4CAARwABeBABlF5mAECgA+c7f359h7BUKZsfdWWn0FR18Pdtr/OnbL7pvtn/3+HGX3dWp7KYuhNjAyaBx1QWrW0zteqosanYxDKanrNyUmou1kr/qMrWtR07qd9Kn7wLR+YdGpa1X6d5tJQN7WokzrazXiIzSMBddWUA2ZpaQumWz67WlvrqplKzX5rywql9qSmkfxn3MRfW9p2TbDk38C/O8e7a0qNkGp3RkqLtpv/UbcUK60K80fwjZVx81/4rRJFViji52FnW4Iso2+++9r/T/HRYV86vbOhEGSr23/3wtW9n5I/tGQc54M/t3n+GLZw1hpZG7qJTOiwLen8jAc1E2RGhPvCb4YmV2xLEEDDbtE4tOyjxPQmczX0ytADs/u/uMFo5j2J8B724OJ3Hgb8PJhK7TadEvCXhwYh2FhNHWkvFC/LwZwQzal01IpLmCh1q6ACciNodktZWeDB0o4dZsS0jCEWEuI2pTibv3XO7+N102SPpot2Upimc5kit6uWVd0P/3dFOlXiPc3RLXAZ4MGeCrNaYwxEcS6ujsEAs2rUjMCBMZLDezEXdD6vP7uXdPdTIzCcRzc3vCuuRe0vbjbg5ilg2BbPIllZZXhPisf5E1uyP4jb957/gYF4fONBeI//ZYEwNiNtqxpYRYFo+hooO4xPIjVK208jLOKNd0E0uxKarWFEJ+ZssaKeEss0vLluAaUqm6EWDDWeJJuBnnI3Cm8oDop1MM6kF4Nxw7devF+yLTjjxPnY8Dw609nzO4WJB5DnXm+oWKNjTcY7OqeU4e7HknXuwOO6l4/bL33Fh6ULhc6MXTvYmPyCWosSKuNnFP2HfiftRwwJxMpjOKa4Pgj6/m5Av/Wmo/B3sw/TGcfPs64DEM6+bbRo0C6SlWJpkghf2/4SAnRkm8eRyRi41VWYCSDSqrpHcjGAJiSzRTygT2dnUwAAAD8AAAAAAAABAAAACQAAAAdCH/YM//////////////9I//hGCAfMTvML8yz09PUp9Yb1gvRv81/mId+vZKaW5enU/RVkAbz8AQrS0Hxwq1PS33+bWpizxJUzfzR6VWNqcYR5nRXjFmAkBm/7FHeE1FCZ8pM9r7kH5xnjI+/KJa3lhFmrb4zU/INi0CNNn1sV8WdUr6zDVclOmusc+kqNk8+1eKbvDZOyRw4VxUecENbOycaha0dCirkXZfTDNKuBCAnLLJXLyVElGMeVexhmTE4z4uJesaEJ55+u+xJcq2LnZxRuyQUfpPxP3y01XZ21zVyLEkJxEx3rfOxQk34UhQZVlAM+YGqDPxG0WCgi4iDbk0ZDnA9WxFaGfggKUVcbZ4m6ISeN4ghuFQiJhVUDT4EJbpGRR+xTJBkgoG/WklxP7aR5MxPRBLsDUpIVURFyKhEJVCDPn4KJMVExbDGFhLLnbaDpp9hpuz1C6o5nOZcI4rKS6do/xi0EVdjXGS9y7oUQQhIxS05dJyFg+9LFGP/zCROnsqNAzQoD9CIIY4ziKAnxlSkXPqL578wX0OpkLo9xBSEd+BdAgTkQHke8h7EOsZu1T3ckkZARQ73pahsCToccYI8jpBYInp1pamyiZxoQypEtzJDkVh9RI2MnGf5lwN0FFGhZwX1ptuEh/Z/xmEOIqZJXzrkUXy78hildS1pqnAN+tVOVXCirm2UbSFwZyk5IEgFf0aNEjKHiRPC2y+4b1aV8cgXfV4OfCqokwR7UGXF/VfI4mvCHmHXkzTf7TuzNBfy+jgGsCS4BEg9N+4ZtXOmSL6uDtmpdwkjQjI/IkpGxxivrKgpjSgJhdMGtKssHbavG1hQp1K2Y64qP0GNRepJgqveEskFrivaZVVa3BPJJGMldPd6Zuv9URjJHMikqxV6bizU4bl1FC8oyDnNegjsUo0joK7E0a4tiJJ3btvpcriYimchDxEFhd7Gch5mLHsGpCc7wM/d/hf8SvQ/iLwNfpNCEHu5MbbpPhN0rbxR6MpnjYlkrqOiPRotIulArh82sMfijPEpwtJVJe2EIYU+Q0rllkhTO4gMSnqk6eSj++bt5VIHKyPvP4xZg2bzyqlLbJl1rOE8SfkL3VNGTwthfNyGy9NpeN0xNMav9/T26jM0CqdcsCXad9W2oFxKsMKnKUY1HDcwsgqeivd85E5yiGa8+RMehghgUHZSeTYSJ9pVZhRij5tFk3T5jyNZ2nj/OpE67BhA/w1qfv1z0UtxMF45jgXic2Kv9ux3dzt37Ec64xhfFaW6T/leGkRZaMBVro/DNWjPrImmZiSxyv2IV0UMXhR/V9NuRdzjFMT3kgZevE8veih+oMFwWAJ2VUrRmyxEYE7cDd/7FMuqjC7a7lP7kM/P6svXezxxRmaSSBFal+W0r7oxc3tEmTocksraQXyPQ2J94tg1fIIhJ8zzbEvJsMt37nThEURTg4OYpOfYfFokCEllriNTKT2EIXPysLxbR5aLUi12xF7rA5YVQnNG4k6cRXYfp8sryEbxEanZ6xp5j4uSpzeWl27ZGieizSM/rLwA2wR1uOGG9H0J7TdSvpcJ09HBrzwWbUT5js0hRVMyld+tUqQBTiL7P4I9vnkH8edrIqeUunlrjr40qD9Eye1gG00uIXC3lLKNeyziLMChKDP6XhjSFFWDViudaMpJJ1+PWSRLkZM47ttt+hViJwyRN1zzHsesHgFt7HTIPQkNTm1ulCc93PTPcHq1Vk87Oapd+XFR61GaKQRZt7TW9YXv3Wdd/lw+qIPdeD7fOrc0KnlYjIMKMmzXTmRQiE4079FTUtqyUxNVn+HDnLaUWyGMKYmve8yI9iEe/lpoRJl6pFycky47dz+gKV8XwfYxy1RT0dxxj1odliRpCICGI9xl7PSgs3c6ZcD5PCUNZxg9BN+QNYkzlLNPbHRGeWh9yr6sSlNBWsc65yysIUlq3l2CdKiprtkoCIIBgOIGG7Zd4VxUOMb01uPydgOwqfoKg2XC0D8XrUqO3krJugqiTYycFx4rUXnL3EhVhTzwO8QXWb2CMuK2lo9ESbh7JkGK4inO+2s3Dd0IfBMBmhxEtQFc9xvDAm5Tfb+ZqIMdJJU6/GeX4KKTAfc8b3BF03nKZMG85gnOkEBe8v+Z1nY0ywUslIj5SUR90zVHOUbiuKTRN+qbqSrHvA5TyvWIiOHfruZZVyq8KqxZ2KPbd5IkzZkTyELaWs/PhjYgk/fbmSQv3s/iK5s05scTGMF8Oxv+7YGUqjPKt3YSex3LY4Gfu6FyNCEO54w9zKHGAiUs1+Gl/xexgFA5B8YY13YE03xU3l7/MVBHlERrJQlbpB/ViE5LCjjbs42UDm+5TqdkOIVi7nu+BIc7LVDOiq8J+uo+2AuTpK9cFmaef+4otLhpb/7zsrt4+qbJ5nR4OrMPBm4WeNV9Z/q981ndhzrKSEhOa8fXQ0jlJ65eiArW9ufRGpzMXv3lT3HZeuFO/KLx2IpS6xXZuvCpZBCTD2pu2fxtTS1qXQ16qo7Xd4i6BK1GpW3PVWF53Y2lntSlP18DLJES9qWxTlVEMu0Iw13zZOkVpigVIhyIIsqmUqqaW9hCAPXksKKGjtj2aTSIwDLJAUDdlqktq7yFoVyaBwkrkpMJkoTEcKmYJgEpySo/J5NAzjSFee3nERQ1TlBbbcoN+agXrUEAti6IHFexgZLRRYKFMe0x/o8e8XKvr5qsJyr9tqDJ0Q7FghFYkOzXyn2mFyRUlviuD7uc9ONocD0cY9Ggud4IsxsQco65CWymhdbMliT828MF3e8IMRlKfXcrIwo6y9qSeQi8RSy2E58f+177XZDrD63cStf9+7ZMSVoejK+67nLvmf5lZW4ySnXMqmsIZYxzyIoycRp8C/Jv860c8tlN3M/q0z0K880i8Sz2WzEDW5jNW+es55LMJSW4VVlHApjUrwi3SZRP3aaXt6r1S/XnWY0vOb72JlLjNEqhvgs205Eo/dpv8SxTOU1Bm8d0Q2WxbypQYwjDWroEIw+CzF3X/Vn47NsbbE5jk9bUu6uqc+EJnnaP9VekrjYyOfTRtVT5qSphdzENqdUp/OglQktTX+f/tUdJMVwSWhqdLZSqNnbf29U6/vruV19FnWxLZghJbH5UdXlIPwi/WZGj3z+eYl7/rHm4lLJ5SUR3FMil2S3XwvnQttX7p9IRyp0m0MbFXF3KIpwbbS5Ji1g/0plP/awsdScxISEPBgLtsMqZuNaiTuA+acrZBdlCYSw5h1qzshJZgChbp2Fk07nLWz64qFbxXzuOq2/YdXwXHmO0xDidBYL3/kkxizcW1TyCaJyNEh75FIeQj73lsp3Hm7rRtNXabXlsZdXWQDab05cmxDZWlU0tTEThYD9Ktpz7Fvr5glLTra8wPY8yiNVkF7iUTF1ER4vGQESQeLg+JTCqesUMykPExkTSG+n1sjU9q3Pl5+4jZyXmAE0Ur9IYGnQtBjkuNSSSwdS43HyG4NR0xt9IM1G99RBl2JRSJoQk4xsPOvmka24gGrjGeM7kXEustQm9EgyIg0mYVSMqSeu2/GEgC26eQLuJdF9JqSg0ko5wb3PZLRMT3L2oq5Mo9J73hWf/FePYcjMmhR116YVTf8kWN+RuhPncay4icojhZogjCO0E1xpujDA8SZfFK2nJoESMwmysjYsuobiH8+uf4c/ZwmTnKBqLHhGtxAJ4t/7QZV1IlPyMik+4J+aLgGwvGzqx4TqfyeZkbU4MJ5V2WxB0MuaaC5W0o24GtEDIlTDb5ylmhoyRRslnK0mK1zYMLFX/KHNy1qJWyGvmExNuW0jECxJBjQr0JdivDBIqLjHZg/pS0ZZkS0o/V2JYakIa3T2dnUwAAYAEAAAAAAAAAAAAAGAAAAMPI3HYC//5cHNxYuTqcYST5pEc3p9gLKPPQ3HeUsEztonJWffmgQlMDPBpWmAUhvgQX2p2bATHx2QqEUAQoBKgJ8gKB8D7lG29iDUQYngywEcKhAUwh8AME+JwAo8b0bKBmbVtvAXdRACgBQ+7AAOHcAGNxLjSGv8K3/T/j/RdXxnV/fa7Snwfom237iRuMoPsDL2xC6K/he7jDfcVylNRccZ+l7XakJtyfj9Gg2ooLQitd42LEq62Imd+PfPbgtrtNXGafKJegXqw6tVwbsp2v12s/3X6QbPwmMJwuusICiz6zKqQsye7ETorNJkWbSm696LP6emxzptmGjdCKjXu6nXbOv33+P3jqP1yNo6DixEcJ2u+w+EGK64E0PzdNw4vFIHHlwobjpl1iHATlQw7tY0qgEAtWodkALj7JLhcWpqlpcAAhVBOYsLQIxd7ooKN5y0cVrz/WPMacGYSPW5xSt7yNg+J4sXnwNZgjlMyfNL71WjbCpVyzp6bXxVV6FcqkPmry1wJRO3+rEYAr1e9wd5rxesFnBwFQpvSusf2P/pbwjgsJRjAZuMvLOIjhYv7S34ACp7qTu91r558nmYQvyfX59P+Hc/IKJ43n6SBhUuWapFmRSD1jDx2XXHy82Na1ovPWIR4YDAcMBHdU81L/2YE65TViJ/hC/Q+HKfPfeXF9dk9nZ1MAAHABAAAAAAAAAAAAABkAAAAUIxUTA///VlwdTqJs6nU57ellbPtbaAPB8oGgsVIfQ6EePjY5fgyh2ZQDUMfgiT2zsTojMfaKVhIIdG/J6wekmafANT20D4ylrvAIEKUBtTbzIcjA+K1aNBbE0Mh8D7mHwPu+NEgBffHwIPq++vUvHyAPvnSAAWHyPgcANNsJuD7M3wV/osKxIw+jp8+E3fDOoMXprwfYG+Qg+gQMEKbvui2Ch1Sm622o/RSk53agHZfihx6MN9Q4LvvOoapZr23wRL9dlleYeL6xx9AkfCgWm7Ybd97KUrL7Nog6pyBqDcJ2rCOwxrK9xSN8Pfse3Zovekzs3Keh/b7sP1KEBabSj/oPoEI9AHRiiJCO6xdfrLso3XOj7ScVsOZNk33W43mHPalOG8OSzr74bDf5mNj/CH/BaEKPGj8OOQUaFZE8iwLu6WrFkP7OuEAHlUGtaXAsrgIy46LS4UEqMLAF37JGEQ7rctYri0nHAAcS0KtSP25mDBiNGnHDRYeUGCzRvLnN5lqWm813zyee6nnnntAlPMutZlnyLvp+Y/N83y/TXxydPTPZ3QWMqxqq8ZRrLx2RYzdKFD2GIm1GzCtRN6y5Cro6VVEo2tGClSwMWkC673e717rxeRtleLxedx2XnT9kWya7Rnbv/WCBBcqm4tC7lFON5k/+jBRafDTVRg4+0hoLEZW330kqHB5HgubxKZ+TVcNmRhtw19565al3uHs9T9+7ul/vW2L3DB8OmAgm9v5iasD40Mdd0u4YeYitZhr6ts8K9ekaA4mY4yp9foBfqa1vT9/z8fQT1XpAT2dnUwAAgAEAAAAAAAAAAAAAGgAAABAvpYMD//+UXR1OpGzqdRIdT1kDXE+l0/EqtMRAqYwRatAIERED0xCIDbyCGPBBtKNjjokqfSUg8gw9FCHuCZDYgdM+h5GdAc18Gq+zkDo1O6IpHBMIcVXXtBLkGfAdAJKezgD4nR8CHAnICcp3WyBjGNsbIIE1hRWQATSwAA1EAwBpTUxW3lPW6R1a2vT9ztx2HGjuww6/dhn5PsNL2LQD6C4/wyOfvEZLdvYtmwyVB+jsJRyI28XQREB9hpEwRjm3jfFGDfLCf18URcNmC266T8hZ7bn/7SPxdntOu+P2I6CRFrED2e5UiNKxUoxyV2D6C0x8qlKsVWtKn8Rt6ynVd5lPTV/qp6yqdKrNd+230PPY3e1eOKBRkWmJIg0xEbjcFPvAu/TDG2o0i1zB0m7TrvcdmnY4Ua4j1p3H2H5FLfcKqb/tf/Cz7X77K5DQ0Mv+Bwi1bquqLXVnOyWWEOtXPDg4373/r7Lw29e5wQ75MgWHyMxXYvWfhVjg6G+rPFem+936R69F/VODxT1p1v66xaYnCzsF2ksYbNFBnhr6Y4C0Q1jGwaVeEWxqbYtjQ0J0tYIaGsqJBXENFlIPZMzsijRrsqvLiwlMVeXKv7M8uufnV/LjqylGV2Bqjsa0UAtLq7ruvQ89OnPzevAseZtweCgnbblefbvN4Ycu4vr0i/J/qem764Lls246sxxC3d20491Oumg0hc1YGk2p/K+KzJIGEDe5UdEqKssG4nq0qb9xc0s+28Zxltand4r/V/V/HR5hoQPe97xfvy97ft+0+Xv3bkrNWmdmEwmEwycwmE5mHClkIVDzxREBRs4+VHjfyrrx6nqbv5fr++0+u/f7MwXxjbbzRHCJENSwZ1aGCGEcVnvFN6YUoE9nZ1MAAJABAAAAAAAAAAAAABsAAADDQQqqCP/////////EFAT8OxAI4elALDRggiHPRfVBcOUfTs8uKynTRycGNlsYJB2jBZ1HR1MdjHfRTpzyMLO075aLH0ObNc8KN45AUAAPQiDotHy3xaaFRXgjYyOcxZrtyP9T/LdgX+NQVWp2zCrW7T5TC3CZQEBoUIIjdrHadnTtO+inWtNpmlmoUsOQFAOscRlbZ4MW8t5LLG2grXst8QP/fAc5f8tefoGD2/YHBZ01NSvxKXAp5J4/4bfIptl0NOtfaR1gdrVazGwxO3y2+djdhtcwsOQE2MwZTwGtbB6+cZRbYz94GRxm16Gdt7tMZrI5uHNmkYYRPIjBmkRAX+0/tt+9L+MPj3DGa/t539/n/P0Q7SF7tRVgwOsPWWWnJMTHGxUIWZk72HICaYwI0UwaDshq7FupG6PbvpiunNu6rDFWjm4AosJ8NkSSot4QIgLq/jQeYVRCdvY12/zSSyC240WzjbLw7bR9O06bW+U6kLMwQ0QTcZluvxaHlPkg+Uc4+DmrywVaKUvqhOqfDlFW07badp02TmwgIDodAyk89uB8sMpUpYDoZR56XJ549M96UmHTNMFhrARgdDoF4nph9ACwMgMNMAdMo889DwU+D3o+WnwhYUmHToFp0Op5506dbkL0A7beO225qLqFlqDGMPysNYsWIEDZbN1bczpNG60ejO22227ZOo/o7P4jPUdXjUl5ph/C01o4ULevi6yBicDdW+ix5433Zrr3X6PRutJoztGgO226IEGa869RNbRoH0CA9B5oLwfC1ZSnX0ws01ixZynR9rEFq77YuiBAaDxGUG6wKiA0F09Ag/SaF/R6M7SgrbXTQn3Yo8VR5WWZydp916r3Fcc6QpU2RX5vkqhYZZVw2xfK6DuheMACYeBHNzH3TR6N1o9GfFFFGUU6iplO7qpR5tbzDY63tdMZ37gBCEzxFICyi0HR4IL/P1nP+eLrLLmGv/7D0ekdaPRnxrdT115+4ojEX5lut92YbPdaPR3LQdESI0SLj4duc7XkSLMWjjkSJEiRIkSKN+2ZNOhiCxTp7dfpdvt0SLSa4vT+qp2cixG7ofRIkSJFmqJFWta7Pd0/yOta1nNczKknb7frUSIpEi3qlIuXVz7zE1rWqL57Y1rWp1qaLkSJ4i5EiPZ7Gu0eF7CtVvdFS1r3q4qrRC1F9ll8ERBAkVeQ+i3/7pEiRInjxEiLRdFV1VmVv9H+iLWW2okVgtxfViavPn30SJEiePESx76L6SiNEiP4F+OL222YXGGiz7pnd4FcfnFqgkqlWfgctQNgNrTsIsIII2m4BhFllkwRSIEPg+inMmwNngEEWE7LvaQQRZZZ6G6BTOYb5t6eQIP8tBnQEUGY6wxvnsmSh+OzM8x17mAw3NzlChMoqo4sx/Vz38wADc/z//iXU5p7mj7/d84hFWLJtpWpOcVEsFjNgxohH6RIkSAhpEiSnpKxhYRwhkjISDSJEiDMAJEiRIk7FK59BSRDG5zboy5xySR1+k1iopz2DuDKD0nI/ZA4zTPGgQedtttv+id6lFFl7d5sXrzQaDQaC22232ViJ/3m/vENGUVxdP5Dtdj+7+wVH/oNBoNBaO205UqXhLzprxVSlpRRY5XTS1aKFiwVMaBVoNBbbbbgmsdPbn4vl8aolSXbeCz3sjH+grQbfEX+gV6DQFFXEKt/thG79hxvY2No7frbbaU93d3x/H/q1atWsKMY7XlqtXta1r1wzDlbrUQhCrWtdz4m+A4IfwEuZlaqwlzvAzxbwQhCrWtUrRjHnqOHOOGZOcqaVrP2iBse2kMaoeIVBC2ta11PFLuX0Iec0+FXiKXQ8u+pAKlR7wQhC9rWte9n73eUpTmXd147fPPgFA7wiEIXr4+0pdiF/f0b/OThGxsbGnnsTExv9G/2Shyx+VY2NjY1ZWWMeRMTExP92N/vnbHh+cjY16NjTyNjSrNM+TTg9+YkCJif7+/o3bsmoqB3XK/P8ZfN+eVfqKqidiYn+/v7+dI3+PPU9QXsTE/1P7+m2JiUMQEHLt+r5q/WiVHtoJcpSn3FqQoH6bqe5yByCUoMCTsCDJkESu8WQP3nSZV1xQZH5A27pbN0kFK8EOxUlPGmajWVTwW26a4sf+zz38kpczOJHFZcHeOZelSpT0pnwlSpSuVQ5kOCX545KgyZEqVK8GfCVKlSpRZUhKZXPK+8ffdBCpBTq5pTalNrGol+XUcu96JK/91ZOuM3p3nd7dLul85veg86o0OYh84BJbYbYbYbYhiZLbEMTDElQxPEp0pnBcYChiYYmGJhiZ5LbEMTDEwxMMTzu9jHd1ddqEcut957z3iqO7tbFA3zSiyyo0WG41grBozUj4vYsupdY+PN1WlRMbOY2yrVEcOJZmXda0juRKKN2b03l3GpaVp9MTGrCXSDvfWdkLW2IJgHsYjAkwIG4cGTW4w93LSsA7AxE+4EoKvDcCFB2BA/I1SSbu7v1jZKZbYbYbZ271HbTE81yWVshHSp7u79Osoq8y7MjZpmNRu7u2ZLNbtv5JrX9tsycYeuP3Sf8phfH3SKaT1ttToIotIhD69bbSS+2kUycRvRzv+XG0YxXMitJIsV7befWohwlGX+37nquLVNXvT7MH5mZn8eZmZmZmXFmRlKAqTLIE9nZ1MAAABIAAAAAAAAAQAAAAoAAAAKcjahDP//////////////Mf/4RggI4U7ryO027MPtE+757kXsAerq5h7pv958yyCRem3lQvY9f4EDCt7lSCxC/pK9EdkKhyfTHtTvdZU8OLSliZz+4Gifgh3ztV8QryxSEsAwxp1CtK6lgD4s2c4aVWm3H/SAUMiOgNRBTUz900g3tv3Qk+5PO9as/somyRr2CtKcofGx+Pob1QTd+i3QWus8K7TaQQcnlpXTdvMfCEgixXss6/RxV19lPgLC9396G2rkJdcBSihZqN1CZiEpQbZKkYaKtPUeTrytlkw3sxTp/FAXOZQzEW41KzIkoIrBJOwehKkTT5om59TcWU2FOypupT9aLoL1LkclggTOEd3aHURu2Jefe9tyb0K86kWlTTpRaXnzboymhLJgNlFF5QF21f76rKNLKXZbkvT3YC/OciTAx7rTS2yThL6g1Bb174MpTMyyO8jG+jyEJ+y7pPj65KeGo3XnXaSbMd93xlxXTozriQ6VSv7TRNW3UuZ2OfRBC9d0KLGOa5PtUVIZb/4NWIN70fsLp5PAYBAs1uk0arIRSRoIqyADVUJaT6aKvIxxZHFkIvsXtqv2pUaxBr/eOA/FJegly8I9XzkKFcnQbdxyNVbdx70avdipQ7REeVO2PwgrXx/qoJxPFN1AOtobyqOXWOQoBPqNejxbWpIxmWHeOZ60lmOxM2Ton01nEEdwj0Fjc+13m+rY1Pa7WxJs+NHu510G9ZCXDVVNWrR1T4Atrr9u39fONVzbw6CP6NUKvg9XwZuh0DZvTPyZnpQPEoFRV4/irvg07OwJ8e6VOwVRqUuqaS6NK+g1LJ4zDyVH06S9y0OaM1dKLZI9ZMaFzpzeiB6uZqe0vPtvmVTEqSjbea63eLiRNHfyWeko31aTmbzEyhKLa26yCmOFyyurI6nXwjRWeluoz0r43RsBXLonhB987lGsBgyZKYick0euiVlzpY9v4PAsCI95oE2Up41vecoH2qJwCXBdIfSGC00FFNtcYNdsIyO4+z0EZjJdv+jXsJQokiQiCpQTd0TtGGpn/tuBdB6k+HG7GBkmX1UGm8YXr7QDaxoLVJzL9HSqhmS48ErVJZcwMlFIOXVOhBCBHR6Q8irDjrOBZMeNPLLEnRpyIkQGuW4MbSxCIjd0TV3m3QgCipq7CWxUrmUL6VgN84LfgWEpoZQckHtzgsGDujTEAZQekFrOCt7PjRoSbhdybKObsLYXMrJ/Y+rTdl0G57pflbUAiahyondkvBxU1J4uK1nCGi8W5CoTrREGKndbEOlB+V8o2JcpbBM/77Myg9B/+UobysGg4jz5xsNmJqfJZQ1hljIHOCSoEm5PjhBz7vj0qeY4HycHXNz+9nkW3xDsGnVYFAArhJwEtpjHRsfd+hvhATnXwoqtFYF4SDkvqXoRrXOkxFUPP+dPgZgtdlTFIDPc6Drm6OnRnZQdc1TddwNIsxLkY9ZASMGbGB4CM0VQiLvD+K0lvzSf4i0POf/UK+xqsy387Ipup/S9phspqbms9euxYhOfW1SKtCc/bnpEx2okKxjx+FG/mSQhZLN0n8rbe3UbLqFFtTPP+j2Ai+x8OMuX0rrUYpW5v1b6pNBnFqJHQzRZ1orr6X7W8cJmafUWBYZNHyRX+djE6N70cpjfIyVcRqYQt6zPpRGihbW7utg3I+dQ0KVpN3ZIrrqFI1rZr/nf3GNPhUPZzN74ylrKMpcEYfOlc1bMQIzA7BkCgI8Yo+HFIPVETaugm0bVIaWcfvMOhiK5gTKSleITIOM/8P81eDEm9ym5dp6ha08MhjxHFc7dtkEIIKrZUPJvTQc6Xc2ckWT+sa7ZEKJQ/kb/5R9p9GJ38e01gVRavoQemEQIbMaRxzD5utiFzmgRPlzqPU3F4dKr/49YWgmCVSqmW5lX3Rb5JibzMQlqngYIgpUiFNyupBlwzj8Z3I24izkx2YY8ynX4DM2l0IhMfSQIhodOjsnCAbrA3loRsbWNuIVbkrXTvhdKcqVMB2atk60W4QFPzarrJjaxtBfQSw2gkBUuHVZYMauiEzlmNmPU4XwlyBVFr3YWLmCUHeWGE0b+ZMVcr2+4xbGvlJhUpEkpGG9YVc67CI9EZOrZPy7qkIItDov8TbKsU0toWOahDKc+RCylmwbumr8WviRzmvtvteWmlrk5escRbctxYWZC0eyeKWIvdVpOX9qr+K41bxS4n9RlqPdhRJfzUmQdhj7ES4lEX/8t9V/50eZ6y0+K+rGTXTLeXvX3ZXYA2hSfV27ov09aM5q8Q/Ekp9aubX0FEzEffzesn5tne3wtG6QUetCF5IfVKj0Pa+kKKTkiq72wk563BUVelwhax31FRh4pPVRE2gUohLW2B30H6xfoB55O0ecXZCY81DtlG2Bhc17+PDEUSfvK409imSOo7Vyx3nhL+mRxsGh5oIfWkAoZsJ87vcrfrrWFiKB4nV1OXRJetBpNFfUUawKi5dhC0p/TiUKC2QQTPrlO9uVkUPQ6mF5RdP57BjPYtLXVPa7DH3xnG2IIMhwZC2zT5Wa4d47DITJs0KIXSOlLYzbmlnGppox7Wh7CBQfwpwSa6St5zdRhUVfWEP8pM7UCFiFJ20rV1aRJkwoIyLFjvU9hP0NtBmg6riiIETdguqiiUILzknqPIsv5fOh6ZURIRaHYsSpCHsEyEOSzqvDQlfLaUBbTt/ITBYJfgnVmqEIpco9zDuwc6zDlXlJmph0S+KdemlpimGRf0rNuFa5FcTlByvQfcubbiwbe7LWSJIiBxkxcdp0i6bMD6Tn32AqlF2pACClPuvgBAs3BRrMohAc8g7HexbDFlyuDfu1gfcwhPtAY/ecL4OpTTDn1W5LlB0+82kqVjOE0g3jjxN9UVhaN/Mms1s20szp8f5ibmuQzyPUVkmkfu6aED4PF8IWFwzyVNBmIT9hhFmgVSGbtSZDDYbC+TYJB5koslesXvdUoSKDmo/J8R1MizCTNwJLLlsH9PsmNK2BMREECopfUXqauU33lyW5DGx807ztgW+51NzMrrlcyiOGd5ewjhf2jYBwdsvBNVNqtpK754pAmkzito67zRmJsGzkNclEvmFGmGB38uJsoh4/6ZZUKmhicQuaRN04FWpmiCZqVvkV0Ls4LBuPZbQrDSKLCc2S9bEzRudWppiaEeinFxBrCT5VGCX4rey+A/JbosRJU81Szs9Y5N5hmRQC6mSg9r4skRxo8mQXE/mAotqe9WmwsW0ZZJfluhE5k9C3kDRvrd1A7pc/58/jfujqeWnIg+/m3ntW5pGvRReKRwMMURT3UTFIwmywysguel3FIFazKdJfLghLKUzFJ+bng4hIrn4SxKhMnLLLc0zufRhcNgSY0WGrDGJW7XDyaMbaKLWfiIcdaLpUjm/vQOCj9G/+RZZCsXDi6ST9IkJn//LR6CoNoxBUqVCCOper1qrROz1Yj+k6RWsr3XUnR1tMlfaWR5BHEdJMdssnojxfRPSh+rJITvKhulEw04r2YQJlOOcFaagu0FW+ubuT9y2WdnSWSFex5iIQovziU7HIa9ZEZ1Fhj0TmvdxDUC5enkCZD6/91tCIKXFODytvevKvC9O58quVSlFNs03adluIXfMKgg/3x7TtOSTMRQry1RvT8Fs95NCsE65KFIROPW23pKjyvv90DRzBLeQQgVGUzNoHr+fTjk1orH3cYqFISBWvUoU6xyWdu84k56Hoi/Mwz9OijatQWTGSHYI4lcsYs9JKrS1NapVeZ/UadeTCLdkstNkGT3YrN9EQYqANqXBbFjUFb5ZiyMZabOBW581vt2Igr55SX1rkAlftPZ2dTAACgAQAAAAAAAAAAAAAcAAAADK93IQT///92YCczgnUkyJlTOp4Mmu5JZ9IeWPCMARATGPg+QShPoe53ZtIKEoIbLCHtljsJeRGCHQGJ8KogXgEPjRPYAv0wIcFAQOi+gdJIXMkYnIgmQHTSHyOH8HgDBPIBTl3gRCUAQBUAgADKjetgFeduq3cwAk5PcHB+vKvp6xh///f3xcFZWo6utrc3boVq2Vvcg0CVl0LHOP3K/Je4o8TzqygtPgEPlMoeIokD7yeFfUCYGATQp176vMVrc0WGTg0A9HFCm8HgV83e7vSRI2ry+3r7FRaLzYU+AUCOgSycF2XDb69y6iYP0u/GcIHBYCNZD2iWe4GwlxN2AVj4HLcYVgZTPNtS4qjaLjLU6sefLFOHGgfAHGX3sBri0BNBzl2DFlOMBMGyaxtSLLAFscV7dsCUdutRH2+ed9YlZ2uwA2TbkRZdZBDrBjTx5vrohoEeEWNY3bcMMeDqWdciM2JIOkf0ZtFlOY5EVx2OXSkA2LhFKOjg8iWEUsSGeRN2JxDEsn4uBgavGQXWYcFgbv4X422CbCZJ0fjRMQPPq495j0B03EXhyOt3iihiy5ov05FKw41cqHg69Xz3uEOqhJMVGyohoRFfpSlOjbd/8/ke8pIy81gVyxyLC1HZvQRertC+PFWic3v9Fmqw9lB2VYjnv579B11iHLXMHYT/PIrWpHd9GefMeriBsqbBtj3mDOUx+93eMci9kr0Sz7/w7BC1WqXCeROjE2e7PrZYNn2SxDEe/d+fQD4e+fM9kdFb77h0nYjYevTm68K2DYJ+FlrfmWsD/a6z+x4XGnstcSj1P4ard+mjRZZ9/4XJpce/T/nR5cpwZiPKixnFVKBFIq9fXly5BrHUrp7OtoB1h1uAzjOi7ngPLrc6SPsM3d9nTEO0k4ZbTOf/L/z59uPDrFw47yg6d3emI32g7XfOwPY0k0DNavJ5DOpNj9KY8Xp6/fud5lY9n0414ur1ZlMgAeSmf4vir8ZxQpTaF3mEzdeN6vbb7/2sKaf6mH6Y4R4VI1GZvs5iuLnbfDTxmFrrceYPittmjUwQs2jX7evCF4wzyY1gJNy0AZ4MuVZV0I25VgQ/y23CTJbqYuSXUqKtoSmzM7kLVV+AF4I1NMzZgKSuoDXuF11JJJPbcvc5uALdnFHW1n7Xr1Z1VqjrHdRsEVYsmHN6i/S+cE9nZ1MAALABAAAAAAAAAAAAAB0AAABnlgJQAv/IXycZuc0zIypPtR8Cz7wrgtKYm8gYeQR8mnERO1A5F7PQHk+BGAED0tTD7FECmssQPyZT6KUoc36gQMKcAcvZ3YIiJDkAuVb0ExotUIYgA2DoBneqDsAdGNV8wE54wP7uuzDsMHowNT7wn6Ywi3CYj7i6/ylKB/Gv+s/wluT2aPO6+sWPbU2Pi/lgkaRHplqs14pqps2ra0r7zsjjBFh22Gdg26vx1ufpm09KwoosuvkVSoLp6wtpbZ9p3tRiDAt6Bnau5XstpPSLFlDdYoLsVjMGBrDUy604zqwnNNrkM0JABcteeGEpMs8N9x/zhAR7m5vSzLOzj/2Rq4/D56noekefRXYuk6hZsH8aJfy5SuqrV4cSUktY0ur/yxZTpdF3MLr7n6+65pQ+ZHz+Ova/2LubmB5h8/N941UydWTo0D2hf3IwoSNxuMpDOaBlIOcdzRCKRmmHuM40nZwiAPXZfdOuiH8Qcm3Av3TSdGvRP6MAedFgu5I7tH7juvoljAAQEnwk1V7iArWCoh9yPEpceJG8eJ/twiSV4fu3An/TEfKxN5k34s/BWJSmc0PgmFGLjVeRq4qZL/FF+qwkCTv9wHGqRhsBYgRPZ2dTAADAAQAAAAAAAAAAAAAeAAAA80wIeAP//x9iHWZvF5skxR87h7TL9z2cHTpEamUYnzJg8gfQpDQjNB4cidhNPRRi9HzCM+h7xhwogfKnvFTic2S+ZAAEgMKKoCkE5OgDHVu2QQkhgwAxBM8DLi7unBgHKkzuJQ/Go7tc6R7qtWF7iT5W3a6ra44DP0K3RVkpANmXsGGAePgwujAcKxQJ3E5dW+VrXeGUvOvgG8utxmyeAWWBMprypFM38xtICtsWRvLwtTXdrxSjd6WdBgCHWokRtNOXBMbZuuegUC3g+Wdu09ylyTMghb4QS+K2G+MvoUUWjW6xJInIGjLuFdIGJj6mA8MZCdTOptxh2E0UOH7DWsBjMG0vDUbftVV//QOg7ksIEzhYVHYhwccWRgTzIVlRAADOUVyjbNVxbRoOxOGr9FRiIssQMAULb/TZyLnBLoi//YPj7NKEYbacyskfRf/E/YCCxqRfbts1nGlpzR785WOGdwJXIg9B2P/NGcCSkNcrtC2/XYgdJ5FZfN5gjI52WRLMQ41MhynVH0VPe+B72DNOx6gWiAsWE86Lubr+ohVXUPZuPp1tbDs8BZai1hLnywmdlpjcAOB4uPKAUGt7f2sl243Hi4x8OUfC9rwP7fr1Ynn4dCiVAhYzYknxrh3L0Sh9e8w+iC4R0gPKucE6i3VEmW8MbxFgxE3avXtZ00WF/fxbOiyJJZB9xuF4SW0EsQX4KFm4gI03qv4BgpVZKs2tLZIAT2dnUwAAAFEAAAAAAAABAAAACwAAAIhvU90M//////////////8E//hGCAnmTv+k/2v/Wv8a/2P/Xv81/+XmIS+0LpQvBOmXDYMjcj2kCOQAklYjYxHCLa4mhFkG6tFFIqb31gUiiSbHUGdC+8QM2YBkEi20VXkYQQ3qYQp4osI4h9uP1QeiKR9KOj6thMBpnmThG75OOUrHlUWnjyG2UarH6T7ZCrnaJ8PLAg+cEEEuL3vqy2PFsEnf16ALBawoi8eoGokJUOhoKnyR0V7N0tRDkMFNII1Eq88mszSsFXCg5xXmAAuVcJIWgePsAHciauG0FKjPz9iwXhA+3GEoM2lf29lUclf+BgphiDt8oqFTM2y67X+cKyyeQMUQT/bSFWaDuI/LKv5eG9GvKT9Y0lLHxZxrLmSXXPGvivavq6Vbgpr1Cx/2cMDH1FpRoXTHSzrJwZQCbk1kEXEmlC5sGmeM0hHocGJOapTD1A3DsTtfY8vJljQFVKyYNk+il9L2aRzi/XrmCuUEe25fdvb52nQgBOeneDjFgX/RvHh8CwqjMzHSzjexHcSQs8M7daC2VFnaBa0EprqSQNjHXHKGjvLgqb8r3qc9DsPop9CfH2kY3lI4EdvVRtIuTMWvqq/HZE1CSFBPKgdH3RNqgl/OxOgJFCkSThQkjv7/I9+MYR0iLqR4zCfIvCLmMtRC5dAakixOHy1nmWcRFEn1UEjXgwJ+dVqA1sQLI8cjSiu4ZobjORCZCjtfxO6XAx+Uq8Bhhwe78/XTE8wDwwNUHj4ZhC5IfHdxjH9n4IgI+4YmS0SloF4PW/b1YJI4fnyPoveE6jqvVsQFcqqtpXr5p6any0ZeXtSQpP58E09YvCt+IgHFEuGxlTflVZgi60I3KXoozfPqlutak0EiS+ifp/KhrMPrZPGYEhUFenQwUVD0ZH0XWZQSQdJhyNpF+ScEQ2qpLab5FrX5mv6L865HqtGjN5alNeTDwWGqtfA5KyUkdmZbKR5EhzPZ2qZZXc0S5BsBZ0Mj1emefZsZnICwzWGQFF0E7jNuxjkSNskzObeRmqtFIj1p4isoQhW70iGtkdJ6aCSpb9IwCOrq4PQ1G4U622GyzBsWPSrT2lBfywiMJNJ1al6T55Z9tAVWIBW3oeaL6EtSLlD3nxpXJo0mX1fskvycZgmU1onnVvwe3U9am1FQmHkRxoNrcUmBR8Op0xv2cGAlTCsAsm4Mf+UbNffFHIXopzQ5pL2095M+ELWi8+gXmkR5HE18pOnFdJgyckAw8IEfSLXCiugjC+KKTcgmau/HmOVuCGftHYSfJSFpIzLfE7fYOqTE7yg6ZL3BxCL/TepNpnBIBoSR/jp5mOC0+ujoysigrJ2CtppDrSnvriDwrbjYisstbU2NkIHKsSypZpAxZJ91Dd25hM6O0CiXp3/Fgq1oq9VS93KP0QVZBVvwJ+V8e5a0S0B5GMnYJRfMqUr4obr5dKbegiLfFDSMXmL612/5NHZQ1GqlO8TZqCfN6TcopM2yf+nwdOwiw/AUy9UJJmNhxV/izflRZfd2urlGOOEZL2E0IKgl0eNoFp8mb8AlCe7638TBvKkXPsDdyj5cE3mvvEMk7+D8qegjQz5oi+FeZxkFPKak2TXetEHghApxO4hzGzLnBmP2pMPVUYaYjsLu+TLiC98ecpdtvytVZUIMgJJY4+Ci3TRo/jl5im7m3cwKmUX/I6aevuzGbHDieBFVGWuCdFW1JNLyE/bvoT7mNB2qTsZJjLqwimi0zpgoWu4XATI/tbzCEbNHf4rauoX+n6h9dQX6Ot3MRmHVCYq4zyqo/c1IKxKmDCRNMoeZMmbCeEVlG0T6wfxJ4faGFt6b2WGwZMoV11bhT8MyVtXkzEZKCypNjBQDYMc1l6rKWoLP0X7naSBOk5kyeITkHklPShCIFS0yZHh0aWN2r2CXXEUpYGgkhiq56bpLoP5eJ4r1pRbxdadqn8Wvb+hokk2KseHRLZeGA0PATjCppFoARjRSFkplM020U8RdO4zRm26jm7TNx8tC6pZBPL5NGxUmq/LSXlv4+Q0Pb2Cce7AeEIjBJSlhEHWQo+caZWspNxVefu2KA1A0XuVg052URgSjFH8rqofTKPSiutN4hAYPpuh10i3opZstktROOvbnZmvXpxOqPJzRpcm2TNZN+DC7NemkHowBpWNpMedRBQL679wLEqXLjzo1NiHbfYkjC73qZ3NkElG2kpHek0C2k7/a9+WSrpAoCgJFYYbf68OswnH3SP77UkCllxiaS7A9vKp5G9gozLLHupEbld+eVvrpFL+hB9lDkz6ZDbPyYw+0jj0MmrcIjhncam7bKqX7KV0tdB4b/5SdOntIVWdRAlaVliWoyn12vfWfA8BcPFBIKTjrX0jGHx/+6lPdMgWbSkqhhW7saZw/Hho+matakRTti1VcxySKEihZRoU4UC6nKWfrSb9LDfdRJae4+vSNfl+V6rLSwUZ5WEZu8NaFHjF4wKXM3aLv53abFFdLNiFMWgLhZxqI/niUJOdxrJ0gl32SHwDYSn9+JbPyQgvHaV5lk5SeLl5VB/Gjnnv7RrpPlvew2QIyqyj0vEyGHIDKiZ8RaYQoEkPUzc+rEBkC977Ophp8m83fI8jUncpqbVsOjlL7V3N1fXJ6tZVmRWaTgmnYoC+ET94y9KMIFQlqmGpdYjX/XbcU0w8Umbk+nv+gsBJk8dP+9PEzqFXXJWD+d5wePXWOlaLRzj3mpW7tEbQxKMryfLKLH6PxOlKWBJqqLv+tZ9pYi6M79qaVZpNHudFYUjz7SaM+mrPkbIvS2PFECGH7U4ncg7NGVK+WzyTNY0u5chGhuSC9vjDaIz4AuTltDhUrV/Xolns+yWJxFMd6oVHl6q0cjWgMR92InqKCQ0qt4l1OzMln93q+lfZoae8BLBRqAzBBggEJ5q7eJdMBgD/UyWBwryuKvsK8S8GSSwfK2susXyL9n8YbidiOJxPwXF2MCNaZz5Cu2UBddpFlGZqbic0gJJxkpaw2Yh1wNlJnApDEwj4deSA3uo5AjiFzEHFb0AkGXQVwvkJ2A+ErgYXCqLJkWfSNthw+kFkU2yfMq8jw96I53/FRqitFWYTqTeet1bs0g3LSK52bBRK3JzDiBvikq28iy5BKMeexKtqzWbuX//8WKPTKAs94gROcZD2z6ttzSnu1JNeThV8s5kTM696PEpRM5nm2cn026S8j8brW1WsVdt4o3bEkoXAQuflolw3JZgZYJqRF79iIIxrE3HhOKIvYO1Ut5ASAy8lC3O/y9hkUBcEl6rf5+SzLOc+LRcSAx5LRbozBN+iksoNIuJJREAvhE2LGGhCsodoM/3794DUrBXUXDCLirKBMompUwueHCoDCtUbPiA1hy2iI7BuKq5+lFPxmmvCWW9N0UFLsSvL9Igocc/X0+CSeslL4Yg3MNQAkPK+asBNqD0Lyxk5cknieofvU5wUXcLDQxCDLmK4B6ao6eZ/BSMdOpbCnk5pNkKgEXc1wkb6QbSIs6UW1yBcWoWnpEkCr/423T5VUPaWM1QqEQrFCiCkO6VMMba4S3etQAzlJQT4+38sPi4hsbUW7+oIo8BesRVuwKJXy6hn0i0lfUI4JlQsoPYOATikQ0WsDoS0cZb5UgNx/QnhPxXmktJFZ3672UP4tBCLZii9GRwFOugmwp07UEUG8dBDhgkG5nICWW2J5NgbUEKDfyyyGHw8+jfMaoHPsAilYkawwXPSnWqlMfZE83VI59VXPGo8dt9tcQRr/JtFPxl1CkWDdUk9nZ1MAANABAAAAAAAAAAAAAB8AAAAM9P0iA///DWIvF4zjeJWSS/c90n3I+BEEKYF6Po4D9jkkp8ERjYlobV+Bc8m1a2J2dHLspgemcPijSvb8XwOgG6LSZg4+WkA9JQUsOoAGqPeAcuCAUADk+DhMU+YAPbJ6jt4p498Acse7gQ9A0xclNRYOra9jyj7NyxcplGvY8vgaNG2vq7PKEXwA/HbrE3OMrWkXDb8shmke+73OkN7Ixdr4fucWjdrbXVo5l4ueUjkgKRQ3YEbkhjgRVcpKUskAdKl6xxK8xRmbfD9wc7uFk0UWHpFH/G5foBddWyUYCdLGGxc4aGstcs5cCI4CER/b2LMsu2bCZd1143EWSYEuycBwYHh2hjCFIOYkgXzlAHvQUOIsTgiBOOohmqya1ZP0lFfgXTzlUSkWUhHwOnTnF3SnZ6HupTDRFPw7AtMYzXBeclYEZB0y5+oBzQLfDxnmBu6VP9H61wpCweRKbPskeuOTIXMXfPZmGIcrWLREMZA4wtSjkTYNND3r9t1+q3Vofy4+kDezyTfVLR4hsfGgLcxqESfEk9cQ+8cC378zlShWNmGkOOWlRXV94i0Q8+v3T9OV+/cCpjnUs4u9+8lqhGKbncdN3cTtAc1prdwJ5twc9QNO1Y3vV6zy4YlCsOMx9cspQwwj0DGccao2nVMW4MFrVOJJYkA8gRv4GLzmvXX30MEppCCRfDrzU8W5+T8bDJRPZ2dTAADgAQAAAAAAAAAAAAAgAAAAGO/AiQL/RF4nM6nUOM4hx9r8A10CKdaE1BKlAEEQ70BfqfQ8HCrRsCwbCAC1QKB9zywQO1CGGkCKa8moJH8QATszoiB3AoPwQBKdihUGNkoC4ege34hbZA5ETAaAXKt6UIRtUWAAogBhDQAYGwBkSguB0Pa5y+u5OZ56FRduVg54Ur+fMW3s8R1MeciamePOO5NGaH+S/hTjotitt65uZsuD6E2z/9lvZnPayw2R63xvPPi0qDg7GrtYBXgPySJjEea1Vqxzn8GZdCD2woW6Bf3J6MzNbz1+DwEcpFrtuJ9hAi8i0uyKCHCnh+12irAUE+hdeYZQ80iF0gC+EVOHJET6ld9lxT6cz/CeESrl6ut2Rn+DEH87FOBA/0//c7KmElpiiw2PaZUbsV8J2aKdh9xDLeF/6X3cvpp1T1faAMn5wj1p8Ydlf+9AT2dnUwAA8AEAAAAAAAAAAAAAIQAAAGbgln8F/////xliJzObgQ4wyGHTHhKOXT7CWMjhwcNIKTBPiej6gdnBzKDeRA6ARgKBW78DyQSqTwWGgDh+QgeMPszkVI+AifMADkoIqNJqiR+InacoFtE4UH5gcH3AAqx/SqAdcoKNAqg3K2oCt+370PQGEeR3nz7liSa/sv8AzmfbTkxzLrq/XeieXKgAAYt9hh6474387frrvt94cm1WUn6xofYW/W65ci0WcRJIzkWyN6oLSp36IUqOdTYy/2jXWImt16sqhXaesH0DSPtCKpKpTka1efIxUOPKvSUK5U6Fq21USJNDlLQGyLpiRrred2ppd5WyrdNQXXW0LER66fYDoOoarMEVVr9Y9JJza/6VqA2VBxH71z3TdbYt2ZCSY1YsoIV5U6QpqxUKEnyOHyvHSkeLvrFjaaEHWj0I5aqJXeIwKmq8MLGcaZedy1Nd7ow3Zm/dua6uXQxbsRSztKUgG0bpyuJcv9y53XrhP7jJ1LbCblidfLrZPWivBfMeNTqKY/J9C4buf9cFjsagTvh79MgQUrQZKvCBpN+GZf47l+uXs95t9psNyeN+FWmWLS0Ckh237gn2b3TH3u7ct94sPTaQ2fd99w8WQMR+LQLleLlirVMakrUW2Rrr43yvXezQKS1mLaZedv6+F6rg/G17ur5Vi+dNjAbzje7mPOytzu60cZ3zKLOfR65Pt4CMPe70BLmw7VnIM8T+Vej0Wt1hVorPFhnbTQ6vmmzmf9bZmcIKrOW910d7hx3VAQ/aCHx+f/3XR4b0+729ZYgNyWKYVqFK2yR8kb6lcotQD+c4Z/B8gF0xUUhrEG8+NzNnKF8uzk1z99iBy+Llw7pKtXr5V+/zc4GvUW4Z1uoV+NaMY3fldhs6P8VMDxqe0l9Iq9f3nqBFFLCihHcvbwoyqkens/aU98mphC2y/mdtHlGqQ6v1FT1P37DJt1nCag/EPOGH5S89m1+0N+os3neIb9gaTNvL8z58IuiHKpefNjlZWgX7uXsbK7UbQ4NVldLD9MjGMtbDJzf2bESUuoXZRinhUpaOX8J/wli5TK8xUNy56olmV5SCf2EvyGXijN6PK6dwVplKyNqNWU9TBjeo1Ho0LE41NeiYC9Zm0Dj2Qd+9+/uy4XN70zlYQiKjbB50mSAG2gIwl9964rmnOb96QEM4BYp4/lLRWUXVtBurrjbWgzgDHhV4sSKJNVWxzxvL5ExPG2FX3+sZHWQWAqhQcCNoqz8UrVh7YMnQrvLtXVlY2wcMY4s3eG+UwY7rdZFmuNoXUqKJIIeg7HXAffbFdMlCKVRTCY2wTZoaypRUZ3Tyd/P9biCoMP+L+hD20lHWD/fcpZSfH7/WjcWqDKJEkYQz/omWkvpiaB/PX0HqXZhIBMUv1EjD+9f106cAT2dnUwAEAFoAAAAAAAABAAAADAAAAIf76FkM//////////////80//hGCArvTv0W/DL8TPyl/P/8Ivqn+1vmIWS1hp2i4BHt7QwkGjxXgQWxfEdJ9mSMou8fjq16Udjl5+ZtiQ7WHz5CGR3UpqIwksmrVLib0J6Sd8RZYswDvGsFeRTeGwiOIqpTfWrqUvKl+siW2unGT5RaV7r7Dmr63IipKFlzf/LCnChE0RhDZnHFE26mysm7ltHKpjvM8IunhKjcLdF1KLK8jIu+e4meyoFXTJX4Jq63lcYI42D3fGw7BJ4Ay9A6re+7BIVUYdoebc6LirP9r9kmqkqhwaJQSQTRPFDy2MRVClbxaqR+FQBW6mosl9mvZSzQ+0ajuadVUdpCTJ5/GM9kNzb0ojh1t9Wm+5BiCFGhWCixr2qbfzvWQFKCRk61RVBuL7VsBByQy5u2hbSNeSU2znpX+xN96zQsGUqLAoyIhq66rNNKM4BlCF6MgpZaBk/yvp3KY9hFi3zFoZRslwY5IbTi/3J+FDop/iGQGCaExKomL3kSvvSQo/3fmlVa9MVRU6dJEk1Vn3atZs6Ly3XQclaIP4R4gXDhkPicKnFrbVFfLO1pwXS7KEINiOGtUq25bIjW3V+dZYV1Jgwy6VPha9eM6+MWVXWSpfSss65DPEQynZjeWcTtxyfsnl+nakLQnc3fAIMUiUeKD42SLbAkbQ9SLnQ062KOqGoaDWKAYSnwLka7bWhVqAtqFfpQzAznof+TepOONSvB8xSTzoHvJrGUiyDeFOEsJJI09i3nEhmy5l3cuwkqShfJ7ztCs/4tM4nCLIZBY1aL2xdNws2ciDy0qUVtHIISwiX9MnhDz9G6W9JuHofruawm8crUeVZzKrDennao3vDSPPU3CEQkz1QPsV2n4Eo+bh6RSQuEtuRpvrwrTfaS68cSm4iYJoxliaPLtnXzazVMin1faNx+IXQpxRWgpUPUqM/rKt8srwqKIqQ5gYgkHeEgTKSIO2CykvXeYpYQdZv0xF2FVmzhM0mvVaT9SLXlmaTDcnijOM9ECzuSjqL6sOKj4hzwfmLUy5E4/aElrU3RJ9X72NM22gK/USLJihLu9ZcPi/fP/3Fj9bjIcDjCJregwiG9sjp9thCJ3AjK83Ft/teP2gBWK+siRfU+OJWy8qtbUOYhA1H1cK+Mlt5M1VfSOXQ9kDKO0uL4baKhtmQTxwtpBO+8bI0UjNpNQmWklsARqZio22TGBet2hyljaZC1fChHJNTgFcHbHLHQoKoGWo1pSswnxT2PeN3/zvmPF2NtyxSxJVS1d8UFQPJlRusTFSFLgcEhKilNZAg2MMvsqu+ghywqEjqeuv1k5XFij2vYTppKwlCJCY/ip1HD0nPpeFaobDuBOT8gSVDh3PMdKXcRHizOQgOKDNoijwkqcR53ZJYcw2HH4zYJDQvFYuUvfSTgoamVHi5/8moYOL2OIFgg6eWV5sl17I+MMV+h43U5R426R9NA8kM/yyut0lr5yQlaUeXVki7uNnBYRh3xXXUVQWBRooqRANlNyMtvJeChmS8CD5LSIP7s2lWlt+CuBCqT+UjZBdGhqR3woNs0aJJRhCWeh5IAWD/OeiKY01084ouAt31ZLpuhk4cu2DYL+a/y/s3unztkw/XZAiP8nKxr9NWMXhD0WLty5R5StuyICjW9vuY3KuRUbCGe8nRIUq7bf9HF5BK7RNm+ZXTqZb2y3Pvo5HLpg4+3tOiZEczguaPxZdSgA2LKe/AYm0a57zpdcr06uNWaufEH7Ux7vrSDIUQplf7FvZDHJL4DEnJw8jlGF0fZdkUQqGx8SLct87E0Zfk6gX+XtGn3wWJwhOKQni/4RvcWr/NNNn8Iue47hES0su0W2u8FJAzFpMwny1kWSKM4Ou/x84socr7yKwzioA0uQmC4mwyGjwCOFp9qJ0qmCKrsWdImYecVZrOE2bB2uhRJg8tvOMx+BhinrRU+CwCjTpFssqy/ZPQqbHnpTU4jk9V5unKlIj6Q3epMrGFeTeyMxqKl+t7gcRGyRVO59t+exyNgncwIYTLkMDYrNYuDyvyZP3WPXZ++Iktqjo/IVZkRwfGQj6nYjsNmXVKcy9n53xgF41/Bq0pmSg356M7erdTYVm18I04/95xN+OWCIfxYnQJw7uwZUIrPv7P7taphIvF1avP6LalVMzgfYqna9cHT2yzyUxlq+Uily0aEo9mo5sUj+EuRIRbliZnRut0XGFoQYDrJ8XpAKu7cZt++w8vkRM6ZUsRKREIA453lV0zMkz9UJOUjGo0TAMJQUTCc8IKUCfgtYEWtgVlJRZSnEaEgAUC7My7ba3BSpDdwYRaQf1RrrLhWB+idhBSGRSttVzBcWjrCDyAhg7jRkQIjGwAgw9JiQooCt0o6QQIT9fuoSdZmxZktOfa7JaRRLEIo/hW0nIuX0j6ervw9QRxcOPro9ds2QMX+bsgKMEcOeszUuPQiX5kEVYzUdp2CMtsrgrSDz4xxiRy5uN0IgTxRgM9FzzhsHYWJZ10BUh8J+dcGUGaqs3YEUQyzkRy2jieW7GJOmF6sxurBsWmqvT95HgtYsNbYh0COmK1NcDFglfocfqggYhSEB0bQFDZr4CkmdBabvBilqqnu9V2p+s37gs+TEP6QHYC92hXndUHJSMua0suka4cJaXsq0raJxd+bFeeWu+Ka9bSBqLlULNGRvGpWkmT/ifarFb8abSEtKH8scZUK0E6UZx1jarijBIgTUyUPnKKOYEM4VHkNvGEFE0K4sXCd5y2CeosnMEfWbdZ4hSOk4QrHFSF0Es8QuV5Xt2unHYbVky6RSiBHYXa3YZWyJYjDTTF+wzpNtokNix7SZg3D5HMkcibImoiHOmKBkb7ERJEmX1elbbiZSCVJmP6Rx5BcJ/GXiuUvOKzRb2xi7d/PVBfPjSMuMDpWEXDCbxp+rXsEaP8qaqKXQ14NHPsCx1UM32NvhC/ryP2O6uRKDZLffuMbZlrJwxv3pCB6Mi4Y0nJwBYi5qk9lbUKYsvlSq4l3oOvVtgFOUOaG9L2lon6c6fyGS33+y7pOJG1cl2QdMjpSzWwyg/VvvUr7yQs4cME8vb4pUZW2pbYGeI3+HRWuGXB3kBRo/1sjl9GBmjStKXgmq29IdKwq2fQSHSFUQt4OpUaXF0EKSvOW/rCQmI1JHCrXBvIzT9dRKZhyP6VduLoGZ89IRV0JX7F4xBOqEVQmnF5BaW9w4xr29mjybv01XPUQhKlCbLyE+KeS6uEXLwWP2JN0UbmdKVOHIXyfYZKBO05iGs8vFiFLMD5ejWkhr5JHaf70J3RXv8LpzKDoOVb1pUktBIVDOgqeFpCaMnOXUQZplO9zroUlYld3afQoDG2M3sA3DWp9Fq3Imxs2xw9xR5YLfNu4vEihH77mepkOElQ5PuTf/fHqIxRKNlr4dUGhd3VJzUSgZ2H5VBvJr2R1IkBvWt6S31Dsd7Ia7lrSV9ck4cN7kDoVW7/JH1pDQPoULLEisCmKATczrs89A+AlCgWSqFupxCFpYvRhi8Fj+jn9oU4idsQ5s4evV9OkECn+EgC/iYl7YM2MSSRevRoDSCUmljftXYIbrUqwp+uA3GLw+8nu0lV3m5jt80BICY12BbmwpzLL72ZRpo+8JSKuLq2NfPEhKPMc2+Kla+kLZqqHbY4kD0oEEcVczOfVfF8uOUyUEWaDaUfRvGgfIo8qZ+Q+KN6kw8x6DlGURtbXQS7yF9LmXy2czDXWx0chBFjDk7gDgmm4DQ17talk/IQWA32WO4RZrDItok2tLaW/OQEz1WgNFX9IpRm9KnaN84lyoW+A8T8dwsaXlaZPw4TkN09nZ1MAAAACAAAAAAAAAAAAACIAAABn3+O+Av/yXCaTjTbzkDSdvWYfA4fUDVfJ9FAAeAYYgnR0U1/LnPHNMMEAEwmGH09MaWw/IkfGH2jZh4PicNMI1xBxKh6N0A8mHow+B4ALlW+tkWasZCKYDirYoKlkgXN9Te23AXkJY+moocEDm0cxA5w5+Z2netGWnipycI2EMFsunGk6cY5iEjm7vCUkFIVCRKnWnPaowCEcyovZrlg+nTsHDFJZTq3Ur7lFy2LNntI0zWUcOwho82jmVzudLukDW3ocBhhekCv50Y5q2ttNmPCCC5AgwD0fJ/GQPP/OA0dwHYwyeJQWaKX/kz77nYwNmy/WE/v36XN6Tt2+aPzmGeXWVhltyzY7bf1T/XfCooeArPAINdd5zmHm+acuW3etvjZ3QvJFjAgjba3ZeSx49OLoAOBWGynhW9EVY+oTaZU1dbxQ8SRmFluS9H3jjiXn3Heuqh3smufOTM1RK4u8mhw0RZCI/f+kq7/mCL4YLq/Dp73PxIrIWnCGrVo0VI9tQqVcR8dEqrhFDbRJxWiiJWHU42ixVZbvY2dsDzZOshd+hOwl6nFvog3AV+/6EoQianO+ZaJVXhR5ltBSXEBVX0UTO1vqrWWhBpAvCCg0jaeU579DsKXp5lxbxGt0cqlo6Tr9wAHIXnSMxCGHvDSycqWxC8qRIgBPZ2dTAAAQAgAAAAAAAAAAAAAjAAAAaNO9MgL/3V0Rs6kbeci7E82slj0a+dy8EmEISJwD4PmDgABp7QjyJ9JW9iSHy0rOnt5ACiOgpUQNM67Iw/BDDsFAPZMMKKGgSB8CWClvkIQEEUPLUTlU+B8Ds0X6I+ADHVupgKsqpkaqwABlCBeJUYAjrXEq6/Vf/V3Bg49rU75FgXjDjWP+6XPWOLOtnzsOk1CnOzv43vRx9t/v8ab7zLZrGmP/vafnccR9lGY6UoOL6taC9NADKAaFCqQULz9DtXHZ33I9Ra998yO+lTBWKrpNetraqUJKhS1nzW1WVLK6r0ahrYi0hukRL/CSLffWE7bdgqlCNfryqjULgR0fcCw7Dx4bHi2w+GxsMOKdHUa2xtpKYZDwjkTONpZsPHW7Cv2vbzq+6/pcqOU7HOiuL2orQYU5+faPZPSA+iehHVhSWpLTbHEHIfkaKtap9Qq00Gmjitleg3nreq1RKIPZKLv8/OSQr1fau1/RXKo4EMpcsSKg/tC1DDGXxisxOjuCNLXBdku6XquzVJk5CZ5+f82G1h+Zfrug8f6wDCyKh9gv4Hz6QPVfFXsIuEa9dqb0OVe8dRnODoMNdSbwq/9v9wv8UyY//eKuDSmI4Y/S11jhELssWBjEy/WcQImbYKiHIAWwT2dnUwAEIAIAAAAAAAAAAAAAJAAAAP48K/ID//8dYB1Di8ZzlTZHT1lj1bPoczopQmPBwV6nRwh9QNPbDCo8zUsESxenZD4C8UOQjwQuTym6M9ladgsNO70ARDZh5KTE2XT7BN6dBQow+yHR4NCeADHleZqAsAKFAAGQQALZGHpNz7roisk0cMY1xdaNf85XATJ3cuY/bwYBxl7fIjFy5HXfa4Bo5oijl1z3rrXjRAQGcjek4zu+TL95OP2tfEQsVqz27yNrSO+AOAgGZK4+wBWCy4FLNL2gxprBpWgMunueE/L6rXtn1KQCiTwUiPpjygy+Am5rBMmSb5KPcD+HkKzfKTSAy2K5GtKugMuUaBsQWS/rSIQCCSXKbcWNKNnSLinDZKW+XNxEhu2m5AujPww4qnArUWzakPHVSyy4AIdQtmwYiq5qbDjFYePVTU05wr0Td+6l1DcLi6orwrroDBuPxUm2lLrncYt+z/DG37DjFr2vs8HM+b+RFWLDdQ6JsLurkvuv26/2OiqOvUdeRZVqzt7gj3/kj3W9VHUeVWKqu6GIs1aLozpGU5aUH/QcKYW/0ATSMJH5h+H50HPp1XbwIi2L03i4et2D/x8sTdf8+Dua5YOhbh/pYNw8F1rNUI0HR1PdNHSrR3Q6mmBa50+vj+ZzEiyHmbrCgozjW1qRcMDap4t0XPmxo02b/vlFV5ItH/pPtksqfjf7Y/Y3tXck02+LY/d6MPjBBMbH9/mHxYwhaxr4NoA=',
+       );
+/**
+ * Enter description here...
+ *
+ * @var unknown_type
+ */
+       var $decoded = array();
+/**
+ * An array of File objects retrieved
+ *
+ * @var unknown_type
+ */
+       var $Files = array();
+/**
+ * Directory below which files are being created.
+ *
+ * @var string
+ */
+       var $settings = array();
+/**
+ * Constructor
+ *
+ * @param array $settings
+ */
+       function __construct($settings = array()) {
+               $default = array('base' => TMP . 'test_suite' . DS);
+               $this->settings = $settings + $default;
+               new Folder($this->settings['base'], true);
+       }
+/**
+ * Destructor
+ *
+ */
+       function __destruct() {
+               $this->flushFiles();
+       }
+/**
+ * Returns the test data for a given key
+ *
+ * @param string $key
+ * @access public
+ **/
+       function getString($key) {
+               $result = '';
+
+               if (isset($this->decoded[$key])) {
+                       $result = $this->decoded[$key];
+               } elseif (isset($this->encoded[$key])) {
+                       $this->decoded[$key] = base64_decode($this->encoded[$key]);
+
+                       if (preg_match('/^[ais]:[0-9]+/', $this->decoded[$key])) {
+                               $this->decoded[$key] = unserialize($this->decoded[$key]);
+                       }
+
+                       $result = $this->decoded[$key];
+               }
+
+               return $result;
+       }
+/**
+ * Creates a file with contents from base64 encoded string.
+ *
+ * TestData::getFile('image-png.png');
+ * TestData::getFile(array('image-png.png' => TMP . 'other-name.png'));
+ * TestData::getFile(array('image-png.png' => 'other-name.png'));
+ * TestData::getFile('file.txt', 'I am the content');
+ *
+ * @param mixed $key
+ * @param string $string
+ * @return string Absolute path to the created file
+ */
+       function getFile($key = null, $string = '') {
+               if (is_array($key)) {
+                       $file = current($key);
+                       $key = key($key);
+
+                       if ($file[0] !== DS) {
+                               $file = $this->settings['base'] . $file;
+                       }
+                       $alias = $file;
+               } else {
+                       $alias = $key;
+                       $file = $this->settings['base'] . $key;
+               }
+
+               if ($string === '') {
+                       $string = $this->getString($key);
+               }
+
+               $File = new File($file);
+
+               if ($File->exists()) {
+                       $File->delete();
+               }
+
+               $File->write($string);
+               $File->offset(0);
+
+               $this->Files[$alias] =& $File;
+               return $File->pwd();
+       }
+/**
+ * Deletes all files which have been retrieved
+ * through TestData::getFile.
+ *
+ * Most often called from the tearDown method of a test case.
+ *
+ * @return void
+ */
+       function flushFiles() {
+               foreach ($this->Files as $File) {
+                       if ($File->exists()) {
+                               $File->delete();
+                       }
+               }
+               $this->Files = array();
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/groups/compatible.group.php b/app/plugins/media/tests/groups/compatible.group.php
new file mode 100644 (file)
index 0000000..1bc4267
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+class AllCompatibleGroupTest extends GroupTest {
+       var $label = 'All test cases which can run in a sequence';
+
+       function AllCompatibleGroupTest() {
+               $cases = dirname(__FILE__) . DS . '..' . DS . 'cases' . DS;
+               TestManager::addTestCasesFromDirectory($this, $cases . DS . 'models' . DS . 'behaviors');
+               TestManager::addTestCasesFromDirectory($this, $cases . DS . 'vendors');
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/groups/medium.group.php b/app/plugins/media/tests/groups/medium.group.php
new file mode 100644 (file)
index 0000000..212a890
--- /dev/null
@@ -0,0 +1,9 @@
+<?php
+class AllMediumGroupTest extends GroupTest {
+       var $label = 'All medium related (incl. adapters) test cases';
+
+       function AllMediumGroupTest() {
+               TestManager::addTestCasesFromDirectory($this,dirname(__FILE__) . DS . '..' . DS . 'cases' . DS . 'vendors' . DS . 'medium');
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/groups/mime.group.php b/app/plugins/media/tests/groups/mime.group.php
new file mode 100644 (file)
index 0000000..437bad3
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+class AllMimeGroupTest extends GroupTest {
+       var $label = 'All MIME related test cases';
+
+       function AllMimeGroupTest() {
+               TestManager::addTestFile($this, dirname(__FILE__) . DS . '..' . DS . 'cases' . DS . 'vendors' . DS . 'mime_glob');
+               TestManager::addTestFile($this, dirname(__FILE__) . DS . '..' . DS . 'cases' . DS . 'vendors' . DS . 'mime_magic');
+               TestManager::addTestFile($this, dirname(__FILE__) . DS . '..' . DS . 'cases' . DS . 'vendors' . DS . 'mime_type');
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/groups/model.group.php b/app/plugins/media/tests/groups/model.group.php
new file mode 100644 (file)
index 0000000..4cc0c88
--- /dev/null
@@ -0,0 +1,9 @@
+<?php
+class AllModelGroupTest extends GroupTest {
+       var $label = 'All model and behavior related test cases';
+
+       function AllModelGroupTest() {
+               TestManager::addTestCasesFromDirectory($this,dirname(__FILE__) . DS . '..' . DS . 'cases' . DS . 'models');
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/tests/groups/validation.group.php b/app/plugins/media/tests/groups/validation.group.php
new file mode 100644 (file)
index 0000000..f94bef1
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+class AllValidationGroupTest extends GroupTest {
+       var $label = 'All validation related test cases';
+
+       function AllValidationGroupTest() {
+               TestManager::addTestFile($this, dirname(__FILE__) . DS . '..' . DS . 'cases' . DS . 'vendors' . DS . 'media_validation');
+               TestManager::addTestFile($this, dirname(__FILE__) . DS . '..' . DS . 'cases' . DS . 'vendors' . DS . 'transfer_validation');
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/media_validation.php b/app/plugins/media/vendors/media_validation.php
new file mode 100644 (file)
index 0000000..3f16527
--- /dev/null
@@ -0,0 +1,338 @@
+<?php
+/**
+ * Media Validation File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Core', 'Validation');
+/**
+ * Media Validation Class
+ *
+ * @package    media
+ * @subpackage media.libs
+ */
+class MediaValidation extends Validation {
+/**
+ * Checks if MIME type is (not) one of given MIME types
+ *
+ * @param string $check Mime type to check e.g. image/jpeg
+ * @param mixed $deny True or * blocks any MIME type,
+ *     an array containing MIME types selectively blocks,
+ *     false blocks no MIME type
+ * @param mixed $allow True or * allows any extension,
+ *     an array containing extensions selectively allows,
+ *     false allows no MIME type
+ * @return boolean
+ */
+       function mimeType($check, $deny = false, $allow = true) {
+               if (!is_string($check) || !preg_match('/^[-\w.\+]+\/[-\w.\+]+$/', $check)) {
+                       return false;
+               }
+               list($deny, $allow) = self::_normalize($deny, $allow);
+
+               if ($deny === true || (is_array($deny) && in_array($check, $deny))) {
+                       return false;
+               }
+               if($allow !== true && (is_array($allow) && !in_array($check, $allow))) {
+                       return false;
+               }
+               return true;
+       }
+/**
+ * Checks if extension is (not) one of given extensions
+ *
+ * @param string $check Extension to check (without leading dot)
+ * @param mixed $deny True or * blocks any extension,
+ *     an array containing extensions (without a leading dot) selectively blocks,
+ *     false blocks no extension
+ * @param mixed $allow True or * allows any extension,
+ *     an array containing extensions (without leading dot) selectively allows,
+ *     false allows no extension
+ * @return boolean
+ */
+       function extension($check, $deny = false, $allow = true) {
+               if (!is_string($check) || !preg_match('/^[\w0-9]+(\.[\w0-9]+)?$/', $check)) {
+                       return false;
+               }
+               list($deny, $allow) = self::_normalize($deny, $allow);
+
+               if ($deny === true || (is_array($deny) && Validation::extension($check, $deny))) {
+                       return false;
+               }
+               if ($allow !== true && (is_array($allow) && !Validation::extension($check, $allow))) {
+                       return false;
+               }
+               return true;
+       }
+/**
+ * Checks if size is within limits
+ *
+ * Please note that the size will always be checked against
+ * limitations set in `php.ini` for `post_max_size` and `upload_max_filesize`
+ * even if $max is set to false.
+ *
+ * @param integer $check Size to check in bytes
+ * @param mixed $max String (e.g. 8M) containing maximum allowed size, false allows any size
+ * @return boolean
+ */
+       function size($check, $max = false) {
+               if (!$check = self::_toComputableSize($check)) {
+                       return false;
+               }
+
+               $max = self::_normalize($max);
+               $maxSizes = array();
+
+               if ($max !== false && $max = self::_toComputableSize($max)) {
+                        $maxSizes[] = $max;
+               }
+               if ($max = self::_toComputableSize(ini_get('post_max_size'))) {
+                       $maxSizes[] = $max;
+               }
+               if ($max = self::_toComputableSize(ini_get('upload_max_filesize'))) {
+                       $maxSizes[] = $max;
+               }
+               if (empty($maxSizes)) {
+                       return false;
+               }
+
+               sort($maxSizes);
+               $max = $maxSizes[0];
+
+               return $check <= $max;
+       }
+/**
+ * Checks if pixels are within limits
+ *
+ * @param mixed $check Pixels to check e.g 200x200 or 40000
+ * @param mixed $max String (e.g. 40000 or 200x100) containing maximum allowed amount of pixels
+ * @return boolean
+ */
+       function pixels($check, $max = false) {
+               if (strpos($check, 'x') !== false) {
+                       list($width, $height) = explode('x', $check);
+                       $check = $width * $height;
+               }
+               if (strpos($max, 'x') !== false) {
+                       list($width, $height) = explode('x' , $max);
+                       $max = $width * $height;
+               }
+               return $check <= $max;
+       }
+/**
+ * Checks if path is within given locations
+ *
+ * @param string $check Absolute path
+ * @param mixed $allow True or * allows any location,
+ *     an array containing absolute paths to locations
+ * @return boolean
+ */
+       function location($check, $allow = false) {
+               $allow = self::_normalize($allow);
+
+               if ($allow === true) {
+                       return true;
+               } elseif ($allow === false) {
+                       return false;
+               }
+
+               if (!is_array($allow)) {
+                       $allow = array($allow);
+               } else {
+                       $allow = array_unique($allow);
+               }
+
+               if (Validation::url($check)) {
+                       foreach ($allow as $path) {
+                               if (preg_match('/^' . preg_quote($path, '/') . '/', $check)) {
+                                       return true;
+                               }
+                       }
+               } elseif(MediaValidation::file($check, false)) {
+                       $check = dirname($check);
+                       if (!Folder::isAbsolute($check)) {
+                               return false;
+                       }
+                       $Check = new Folder($check);
+
+                       foreach ($allow as $path) {
+                               if (!Folder::isAbsolute($path) || Validation::url($path)) {
+                                       continue;
+                               }
+                               if ($Check->inPath($path)) {
+                                       return true;
+                               }
+                       }
+               }
+               return false;
+       }
+/**
+ * Checks if read/write permissions are set
+ *
+ * @param string $check 4-digit octal representation of file permissions,
+ *     or absolute path to a file or directory
+ * @param string $type Permission r, w or rw
+ * @return boolean
+ */
+       function access($check, $type = 'r') {
+               if (self::file($check, true) || self::folder($check, true)) {
+                       if (strpos($type, 'r') !== false && !is_readable($check)) {
+                               return false;
+                       }
+                       if (strpos($type, 'w') !== false && !is_writable($check)) {
+                               return false;
+                       }
+               } else {
+                       $ar = $check & '0444'; /* is readable? == are we able to connect? */
+                       $aw = $check & '0222'; /* is writable? */
+
+                       if (strpos($type, 'r') !== false && $ar === '0000') {
+                               return false;
+                       }
+                       if (strpos($type, 'w') !== false && $aw === '0000') {
+                               return false;
+                       }
+               }
+               return true;
+       }
+/**
+ * Checks if provided or potentially dangerous permissions are set
+ *
+ * @param string $check
+ * @param mixed $match True to check for potentially dangerous permissions,
+ *     a string containing the 4-digit octal value of the permissions to check for an exact match,
+ *     false to allow any permissions
+ * @return boolean
+ */
+       function permission($check, $match = true) {
+               $match = self::_normalize($match);
+
+               if ($match === false) {
+                       return true;
+               }
+
+               /* r = 4, w = 2, x = 1 */
+               $ax = $check & '0111'; /* is executable bit set for a? */
+               if (($match === true || $match == '-x') && $ax !== '0000') {
+                       return false;
+               }
+               if (is_numeric($match) && $check != $match) {
+                       return false;
+               }
+               return true;
+       }
+/**
+ * Checks if subject is an (existent) file
+ * Please note, that directoires are not treated as files in strict mode
+ *
+ * @param string $file Absolute path to file
+ * @param boolean $strict Enable checking for actual existence of file
+ * @return boolean
+ */
+       function file($check, $strict = true) {
+               if (!is_string($check)) {
+                       return false;
+               }
+               if ((is_dir($check) || !is_file($check)) && $strict === true) {
+                       return false;
+               }
+               if (strpos($check, DS) === false) {
+                       return false;
+               }
+               return true;
+       }
+/**
+ * Checks if subject is an (existent) folder
+ * Used mainly for $allow/$deny parameter contents
+ *
+ * @param string $check Absolute path to directory
+ * @param boolean $strict Enable checking for actual existence of directory
+ * @return boolean
+ */
+       function folder($check, $strict = true) {
+               if (!is_string($check)) {
+                       return false;
+               }
+               if (!is_dir($check) && $strict === true) {
+                       return false;
+               }
+               return true;
+       }
+/**
+ * Normalizes Parameters
+ *
+ * @param mixed Array containing multiple strings, or a single string
+ * @return mixed
+ */
+       function _normalize() {
+               $args = func_get_args();
+
+               if (count($args) > 1) {
+                       foreach($args as $param) {
+                               $result[] = self::_normalize($param);
+                       }
+                       return $result;
+               }
+
+               $param = $args[0];
+               switch ($param) {
+                       case '*':
+                       case array('*'):
+                               return true;
+                       case null:
+                       case array(null):
+                       case array():
+                       case '':
+                       case array(''):
+                               return false;
+                       default:
+                               return $param;
+               }
+       }
+/**
+ * Parse `php.ini` style size strings
+ *
+ * Slightly modified version of `ini_get_size()`
+ * @link posted at http://www.php.net/features.file-upload
+ * @author djcassis gmail com
+ *
+ * @param string $sizeString `php.ini` style size string e.g. `'16M'`
+ * @return int Size in bytes
+ */
+       function _toComputableSize($sizeString) {
+               if (empty($sizeString)) {
+                       return false;
+               }
+               if (is_numeric($sizeString)) {
+                       return $sizeString;
+               }
+
+               $sizeUnit = strtoupper(substr($sizeString, -1));
+           $size = (integer)substr($sizeString, 0, -1);
+
+           switch ($sizeUnit) {
+                       case 'Y': $size *= 1024; /* Yotta */
+                       case 'Z': $size *= 1024; /* Zetta */
+                       case 'E': $size *= 1024; /* Exa */
+               case 'P': $size *= 1024; /* Peta */
+                       case 'T': $size *= 1024; /* Tera */
+                       case 'G': $size *= 1024; /* Giga */
+                       case 'M': $size *= 1024; /* Mega */
+                       case 'K': $size *= 1024; /* Kilo */
+           }
+           return $size;
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/basic_image.php b/app/plugins/media/vendors/medium/adapter/basic_image.php
new file mode 100644 (file)
index 0000000..eb0db33
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Basic Image Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Basic Image Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ */
+class BasicImageMediumAdapter extends MediumAdapter {
+       var $require = array(
+               'mimeTypes' => array(
+                       'image/jpeg',
+                       'image/gif',
+                       'image/png',
+                       'image/tiff',
+                       'image/xbm',
+                       'image/wbmp',
+                       'image/ms-bmp',
+                       'image/xpm',
+                       'image/ico',
+                       'image/psd',
+       ));
+
+       function initialize($Medium) {
+               if (!isset($Medium->file)) {
+                       return false;
+               }
+               return true;
+       }
+
+       function width($Medium) {
+               list($width, $height) = getimagesize($Medium->file);
+               return $width;
+       }
+
+       function height($Medium) {
+               list($width, $height) = getimagesize($Medium->file);
+               return $height;
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/basic_text.php b/app/plugins/media/vendors/medium/adapter/basic_text.php
new file mode 100644 (file)
index 0000000..495a122
--- /dev/null
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Basic Text Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Basic Text Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ */
+class BasicTextMediumAdapter extends MediumAdapter {
+       var $require = array('mimeTypes' => array('text/plain'));
+
+       function initialize($Medium) {
+               if (!isset($Medium->file)) {
+                       return false;
+               }
+               return true;
+       }
+
+       function characters($Medium) {
+               return filesize($Medium->file);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/css_tidy.php b/app/plugins/media/vendors/medium/adapter/css_tidy.php
new file mode 100644 (file)
index 0000000..1685718
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Css Tidy Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Css Tidy Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @link       http://csstidy.sourceforge.net/
+ */
+class CssTidyMediumAdapter extends MediumAdapter {
+
+       var $require = array(
+               'mimeTypes' => array('text/css'),
+               'extensions' => array('ctype'),
+               'imports' => array(
+                       array('type' => 'Vendor','name'=> 'csstidy','file' => 'csstidy/class.csstidy.php')),
+       );
+
+       var $_template = 'high_compression'; // or: highest_compression
+
+       function initialize($Medium) {
+               if (!isset($Medium->contents['raw']) && isset($Medium->file)) {
+                       return $Medium->contents['raw'] = file_get_contents($Medium->file);
+               }
+               return true;
+       }
+
+       function store($Medium, $file) {
+               return file_put_contents($Medium->contents['raw'], $file);
+       }
+
+       function compress($Medium) {
+               $Tidy = new csstidy() ;
+               $Tidy->load_template($this->_template);
+               $Tidy->parse($Medium->contents['raw']);
+
+               if ($compressed = $Tidy->print->plain()) {
+                       $Medium->content['raw'] = $compressed;
+                       return true;
+               }
+               return false;
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/ffmpeg_audio.php b/app/plugins/media/vendors/medium/adapter/ffmpeg_audio.php
new file mode 100644 (file)
index 0000000..3b29120
--- /dev/null
@@ -0,0 +1,90 @@
+<?php
+/**
+ * Ffmpeg Audio Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Ffmpeg Audio Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @link       http://ffmpeg.mplayerhq.hu/
+ */
+class FfmpegAudioMediumAdapter extends MediumAdapter {
+       var $require = array(
+               'mimeTypes' => array(
+                       'audio/mpeg',
+                       /* Ffmpeg Extension can't read meta info other than ID3! */
+                       'audio/ms-wma',
+                       'audio/realaudio',
+                       'audio/wav',
+                       'audio/ogg',
+                       /* Some Ogg files may have 'application/octet-stream' MIME type. */
+                       'application/octet-stream',
+               ),
+               'extensions' => array('ffmpeg'),
+       );
+
+       function initialize($Medium) {
+               if (isset($Medium->objects['ffmpeg_movie'])) {
+                       return true;
+               }
+               if (!isset($Medium->file)) {
+                       return false;
+               }
+
+               $Medium->objects['ffmpeg_movie'] = new ffmpeg_movie($Medium->file);
+
+               if (!$Medium->objects['ffmpeg_movie']->hasAudio()) {
+                       return false;
+               }
+
+               return true;
+       }
+
+       function artist($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getArtist();
+       }
+
+       function title($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getTitle();
+       }
+
+       function album($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getAlbum();
+       }
+
+       function year($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getYear();
+       }
+
+       function duration($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getDuration();
+       }
+
+       function track($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getTrackNumber();
+       }
+
+       function samplingRate($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getAudioSampleRate();
+       }
+
+       function bitRate($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getBitRate();
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/ffmpeg_video.php b/app/plugins/media/vendors/medium/adapter/ffmpeg_video.php
new file mode 100644 (file)
index 0000000..7cbba6d
--- /dev/null
@@ -0,0 +1,92 @@
+<?php
+/**
+ * Ffmpeg Video Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Ffmpeg Video Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @link       http://ffmpeg.mplayerhq.hu/
+ */
+class FfmpegVideoMediumAdapter extends MediumAdapter {
+       var $require = array(
+               'mimeTypes' => array(
+                       'video/mpeg',
+                       'video/mswmv',
+                       'video/msasf',
+                       'video/msvideo',
+                       'video/quicktime',
+                       'video/flv',
+                       'video/ogg',
+               ),
+               'extensions' => array('ffmpeg', 'gd'),
+       );
+
+       function initialize($Medium) {
+               if (isset($Medium->objects['ffmpeg_movie'])) {
+                       return true;
+               }
+
+               if (!isset($Medium->file)) {
+                       return false;
+               }
+
+               $Medium->objects['ffmpeg_movie'] = new ffmpeg_movie($Medium->file);
+               return true;
+       }
+
+       function convert($Medium, $mimeType) {
+               if (Medium::name(null, $mimeType) === 'Image') {
+                       $randomFrame = rand(1, $Medium->objects['ffmpeg_movie']->getFrameCount() - 1);
+                       $resource = $Medium->objects['ffmpeg_movie']->getFrame($randomFrame)->toGDImage();
+
+                       if (!is_resource($resource)) {
+                               return false;
+                       }
+
+                       $Image = Medium::factory(array('gd' => $resource), 'image/gd');
+                       return $Image->convert($mimeType);
+               }
+               return false;
+       }
+
+       function title($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getTitle();
+       }
+
+       function year($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getYear();
+       }
+
+       function duration($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getDuration();
+       }
+
+       function width($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getFrameWidth();
+       }
+
+       function height($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getFrameHeight();
+       }
+
+       function bitRate($Medium) {
+               return $Medium->objects['ffmpeg_movie']->getBitRate();
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/gd.php b/app/plugins/media/vendors/medium/adapter/gd.php
new file mode 100644 (file)
index 0000000..c5d298d
--- /dev/null
@@ -0,0 +1,305 @@
+<?php
+/**
+ * Gd Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Gd Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ */
+class GdMediumAdapter extends MediumAdapter {
+       var $require = array(
+               'mimeTypes' => array('image/gd'), /* Gets dynamically set in constructor */
+               'extensions' => array('gd'),
+       );
+
+       var $_Image;
+
+       var $_formatMap = array(
+               'image/jpeg' => 'jpeg',
+               'image/gif' => 'gif',
+               'image/png' => 'png',
+               'image/gd' => 'gd',
+               'image/vnd.wap.wbmp' => 'wbmp',
+               'image/xbm' => 'xbm',
+       );
+
+       var $_format;
+
+       var $_compression;
+
+       var $_pngFilter;
+
+       function compatible($Medium) {
+               $types = imageTypes();
+               if ($types & IMG_GIF) {
+                       $this->require['mimeTypes'][] = 'image/gif';
+               }
+               if ($types & IMG_JPG) {
+                       $this->require['mimeTypes'][] = 'image/jpeg';
+               }
+               if ($types & IMG_PNG) {
+                       $this->require['mimeTypes'][] = 'image/png';
+               }
+               if ($types & IMG_WBMP) {
+                       $this->require['mimeTypes'][] = 'image/wbmp';
+               }
+               if ($types & IMG_XPM) {
+                       $this->require['mimeTypes'][] = 'image/xpm';
+               }
+               return parent::compatible($Medium);
+       }
+
+       function initialize($Medium) {
+               $this->_format = $this->_formatMap[$Medium->mimeType];
+
+               if (isset($Medium->resources['gd'])) {
+                       return true;
+               }
+               if (!isset($Medium->file)) {
+                       return false;
+               }
+
+               $Medium->resources['gd'] = call_user_func_array(
+                       'imageCreateFrom' . $this->_format,
+                       array($Medium->file)
+               );
+
+               if (!$this->_isResource($Medium->resources['gd'])) {
+                       return false;
+               }
+
+               if (imageIsTrueColor($Medium->resources['gd'])) {
+                       imageAlphaBlending($Medium->resources['gd'], false);
+                       imageSaveAlpha($Medium->resources['gd'], true);
+               }
+               return true;
+       }
+
+       function toString($Medium) {
+               ob_start();
+               $this->store($Medium, null);
+               return ob_get_clean();
+       }
+
+       function store($Medium, $file) {
+               $args = array($Medium->resources['gd'], $file);
+
+               switch ($Medium->mimeType) {
+                       case 'image/jpeg':
+                               if (isset($this->_compression)) {
+                                       $args[] = $this->_compression;
+                               }
+                               break;
+
+                       case 'image/png':
+                               if (isset($this->_compression)) {
+                                       $args[] = $this->_compression;
+
+                                       if (isset($this->_pngFilter)) {
+                                               $args[] = $this->_pngFilter;
+                                       }
+                               }
+                               break;
+               }
+               return call_user_func_array('image' . $this->_format, $args);
+       }
+
+       function convert($Medium, $mimeType) {
+               if (in_array($mimeType, $this->require['mimeTypes'])) {
+                       return $this->_format = $this->_formatMap[$mimeType];
+               }
+               return false;
+       }
+
+       function compress($Medium, $value) {
+               switch ($Medium->mimeType) {
+                       case 'image/jpeg':
+                               $this->_compression = (integer)(100 - ($value * 10));
+                               break;
+
+                       case 'image/png':
+                               if (version_compare(PHP_VERSION, '5.1.2', '>=')) {
+                                       $this->_compression = (integer)$value;
+                               }
+                               if (version_compare(PHP_VERSION, '5.1.3', '>=')) {
+                                       $filter = ($value * 10) % 10;
+                                       $map = array(
+                                               0 => PNG_FILTER_NONE,
+                                               1 => PNG_FILTER_SUB,
+                                               2 => PNG_FILTER_UP,
+                                               3 => PNG_FILTER_AVG,
+                                               4 => PNG_FILTER_PAETH,
+                                       );
+
+                                       if (array_key_exists($filter, $map)) {
+                                               $this->_pngFilter = $map[$filter];
+                                       } elseif ($filter == 5) {
+                                               if (intval($value) <= 5 && imageIsTrueColor($Medium->resources['gd'])) {
+                                                       $this->_pngFilter = PNG_ALL_FILTERS;
+                                               } else {
+                                                       $this->_pngFilter = PNG_NO_FILTER;
+                                               }
+                                       } else {
+                                               $this->_pngFilter = PNG_ALL_FILTERS;
+                                       }
+                               }
+                               break;
+               }
+               return true;
+       }
+
+       function crop($Medium, $left, $top, $width, $height) {
+               $left   = (integer)$left;
+               $top    = (integer)$top;
+               $width  = (integer)$width;
+               $height = (integer)$height;
+
+               $Image = imageCreateTrueColor($width, $height);
+               $this->_adjustTransparency($Medium->resources['gd'], $Image);
+
+               if ($this->_isTransparent($Medium->resources['gd'])) {
+                       imageCopyResized(
+                               $Image,
+                               $Medium->resources['gd'],
+                               0, 0,
+                               $left, $top,
+                               $width, $height,
+                               $width, $height
+                       );
+               } else {
+                       imageCopyResampled(
+                               $Image,
+                               $Medium->resources['gd'],
+                               0, 0,
+                               $left, $top,
+                               $width, $height,
+                               $width, $height
+                       );
+               }
+               if ($this->_isResource($Image)) {
+                       $Medium->resources['gd'] = $Image;
+                       return true;
+               }
+               return false;
+       }
+
+       function resize($Medium, $width, $height) {
+               $width  = (integer)$width;
+               $height = (integer)$height;
+
+               $Image = imageCreateTrueColor($width, $height);
+               $this->_adjustTransparency($Medium->resources['gd'], $Image);
+
+               if ($this->_isTransparent($Medium->resources['gd'])) {
+                       imageCopyResized(
+                               $Image,
+                               $Medium->resources['gd'],
+                               0, 0,
+                               0, 0,
+                               $width, $height,
+                               $this->width($Medium), $this->height($Medium)
+                       );
+               } else {
+                       imageCopyResampled(
+                               $Image,
+                               $Medium->resources['gd'],
+                               0, 0,
+                               0, 0,
+                               $width, $height,
+                               $this->width($Medium), $this->height($Medium)
+                       );
+               }
+               if ($this->_isResource($Image)) {
+                       $Medium->resources['gd'] = $Image;
+                       return true;
+               }
+               return false;
+       }
+
+       function cropAndResize($Medium, $cropLeft, $cropTop, $cropWidth, $cropHeight, $resizeWidth, $resizeHeight) {
+               $cropLeft     = (integer)$cropLeft;
+               $cropTop      = (integer)$cropTop;
+               $cropWidth    = (integer)$cropWidth;
+               $cropHeight   = (integer)$cropHeight;
+               $resizeWidth  = (integer)$resizeWidth;
+               $resizeHeight = (integer)$resizeHeight;
+
+               $Image = imageCreateTrueColor($resizeWidth, $resizeHeight);
+               $this->_adjustTransparency($Medium->resources['gd'], $Image);
+
+               if ($this->_isTransparent($Medium->resources['gd'])) {
+                       imageCopyResized(
+                               $Image,
+                               $Medium->resources['gd'],
+                               0, 0,
+                               $cropLeft, $cropTop,
+                               $resizeWidth, $resizeHeight,
+                               $cropWidth, $cropHeight
+                       );
+               } else {
+                       imageCopyResampled(
+                               $Image,
+                               $Medium->resources['gd'],
+                               0, 0,
+                               $cropLeft, $cropTop,
+                               $resizeWidth, $resizeHeight,
+                               $cropWidth, $cropHeight
+                       );
+               }
+               if ($this->_isResource($Image)) {
+                       $Medium->resources['gd'] = $Image;
+                       return true;
+               }
+               return false;
+       }
+
+       function width($Medium) {
+               return imageSX($Medium->resources['gd']);
+       }
+
+       function height($Medium) {
+               return imageSY($Medium->resources['gd']);
+       }
+
+       function _isResource($Image) {
+               return is_resource($Image) && get_resource_type($Image) == 'gd';
+       }
+
+       function _isTransparent($Image) {
+               return imageColorTransparent($Image) >= 0;
+       }
+
+       function _adjustTransparency(&$Source, &$Destination) {
+               if ($this->_isTransparent($Source)) {
+                       $rgba  = imageColorsForIndex($Source, imageColorTransparent($Source));
+                       $color = imageColorAllocate($Destination, $rgba['red'], $rgba['green'], $rgba['blue']);
+                       imageColorTransparent($Destination, $color);
+                       imageFill($Destination, 0, 0, $color);
+               } else {
+                       if ($this->_format == 'png') {
+                               imageAlphaBlending($Destination, false);
+                               imageSaveAlpha($Destination, true);
+                       } elseif ($this->_format != 'gif') {
+                               $white = imageColorAllocate($Destination, 255, 255, 255);
+                               imageFill($Destination, 0, 0 , $white);
+                       }
+               }
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/getid3_audio.php b/app/plugins/media/vendors/medium/adapter/getid3_audio.php
new file mode 100644 (file)
index 0000000..3082997
--- /dev/null
@@ -0,0 +1,204 @@
+<?php
+/**
+ * Getid3 Audio Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Getid3 Audio Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @link       http://getid3.sourceforge.net/
+ */
+class Getid3AudioMediumAdapter extends MediumAdapter {
+       var $require = array(
+               'mimeTypes' => array(
+                       'application/ogg',
+                       'audio/ogg',
+                       'audio/mpeg',
+                       'audio/ms-wma',
+                       'audio/ms-asf',
+                       'audio/realaudio',
+                       'audio/pn-realaudio',
+                       'audio/pn-multirate-realaudio',
+                       'audio/wav',
+                       'audio/riff',
+                       'audio/wavpack',
+                       'audio/musepack', /* MPC */
+                       'audio/aac',
+                       'audio/mp4', /* AAC */
+                       'audio/m4a', /* AAC */
+                       'audio/m4b', /* AAC */
+                       'audio/ac3',
+                       'audio/aiff',
+                       'audio/ape',
+                       'audio/shorten',
+                       'audio/basic',
+                       'audio/midi',
+                       'audio/flac',
+                       'audio/voc',
+                       'audio/s3m',
+                       'audio/xm',
+                       'audio/it',
+                       'audio/mod',
+                       'audio/matroska',
+                       /* Not in freedesktop.org database */
+                       'audio/pac',
+                       'audio/bonk',
+                       'audio/dts',
+                       'audio/cda',
+                       /*
+                        * This is a reminder since audio Medium shouldn't have 'application/octet-stream'
+                        * MIME type.
+                        *
+                        * LA (Lossless Audio), OptimFROG, TTA, LiteWave,
+                        * RKAU, AVR (Audio Visual Research) and some Ogg files.
+                        */
+                       'application/octet-stream',
+                 ),
+               'imports' => array(
+                       array('type' => 'Vendor', 'name' => 'getID3', 'file' => 'getid3/getid3.php')
+               ),
+               'extensions' => array('gd'),
+       );
+
+       function initialize($Medium) {
+               if (isset($Medium->objects['getID3'])) {
+                       return true;
+               }
+
+               if (!isset($Medium->file)) {
+                       return false;
+               }
+
+               $Object = new getID3();
+               $Object->encoding = 'UTF-8';
+               $Object->analyze($Medium->file);
+
+               if (isset($Object->info['error'])) {
+                       return false;
+               }
+
+               getid3_lib::CopyTagsToComments($Object->info);
+
+               $Medium->objects['getID3'] =& $Object;
+               return true;
+       }
+
+       function artist($Medium) {
+               if (isset($Medium->objects['getID3']->info['comments']['artist'][0])) {
+                       return $Medium->objects['getID3']->info['comments']['artist'][0];
+               }
+               if (isset($Medium->objects['getID3']->info['comments']['author'][0])) {
+                       return $Medium->objects['getID3']->info['comments']['author'][0];
+               }
+       }
+
+       function title($Medium) {
+               if (isset($Medium->objects['getID3']->info['comments']['title'][0])) {
+                       return $Medium->objects['getID3']->info['comments']['title'][0];
+               }
+       }
+
+       function album($Medium) {
+               if (isset($Medium->objects['getID3']->info['comments']['album'][0])) {
+                       return $Medium->objects['getID3']->info['comments']['album'][0];
+               }
+       }
+
+       function year($Medium) {
+               foreach (array('year', 'date', 'creation_date') as $field) {
+                       if (!isset($Medium->objects['getID3']->info['comments'][$field][0])) {
+                               continue;
+                       }
+                       $date = $Medium->objects['getID3']->info['comments'][$field][0];
+
+                       if ($field !== 'year') {
+                               $date = strftime('%Y', strtotime($date));
+                       }
+                       if ($date) {
+                               return $date;
+                       }
+               }
+       }
+
+       function duration($Medium) {
+               if (isset($Medium->objects['getID3']->info['playtime_seconds'])) {
+                       return $Medium->objects['getID3']->info['playtime_seconds'];
+               }
+       }
+
+       function track($Medium) {
+               if (isset($Medium->objects['getID3']->info['comments']['track_number'][0])) {
+                       return $Medium->objects['getID3']->info['comments']['track_number'][0];
+               }
+               if (isset($Medium->objects['getID3']->info['comments']['tracknumber'][0])) {
+                       return $Medium->objects['getID3']->info['comments']['tracknumber'][0];
+               }
+       }
+
+       function samplingRate($Medium) {
+               if (isset($Medium->objects['getID3']->info['audio']['sample_rate'])) {
+                       return $Medium->objects['getID3']->info['audio']['sample_rate'];
+               }
+       }
+
+       function bitRate($Medium) {
+               if (isset($Medium->objects['getID3']->info['ogg']['bitrate_nominal'])) {
+                       return $Medium->objects['getID3']->info['ogg']['bitrate_nominal'];
+               }
+               if (isset($Medium->objects['getID3']->info['bitrate'])) {
+                       return $Medium->objects['getID3']->info['bitrate'];
+               }
+       }
+
+       function convert($Medium, $mimeType) {
+               if (Medium::name(null, $mimeType) === 'Image') {
+                       $coverArt = $this->__coverArt($Medium);
+
+                       if (!$coverArt) {
+                               return false;
+                       }
+
+                       $resource = @imagecreatefromstring($coverArt);
+
+                       if (!is_resource($resource)) {
+                               return false;
+                       }
+
+                       $Image = Medium::factory(array('gd' => $resource), 'image/gd');
+                       return $Image->convert($mimeType);
+               }
+               return false;
+       }
+
+       function __coverArt($Medium) {
+               if (!empty($Medium->objects['getID3']->info['id3v2']['APIC'][0]['data'])) {
+                       return $Medium->objects['getID3']->info['id3v2']['APIC'][0]['data'];
+               }
+               if (!empty($Medium->objects['getID3']->info['id3v2']['PIC'][0]['data'])) {
+                       return $Medium->objects['getID3']->info['id3v2']['PIC'][0]['data'];
+               }
+               if (!empty($Medium->objects['getID3']->info['flac']['PICTURE'][0]['image_data'])) {
+                       return $Medium->objects['getID3']->info['flac']['PICTURE'][0]['image_data'];
+               }
+               if (!empty($Medium->objects['getID3']->info['vorbiscomment']['coverart'][0])) {
+                       return base64_decode($Medium->objects['getID3']->info['vorbiscomment']['coverart'][0]);
+               }
+               return false;
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/getid3_video.php b/app/plugins/media/vendors/medium/adapter/getid3_video.php
new file mode 100644 (file)
index 0000000..03973ec
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+/**
+ * Getid3 Video Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Getid3 Video Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @link       http://getid3.sourceforge.net/
+ */
+class Getid3VideoMediumAdapter extends MediumAdapter {
+       var $require = array(
+               'mimeTypes' => array(
+                       'video/matroska',
+                       'video/ms-wmv',
+                       'video/ms-asf',
+                       'video/ms-video',
+                       'video/mpeg',
+                       'video/quicktime',
+                       'video/avi',
+                       'video/mp4',
+                       'video/flv',
+                       'video/real-video',
+                       'video/vnd.rn-realvideo',
+                       'video/pn-realvideo',
+                       'video/pn-multirate-realvideo',
+                       'video/nsv',
+                       /* Will not be used since video Medium can't have application/... MIME type */
+                       'application/shockwave-flash',
+               ),
+               'imports' => array(
+                       array('type' => 'Vendor', 'name'=> 'getID3', 'file' => 'getid3/getid3.php')
+       ));
+
+       function initialize($Medium) {
+               if (isset($Medium->objects['getID3'])) {
+                       return true;
+               }
+
+               if (!isset($Medium->file)) {
+                       return false;
+               }
+
+               $Object = new getID3();
+               $Object->analyze($Medium->file);
+
+               if (isset($Object->info['error'])) {
+                       return false;
+               }
+
+               $Medium->objects['getID3'] =& $Object;
+               return true;
+       }
+
+       function title($Medium) {
+               if (isset($Medium->objects['getID3']->info['comments']['title'][0])) {
+                       return $Medium->objects['getID3']->info['comments']['title'][0];
+               }
+       }
+
+       function year($Medium) {
+               foreach (array('year', 'date', 'creation_date') as $field) {
+                       if (!isset($Medium->objects['getID3']->info['comments'][$field][0])) {
+                               continue;
+                       }
+                       $date = $Medium->objects['getID3']->info['comments'][$field][0];
+
+                       if ($field !== 'year') {
+                               $date = strftime('%Y', strtotime($date));
+                       }
+                       if ($date) {
+                               return $date;
+                       }
+               }
+       }
+
+       function duration($Medium) {
+               if (isset($Medium->objects['getID3']->info['playtime_seconds'])) {
+                       return $Medium->objects['getID3']->info['playtime_seconds'];
+               }
+       }
+
+       function width($Medium) {
+               if (isset($Medium->objects['getID3']->info['video']['resolution_x'])) {
+                       return $Medium->objects['getID3']->info['video']['resolution_x'];
+               }
+       }
+
+       function height($Medium) {
+               if (isset($Medium->objects['getID3']->info['video']['resolution_y'])) {
+                       return $Medium->objects['getID3']->info['video']['resolution_y'];
+               }
+       }
+
+       function bitRate($Medium) {
+               if (isset($Medium->objects['getID3']->info['ogg']['bitrate_nominal'])) {
+                       return $Medium->objects['getID3']->info['ogg']['bitrate_nominal'];
+               }
+               if (isset($Medium->objects['getID3']->info['bitrate'])) {
+                       return $Medium->objects['getID3']->info['bitrate'];
+               }
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/imagick.php b/app/plugins/media/vendors/medium/adapter/imagick.php
new file mode 100644 (file)
index 0000000..52ef663
--- /dev/null
@@ -0,0 +1,184 @@
+<?php
+/**
+ * Imagick Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Imagick Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @link       http://www.imagemagick.org/
+ */
+class ImagickMediumAdapter extends MediumAdapter {
+       var $require = array(
+               'mimeTypes' => array( /* readable */
+                       'image/jpeg',
+                       'image/gif',
+                       'image/png',
+                       'image/tiff',
+                       'image/wpg',
+                       'image/xbm',
+                       'image/xcf',
+                       'image/wbmp',
+                       'image/ms-bmp',
+                       'image/pcx',
+                       'image/quicktime',
+                       'image/svg',
+                       'image/xpm',
+                       'image/ico',
+                       'image/psd',
+                       'application/pdf',
+                       ),
+                'extensions' => array('imagick'),
+       );
+
+       var $_formatMap = array( /* writable */
+               'image/jpeg' => 'jpeg',
+               'image/gif' => 'gif',
+               'image/png' => 'png',
+               'image/tiff' => 'tiff',
+               'image/wbmp' => 'wbmp',
+               'image/ms-bmp' => 'bmp',
+               'image/pcx' => 'pcx',
+               'image/ico' => 'ico',
+               'image/xbm' => 'xbm',
+               'image/psd' => 'psd',
+               );
+
+       function initialize($Medium) {
+               if (isset($Medium->objects['Imagick'])) {
+                       return true;
+               }
+
+               if (!isset($Medium->file)) {
+                       return false;
+               }
+
+               try {
+                       $Medium->objects['Imagick'] = new Imagick($Medium->file);
+               } catch (Exception $E) {
+                       return false;
+               }
+               return true;
+       }
+
+       function store($Medium, $file) {
+               try {
+                       return $Medium->objects['Imagick']->writeImage($file);
+               } catch (Exception $E) {
+                       return false;
+               }
+       }
+
+       function toString($Medium) {
+               try {
+                       return $Medium->objects['Imagick']->getImageBlob();
+               } catch (Exception $E) {
+                       return false;
+               }
+       }
+
+       function convert($Medium, $mimeType) {
+               if (!isset($this->_formatMap[$mimeType])) {
+                       return false;
+               }
+
+               try {
+                       $Medium->objects['Imagick']->setFormat($this->_formatMap[$mimeType]);
+               } catch (Exception $E) {
+                       return false;
+               }
+
+               $Medium->mimeType = $mimeType;
+
+               if ($Medium->name === 'Document') { // application/pdf -> image
+                       return Medium::factory($Medium->objects['Imagick'], $mimeType);
+               }
+               return true;
+       }
+
+       function compress($Medium, $value) {
+               switch ($Medium->mimeType) {
+                       case 'image/tiff':
+                               $type = Imagick::COMPRESSION_LZW;
+                               $value = null;
+                               break;
+                       case 'image/png':
+                               $type = Imagick::COMPRESSION_ZIP;
+                               $value = (integer)$value; // FIXME correct ?
+                               break;
+                       case 'image/jpeg':
+                               $type = Imagick::COMPRESSION_JPEG;
+                               $value = (integer)(100 - ($value * 10));
+                               break;
+                       default:
+                               return true;
+               }
+               try {
+                       return $Medium->objects['Imagick']->setCompression($type)
+                              && $Medium->objects['Imagick']->setCompressionQuality($value);
+               } catch (Exception $E) {
+                       return false;
+               }
+       }
+
+       function crop($Medium, $left, $top, $width, $height) {
+               $left   = (integer)$left;
+               $top    = (integer)$top;
+               $width  = (integer)$width;
+               $height = (integer)$height;
+
+               try {
+                       return $Medium->objects['Imagick']->cropImage($width, $height, $left, $top);
+               } catch (Exception $E) {
+                       return false;
+               }
+       }
+
+       function resize($Medium, $width, $height) {
+               $width  = (integer)$width;
+               $height = (integer)$height;
+
+               try {
+                       return $Medium->objects['Imagick']->resizeImage($width, $height, Imagick::FILTER_LANCZOS, 1);
+               } catch (Exception $E) {
+                       return false;
+               }
+       }
+
+       function cropAndResize($Medium, $cropLeft, $cropTop, $cropWidth, $cropHeight, $resizeWidth, $resizeHeight) {
+               return  $this->crop($Medium, $cropLeft, $cropTop, $cropWidth, $cropHeight)
+                               && $this->resize($Medium, $resizeWidth, $resizeHeight);
+       }
+
+       function width($Medium) {
+               try {
+                       return $Medium->objects['Imagick']->getImageWidth();
+               } catch (Exception $E) {
+                       return false;
+               }
+       }
+
+       function height($Medium) {
+               try {
+                       return $Medium->objects['Imagick']->getImageHeight();
+               } catch (Exception $E) {
+                       return false;
+               }
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/imagick_shell.php b/app/plugins/media/vendors/medium/adapter/imagick_shell.php
new file mode 100644 (file)
index 0000000..a31974e
--- /dev/null
@@ -0,0 +1,209 @@
+<?php
+/**
+ * ImagickShell Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * ImagickShell Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @link       http://www.imagemagick.org/
+ */
+class ImagickShellMediumAdapter extends MediumAdapter {
+       var $require = array(
+               'mimeTypes' => array( /* readable */
+                       'image/jpeg',
+                       'image/gif',
+                       'image/png',
+                       'image/tiff',
+                       'image/wpg',
+                       'image/xbm',
+                       'image/xcf',
+                       'image/wbmp',
+                       'image/ms-bmp',
+                       'image/pcx',
+                       'image/quicktime',
+                       'image/svg',
+                       'image/xpm',
+                       'image/ico',
+                       'image/psd',
+                       ),
+                'commands' => array('convert', 'identify'),
+       );
+
+       var $_formatMap = array( /* writable */
+               'image/jpeg' => 'jpeg',
+               'image/gif' => 'gif',
+               'image/png' => 'png',
+               'image/tiff' => 'tiff',
+               'image/wbmp' => 'wbmp',
+               'image/ms-bmp' => 'bmp',
+               'image/pcx' => 'pcx',
+               'image/ico' => 'ico',
+               'image/xbm' => 'xbm',
+               'image/psd' => 'psd',
+       );
+
+       var $_temporaryFormat = 'png';
+       var $_compressionType;
+       var $_compression;
+       var $_pngFilter;
+
+       function compatible($Medium) {
+               if ($this->_which(array('gs', 'gswin32c'))) { /* Check for ghostscript */
+                       $this->require['mimeTypes'][] = 'application/pdf';
+               }
+               return parent::compatible($Medium);
+       }
+
+       function initialize($Medium) {
+               if (!isset($Medium->files['temporary'])) {
+                       if (!isset($Medium->file)) {
+                               return false;
+                       }
+                       $Medium->files['temporary'] = TMP . uniqid('medium_');
+               }
+
+               return $this->_execute(':command: :source: :format:::destination:',     array(
+                       'command'     => 'convert',
+                       'source'      => $Medium->file,
+                       'destination' => $Medium->files['temporary'],
+                       'format'      => $this->_temporaryFormat
+                ));
+       }
+
+       function store($Medium, $file) {
+               $args = array(
+                       'command'      => 'convert',
+                       'source'       => $Medium->files['temporary'],
+                       'sourceFormat' => $this->_temporaryFormat,
+                       'destination'  => $file,
+                       'format'       => $this->_formatMap[$Medium->mimeType],
+               );
+
+               if (isset($this->_compressionType)) {
+                       $args['compress'] = $this->_compressionType;
+               }
+               if (isset($this->_compression)) {
+                       if ($this->_compressionType === 'ZIP') {
+                               $args['quality'] = $this->_compression * 10 + $this->_pngFilter;
+                       } else {
+                               $args['quality'] = $this->_compression;
+                       }
+               }
+
+               return $this->_execute(':command:'
+                                                               . (isset($args['compress']) ? ' -compress :compress:' : '')
+                                                               . (isset($args['quality']) ? ' -quality :quality:' : '')
+                                                               . ' :sourceFormat:::source: :format:::destination:', $args);
+       }
+
+       function convert($Medium, $mimeType) {
+               if (!isset($this->_formatMap[$mimeType])) {
+                       return false;
+               }
+
+               $Medium->mimeType = $mimeType;
+
+               if ($Medium->name === 'Document') { // application/pdf -> image
+                       $this->store($Medium, $Medium->files['temporary']);
+
+                       /* Unset files to prevent too early deletion by $Medium */
+                       $temporary = $Medium->files['temporary'];
+                       unset($Medium->files);
+
+                       return Medium::factory(array('temporary' => $temporary), $mimeType);
+               }
+               return true;
+       }
+
+       function compress($Medium, $value) {
+               switch ($Medium->mimeType) {
+                       case 'image/tiff':
+                               $this->_compressionType = 'LZW';
+                               break;
+                       case 'image/png':
+                               $this->_compressionType = 'ZIP';
+                               $this->_compression = (integer)$value;
+                               $this->_pngFilter = ($value * 10) % 10;
+                               break;
+                       case 'image/jpeg':
+                               $this->_compressionType = 'JPEG';
+                               $this->_compression = (integer)(100 - ($value * 10));
+                               break;
+               }
+               return true;
+       }
+
+       function crop($Medium, $left, $top, $width, $height) {
+               return $this->_execute(':command: -crop :width:x:height:+:left:+:top: :source: :destination:', array(
+                       'command'     => 'convert',
+                       'width'       => (integer)$width,
+                       'height'      => (integer)$height,
+                       'left'        => (integer)$left,
+                       'top'         => (integer)$top,
+                       'source'      => $Medium->files['temporary'],
+                       'destination' => $Medium->files['temporary'],
+               ));
+       }
+
+       function resize($Medium, $width, $height) {
+               return $this->_execute(':command: -geometry :width:x:height:! :source: :destination:', array(
+                       'command'     => 'convert',
+                       'width'       => (integer)$width,
+                       'height'      => (integer)$height,
+                       'source'      => $Medium->files['temporary'],
+                       'destination' => $Medium->files['temporary'],
+               ));
+       }
+
+       function cropAndResize($Medium, $cropLeft, $cropTop, $cropWidth, $cropHeight, $resizeWidth, $resizeHeight) {
+               return  $this->crop($Medium, $cropLeft, $cropTop, $cropWidth, $cropHeight)
+                               && $this->resize($Medium, $resizeWidth, $resizeHeight);
+
+               /* This is faster but broken: convert: geometry does not contain image `xxxx.jpg'.
+               return $this->_execute(':command: -crop :cropWidth:x:cropHeight:+:cropLeft:+:cropTop: -geometry :resizeWidth:x:resizeHeight:! :source: :destination:',
+                                                               array(
+                                                                         'command'      => 'convert',
+                                                                         'cropLeft'     => intval($cropLeft),
+                                                                         'cropTop'      => intval($cropTop),
+                                                                         'cropWidth'    => intval($cropWidth),
+                                                                         'cropHeight'   => intval($cropHeight),
+                                                                         'resizeWidth'  => intval($resizeWidth),
+                                                                         'resizeHeight' => intval($resizeHeight),
+                                                                         'source'       => $Medium->files['temporary'],
+                                                                         'destination'  => $Medium->files['temporary'],
+                                                                        )
+                                                                );
+               */
+       }
+
+       function width($Medium) {
+               return $this->_execute(':command: -format %w :file:', array(
+                       'command'     => 'identify',
+                       'file' => $Medium->files['temporary'],
+               ));
+       }
+
+       function height($Medium) {
+               return $this->_execute(':command: -format %h :file:', array(
+                       'command'     => 'identify',
+                        'file' => $Medium->files['temporary'],
+               ));
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/jsmin.php b/app/plugins/media/vendors/medium/adapter/jsmin.php
new file mode 100644 (file)
index 0000000..ac58c81
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+ /**
+ * Jsmin Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Jsmin Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @link       http://code.google.com/p/jsmin-php/
+ */
+class JsminMediumAdapter extends MediumAdapter {
+       var $require = array(
+               'mimeTypes' => array('application/javascript'),
+               'imports' => array(array('type' => 'Vendor', 'name'=> 'JSMin', 'file' => 'jsmin.php')),
+       );
+
+       function initialize($Medium) {
+               if (isset($Medium->contents['raw'])) {
+                       return true;
+               }
+
+               if (!isset($Medium->file)) {
+                       return false;
+               }
+               return $Medium->contents['raw'] = file_get_contents($Medium->file);
+       }
+
+       function store($Medium, $file) {
+               return file_put_contents($Medium->contents['raw'], $file);
+       }
+
+       function compress($Medium) {
+               return $Medium->contents['raw'] = trim(JSMin::minify($Medium->contents['raw']));
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/pear_mp3.php b/app/plugins/media/vendors/medium/adapter/pear_mp3.php
new file mode 100644 (file)
index 0000000..92a5101
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Pear Mp3 Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Pear Mp3 Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @link       http://pear.php.net/package/MP3_Id
+ */
+class PearMp3MediumAdapter extends MediumAdapter {
+       var $require = array(
+               'mimeTypes' => array('audio/mpeg'),
+               'imports' => array(
+                       array('type' => 'Vendor', 'name'=> 'MP3_Id', 'file' => 'MP3/Id.php')
+       ));
+
+       function initialize($Medium) {
+               if (isset($Medium->objects['MP3_Id'])) {
+                       return true;
+               }
+
+               if (!isset($Medium->file)) {
+                       return false;
+               }
+
+               $Object = new MP3_Id();
+               $Object->read($Medium->file);
+               $Object->study();
+
+               $Medium->objects['MP3_Id'] =& $Object;
+               return true;
+       }
+
+       function artist($Medium) {
+               return $Medium->objects['MP3_Id']->getTag('artists');
+       }
+
+       function title($Medium) {
+               return $Medium->objects['MP3_Id']->getTag('name');
+       }
+
+       function album($Medium) {
+               return $Medium->objects['MP3_Id']->getTag('album');
+       }
+
+       function year($Medium) {
+               return $Medium->objects['MP3_Id']->getTag('year');
+       }
+
+       function duration($Medium) {
+               $duration = $Medium->objects['MP3_Id']->getTag('lengths');
+
+               if ($duration != -1) {
+                       return $duration;
+               }
+       }
+
+       function track($Medium) {
+               return $Medium->objects['MP3_Id']->getTag('track');
+       }
+
+       function samplingRate($Medium) {
+               return $Medium->objects['MP3_Id']->getTag('frequency');
+       }
+
+       function bitRate($Medium) {
+               if ($bitrate = $Medium->objects['MP3_Id']->getTag('bitrate')) {
+                       return $bitrate * 1000;
+               }
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/adapter/pear_text.php b/app/plugins/media/vendors/medium/adapter/pear_text.php
new file mode 100644 (file)
index 0000000..70ef4d6
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Pear Text Medium Adapter File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Pear Text Medium Adapter Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium.adapter
+ * @link       http://pear.php.net/package/Text_Statistics
+ */
+class PearTextMediumAdapter extends MediumAdapter {
+       var $require = array(
+               'mimeTypes' => array('text/plain'),
+               'imports' => array(
+                       array('type' => 'Vendor','name' => 'Text_Statistics','file' => 'Text/Statistics.php')
+       ));
+
+       function initialize($Medium) {
+               if (isset($Medium->objects['Text_Statistics'])) {
+                       return true;
+               }
+
+               if (!isset($Medium->contents['raw'])) {
+                       if (!isset($Medium->file)) {
+                               return false;
+                       }
+                       if (!$raw = file_get_contents($Medium->file)) {
+                               return false;
+                       }
+                       $Medium->contents['raw'] = $raw;
+               }
+
+               $Medium->objects['Text_Statistics'] = @new Text_Statistics($Medium->contents['raw']);
+               return true;
+       }
+
+       function syllables($Medium) {
+               return $Medium->objects['Text_Statistics']->numSyllables;
+       }
+
+       function words($unique = false) {
+               if($unique) {
+                       return $this->_Text->uniqWords;
+               }
+               return $this->_Text->numWords;
+       }
+
+       function sentences($Medium) {
+               return $Medium->objects['Text_Statistics']->numSentences;
+       }
+
+       function fleschScore($Medium) {
+               return $Medium->objects['Text_Statistics']->flesch;
+       }
+
+       function lexicalDensity() {
+               return round(($this->_Text->uniqWords / $this->_Text->numWords) * 100, 0);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/audio.php b/app/plugins/media/vendors/medium/audio.php
new file mode 100644 (file)
index 0000000..dfa9083
--- /dev/null
@@ -0,0 +1,145 @@
+<?php
+/**
+ * Audio Medium File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.Medium');
+/**
+ * Audio Medium Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ */
+class AudioMedium extends Medium {
+/**
+ * Compatible adapters
+ *
+ * @var array
+ */
+       var $adapters = array('Getid3Audio', 'FfmpegAudio', 'PearMp3');
+/**
+ * Artist stored in medium metadata
+ *
+ * @return mixed String if metadata info exists, else null
+ */
+       function artist() {
+               return $this->Adapters->dispatchMethod($this, 'artist', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Title stored in medium metadata
+ *
+ * @return mixed String if metadata info exists, else null
+ */
+       function title() {
+               return $this->Adapters->dispatchMethod($this, 'title', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Album name stored in medium metadata
+ *
+ * @return mixed String if metadata info exists, else null
+ */
+       function album() {
+               return $this->Adapters->dispatchMethod($this, 'album', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Year stored in medium metadata
+ *
+ * @return mixed Integer if metadata info exists, else null
+ */
+       function year() {
+               return $this->Adapters->dispatchMethod($this, 'year', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Track number stored in medium metadata
+ *
+ * @return mixed Integer if metadata info exists, else null
+ */
+       function track() {
+               return $this->Adapters->dispatchMethod($this, 'track', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Duration in seconds
+ *
+ * @return integer
+ */
+       function duration() {
+               return $this->Adapters->dispatchMethod($this, 'duration', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Current sampling rate of medium
+ *
+ * @url http://en.wikipedia.org/wiki/Sampling_rate
+ * @return integer
+ */
+       function samplingRate() {
+               return $this->Adapters->dispatchMethod($this, 'samplingRate', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Current bit rate of medium
+ *
+ * @url http://en.wikipedia.org/wiki/Bit_rate
+ * @return integer
+ */
+       function bitRate() {
+               return $this->Adapters->dispatchMethod($this, 'bitRate', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Determines the quality of the medium by
+ * taking bit rate into account
+ *
+ * @return integer A number indicating quality between 1 (worst) and 5 (best)
+ */
+       function quality() {
+               if (!$bitRate = $this->bitRate()) {
+                       return;
+               }
+
+               /* Normalized between 1 and 5 where min = 32000 and max = 320000 or 500000 */
+               $bitRateMax = ($this->mimeType == 'audio/mpeg') ? 320000 : 500000;
+               $bitRateMin = 32000;
+               $qualityMax = 5;
+               $qualityMin = 1;
+
+               if ($bitRate >= $bitRateMax) {
+                       $quality = $qualityMax;
+               } elseif ($bitRate <= $bitRateMin) {
+                       $quality = $qualityMin;
+               } else {
+                       $quality =
+                               (($bitRate - $bitRateMin) / ($bitRateMax - $bitRateMin))
+                               * ($qualityMax - $qualityMin)
+                               + $qualityMin;
+               }
+               return (integer)round($quality);
+       }
+}
+?>
diff --git a/app/plugins/media/vendors/medium/css.php b/app/plugins/media/vendors/medium/css.php
new file mode 100644 (file)
index 0000000..41743ce
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Css Medium File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.Medium');
+/**
+ * Css Medium Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ */
+class CssMedium extends Medium {
+/**
+ * Compatible adapters
+ *
+ * @var array
+ */
+       var $adapters = array('CssTidy', 'BasicText');
+/**
+ * Number of characters
+ *
+ * @return integer
+ */
+       function characters() {
+               return $this->Adapters->dispatchMethod($this, 'characters', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Compresses contents. of the medium
+ *
+ * @return string
+ */
+       function compress() {
+               return $this->Adapters->dispatchMethod($this, 'compress');
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/document.php b/app/plugins/media/vendors/medium/document.php
new file mode 100644 (file)
index 0000000..afb284b
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Document Medium File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.Medium');
+/**
+ * Document Medium Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ */
+class DocumentMedium extends Medium {
+/**
+ * Compatible adapters
+ *
+ * @var array
+ */
+       var $adapters = array('Imagick', 'ImagickShell');
+/**
+ * Current width of medium
+ *
+ * @return integer
+ */
+       function width()        {
+               return $this->Adapters->dispatchMethod($this, 'width', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Current height of medium
+ *
+ * @return integer
+ */
+       function height() {
+               return $this->Adapters->dispatchMethod($this, 'height', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Determines a (known) ratio of medium
+ *
+ * @return mixed if String if $known is true or float if false
+ */
+       function ratio($known = true) {
+               if (!$known) {
+                       return $this->width() / $this->height();
+               }
+               return $this->_knownRatio($this->width(), $this->height());
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/generic.php b/app/plugins/media/vendors/medium/generic.php
new file mode 100644 (file)
index 0000000..bbd5095
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Generic Medium File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.Medium');
+/**
+ * Generic Medium Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ */
+class GenericMedium extends Medium {
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/icon.php b/app/plugins/media/vendors/medium/icon.php
new file mode 100644 (file)
index 0000000..b7a4656
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Icon Medium File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+if (!class_exists('ImageMedium')) {
+       App::import('Vendor', 'Media.ImageMedium', array('file' => 'medium' . DS . 'image.php'));
+}
+/**
+ * Icon Medium Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ */
+class IconMedium extends ImageMedium {
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/image.php b/app/plugins/media/vendors/medium/image.php
new file mode 100644 (file)
index 0000000..7dec76e
--- /dev/null
@@ -0,0 +1,324 @@
+<?php
+/**
+ * Image Medium File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.Medium');
+/**
+ * Image Medium Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ */
+class ImageMedium extends Medium {
+/**
+ * Compatible adapters
+ *
+ * @var array
+ */
+       var $adapters = array('BasicImage', 'Imagick', 'Gd', 'ImagickShell');
+/**
+ * Alias for fitInside
+ *
+ * @param integer $width
+ * @param integer $height
+ * @return boolean
+ */
+       function fit($width, $height) {
+               return $this->fitInside($width, $height);
+       }
+/**
+ * Resizes medium proportionally
+ * keeping both sides within given dimensions
+ *
+ * @param integer $width
+ * @param integer $height
+ * @return boolean
+ */
+       function fitInside($width, $height) {
+               $rx = $this->width() / $width;
+               $ry = $this->height() / $height;
+
+               if ($rx > $ry) {
+                       $r = $rx;
+               } else {
+                       $r = $ry;
+               }
+
+               $width = $this->width() / $r;
+               $height = $this->height() / $r;
+
+               $args = $this->_normalizeDimensions($width, $height, 'maximum'); /* maximum ?? */
+               return $this->Adapters->dispatchMethod($this, 'resize', $args);
+       }
+/**
+ * Resizes medium proportionally
+ * keeping smaller side within corresponding dimensions
+ *
+ * @param integer $width
+ * @param integer $height
+ * @return boolean
+ */
+       function fitOutside($width, $height) {
+               $rx = $this->width() / $width;
+               $ry = $this->height() / $height;
+
+               if ($rx < $ry) {
+                       $r = $rx;
+               } else {
+                       $r = $ry;
+               }
+
+               $width = $this->width() / $r;
+               $height = $this->height() / $r;
+
+               $args = $this->_normalizeDimensions($width, $height, 'ratio');
+               return $this->Adapters->dispatchMethod($this, 'resize', $args);
+       }
+/**
+ * Crops medium to provided dimensions
+ *
+ * @param integer $width
+ * @param integer $height
+ * @return boolean
+ */
+       function crop($width, $height) {
+               list($width, $height) = $this->_normalizeDimensions($width, $height, 'maximum');
+               list($left, $top) = $this->_boxify($width, $height);
+               return $this->Adapters->dispatchMethod($this, 'crop', array($left, $top, $width, $height));
+       }
+/**
+ * Alias for zoomFit
+ *
+ * @param integer $width
+ * @param integer $height
+ * @return boolean
+ */
+       function zoom($width, $height) {
+               return $this->zoomFit($width, $height);
+       }
+/**
+ * Enlarges medium proportionally by factor 2
+ *
+ * @param integer $width
+ * @param integer $height
+ * @return boolean
+ */
+       function zoomFit($width, $height) {
+               $factor = 2;
+
+               $width = $width * $factor;
+               $height = $height * $factor;
+
+               return $this->fitOutside($width, $height);
+       }
+/**
+ * First crops an area (given by dimensions and enlarged by factor 2)
+ * out of the center of the medium, then resizes that cropped
+ * area to given dimensions
+ *
+ * @param integer $width
+ * @param integer $height
+ * @return boolean
+ */
+       function zoomCrop($width, $height, $gravity = 'center') {
+               $factor = 2;
+
+               list($zoomWidth, $zoomHeight) = $this->_normalizeDimensions($width * $factor, $height * $factor, 'maximum');
+               list($zoomLeft, $zoomTop) = $this->_boxify($zoomWidth, $zoomHeight, $gravity);
+               list($width, $height) = array($zoomWidth / $factor, $zoomHeight / $factor);
+
+               return $this->Adapters->dispatchMethod(
+                       $this,
+                       'cropAndResize',
+                       array($zoomLeft, $zoomTop, $zoomWidth, $zoomHeight, $width, $height)
+               );
+       }
+/**
+ * First resizes medium so that it fills out the given dimensions,
+ * then cuts off overlapping parts
+ *
+ * @param integer $width
+ * @param integer $height
+ * @param string $align
+ * @return boolean
+ */
+       function fitCrop($width, $height, $gravity = 'center') {
+               $rx = $this->width() / $width;
+               $ry = $this->height() / $height;
+
+               if ($rx < $ry) {
+                       $r = $rx;
+               } else {
+                       $r = $ry;
+               }
+
+               $resizeWidth = $this->width() / $r;
+               $resizeHeight = $this->height() / $r;
+
+               $this->Adapters->dispatchMethod($this, 'resize', array($resizeWidth, $resizeHeight));
+               list($left, $top) = $this->_boxify($width, $height, $gravity);
+               return $this->Adapters->dispatchMethod($this, 'crop', array($left, $top, $width, $height));
+       }
+/**
+ * Current width of medium
+ *
+ * @return integer
+ */
+       function width()        {
+               return $this->Adapters->dispatchMethod($this, 'width', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Current height of medium
+ *
+ * @return integer
+ */
+       function height() {
+               return $this->Adapters->dispatchMethod($this, 'height', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Selects compression type and filters than compresses the medium
+ * according to provided value
+ *
+ * Compressing may result in lossy quality for e.g. jpeg but
+ * not for png images. The decimal place denotes the type of filter
+ * used and the number as a whole the (rounded) compression value.
+ *
+ * @param float $value Zero for no compression at all or a value between 0 and 9.9999999
+ *     (highest compression); defaults to 1.5
+ * @return boolean
+ */
+       function compress($value = 1.5) {
+               if ($value < 0 || $value >= 10) {
+                       return false;
+               }
+               return $this->Adapters->dispatchMethod($this, 'compress', array(floatval($value)));
+       }
+/**
+ * Determines the quality of the medium by
+ * taking amount of megapixels into account
+ *
+ * @return integer A number indicating quality between 1 (worst) and 5 (best)
+ */
+       function quality() {
+               $megapixel = $this->megapixel();
+
+               /* Normalized between 1 and 5 where min = 0.5 and max = 10 */
+               $megapixelMax = 10;
+               $megapixelMin = 0.5;
+               $qualityMax = 5;
+               $qualityMin = 1;
+
+               if ($megapixel > $megapixelMax) {
+                       $quality = $qualityMax;
+               } elseif ($megapixel < $megapixelMin) {
+                       $quality = $qualityMin;
+               } else {
+                       $quality =
+                               (($megapixel - $megapixelMin) / ($megapixelMax - $megapixelMin))
+                               * ($qualityMax - $qualityMin)
+                               + $qualityMin;
+               }
+               return (integer)round($quality);
+       }
+/**
+ * Determines a (known) ratio of medium
+ *
+ * @return mixed String if $known is true or float if false
+ */
+       function ratio($known = true) {
+               if (!$known) {
+                       return $this->width() / $this->height();
+               }
+               return $this->_knownRatio($this->width(), $this->height());
+       }
+/**
+ * Determines megapixels of medium
+ *
+ * @return integer
+ */
+       function megapixel() {
+               return (integer)($this->width() * $this->height() / 1000000);
+       }
+/**
+ * Normalizes dimensions
+ *
+ * @param integer $width
+ * @param integer $height
+ * @param integer $set Either "ratio" or "maximum" Maximum replaces sizes execeeding limits
+ *     with medium's corresponding size
+ * @return array An array containing width and height
+ */
+       function _normalizeDimensions($width, $height, $set = 'ratio') {
+               if ($width > $this->width()) {
+                       $width = null;
+               }
+               if ($height > $this->height()) {
+                       $height = null;
+               }
+
+               if (is_null($width) && is_null($height)) {
+                       $width = $this->width();
+                       $height = $this->height();
+               }
+
+               if ($set == 'maximum') {
+                       if (empty($width)) {
+                               $width = $this->width();
+                       }
+                       if (empty($height)) {
+                               $height = $this->height();
+                       }
+               } else {
+                       if (empty($width)) {
+                               $ratio = $height / $this->height();
+                               $width = $ratio * $this->width();
+                       }
+                       if (empty($height)) {
+                               $ratio = $width / $this->width();
+                               $height = $ratio * $this->height();
+                       }
+               }
+               return array($width, $height);
+       }
+/**
+ * Calculates a box coordinates
+ *
+ * @param integer $width
+ * @param integer $height
+ * @param string $align Currently "center" is supported only
+ * @return array An array containing left and top coordinates
+ */
+       function _boxify($width, $height, $gravity = 'center') {
+               if ($width > $this->width()) {
+                       $left = 0;
+               } else {
+                       $left = ($this->width() - $width) / 2;
+               }
+
+               if ($height > $this->width()) {
+                       $top = 0;
+               } else {
+                       $top = ($this->height() - $height) / 2;
+               }
+               return array($left, $top);
+       }
+}
+?>
diff --git a/app/plugins/media/vendors/medium/js.php b/app/plugins/media/vendors/medium/js.php
new file mode 100644 (file)
index 0000000..e92a785
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Js Medium File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.Medium');
+/**
+ * Js Medium Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ */
+class JsMedium extends Medium {
+/**
+ * Compatible adapters
+ *
+ * @var array
+ */
+       var $adapters = array('Jsmin', 'BasicText');
+/**
+ * Number of characters
+ *
+ * @return integer
+ */
+       function characters() {
+               return $this->Adapters->dispatchMethod($this, 'characters', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Compresses contents. of the medium
+ *
+ * @return string
+ */
+       function compress()  {
+               return $this->Adapters->dispatchMethod($this, 'compress');
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/medium.php b/app/plugins/media/vendors/medium/medium.php
new file mode 100644 (file)
index 0000000..118756e
--- /dev/null
@@ -0,0 +1,792 @@
+<?php
+/**
+ * Medium File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.MimeType');
+/**
+ * Medium Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ */
+class Medium extends Object {
+/**
+ * Name of the Medium
+ * e.g. Image
+ *
+ * @var string
+ */
+       var $name;
+/**
+ * Abbreviated name of the name
+ * e.g. img
+ *
+ * @var string
+ */
+       var $short;
+/**
+ * These Adapters will be tried to be loaded in given order
+ * works similiar to helpers or components properterties
+ *
+ * @var array
+ * @access public
+ */
+       var $adapters = array();
+/**
+ * Holds a reference to the 'original' or 'temporary' file of the files property
+ *
+ * @var string
+ */
+       var $file;
+/**
+ * Related files
+ *
+ * @var array
+ */
+       var $files = array();
+/**
+ * Related open resources keyed by resource type
+ *
+ * @var array
+ */
+       var $resources = array();
+/**
+ * Related objects keyed by class name
+ *
+ * @var array
+ */
+       var $objects = array();
+/**
+ * Related contents (text or binary)
+ * The 'raw' key of this property holds - if present -
+ * a dump of the complete files contents
+ *
+ * @var array
+ */
+       var $contents = array();
+/**
+ * The current MIME type
+ *
+ * @var string
+ */
+       var $mimeType;
+/**
+ * Mapping MIME type (part) to medium name
+ *
+ * @var array
+ */
+       static $_mimeTypesToNames = array(
+               'application/ogg'               => 'Audio',
+               'application/pdf'       => 'Document',
+               'application/msword'    => 'Document',
+               'image/icon'            => 'Icon',
+               'text/css'              => 'Css',
+               'text/javascript'       => 'Js',
+               'text/code'             => 'Generic',
+               'text/rtf'              => 'Document',
+               'text/plain'            => 'Text',
+               'image/'                => 'Image',
+               'audio/'                => 'Audio',
+               'video/'                => 'Video',
+               'text/'                 => 'Generic',
+               '/'                     => 'Generic',
+       );
+/**
+ * Mapping medium name to short medium name
+ *
+ * @var array
+ */
+       static $_namesToShort = array(
+               'Audio'    => 'aud',
+               'Css'      => 'css',
+               'Document' => 'doc',
+               'Generic'  => 'gen',
+               'Icon'     => 'ico',
+               'Image'    => 'img',
+               'Js'       => 'js',
+               'Text'     => 'txt',
+               'Video'    => 'vid',
+       );
+/**
+ * Constructor
+ *
+ * Possible values for $file:
+ *     string containing absolute path to a file (used as 'original')
+ *     resource
+ *  object
+ *  array of resources
+ *  array of objects
+ *  array of absolute paths to files
+ *
+ * @param mixed $file See description above
+ * @param string $mimeType A valid MIME type, provide if autodetection fails upon $file
+ *     or to save the cost for an extra MimeType::detectType call
+ */
+       function __construct($file, $mimeType = null) {
+               if (is_resource($file)) {
+                       $this->resources[get_resource_type($file)] = $file;
+               } elseif (is_object($file)) {
+                       $this->objects[get_class($file)] = $file;
+               } elseif (is_array($file)) {
+                       if (is_string(current($file))) {
+                               $this->files = $file;
+                       } elseif (is_resource(current($file))) {
+                               $this->resources = $file;
+                       } elseif (is_object(current($file))) {
+                               $this->objects = $file;
+                       }
+               } else {
+                       $this->files['original'] = $file;
+               }
+
+               if (isset($this->files['original'])) {
+                       $this->file =& $this->files['original'];
+               } elseif (isset($this->files['temporary'])) {
+                       $this->file =& $this->files['temporary'];
+               }
+
+               if ($mimeType === null) {
+                       $mimeType = MimeType::guessType($this->file);
+               }
+
+               $this->mimeType = $mimeType;
+               $this->name = self::name(null, $mimeType);
+               $this->short = self::short(null, $mimeType);
+
+               $this->Adapters = new MediumAdapterCollection();
+               $this->Adapters->init($this, $this->adapters);
+       }
+/**
+ * Destructor
+ *
+ * Deletes temporary files
+ *
+ * @return void
+ */
+       function __destruct() {
+               if (isset($this->files['temporary']) && file_exists($this->files['temporary'])) {
+                       unlink($this->files['temporary']);
+               }
+       }
+/**
+ * Overriden magic method
+ *
+ * @param string $method
+ * @param array $args
+ * @return void
+ */
+       function __call($method, $args) {
+       }
+/**
+ * Factory method
+ *
+ * Takes a file and determines type of medium to use for it
+ * Falls back to generic medium
+ *
+ * @param mixed $file See description of the constructor
+ * @param string $mimeType Sets the mimeType of the new medium
+ * @return object
+ */
+       static function &factory($file, $mimeType = null) {
+               if ($mimeType === null) {
+                       $mimeType = MimeType::guessType($file, array('experimental' => false));
+               }
+
+               $name = Medium::name(null, $mimeType);
+               $class = $name . 'Medium';
+
+               if (!class_exists($class)) {
+                       App::import('Vendor', 'Media.' . $class, array(
+                               'file' => 'medium' . DS . strtolower($name) . '.php'
+                       ));
+               }
+
+               $Object = new $class($file, $mimeType);
+               return $Object;
+       }
+/**
+ * Determines medium name for a file or MIME type
+ *
+ * In the case of there are no arguments passed to this method
+ * the values of $_mimeTypesToNames are returned
+ *
+ * @param string $file
+ * @param string $mimeType
+ * @return mixed
+ */
+       static function name($file = null, $mimeType = null) {
+               if ($file === null && $mimeType === null) {
+                       return array_values(self::$_mimeTypesToNames);
+               }
+               if ($mimeType === null) {
+                       $mimeType = MimeType::guessType($file);
+               }
+               $mimeType = MimeType::simplify($mimeType);
+
+               foreach (self::$_mimeTypesToNames as $mapMimeType => $name) {
+                       if (strpos($mimeType, $mapMimeType) !== false) {
+                               return $name;
+                       }
+               }
+               return 'Generic';
+       }
+/**
+ * Determines medium short name for a file or MIME type
+ *
+ * In the case of there are no arguments passed to this method
+ * the values of $_nameToShort are returned
+ *
+ * @param string $file
+ * @param string $mimeType
+ * @return mixed
+ */
+       static function short($file = null, $mimeType = null) {
+               if ($file === null && $mimeType === null) {
+                       return array_values(self::$_namesToShort);
+               }
+               return self::$_namesToShort[self::name($file, $mimeType)];
+       }
+/**
+ * Automatically processes a file and returns a Medium instance
+ *
+ * Possible values for $instructions:
+ *     array('name of method', 'name of other method')
+ *  array('name of method' => array('arg1', 'arg2'))
+ *
+ * @param string $file Absolute path to a file
+ * @param array $instructions See description above
+ * @return object
+ */
+       static function make($file, $instructions = array()) {
+               $Medium = Medium::factory($file);
+
+               foreach ($instructions as $key => $value) {
+                       if (is_int($key)) {
+                               $method = $value;
+                               $args = null;
+                       } else {
+                               $method = $key;
+                               if (is_array($value)) {
+                                       $args = $value;
+                               } else {
+                                       $args = array($value);
+                               }
+                       }
+
+                       if (!method_exists($Medium, $method)) {
+                               $message  = "Medium::make - Invalid instruction ";
+                               $message .= "`" . get_class($Medium) . "::{$method}()`.";
+                               trigger_error($message, E_USER_WARNING);
+                               return false;
+                       }
+
+                       $result = call_user_func_array(array($Medium, $method), $args);
+
+                       if ($result === false) {
+                               $message  = "Medium::make - Instruction ";
+                               $message .=  "`" . get_class($Medium) . "::{$method}()` failed.";
+                               trigger_error($message, E_USER_WARNING);
+                               return false;
+                       } elseif (is_a($result, 'Medium')) {
+                               $Medium = $result;
+                       }
+               }
+               return $Medium;
+       }
+/**
+ * Stores the medium to a file and assures that the output file has the correct extension
+ *
+ * @param string $file Absolute path to a file
+ * @param boolean $overwrite Enable overwriting of an existent file
+ * @return mixed
+ */
+       function store($file, $overwrite = false) {
+               $File = new File($file);
+
+               if ($overwrite) {
+                       $File->delete();
+               }
+               if ($File->exists()) {
+                       $message = "Medium::store - File `{$file}` already exists.";
+                       trigger_error($message, E_USER_NOTICE);
+                       return false;
+               }
+
+               $file = $File->Folder->pwd() . DS . $File->name();
+               $correctExtension = MimeType::guessExtension($this->mimeType);
+
+               if ($correctExtension) {
+                       $file .= '.' . $correctExtension;
+               } elseif (isset($extension)) {
+                       $file .= '.' . $File->ext();
+               }
+
+               if ($this->Adapters->dispatchMethod($this, 'store', array($file))) {
+                       return $file;
+               }
+               return false;
+       }
+/**
+ * Convert
+ *
+ * @param string $mimeType
+ * @return boolean|object false on error or a Medium object on success
+ */
+       function convert($mimeType) {
+               $result = $this->Adapters->dispatchMethod($this, 'convert', array($mimeType));
+
+               if (!$result) {
+                       return false;
+               }
+
+               $this->mimeType = $mimeType;
+
+               if (is_a($result, 'Medium')) {
+                       return $result;
+               }
+               return $this;
+       }
+/**
+ * Figures out which known ratio is closest to provided one
+ *
+ * @param integer $width
+ * @param integer_type $height
+ * @return string
+ */
+       function _knownRatio($width, $height) {
+               if (empty($width) || empty($height)) {
+                       return null;
+               }
+
+               $knownRatios = array(
+                       '1:1.294' => 1/1.294,
+                       '1:1.545' => 1/1.1545,
+                       '4:3'     => 4/3,
+                       '1.375:1' => 1.375,
+                       '3:2'     => 3/2,
+                       '16:9'    => 16/9,
+                       '1.85:1'  => 1.85,
+                       '1.96:1'  => 1.96,
+                       '2.35:1'  => 2.35,
+                       '√2:1'    => pow(2, 1/2), /* dina4 quer */
+                       '1:√2'    => 1 / (pow(2, 1/2)), /* dina4 hoch */
+                       'Φ:1'     => (1 + pow(5,1/2)) / 2, /* goldener schnitt */
+                       '1:Φ'     => 1 / ((1 + pow(5,1/2)) / 2), /* goldener schnitt */
+               );
+
+               foreach ($knownRatios as $knownRatioName => &$knownRatio) {
+                       $knownRatio = abs(($width / $height) - $knownRatio);
+               }
+
+               asort($knownRatios);
+               return array_shift(array_keys($knownRatios));
+       }
+}
+/**
+ * Medium Adapter Collection Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ */
+class MediumAdapterCollection extends Object {
+/**
+ * Attached adapter names
+ *
+ * @var array
+ */
+       var $_attached = array();
+/**
+ * Initialized adapter names
+ *
+ * @var array
+ */
+       var $_initialized = array();
+/**
+ * Mapped methods of adapters
+ *
+ * Keyed by method name
+ * @var array
+ */
+       var $__methods = array();
+/**
+ * Errors
+ *
+ * @var boolean|array
+ * @access private
+ */
+       var $__errors = false;
+/**
+ * Messages
+ *
+ * @var array
+ * @access private
+ */
+       var $__messages = array();
+/**
+ * Attaches $adapters to $Medium
+ *
+ * @param object $Medium
+ * @param array $adapters
+ */
+       function init($Medium, $adapters = array()) {
+               foreach (Set::normalize($adapters) as $adapter => $config) {
+                       $this->attach($adapter, $config);
+               }
+       }
+/**
+ * Attaches $adapter and inits it
+ *
+ * @param string $adapter
+ * @param array $config
+ * @return boolean
+ */
+       function attach($adapter, $config) {
+               $class = $adapter . 'MediumAdapter';
+               $file = 'medium' . DS . 'adapter' . DS . Inflector::underscore($adapter) . '.php';
+
+               if (!class_exists($class)
+               && !App::import('Vendor', 'Media.' . $class, array('file' => $file))) {
+                       $message = "MediumAdapterCollection::attach() - Adapter `{$adapter}` not found!";
+                       $this->__errors[] = $message;
+                       return false;
+               }
+
+               $this->{$adapter} = new $class();
+               $this->_attached[] = $adapter;
+               return true;
+       }
+/**
+ * Detaches adapter and does some cleanup
+ *
+ * @param string $name
+ */
+       function detach($name) {
+               $this->_attached = array_diff($this->_attached, (array)$name);
+               $this->_initialized = array_diff($this->_initialized, (array)$name);
+               $this->_overlay($this->_initialized);
+               $this->__messages[] = "MediumCollection::detach() - Removed `{$name}MediumAdapter`.";
+       }
+/**
+ * Calls a method of an adapter providing it
+ * Loads and initiates the adapter if necessary
+ *
+ * @param string $method
+ * @param array $args
+ * @return mixed
+ */
+       function dispatchMethod($Medium, $method, $params = array(), $options = array()) {
+               $options += array('normalize' => false);
+
+               if (!is_array($params)) {
+                       $params = (array)$params;
+               }
+               array_unshift($params, $Medium);
+
+               if (isset($this->__methods[$method])) {
+                       list($method, $name) = $this->__methods[$method];
+
+                       $message  = "MediumCollection::dispatchMethod() - ";
+                       $message .= "Calling `{$name}MediumAdapter::{$method}()`.";
+                       $this->__messages[] = $message;
+
+                       $result = $this->{$name}->dispatchMethod($method, $params);
+                       return $options['normalize'] ? $this->_normalize($result) : $result;
+               }
+
+               foreach ($this->_attached as $adapter) {
+                       if (!method_exists($this->{$adapter}, $method)) { /* optional */
+                               continue;
+                       }
+
+                       if (!$this->_initialized($adapter)) {
+                               if ($this->_initialize($Medium, $adapter)) {
+                                       $message  = "MediumCollection::dispatchMethod() - ";
+                                       $message .= "Initialized `{$adapter}MediumAdapter`.";
+                                       $this->__messages[] = $message;
+
+                                       $this->_overlay($adapter);
+                               } else {
+                                       $message  = "MediumCollection::dispatchMethod() - ";
+                                       $message .= "Adapter `{$adapter}` failed to initialize.";
+                                       $this->__errors[] = $message;
+
+                                       $this->detach($adapter);
+                                       continue;
+                               }
+                       }
+
+                       if (isset($this->__methods[$method])) {
+                               list($method, $name) = $this->__methods[$method];
+
+                               $message  = "MediumCollection::dispatchMethod() - ";
+                               $message .= "Calling `{$adapter}MediumAdapter::{$method}()`.";
+                               $this->__messages[] = $message;
+
+                               $result = $this->{$name}->dispatchMethod($method, $params);
+                               return $options['normalize'] ? $this->_normalize($result) : $result;
+                       }
+               }
+               $message = "MediumCollection::dispatchMethod() - ";
+               $message .= "Method `{$method}` not found in any attached adapter";
+               $this->__errors[] = $message;
+       }
+/**
+ * Checks if $adapter is compatible and initializes it with $Medium
+ *
+ * @param object $Medium
+ * @param string $adapter
+ * @return boolean
+ */
+       function _initialize($Medium, $adapter) {
+               if (!in_array($adapter, $this->_attached)) {
+                       return false;
+               }
+               if (in_array($adapter, $this->_initialized)) {
+                       return true;
+               }
+               if (!$this->{$adapter}->compatible($Medium) || !$this->{$adapter}->initialize($Medium)) {
+                       return false;
+               }
+               $this->_initialized[] = $adapter;
+               return true;
+       }
+/**
+ * Checks if an adapter is already initialized
+ * or returns currently initialized adapters
+ *
+ * @param string $name
+ * @return mixed
+ */
+       function _initialized($name = null) {
+               if (!empty($name)) {
+                       return in_array($name, $this->_initialized);
+               }
+               return $this->_initialized;
+       }
+/**
+ * Adds methods of adapter(s)
+ *
+ * @param mixed $name
+ * @return void
+ */
+       function _overlay($name) {
+               foreach ((array)$name as $adapter) {
+                       foreach (get_class_methods($this->{$adapter}) as $method) {
+                               if ($method[0] !== '_') {
+                                       $this->__methods[$method] = array($method, $adapter);
+                               }
+                       }
+               }
+               $this->__messages[] = "MediumCollection::_overlay() - Regenerated method overlays.";
+       }
+/**
+ * Normalizes a value
+ *
+ * @param mixed $value
+ * @param string $type
+ * @access protected
+ * @return mixed
+ */
+       function _normalize($value) {
+               if (is_numeric($value)) {
+                       $value = (integer)$value;
+               } elseif (is_string($value)) {
+                       $value = trim($value);
+               }
+               if (!empty($value)) {
+                       return $value;
+               }
+       }
+/**
+ * Returns messages for this Object
+ *
+ * @return array
+ */
+       function messages() {
+               return $this->__messages;
+       }
+/**
+ * Returns errors for this Object
+ *
+ * @return mixed
+ */
+       function errors() {
+               return $this->__errors;
+       }
+}
+/**
+ * Medium Adapter Class
+ *
+ * Base Class for adapters
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ */
+class MediumAdapter extends Object {
+/**
+ * Used by the compatible method
+ *
+ * @var array
+ */
+       var $require;
+/**
+ * Method for checking if the adapter is going to work with the provided $Medium
+ *
+ * Called before the adapter is going to be initialized
+ * May be overridden
+ *
+ * @param object $Medium
+ * @return boolean
+ */
+       function compatible($Medium) {
+               $default = array(
+                       /* sourceFile must have one out of given MIME types */
+                       'mimeTypes' => array(),
+                       /* PHP extensions which must be loaded */
+                       'extensions' => array(),
+                       /* Functions that must exist */
+                       'functions' => array(),
+                       /* Files that are required */
+                       'imports' => array(),
+                       /* System commands which must be whichable */
+                       'commands' => array(),
+               );
+               $require = array_merge($default, $this->require);
+
+               if (!empty($require['mimeTypes'])) {
+                       if (!in_array(MimeType::simplify($Medium->mimeType), $require['mimeTypes'])) {
+                               return false;
+                       }
+               }
+               foreach ($require['extensions'] as $check) {
+                       if (!extension_loaded($check)) {
+                               return false;
+                       }
+               }
+               foreach ($require['functions'] as $check) {
+                       if (!function_exists($check)) {
+                               return false;
+                       }
+               }
+               foreach ($require['commands'] as $check) {
+                       if (!$this->_which($check)) {
+                               return false;
+                       }
+               }
+               foreach ($require['imports'] as $import) {
+                       if (!App::import($import)) {
+                               return false;
+                       }
+               }
+               return true;
+       }
+/**
+ * To-be-overridden
+ *
+ * Called after compatible
+ *
+ * @param object $Medium
+ * @return boolean
+ */
+       function initialize($Medium) {
+               return true;
+       }
+/**
+ * Do system calls
+ *
+ * @param string $string A string containing placeholders e.g. :command: -f xy
+ * @param array $data Data to be filled into the marker string
+ * @return boolean
+ */
+       function _execute($string, $data) {
+               if (!$data['command'] = $this->_which($data['command'])) {
+                       return false;
+               }
+               $line = String::insert($string, $data, array(
+                       'before' => ':', 'after' => ':', 'clean' => true
+               ));
+               exec(escapeshellcmd($line) , $output, $return);
+               return $return !== 0 ? false : (empty($output) ? true : array_pop($output));
+       }
+/**
+ * Helper method to determine the absolute path to a executable
+ *
+ * @param string $command
+ * @return mixed
+ */
+       function _which($command) {
+               static $found = array();
+
+               if (is_array($command)) {
+                       foreach ($command as $c) {
+                               if ($result = $this->_which($c)) {
+                                       return $result;
+                               }
+                       }
+                       return false;
+               }
+
+               if (isset($found[$command])) {
+                       return $found[$command];
+               }
+
+               if (!ini_get('safe_mode')) {
+                       $paths = ini_get('safe_mode_exec_dir');
+               }
+               if (!isset($paths)) {
+                       $paths = env('PATH');
+               }
+               $paths = explode(PATH_SEPARATOR, $paths);
+               $paths[] = getcwd();
+
+               $os = env('OS');
+               $windows = !empty($os) && strpos($os, 'Windows') !== false;
+
+               if (!$windows) {
+                       exec('which ' . $command . ' 2>&1', $output, $return);
+
+                       if ($return == 0) {
+                               return $found[$command] = current($output);
+                       }
+               }
+
+               if ($windows) {
+                       if($extensions = env('PATHEXT')) {
+                               $extensions = explode(PATH_SEPARATOR, $extensions);
+                       } else {
+                               $extensions = array('exe', 'bat', 'cmd', 'com');
+                       }
+               }
+               $extensions[] = '';
+
+               foreach ($paths as $path) {
+                       foreach($extensions as $extension) {
+                               $file = $path . DS . $command;
+
+                               if (!empty($extension)) {
+                                       $file .= '.' . $extension;
+                               }
+
+                               if (is_file($file)) {
+                                       return $found[$command] = $file;
+                               }
+                       }
+               }
+               return false;
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/text.php b/app/plugins/media/vendors/medium/text.php
new file mode 100644 (file)
index 0000000..44c96a7
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+/**
+ * Text Medium File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.Medium');
+/**
+ * Text Medium Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ */
+class TextMedium extends Medium {
+/**
+ * Compatible adapters
+ *
+ * @var array
+ */
+       var $adapters = array('PearText', 'BasicText');
+/**
+ * Number of characters
+ *
+ * @return integer
+ */
+       function characters() {
+               return $this->Adapters->dispatchMethod($this, 'characters', null,  array(
+                       'normalize' => true
+               ));
+        }
+/**
+ * Flesch Score
+ *
+ * @return float
+ */
+       function fleschScore() {
+               return round($this->Adapters->dispatchMethod($this, 'fleschScore', null, array(
+                       'normalize' => false
+               )), 2);
+       }
+/**
+ * Lexical Density in percent
+ *
+ * 40- 50 low (easy to read)
+ * 60- 70 high (hard to read)
+ *
+ * @link http://www.usingenglish.com/glossary/lexical-density-test.html
+ * @return integer
+ */
+       function lexicalDensity() {
+               return $this->Adapters->dispatchMethod($this, 'lexicalDensity', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Number of sentences
+ *
+ * @return integer
+ */
+       function sentences() {
+               return $this->Adapters->dispatchMethod($this, 'sentences', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Number of syllables
+ *
+ * @return integer
+ */
+       function syllables()    {
+               return $this->Adapters->dispatchMethod($this, 'syllables', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Truncate to given amount of characters
+ *
+ * @param integer $characters
+ * @return string
+ */
+       function truncate($characters) {
+               return $this->Adapters->dispatchMethod($this, 'truncate', array($characters));
+       }
+/**
+ * Number of words
+ *
+ * @param boolean $unique
+ * @return integer
+ */
+       function words($unique = false) {
+               return $this->Adapters->dispatchMethod($this, 'words', null, array(
+                       'normalize' => true
+               ));
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/medium/video.php b/app/plugins/media/vendors/medium/video.php
new file mode 100644 (file)
index 0000000..0669f9a
--- /dev/null
@@ -0,0 +1,159 @@
+<?php
+/**
+ * Video Medium File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.Medium');
+/**
+ * Video Medium Class
+ *
+ * @package    media
+ * @subpackage media.libs.medium
+ */
+class VideoMedium extends Medium {
+/**
+ * Compatible adapters
+ *
+ * @var array
+ */
+       var $adapters = array('Getid3Video', 'FfmpegVideo');
+/**
+ * Title stored in medium metadata
+ *
+ * @return mixed String if metadata info exists, else null
+ */
+       function title() {
+               return $this->Adapters->dispatchMethod($this, 'title', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Year stored in medium metadata
+ *
+ * @return mixed Integer if metadata info exists, else null
+ */
+       function year() {
+               return $this->Adapters->dispatchMethod($this, 'year', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Duration in seconds
+ *
+ * @return integer
+ */
+       function duration() {
+               return $this->Adapters->dispatchMethod($this, 'duration', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Current height of medium
+ *
+ * @return integer
+ */
+       function height() {
+               return $this->Adapters->dispatchMethod($this, 'height', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Current width of medium
+ *
+ * @return integer
+ */
+       function width() {
+               return $this->Adapters->dispatchMethod($this, 'width', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Current bit rate of medium
+ *
+ * @url http://en.wikipedia.org/wiki/Bit_rate
+ * @return integer
+ */
+       function bitRate() {
+               return $this->Adapters->dispatchMethod($this, 'bitRate', null, array(
+                       'normalize' => true
+               ));
+       }
+/**
+ * Determines the quality of the medium by
+ * taking definition and bit rate into account
+ *
+ * @return integer A number indicating quality between 1 (worst) and 5 (best)
+ */
+       function quality() {
+               $definition = $this->width() * $this->height();
+               $bitRate = $this->bitRate();
+
+               if (empty($definition) || empty($bitRate)) {
+                       return;
+               }
+
+               /* Normalized between 1 and 5 where min = 19200 and max = 414720 */
+               $definitionMax = 720 * 576;
+               $definitionMin = 160 * 120;
+               $qualityMax = 5;
+               $qualityMin = 1;
+
+               if ($definition >= $definitionMax) {
+                       $quality = $qualityMax;
+               } elseif ($definition <= $definitionMin) {
+                       $quality = $qualityMin;
+               } else {
+                       $quality =
+                               (($definition - $definitionMin) / ($definitionMax - $definitionMin))
+                               * ($qualityMax - $qualityMin)
+                               + $qualityMin;
+               }
+
+               $bitRateCoef = 3;
+
+               if ($bitRate <= 128000) {
+                       $quality = ($quality + $qualityMin * $bitRateCoef) / ($bitRateCoef + 1);
+               } elseif ($bitRate <= 564000) {
+                       $quality = ($quality + $qualityMax * 2 / 5 * $bitRateCoef) / ($bitRateCoef + 1);
+               } elseif ($bitRate <= 1152000) {
+                       $quality = ($quality + $qualityMax * 3 / 5 * $bitRateCoef) / ($bitRateCoef + 1);
+               } elseif ($bitRate <= 2240000) {
+                       $quality = ($quality + $qualityMax * 4 / 5 * $bitRateCoef) / ($bitRateCoef + 1);
+               } else {
+                       $quality = ($quality + $qualityMax * $bitRateCoef) / ($bitRateCoef + 1);
+               }
+               return (integer)round($quality);
+       }
+/**
+ * Determines a (known) ratio of medium
+ *
+ * @return mixed String if $known is true or float if false
+ */
+       function ratio($known = true) {
+               $width = $this->width();
+               $height = $this->height();
+
+               if (empty($width) || empty($height)) {
+                       return;
+               }
+
+               if (!$known) {
+                       return $width / $height;
+               }
+               return $this->_knownRatio($width, $height);
+       }
+}
+?>
diff --git a/app/plugins/media/vendors/mime_glob.db b/app/plugins/media/vendors/mime_glob.db
new file mode 100644 (file)
index 0000000..07595ad
--- /dev/null
@@ -0,0 +1,695 @@
+# This file was automatically generated by the
+# update-mime-database command. DO NOT EDIT!
+application/pgp-keys:*.skr
+application/pgp-keys:*.skr
+text/vnd.wap.wml:*.wml
+application/x-7z-compressed:*.7z
+application/vnd.corel-draw:*.cdr
+image/x-bzeps:*.epsf.bz2
+text/spreadsheet:*.sylk
+application/x-alz:*.alz
+text/sgml:*.sgml
+application/xml-external-parsed-entity:*.ent
+image/x-macpaint:*.pntg
+image/x-nikon-nef:*.nef
+video/x-ms-wmv:*.wmv
+application/mathematica:*.nb
+application/x-netcdf:*.nc
+audio/x-ms-asx:*.wmx
+image/x-rgb:*.rgb
+application/x-core:core
+text/x-mrml:*.mrl
+application/x-java:*.class
+audio/prs.sid:*.psid
+video/quicktime:*.moov
+application/x-quicktime-media-link:*.qtl
+application/x-nes-rom:*.nes
+text/x-cmake:*.cmake
+text/x-vala:*.vala
+application/x-gnucash:*.xac
+text/spreadsheet:*.slk
+image/x-minolta-mrw:*.mrw
+application/vnd.ms-powerpoint:*.pot
+text/x-gettext-translation-template:*.pot
+audio/midi:*.midi
+image/x-compressed-xcf:*.xcf.gz
+audio/AMR:*.amr
+application/x-x509-ca-cert:*.cer
+application/xml:*.xsl
+application/x-markaby:*.mab
+application/x-abiword:*.abw.gz
+application/vnd.wordperfect:*.wp4
+application/vnd.wordperfect:*.wp5
+application/vnd.wordperfect:*.wp6
+image/vnd.djvu:*.djv
+video/vivo:*.viv
+application/x-desktop:*.kdelnk
+application/x-killustrator:*.kil
+application/x-msi:*.msi
+image/x-eps:*.epsf
+text/x-rpm-spec:*.spec
+application/x-shar:*.shar
+text/x-changelog:ChangeLog
+application/x-troff-man:*.man
+image/x-eps:*.epsi
+text/x-mrml:*.mrml
+application/x-snes-rom:*.smc
+application/vnd.stardivision.mail:*.smd
+application/x-sv4cpio:*.sv4cpio
+application/xhtml+xml:*.xhtml
+application/x-theme:*.theme
+application/vnd.stardivision.math:*.smf
+text/x-nfo:*.nfo
+image/x-bzeps:*.epsi.bz2
+image/x-portable-pixmap:*.ppm
+application/smil:*.smi
+application/x-sami:*.smi
+application/x-navi-animation:*.ani
+application/x-bzip-compressed-tar:*.tar.bz2
+application/x-x509-ca-cert:*.cert
+application/x-trash:*.bak
+application/smil:*.sml
+application/xml:*.xslt
+application/x-karbon:*.karbon
+application/x-msx-rom:*.msx
+application/vnd.ms-powerpoint:*.pps
+text/x-iptables:*.iptables
+application/vnd.ms-powerpoint:*.ppt
+text/html:*.html
+text/x-makefile:GNUmakefile
+application/x-sms-rom:*.sms
+application/xml:*.xbl
+application/vnd.ms-powerpoint:*.ppz
+image/x-xbitmap:*.xbm
+application/x-abiword:*.abw.CRASHED
+application/vnd.ms-tnef:*.tnef
+application/x-gzpostscript:*.ps.gz
+text/plain:*,v
+image/x-eps:*.eps
+text/x-log:*.log
+application/x-trash:*.old
+text/x-c++src:*.cxx
+audio/x-mod:*.mtm
+audio/basic:*.snd
+application/smil:*.smil
+text/x-c++src:*.C
+application/x-tex-pk:*.pk
+image/x-compressed-xcf:*.xcf.bz2
+application/x-perl:*.pl
+application/x-perl:*.pm
+application/vnd.wordperfect:*.wpd
+text/x-gettext-translation:*.po
+application/x-vmware-snapshot:*.vmsn
+application/x-wpg:*.wpg
+image/x-xcf:*.xcf
+image/cgm:*.cgm
+image/gif:*.gif
+application/postscript:*.ps
+application/x-sv4crc:*.sv4crc
+video/3gpp:*.3gpp
+application/x-tar:*.tar
+application/x-pw:*.pw
+application/vnd.mozilla.xul+xml:*.xul
+application/vnd.mozilla.xul+xml:*.xul
+application/x-blender:*.BLEND
+text/x-python:*.py
+application/vnd.wordperfect:*.wpp
+text/tab-separated-values:*.tsv
+video/mpeg:*.mpeg
+application/vnd.ms-works:*.wps
+application/epub+zip:*.epub
+image/x-ilbm:*.ilbm
+application/x-compress:*.Z
+application/x-palm-database:*.prc
+application/x-cd-image:*.iso
+image/x-3ds:*.3ds
+audio/x-tta:*.tta
+application/x-archive:*.a
+application/x-bzip-compressed-tar:*.tar.bz
+audio/x-ape:*.ape
+application/x-font-ttf:*.ttc
+text/x-csrc:*.c
+text/x-mup:*.mup
+text/x-dsrc:*.d
+audio/x-mpegurl:*.vlc
+application/x-font-ttf:*.ttf
+text/x-eiffel:*.e
+text/x-fortran:*.f
+text/x-chdr:*.h
+text/x-ldif:*.ldif
+application/x-vmware-team:*.vmtm
+application/x-chm:*.chm
+application/x-chm:*.chm
+text/x-objcsrc:*.m
+text/x-matlab:*.m
+video/quicktime:*.qt
+application/x-object:*.o
+text/x-erlang:*.erl
+text/x-pascal:*.p
+application/vnd.ms-access:*.mdb
+text/troff:*.t
+text/x-xslfo:*.xslfo
+application/x-font-ttx:*.ttx
+application/x-bzip-compressed-tar:*.tbz
+image/x-quicktime:*.qtif
+audio/vnd.rn-realaudio:*.ra
+video/3gpp:*.3g2
+application/x-ruby:*.rb
+image/x-psd:*.psd
+text/x-copying:COPYING
+application/x-font-linux-psf:*.psf
+audio/x-psf:*.psf
+application/x-font-speedo:*.spd
+application/x-pak:*.pak
+application/x-font-bdf:*.bdf
+text/x-makefile:makefile
+application/x-oleo:*.oleo
+text/vnd.wap.wmlscript:*.wmls
+application/vnd.rn-realmedia:*.rm
+image/x-adobe-dng:*.dng
+application/x-shockwave-flash:*.spl
+image/vnd.rn-realpix:*.rp
+image/x-xwindowdump:*.xwd
+text/x-pascal:*.pas
+text/x-tcl:*.tcl
+application/x-ica:*.ica
+image/x-tga:*.icb
+application/x-glade:*.glade
+image/x-sony-sr2:*.sr2
+application/x-mswrite:*.wri
+text/vnd.rn-realtext:*.rt
+application/x-kchart:*.chrt
+video/vnd.rn-realvideo:*.rv
+audio/mpeg:*.mpga
+model/vrml:*.wrl
+application/x-quattropro:*.wb1
+application/x-quattropro:*.wb2
+image/jp2:*.j2k
+application/x-quattropro:*.wb3
+audio/x-speex:*.spx
+audio/x-mod:*.med
+application/x-zoo:*.zoo
+image/x-ico:*.ico
+text/x-c++hdr:*.hpp
+application/xspf+xml:*.xspf
+application/x-vmware-vm:*.vmx
+application/x-bzpostscript:*.ps.bz2
+text/calendar:*.ics
+image/x-applix-graphics:*.ag
+image/rle:*.rle
+image/x-pict:*.pict1
+application/x-shellscript:*.sh
+application/illustrator:*.ai
+audio/x-mod:*.m15
+application/x-n64-rom:*.n64
+image/x-pict:*.pict2
+image/x-portable-bitmap:*.pbm
+image/x-skencil:*.sk
+application/x-perl:*.al
+application/msword:*.doc
+application/x-vmware-vmdisk:*.vmdk
+application/x-arj:*.arj
+image/x-lwo:*.lwob
+application/x-gzdvi:*.dvi.gz
+application/x-sharedlib:*.so
+text/x-sql:*.sql
+video/3gpp:*.3ga
+application/x-applix-spreadsheet:*.as
+text/x-uil:*.uil
+audio/basic:*.au
+text/x-c++hdr:*.h++
+image/x-icns:*.icns
+image/vnd.wap.wbmp:*.wbmp
+audio/x-aiff:*.aifc
+application/x-applix-word:*.aw
+audio/x-aiff:*.aiff
+application/x-egon:*.egon
+image/x-sony-arw:*.arw
+application/msword-template:*.dot
+text/x-idl:*.idl
+application/x-php:*.php3
+application/x-php:*.php4
+audio/x-wav:*.wav
+video/3gpp:*.3gp
+image/x-photo-cd:*.pcd
+audio/x-ms-asx:*.wax
+application/x-font-pcf:*.pcf
+application/x-cisco-vpn-settings:*.pcf
+text/x-setext:*.etx
+application/x-t602:*.602
+audio/mp4:*.aac
+application/pgp-encrypted:*.asc
+application/pgp-keys:*.asc
+text/plain:*.asc
+application/pgp-encrypted:*.asc
+application/x-wais-source:*.src
+application/vnd.rn-realmedia:*.rmvb
+application/x-xbel:*.xbel
+application/vnd.hp-pcl:*.pcl
+image/x-sony-srf:*.srf
+video/x-ms-asf:*.asf
+video/mpeg:*.vob
+application/vnd.rn-realmedia:*.rmj
+audio/x-voc:*.voc
+text/x-tcl:*.tk
+application/x-font-pcf:*.pcf.gz
+application/x-bittorrent:*.torrent
+application/vnd.rn-realmedia:*.rmm
+application/x-par2:*.par2
+application/x-lzma:*.lzma
+text/troff:*.tr
+audio/ac3:*.ac3
+image/x-gzeps:*.epsf.gz
+application/x-asp:*.asp
+application/x-linguist:*.ts
+application/x-perl:*.perl
+application/vnd.rn-realmedia:*.rms
+image/x-pcx:*.pcx
+application/x-bzip:*.bz2
+image/ief:*.ief
+text/x-ssa:*.ass
+application/x-subrip:*.srt
+application/x-bzip:*.bz
+application/vnd.rn-realmedia:*.rmx
+application/vnd.stardivision.writer:*.vor
+application/x-gzpdf:*.pdf.gz
+audio/x-ms-asx:*.asx
+video/x-sgi-movie:*.movie
+application/x-gettext-translation:*.gmo
+text/x-tex:*.tex
+application/x-trash:*%
+application/x-palm-database:*.pdb
+text/x-c++src:*.cc
+application/pdf:*.pdf
+application/x-kontour:*.kon
+text/x-ssa:*.ssa
+application/x-qw:*.qif
+image/x-quicktime:*.qif
+application/x-magicpoint:*.mgp
+application/x-vmware-vmfoundry:*.vmxf
+application/x-designer:*.ui
+video/vivo:*.vivo
+text/x-cmake:CMakeLists.txt
+application/x-amipro:*.sam
+text/x-tex:*.ltx
+image/vnd.djvu:*.djvu
+application/x-gnucash:*.gnc
+application/gnunet-directory:*.gnd
+image/x-xfig:*.fig
+text/x-csharp:*.cs
+application/vnd.ms-works:*.wcm
+image/x-iff:*.iff
+text/x-lua:*.lua
+application/x-abiword:*.abw
+text/plain:*.txt
+text/x-tex:*.cls
+application/x-tzo:*.tar.lzo
+application/x-abiword:*.zabw
+application/x-kpovmodeler:*.kpm
+image/x-olympus-orf:*.orf
+application/x-dc-rom:*.dc
+image/x-pentax-pef:*.pef
+image/x-pict:*.pict
+image/x-tga:*.tga
+application/vnd.sun.xml.calc.template:*.stc
+application/x-kpresenter:*.kpr
+application/vnd.sun.xml.draw.template:*.std
+application/x-compressed-tar:*.tar.gz
+application/x-ace:*.ace
+application/pkcs10:*.p10
+application/x-kpresenter:*.kpt
+video/mpeg:*.m2t
+application/x-x509-ca-cert:*.pem
+application/x-pkcs12:*.p12
+application/vnd.ms-works:*.wdb
+application/vnd.sun.xml.impress.template:*.sti
+audio/x-wavpack-correction:*.wvc
+image/x-sigma-x3f:*.x3f
+audio/x-stm:*.stm
+application/x-bzip-compressed-tar:*.tbz2
+video/dv:*.dv
+audio/x-mod:*.ult
+application/x-gnumeric:*.gnumeric
+application/vnd.sun.xml.writer.template:*.stw
+audio/x-wavpack:*.wvp
+audio/midi:*.mid
+text/html:*.htm
+text/x-tex:*.sty
+application/x-mif:*.mif
+application/x-font-type1:*.pfa
+application/x-compressed-tar:*.tgz
+application/x-font-type1:*.pfb
+audio/x-ms-asx:*.wvx
+text/x-adasrc:*.adb
+text/x-microdvd:*.sub
+text/x-mpsub:*.sub
+text/x-subviewer:*.sub
+text/x-bibtex:*.bib
+audio/x-mpegurl:*.m3u
+text/x-emacs-lisp:*.el
+video/x-msvideo:*.avi
+application/x-rpm:*.rpm
+application/x-ms-dos-executable:*.exe
+text/x-scheme:*.scm
+application/vnd.wordperfect:*.wp
+image/fax-g3:*.g3
+image/x-sun-raster:*.sun
+image/tiff:*.tiff
+application/ecmascript:*.es
+application/octet-stream:*.bin
+application/pgp-encrypted:*.gpg
+application/pgp-encrypted:*.gpg
+application/x-tzo:*.tzo
+text/x-dsl:*.dsl
+audio/mp4:*.m4a
+application/x-krita:*.kra
+application/x-pkcs12:*.pfx
+text/x-txt2tags:*.t2t
+text/x-adasrc:*.ads
+audio/x-m4b:*.m4b
+audio/x-wavpack:*.wv
+text/directory:*.gcrd
+application/x-trash:*~
+application/x-dar:*.dar
+application/andrew-inset:*.ez
+image/x-fits:*.fits
+application/x-cpio:*.cpio
+image/x-exr:*.exr
+application/x-bzpdf:*.pdf.bz2
+application/x-python-bytecode:*.pyc
+application/vnd.oasis.opendocument.graphics-template:*.otg
+application/vnd.stardivision.draw:*.sda
+application/vnd.oasis.opendocument.text-web:*.oth
+audio/AMR-WB:*.awb
+application/x-tgif:*.obj
+application/vnd.stardivision.calc:*.sdc
+image/x-lwo:*.lwo
+application/vnd.stardivision.impress:*.sdd
+image/svg+xml-compressed:*.svgz
+audio/x-xi:*.xi
+image/svg+xml:*.svg
+image/x-lws:*.lws
+image/x-portable-graymap:*.pgm
+image/tiff:*.tif
+video/mp4:*.m4v
+application/x-fluid:*.fl
+application/x-chess-pgn:*.pgn
+application/vnd.oasis.opendocument.presentation-template:*.otp
+application/x-blender:*.blend
+application/xml-dtd:*.dtd
+audio/x-xm:*.xm
+application/x-python-bytecode:*.pyo
+application/x-dbf:*.dbf
+application/pgp-encrypted:*.pgp
+application/pgp-encrypted:*.pgp
+application/x-tarz:*.tar.Z
+application/x-awk:*.awk
+text/x-mup:*.not
+text/x-xslfo:*.fo
+video/x-flic:*.flc
+application/vnd.oasis.opendocument.spreadsheet-template:*.ots
+audio/x-mod:*.uni
+application/vnd.oasis.opendocument.text-template:*.ott
+text/x-opml+xml:*.opml
+application/vnd.stardivision.impress:*.sdp
+application/sdp:*.sdp
+application/x-hdf:*.hdf
+video/x-flic:*.fli
+application/vnd.stardivision.chart:*.sds
+application/mbox:*.mbox
+audio/x-matroska:*.mka
+application/x-cd-image:*.iso9660
+application/vnd.stardivision.writer:*.sdw
+image/x-jng:*.jng
+image/x-tga:*.vst
+text/x-credits:CREDITS
+text/x-install:INSTALL
+application/x-gameboy-rom:*.gb
+text/x-tex:*.dtx
+video/x-flv:*.flv
+application/x-kivio:*.flw
+image/jp2:*.jp2
+application/x-tex-gf:*.gf
+application/x-kspread:*.ksp
+audio/midi:*.kar
+application/x-sms-rom:*.gg
+text/x-ocl:*.ocl
+application/x-shockwave-flash:*.swf
+application/smil:*.kino
+application/x-xliff:*.xliff
+application/x-java-pack200:*.pack
+application/vnd.ms-excel:*.xla
+application/x-php:*.php
+video/x-matroska:*.mkv
+application/vnd.ms-excel:*.xlc
+application/x-graphite:*.gra
+audio/x-flac:*.flac
+text/x-texinfo:*.texi
+application/x-font-afm:*.afm
+application/x-gnuplot:*.gp
+application/x-sami:*.sami
+application/vnd.ms-excel:*.xld
+application/x-xliff:*.xlf
+text/x-dcl:*.dcl
+application/dicom:*.dcm
+image/x-canon-cr2:*.cr2
+text/x-c++src:*.cpp
+text/x-fortran:*.f90
+application/vnd.ms-excel:*.xll
+application/vnd.ms-excel:*.xlm
+image/x-kodak-dcr:*.dcr
+application/x-gzip:*.gz
+application/oda:*.oda
+text/x-fortran:*.f95
+application/vnd.oasis.opendocument.database:*.odb
+application/x-java-jnlp-file:*.jnlp
+application/vnd.oasis.opendocument.chart:*.odc
+application/x-ustar:*.ustar
+application/x-gnuplot:*.gplt
+application/vnd.ms-excel:*.xls
+application/vnd.ms-excel:*.xlt
+application/x-hwp:*.hwp
+application/x-smaf:*.smaf
+application/vnd.oasis.opendocument.formula:*.odf
+text/x-ocaml:*.mli
+application/vnd.oasis.opendocument.graphics:*.odg
+application/vnd.ms-excel:*.xlw
+application/vnd.oasis.opendocument.image:*.odi
+text/x-vhdl:*.vhdl
+application/x-hwt:*.hwt
+image/x-fuji-raf:*.raf
+application/vnd.sun.xml.calc:*.sxc
+application/vnd.sun.xml.draw:*.sxd
+text/x-c++hdr:*.hh
+application/vnd.oasis.opendocument.text-master:*.odm
+audio/x-mod:*.669
+application/vnd.sun.xml.writer.global:*.sxg
+application/vnd.oasis.opendocument.presentation:*.odp
+text/x-c++src:*.c++
+application/vnd.sun.xml.impress:*.sxi
+application/ram:*.ram
+text/directory:*.vcf
+application/vnd.oasis.opendocument.spreadsheet:*.ods
+application/vnd.oasis.opendocument.text:*.odt
+application/x-lyx:*.lyx
+text/x-c++hdr:*.hp
+text/x-eiffel:*.eif
+application/vnd.sun.xml.math:*.sxm
+audio/x-xmf:*.xmf
+application/x-dvi:*.dvi
+video/x-msvideo:*.divx
+application/x-rar:*.rar
+text/x-haskell:*.hs
+application/x-cpio-compressed:*.cpio.gz
+application/x-profile:gmon.out
+application/x-font-type1:*.gsf
+image/x-cmu-raster:*.ras
+application/rss+xml:*.rss
+text/x-xmi:*.xmi
+image/jp2:*.jpc
+application/x-lha:*.lha
+image/jpeg:*.jpeg
+image/jpeg:*.jpe
+image/x-panasonic-raw:*.raw
+application/xml:*.xml
+image/jp2:*.jpf
+application/x-kugar:*.kud
+audio/vnd.rn-realaudio:*.rax
+image/jpeg:*.jpg
+application/vnd.sun.xml.writer:*.sxw
+image/x-dds:*.dds
+text/calendar:*.vcs
+text/directory:*.vct
+text/css:*.CSSL
+application/x-smaf:*.mmf
+application/x-lha:*.lzh
+audio/x-mpegurl:*.m3u8
+application/x-bzdvi:*.dvi.bz2
+text/mathml:*.mml
+application/x-jbuilder-project:*.jpr
+application/x-lzop:*.lzo
+application/rtf:*.rtf
+video/x-anim:*.anim[1-9j]
+application/x-go-sgf:*.sgf
+application/x-font-pcf:*.pcf.Z
+image/x-tga:*.vda
+text/rdf:*.owl
+text/x-c++hdr:*.hxx
+audio/x-mo3:*.mo3
+application/x-deb:*.deb
+text/x-literate-haskell:*.lhs
+image/x-sgi:*.sgi
+application/x-blender:*.blender
+application/x-jbuilder-project:*.jpx
+image/jp2:*.jpx
+application/x-gba-rom:*.gba
+application/vnd.stardivision.writer:*.sgl
+image/vnd.dwg:*.dwg
+text/sgml:*.sgm
+application/x-lhz:*.lhz
+audio/x-it:*.it
+image/bmp:*.bmp
+audio/x-minipsf:*.minipsf
+image/x-kodak-kdc:*.kdc
+text/x-java:*.java
+application/vnd.lotus-1-2-3:*.wk1
+application/x-x509-ca-cert:*.der
+text/richtext:*.rtx
+application/vnd.lotus-1-2-3:*.wk3
+application/x-x509-ca-cert:*.crt
+application/x-siag:*.siag
+image/x-tga:*.tpic
+application/vnd.lotus-1-2-3:*.wk4
+application/x-netshow-channel:*.nsc
+image/x-canon-crw:*.crw
+text/x-fortran:*.for
+text/x-patch:*.diff
+application/x-gnome-theme-package:*.gtp
+application/x-lzma-compressed-tar:*.tlz
+video/x-mng:*.mng
+audio/x-musepack:*.mp+
+application/x-gz-font-linux-psf:*.psf.gz
+application/x-e-theme:*.etheme
+application/x-gedcom:*.gedcom
+audio/mp2:*.mp2
+video/mpeg:*.mp2
+audio/x-aiff:*.aif
+audio/mpeg:*.mp3
+video/mp4:*.mp4
+x-epoc/x-sisx-app:*.sisx
+application/x-csh:*.csh
+image/vnd.dxf:*.dxf
+application/pgp-keys:*.pkr
+application/pgp-keys:*.pkr
+text/x-uri:*.uri
+application/vnd.openofficeorg.extension:*.oxt
+application/x-shorten:*.shn
+video/x-nsv:*.nsv
+application/javascript:*.js
+text/x-uri:*.url
+application/atom+xml:*.atom
+text/x-iMelody:*.ime
+application/x-kword:*.kwd
+image/x-gzeps:*.epsi.gz
+audio/x-psflib:*.psflib
+image/x-gzeps:*.eps.gz
+text/css:*.css
+application/vnd.lotus-1-2-3:*.123
+text/x-moc:*.moc
+audio/ogg:*.oga
+audio/x-mod:*.mod
+text/csv:*.csv
+audio/x-iriver-pla:*.pla
+text/x-mof:*.mof
+application/ogg:*.ogg
+audio/x-vorbis+ogg:*.ogg
+audio/x-flac+ogg:*.ogg
+audio/x-speex+ogg:*.ogg
+video/x-theora+ogg:*.ogg
+audio/prs.sid:*.sid
+text/rdf:*.rdf
+application/docbook+xml:*.docbook
+video/x-ogm+ogg:*.ogm
+application/x-kword:*.kwt
+application/pgp-signature:*.sig
+text/x-iMelody:*.imy
+application/vnd.ms-tnef:*.tnf
+application/x-planperfect:*.pln
+audio/x-s3m:*.s3m
+application/x-trash:*.sik
+application/vnd.hp-hpgl:*.hpgl
+message/x-gnu-rmail:RMAIL
+video/quicktime:*.mov
+application/x-par2:*.PAR2
+audio/x-scpls:*.pls
+video/ogg:*.ogv
+application/x-m4:*.m4
+image/x-skencil:*.sk1
+image/x-bzeps:*.eps.bz2
+application/ogg:*.ogx
+application/x-gnucash:*.gnucash
+application/vnd.symbian.install:*.sis
+text/vnd.sun.j2me.app-descriptor:*.jad
+application/x-stuffit:*.sit
+application/x-lzma-compressed-tar:*.tar.lzma
+application/x-gnome-saved-search:*.savedSearch
+application/x-cbr:*.cbr
+application/sieve:*.siv
+image/x-xpixmap:*.xpm
+video/vnd.rn-realvideo:*.rvx
+text/x-texinfo:*.texinfo
+audio/x-musepack:*.mpc
+application/vnd.lotus-1-2-3:*.wks
+application/vnd.ms-works:*.wks
+video/mpeg:*.mpe
+text/x-google-video-pointer:*.gvp
+image/x-msod:*.msod
+application/vnd.ms-xpsdocument:*.xps
+video/mpeg:*.mpg
+application/x-cbz:*.cbz
+application/x-shared-library-la:*.la
+application/x-kformula:*.kfo
+application/x-java-archive:*.jar
+image/x-kodak-k25:*.k25
+text/x-patch:*.patch
+text/x-tex:*.ins
+application/x-cdrdao-toc:*.toc
+text/x-ms-regedit:*.reg
+audio/x-musepack:*.mpp
+application/x-reject:*.rej
+application/x-cue:*.cue
+text/troff:*.roff
+application/pkcs7-signature:*.p7s
+image/x-emf:*.emf
+application/x-gedcom:*.ged
+application/x-ufraw:*.ufraw
+text/x-makefile:Makefile
+application/x-desktop:*.desktop
+text/x-tex:*.latex
+image/x-win-bitmap:*.cur
+text/x-lilypond:*.ly
+application/x-bcpio:*.bcpio
+application/vnd.emusic-emusic_package:*.emp
+application/x-genesis-rom:*.gen
+text/x-authors:AUTHORS
+application/zip:*.zip
+application/x-gnuplot:*.gnuplot
+application/x-genesis-rom:*.md
+application/x-tar:*.gtar
+image/png:*.png
+text/x-troff-me:*.me
+text/rdf:*.rdfs
+application/x-dia-diagram:*.dia
+audio/x-ms-wma:*.wma
+image/x-portable-anymap:*.pnm
+application/x-netcdf:*.cdf
+text/x-vhdl:*.vhd
+text/x-ocaml:*.ml
+application/x-nintendo-ds-rom:*.nds
+text/x-troff-mm:*.mm
+video/quicktime:*.qtvr
+application/x-gettext-translation:*.mo
+image/x-wmf:*.wmf
+application/vnd.ms-tnef:winmail.dat
+text/x-troff-ms:*.ms
+text/x-readme:README*
diff --git a/app/plugins/media/vendors/mime_glob.php b/app/plugins/media/vendors/mime_glob.php
new file mode 100644 (file)
index 0000000..db806b1
--- /dev/null
@@ -0,0 +1,265 @@
+<?php
+/**
+ * Mime Glob File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+uses('file');
+/**
+ * Mime Glob Class
+ *
+ * Detection of a file's MIME type by it's extension
+ * supporting several database formats.
+ *
+ * @package    media
+ * @subpackage media.libs
+ */
+class MimeGlob extends Object {
+/**
+ * Items indexed by priority
+ *
+ * @var array
+ * @access protected
+ */
+       var $_items = array();
+/**
+ * Constructor
+ *
+ * @param mixed $db
+ * @access public
+ */
+       function __construct($db) {
+               $this->__read($db);
+       }
+/**
+ * Determine the format of given database
+ *
+ * @param mixed $db
+ */
+       function format($db) {
+               if (empty($db)) {
+                       return null;
+               }
+               if (is_array($db)) {
+                       return 'Array';
+               }
+               if (!is_string($db)) {
+                       return null;
+               }
+               $File = new File($db);
+
+               if ($File->exists()) {
+                       if ($File->ext() === 'php') {
+                               return 'PHP';
+                       }
+
+                       $File->open('rb');
+                       $head = $File->read(4096);
+
+                       if (preg_match('/^(\d{2}:)?[-\w.+]*\/[-\w.+]+:[\*\.a-zA-Z0-9]*$/m', $head)) {
+                               return 'Freedesktop Shared MIME-info Database';
+                       } elseif (preg_match('/^[-\w.+]*\/[-\w.+]+\s+[a-zA-Z0-9]*$/m', $head)) {
+                               return 'Apache Module mod_mime';
+                       }
+               }
+               return null;
+       }
+/**
+ * Analyzes a filename and determines the MIME type
+ *
+ * @param string $file Path to a file, basename of a file or in reverse mode a MIME type
+ * @param boolean $reverse Enable/disable reverse searching
+ * @return mixed A string containing the MIME type of the file or false if MIME type
+ *     could not be determined, in reverse mode the pattern corresponding to the given MIME type
+ * @access public
+ */
+       function analyze($file, $reverse = false) {
+               if ($reverse) {
+                       return $this->__testReverse($file, $this->_items);
+               }
+
+               if ($results = $this->__test($file, $this->_items, true)) {
+                       return $results;
+               }
+
+               return $this->__test($file, $this->_items, false);
+       }
+/**
+ * Will load a file from various sources
+ *
+ * Supported formats:
+ * - Freedesktop Shared MIME-info Database
+ * - Apache Module mod_mime
+ * - PHP file containing variables formatted like: $data[0] = array(item, item, item, ...)
+ *
+ * @param mixed $file An absolute path to a glob file in apache, freedesktop
+ *     or a filename (without .php) of a file in the configs/ dir in CakePHP format
+ * @return mixed A format string or null if format could not be determined
+ * @access private
+ * @link http://httpd.apache.org/docs/2.2/en/mod/mod_mime.html
+ * @link http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-0.13.html
+ */
+       function __read($db) {
+               $format = MimeGlob::format($db);
+
+               if ($format === 'Array') {
+                       foreach ($db as $item) {
+                               $this->register($item);
+                       }
+               } elseif ($format === 'PHP') {
+                       include $db;
+                       foreach ($config as $item) {
+                               $this->register($item);
+                       }
+               } elseif ($format === 'Freedesktop Shared MIME-info Database') {
+                       $File =& new File($db);
+                       $File->open('rb');
+
+                       while (!feof($File->handle)) {
+                               $line = trim(fgets($File->handle));
+
+                               if (empty($line) || $line{0} === '#') {
+                                       continue;
+                               }
+
+                               $line = explode(':', $line);
+
+                               if (count($line) > 2) {
+                                       $priority = array_shift($line);
+                               } else {
+                                       $priority = null;
+                               }
+                               if (!preg_match('/(\*\.)?[a-zA-Z0-9\.]+$|/', $line[1])) {
+                                       continue;
+                               }
+                               $this->register(array(
+                                       'mime_type' => array_shift($line),
+                                       'pattern' => str_replace('*.', null, array_shift($line)),
+                                       'priority' => $priority
+                               ));
+                       }
+               } elseif ($format === 'Apache Module mod_mime') {
+                       $File = new File($db);
+                       $File->open('rb');
+
+                       while (!feof($File->handle)) {
+                               $line = trim(fgets($File->handle));
+
+                               if (empty($line) || $line{0} === '#') {
+                                       continue;
+                               }
+
+                               $line = preg_split('/\s+/', $line);
+                               $this->register(array('mime_type' => array_shift($line), 'pattern' => $line));
+                       }
+               } else {
+                       trigger_error('MimeGlob::read - Unknown db format', E_USER_WARNING);
+               }
+       }
+/**
+ * Register a glob item
+ *
+ *     A valid item:
+ *             array(
+ *                     'mime_type' => 'image/jpeg',
+ *                     'pattern' => 'jpg',
+ *                     )
+ *     or
+ *             array(
+ *                     'mime_type' => 'image/jpeg',
+ *                     'pattern' => array('jpg', 'jpeg'),
+ *                     )
+ *
+ * @param array $item A valid glob item
+ * @return boolean True if item has successfully been registered, false if not
+ * @access public
+ */
+       function register($item = array()) {
+               foreach ((array)$item['pattern'] as $pattern) {
+                       if (isset($this->_items[$pattern])) {
+                               $this->_items[$pattern] = array_unique(array_merge(
+                                       $this->_items[$pattern],
+                                       array($item['mime_type'])
+                               ));
+                       } else {
+                               $this->_items[$pattern] = array($item['mime_type']);
+                       }
+               }
+       }
+/**
+ * Exports current items as an array
+ *
+ * @return array
+ * @access public
+ */
+       function toArray() {
+               $result = array();
+
+               foreach ($this->_items as $pattern => $mimeTypes) {
+                       foreach($mimeTypes as $mimeType) {
+                               $result[] = array('mime_type' => $mimeType, 'pattern' => $pattern);
+                       }
+               }
+               return $result;
+       }
+/**
+ * Tests a file's contents against glob items
+ *
+ * This method also provides a wrapper for fnmatch which is
+ * available only on POSIX compatible systems and 5x faster
+ *
+ * @param string $name The basename of a file
+ * @param array $items
+ * @param boolean $caseSensitive
+ * @return array Matched MIME types keyed by patterns
+ * @access private
+ */
+       function __test($name, $items, $caseSensitive = true) {
+               $basename = pathinfo($name, PATHINFO_BASENAME);
+               $ext = pathinfo($name, PATHINFO_EXTENSION);
+               $results = array();
+
+               if (!$caseSensitive) {
+                       $ext = strtolower($ext);
+                       $basename = strtolower($basename);
+               }
+
+               if (isset($items[$ext])) {
+                       $results = $items[$ext];
+               }
+               if (isset($items[$basename])) {
+                       $results = array_merge($results, $items[$basename]);
+               }
+               return $results;
+       }
+/**
+ * Does a reverse test against glob items
+ *
+ * @param string $mimeType
+ * @param array $items
+ * @return array Matched patterns
+ */
+       function __testReverse($mimeType, $items) {
+               $results = array();
+
+               foreach ($items as $pattern => $mimeTypes) {
+                       if (in_array($mimeType, $mimeTypes)) {
+                               $results[] = $pattern;
+                       }
+               }
+               return $results;
+       }
+}
+?>
diff --git a/app/plugins/media/vendors/mime_magic.db b/app/plugins/media/vendors/mime_magic.db
new file mode 100644 (file)
index 0000000..5a9998d
Binary files /dev/null and b/app/plugins/media/vendors/mime_magic.db differ
diff --git a/app/plugins/media/vendors/mime_magic.php b/app/plugins/media/vendors/mime_magic.php
new file mode 100644 (file)
index 0000000..441ecff
--- /dev/null
@@ -0,0 +1,396 @@
+<?php
+/**
+ * Mime Magic File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+uses('file');
+/**
+ * Mime Magic Class
+ *
+ * Detection of a file's MIME type by it's contents.
+ * An implementation of the MIME magic functionality in pure PHP
+ * supporting several database formats.
+ *
+ * @package    media
+ * @subpackage media.libs
+ */
+class MimeMagic extends Object {
+/**
+ * Items indexed by priority
+ *
+ * @var array
+ * @access protected
+ */
+       var $_items = array();
+/**
+ * Constructor
+ *
+ * @param mixed $db
+ * @access public
+ */
+       function __construct($db) {
+               $this->__read($db);
+       }
+/**
+ * Analyzes a files contents and determines the file's MIME type
+ *
+ * @param string $file An absolute path to a file
+ * @param array $options An array holding options
+ * @return mixed A string containing the MIME type of the file
+ *     or false if MIME type could not be determined
+ * @access public
+ */
+       function analyze($file, $options = array()) {
+               $filtered = array();
+
+               $default = array('minPriority' => 0, 'maxPriority' => 100);
+               $options = array_merge($default, $options);
+               extract($options, EXTR_SKIP);
+
+               foreach ($this->_items as $priority => $items) {
+                       if ($priority < $minPriority || $priority > $maxPriority) {
+                               continue;
+                       }
+                       $filtered = array_merge($filtered, $items);
+               }
+               return $this->__test($file, $filtered);
+       }
+/**
+ * Determine the format of given database
+ *
+ * @param mixed $db
+ */
+       function format($db) {
+               if (empty($db)) {
+                       return null;
+               }
+               if (is_array($db)) {
+                       return 'Array';
+               }
+               if (!is_string($db)) {
+                       return null;
+               }
+               $File = new File($db);
+
+               if ($File->exists()) {
+                       if ($File->ext() === 'php') {
+                               return 'PHP';
+                       }
+
+                       $File->open('rb');
+                       $head = $File->read(4096);
+
+                       if (substr($head, 0, 12) === "MIME-Magic\0\n") {
+                               return 'Freedesktop Shared MIME-info Database';
+                       }
+                       if (preg_match('/^(\>*)(\d+)\t+(\S+)\t+([\S^\040]+)\t*([-\w.\+]+\/[-\w.\+]+)*\t*(\S*)$/m', $head)) {
+                               return 'Apache Module mod_mime_magic';
+                       }
+               }
+               return null;
+       }
+/**
+ * Register a magic item
+ *
+ * Supports a nesting level up to 3
+ *
+ * @param array $item A valid magic item
+ * @param integer $indent The nesting depth of the item
+ * @param integer $priority A value between 0 and 100.
+ *     Low numbers should be used for more generic types and higher values for specific subtypes.
+ * @return boolean True if item has successfully been registered, false if not
+ * @access public
+ */
+       function register($item, $indent = 0, $priority = 50) {
+               static $keys = array();
+
+               if (!is_array($item)
+               || !isset($item['offset'], $item['value'], $item['range_length'], $item['value_length'])) {
+                       return false;
+               }
+
+               if (isset($item['priority'])) {
+                       $priority = $item['priority'];
+                       unset($item['priority']);
+               }
+
+               switch ($indent) {
+                       case 0:
+                               $this->_items[$priority][] = $item;
+                               end($this->_items[$priority]);
+                               $keys[0] = key($this->_items[$priority]);
+                               return true;
+                       case 1:
+                               $this->_items[$priority][$keys[0]]['and'][] = $item;
+                               end($this->_items[$priority][$keys[0]]['and']);
+                               $keys[1] = key($this->_items[$priority][$keys[0]]['and']);
+                               return true;
+                       case 2:
+                               $this->_items[$priority][$keys[0]]['and'][$keys[1]]['and'][] = $item;
+                               end($this->_items[$priority][$keys[0]]['and'][$keys[1]]['and']);
+                               $keys[2] = key($this->_items[$priority][$keys[0]]['and'][$keys[1]]['and']);
+                               return true;
+                       case 3:
+                               $this->_items[$priority][$keys[0]]['and'][$keys[1]]['and'][$keys[2]]['and'][] = $item;
+                               return true;
+                       default:
+                               return false;
+               }
+       }
+/**
+ * Exports current items as an array
+ *
+ * @return array
+ * @access public
+ */
+       function toArray() {
+               $results = array();
+
+               foreach ($this->_items as $priority => $items) {
+                       foreach ($items as $item) {
+                               $item['priority'] = $priority;
+                               $results[] = $item;
+                       }
+               }
+               return $results;
+       }
+/**
+ * Will load a file from various sources
+ *
+ * Supported formats:
+ * - Freedesktop Shared MIME-info Database
+ * - Apache Module mod_mime_magic
+ * - PHP file containing variables formatted like: $data[0] = array(item, item, item, ...)
+ *
+ * @param mixed $file An absolute path to a magic file in apache, freedesktop
+ *     or a filename (without .php) of a file in the configs/ dir in CakePHP format
+ * @return mixed A format string or null if format could not be determined
+ * @access private
+ * @link http://httpd.apache.org/docs/2.2/en/mod/mod_mime_magic.html
+ * @link http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-0.13.html
+ */
+       function __read($db) {
+               $format = MimeMagic::format($db);
+
+               if ($format === 'Array') {
+                       foreach ($db as $item) {
+                               $this->register($item);
+                       }
+               } elseif ($format === 'PHP') {
+                       include $db;
+                       foreach ($data as $item) {
+                               $this->register($item);
+                       }
+               } elseif ($format === 'Freedesktop Shared MIME-info Database') {
+                       $sectionRegex = '^\[(\d{1,3}):([-\w.\+]+\/[-\w.\+]+)\]$';
+                       $itemRegex = '^(\d*)\>+(\d+)=+([^&~\+]{2})([^&~\+]+)&?([^~\+]*)~?(\d*)\+?(\d*).*$';
+
+                       $File =& new File($db);
+                       $File->open('rb');
+                       $File->offset(12);
+
+                       while (!feof($File->handle)) {
+                               $line = '';
+
+                               if (!isset($chars)) {
+                                       $chars = array(0 => $File->read(1), 1 => $File->read(1));
+                               } else {
+                                       $chars = array(0 => $chars[1], 1 => null);
+                               }
+
+                               while (!feof($File->handle) && !($chars[0] === "\n"
+                               && (ctype_digit($chars[1]) || $chars[1] === '>' || $chars[1] === '['))) {
+                                       $line .= $chars[0];
+                                       $chars = array(0 => $chars[1], 1 => $File->read(1));
+                               }
+
+                               if (preg_match('/' . $sectionRegex . '/', $line, $matches)) {
+                                       $section = array(
+                                               'priority'  => $matches[1],
+                                               'mime_type' => $matches[2]
+                                       );
+                               } elseif (preg_match('/' . $itemRegex . '/', $line, $matches)) {
+                                       $indent = empty($matches[1]) ? 0 : intval($matches[1]);
+                                       $wordSize = empty($matches[6]) ? 1 : intval($matches[6]);
+                                       $item = array(
+                                               'offset'       => intval($matches[2]),
+                                               'value_length' => current(unpack('n', $matches[3])),
+                                               'value'        => $this->__formatValue($matches[4], $wordSize),
+                                               /* default: all `one` bits */
+                                               'mask'         => empty($matches[5]) ? null : $this->__formatValue($matches[5], $wordSize),
+                                               'range_length' => empty($matches[7]) ? 1 : intval($matches[7]),
+                                               'mime_type'    => $section['mime_type'],
+                                       );
+                                       $this->register($item, $indent, $section['priority']);
+                               }
+                       }
+               } elseif ($format === 'Apache Module mod_mime_magic') {
+                       $itemRegex = '^(\>*)(\d+)\t+(\S+)\t+([\S^\040]+)\t*([-\w.\+]+\/[-\w.\+]+)*\t*(\S*)$';
+
+                       $File =& new File($db);
+                       $File->open('rb');
+
+                       while (!feof($File->handle)) {
+                               $line = trim(fgets($File->handle));
+
+                               if (empty($line) || $line{0} === '#') {
+                                       continue;
+                               }
+
+                               $line = preg_replace('/(?!\B)\040+/', "\t", $line);
+
+                               if (!preg_match('/' . $itemRegex . '/', $line, $matches)) {
+                                       continue;
+                               }
+
+                               $item = array(
+                                       'offset'       => intval($matches[2]),
+                                       'value'        => $this->__formatValue($matches[4], $matches[3], true),
+                                       'mask'         => null,
+                                       'range_length' => 0,
+                                       'mime_type'    => empty($matches[5]) ? null : $matches[5],
+                                       'encoding'     => empty($matches[6]) ? null : $matches[6],
+                               );
+                               $item['value_length'] = strlen($item['value']);
+                               $this->register($item, strlen($matches[1]), 80);
+                       }
+               } else {
+                       trigger_error('MimeGlob::read - Unknown db format', E_USER_WARNING);
+               }
+       }
+/**
+ * Tests a file's contents against magic items
+ *
+ * @param string $file Absolute path to a file
+ * @param array $items
+ * @return mixed A string containing the MIME type of the file or false if no pattern matched
+ * @access private
+ */
+       function __test($file, $items) {
+               $File =& new File($file);
+
+               if (!$File->readable()) {
+                       return false;
+               }
+
+               $File->open('rb');
+
+               foreach ($items as $item) {
+                       if ($result = $this->__testRecursive($File, $item)) {
+                               return $result;
+                       }
+               }
+               return false;
+       }
+/**
+ * Recursively tests a file's contents against a magic item
+ *
+ * @param object $File An instance of the File class
+ * @param array $item A magic item
+ * @return mixed A string containing the MIME type of the file or false if no pattern matched
+ * @access private
+ */
+       function __testRecursive(&$File, $item) {
+               if (isset($item['mask'])) {
+                       $item['value'] = $item['value'] & $item['mask'];
+               }
+
+               $File->offset($item['offset']);
+
+               if (strpos($File->read($item['value_length'] + $item['range_length']), $item['value']) !== false) {
+                       if (isset($item['and'])) {
+                               foreach ($item['and'] as $andedItem) {
+                                       if ($return = $this->__testRecursive($File, $andedItem)) {
+                                               return $return;
+                                       }
+                               }
+                       } elseif (isset($item['mime_type'])) {
+                               return $item['mime_type'];
+                       }
+               }
+               return false;
+       }
+/**
+ * Format a value for testing
+ *
+ * @param mixed $value Value to format
+ * @param mixed $type String containing the datatype of the value
+ *     or an integer indicating the word size of the value
+ * @param boolean $binary Whether the value is a binary value or not
+ * @param boolean $unEscape If set to true and value is not binary strips slashes from string values
+ * @return mixed On success the formatted binary value or the input value
+ * @access private
+ */
+       function __formatValue($value, $type, $toBinary = false, $unEscape = true) {
+               if (!$toBinary) {
+                       switch ($type) {
+                               case 2:
+                               case 'host16':
+                                       return pack('S', current(unpack('n' , $value)));
+                               case 4:
+                               case 'host32':
+                                       return pack('L', current(unpack('N' , $value)));
+                               default:
+                                       return $value;
+                       }
+               } else {
+                       if (decoct(octdec($value)) == $value) {
+                               $value = octdec($value);
+                       } elseif ($value[1] === 'x') {
+                               $value = hexdec($value);
+                       } elseif (is_numeric($value) && intval($value) == $value) {
+                               $value = intval($value);
+                       } elseif (is_numeric($value) && floatval($value) == $value) {
+                               $value = floatval($value);
+                       }
+
+                       switch ($type) {
+                               case 'byte':
+                                       return pack('c', $value);
+                               case 'short':
+                                       return pack('s', $value);
+                               case 'date':
+                               case 'long':
+                                       return pack('l', $value);
+                               case 'float':
+                                       return pack('f', $value);
+                               case 'double':
+                                       return pack('d', $value);
+                               case 'string':
+                                       if ($unEscape) {
+                                               $value = strtr($value, array(
+                                                       '\ ' => ' ', '\<' => '<', '\>' => '>',
+                                                       '\\\r' => '\r', '\\\n' => '\n'
+                                               ));
+                                       }
+                                       return preg_replace('/\\\\([0-9]{1,3})/e', 'chr($1);', $value);
+                               case 'beshort':
+                                       return pack('n', $value);
+                               case 'bedate':
+                               case 'belong':
+                                       return pack('N', $value);
+                               case 'leshort':
+                                       return pack('v', $value);
+                               case 'ledate':
+                               case 'lelong':
+                                       return pack('V', $value);
+                               default:
+                                       return $value;
+                       }
+               }
+       }
+}
+?>
diff --git a/app/plugins/media/vendors/mime_type.php b/app/plugins/media/vendors/mime_type.php
new file mode 100644 (file)
index 0000000..dfd184d
--- /dev/null
@@ -0,0 +1,310 @@
+<?php
+/**
+ * Mime Type File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+uses('file');
+/**
+ * Mime Type Class
+ *
+ * Detection of a file's MIME type by it's contents and/or extension.
+ * This is the main interface for MIME type detection wrapping
+ * (native) magic and glob mechanisms.
+ *
+ * @package    media
+ * @subpackage media.libs
+ */
+class MimeType extends Object {
+/**
+ * Magic
+ *
+ * @var mixed An instance of the MimeMagic or finfo class or a string containing 'mime_magic'
+ * @access private
+ */
+       var $__magic;
+/**
+ * Glob
+ *
+ * @var object An instance of the MimeGlob class
+ * @access private
+ */
+       var $__glob;
+/**
+ * Return a singleton instance of MimeType.
+ *
+ * @return object MimeType instance
+ * @access public
+ */
+       function &getInstance() {
+               static $instance = array();
+
+               if (!$instance) {
+                       $instance[0] =& new MimeType();
+                       $instance[0]->__loadMagic(Configure::read('Mime.magic'));
+                       $instance[0]->__loadGlob(Configure::read('Mime.glob'));
+               }
+               return $instance[0];
+       }
+/**
+ * Change configuration during runtime
+ *
+ * @param string $property Either "magic" or "glob"
+ * @param array $config Config specifying engine and db
+ *     e.g. array('engine' => 'fileinfo', 'db' => '/etc/magic')
+ */
+       function config($property = 'magic', $config = array()) {
+               $_this =& MimeType::getInstance();
+
+               if ($property === 'magic') {
+                       $_this->__loadMagic($config);
+               } elseif ($property === 'glob') {
+                       $_this->__loadGlob($config);
+               }
+       }
+/**
+ * Guesses the extension (suffix) for an existing file or a MIME type
+ *
+ * @param string $file A MIME type or an absolute path to file
+ * @param array $options Currently not used
+ * @return mixed A string with the first matching extension (w/o leading dot),
+ *     false if nothing matched
+ * @access public
+ */
+       function guessExtension($file, $options = array()) {
+               $_this =& MimeType::getInstance();
+               $globMatch = array();
+               $preferred = array(
+                       'bz2', 'css', 'doc', 'html', 'jpg',
+                       'mpeg', 'mp3', 'ogg', 'php', 'ps',
+                       'rm', 'ra', 'rv', 'swf', 'tar',
+                       'tiff', 'txt', 'xhtml', 'xml',
+               );
+
+               if (is_file($file)) {
+                       $mimeType = $_this->guessType($file);
+               } else {
+                       $mimeType = $file;
+               }
+
+               if (is_a($_this->__glob, 'MimeGlob')) {
+                       $globMatch = $_this->__glob->analyze($mimeType, true);
+               }
+
+               if (count($globMatch) === 1) {
+                       return array_shift($globMatch);
+               }
+
+               $preferMatch = array_intersect($globMatch, $preferred);
+
+               if (count($preferMatch) === 1) {
+                       return array_shift($preferMatch);
+               }
+               return null;
+       }
+/**
+ * Guesses the MIME type of the file
+ *
+ * Empty results are currently not handled:
+ *     application/x-empty
+ *     application/x-not-regular-file
+ *
+ * @param string $file
+ * @param options $options Valid options are:
+ *     - `'paranoid'` If set to true only then content for the file is used for detection
+ *     - `'properties'` Used for simplification, defaults to false
+ *     - `'experimental'` Used for simplification, defaults to false
+ * @return mixed string with MIME type on success
+ * @access public
+ */
+       function guessType($file, $options = array()) {
+               $_this =& MimeType::getInstance();
+
+               $defaults = array(
+                       'paranoid' => false,
+                       'properties' => false,
+                       'experimental' => true,
+               );
+               extract($options + $defaults);
+
+               $magicMatch = $globMatch = array();
+
+               if (!$paranoid) {
+                       if (is_a($_this->__glob, 'MimeGlob')) {
+                               $globMatch = $_this->__glob->analyze($file);
+                       }
+                       if (count($globMatch) === 1) {
+                                return MimeType::simplify(array_shift($globMatch), $properties, $experimental);
+                       }
+               }
+
+               if (!is_readable($file)) {
+                       return null;
+               }
+
+               if (is_a($_this->__magic, 'finfo')) {
+                       $magicMatch = $_this->__magic->file($file);
+               } elseif ($_this->__magic === 'mime_magic') {
+                       $magicMatch = mime_content_type($file);
+               } elseif (is_a($_this->__magic, 'MimeMagic')) {
+                       $magicMatch = $_this->__magic->analyze($file);
+               }
+               $magicMatch = empty($magicMatch) ? array() : array($magicMatch);
+
+               if (empty($magicMatch)) {
+                       $File =& new File($file);
+
+                       if (preg_match('/[\t\n\r]+/', $File->read(32))) {
+                               return 'text/plain';
+                       }
+                       return 'application/octet-stream';
+               }
+
+               if (count($magicMatch) === 1) {
+                       return MimeType::simplify(array_shift($magicMatch), $properties, $experimental);
+               }
+
+               if ($globMatch && $magicMatch) {
+                       $combinedMatch = array_intersect($globMatch, $magicMatch);
+
+                       if (count($combinedMatch) === 1) {
+                               return MimeType::simplify(array_shift($combinedMatch), $properties, $experimental);
+                       }
+               }
+               return null;
+       }
+/**
+ * Simplifies a MIME type string
+ *
+ * @param string $mimeType
+ * @param boolean If true removes properties
+ * @param boolean If true removes experimental indicators
+ * @return string
+ */
+       function simplify($mimeType, $properties = false, $experimental = false) {
+               if (!$experimental) {
+                       $mimeType = str_replace('x-', null, $mimeType);
+               }
+
+               if (!$properties) {
+                       if (strpos($mimeType, ';') !== false) {
+                               $mimeType = strtok($mimeType, ';');
+                       } else {
+                               $mimeType = strtok($mimeType, ' ');
+                       }
+               }
+               return $mimeType;
+       }
+/**
+ * Sets magic property
+ *
+ * @param array $config Configuration settings to take into account
+ * @return void
+ */
+       function __loadMagic($config = array()) {
+               $engine = $db = null;
+
+               if (is_array($config)) {
+                       extract($config, EXTR_OVERWRITE);
+               }
+
+               if (($engine === 'fileinfo' || $engine === null) && extension_loaded('fileinfo')) {
+                       if (isset($db)) {
+                               $this->__magic =& new finfo(FILEINFO_MIME, $db);
+                       } else {
+                               $this->__magic =& new finfo(FILEINFO_MIME);
+                       }
+               } elseif (($engine === 'mime_magic' || $engine === null) && extension_loaded('mime_magic')) {
+                       $this->__magic = 'mime_magic';
+               } elseif ($engine === 'core' || $engine === null) {
+                       App::import('Vendor', 'Media.MimeMagic');
+
+                       if ($cached = Cache::read('mime_magic_db', '_cake_core_')) {
+                               $db = $cached;
+                       }
+
+                       if (!isset($db)) {
+                               $db = $this->__db('magic');
+                       }
+                       if (isset($db)) {
+                               $this->__magic =& new MimeMagic($db);
+
+                               if (!$cached) {
+                                       Cache::write('mime_magic_db', $this->__magic->toArray(), '_cake_core_');
+                               }
+                       }
+               } else {
+                       $this->__magic = null;
+               }
+       }
+/**
+ * Sets glob property
+ *
+ * @param array $config Configuration settings to take into account
+ * @return void
+ */
+       function __loadGlob($config = array()) {
+               $engine = $db = null;
+
+               if (is_array($config)) {
+                       extract($config, EXTR_OVERWRITE);
+               }
+
+               if ($engine === 'core' || $engine === null) {
+                       App::import('Vendor', 'Media.MimeGlob');
+
+                       if ($cached = Cache::read('mime_glob_db', '_cake_core_')) {
+                               $db = $cached;
+                       }
+
+                       if (!isset($db)) {
+                               $db = $this->__db('glob');
+                       }
+                       if (isset($db)) {
+                               $this->__glob =& new MimeGlob($db);
+
+                               if (!$cached) {
+                                       Cache::write('mime_glob_db', $this->__glob->toArray(), '_cake_core_');
+                               }
+                       }
+               } else {
+                       $this->__glob = null;
+               }
+       }
+/**
+ * Finds the db file for given type
+ *
+ * @param string $type Either 'magic' or 'glob'
+ * @access private
+ * @return mixed If no file was found null otherwise the absolute path to the file
+ */
+       function __db($type) {
+               $searchPaths = array(
+                       'mime_' . $type . '.php' => array(CONFIGS),
+                       'mime_' . $type . '.db' => array_merge(
+                               Configure::read('vendorPaths'),
+                               array(dirname(__FILE__) . DS)
+                       ));
+
+               foreach ($searchPaths as $basename => $paths) {
+                       foreach ($paths as $path) {
+                               if (is_readable($path . $basename)) {
+                                       return $path . $basename;
+                               }
+                       }
+               }
+       }
+}
+?>
diff --git a/app/plugins/media/vendors/shells/media.php b/app/plugins/media/vendors/shells/media.php
new file mode 100644 (file)
index 0000000..43c85d4
--- /dev/null
@@ -0,0 +1,416 @@
+<?php
+/**
+ * Media Shell File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.shells
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Core', array('ConnectionManager', 'Folder'));
+require_once(APP . 'plugins' . DS . 'media'. DS . 'config' . DS . 'core.php');
+Configure::write('Cache.disable', true);
+/**
+ * Media Shell Class
+ *
+ * @package    media
+ * @subpackage media.shells
+ */
+class MediaShell extends Shell {
+/**
+ * Tasks
+ *
+ * @var string
+ * @access public
+ */
+       var $tasks = array('Sync', 'Make', 'Collect');
+/**
+ * Verbose mode
+ *
+ * @var boolean
+ * @access public
+ */
+       var $verbose = false;
+/**
+ * Quiet mode
+ *
+ * @var boolean
+ * @access public
+ */
+       var $quiet = false;
+/**
+ * Width of shell in number of characters per line
+ *
+ * @var integer
+ */
+       var $width = 80;
+/**
+ * Startup
+ *
+ * @access public
+ * @return void
+ */
+        function startup() {
+               $this->verbose = isset($this->params['verbose']);
+               $this->quiet = isset($this->params['quiet']);
+               parent::startup();
+       }
+/**
+ * Welcome
+ *
+ * @access protected
+ * @return void
+ */
+       function _welcome() {
+               $this->clear();
+               $this->hr();
+               $this->out('Media Shell');
+               $this->hr();
+       }
+/**
+ * Main
+ *
+ * @access public
+ * @return void
+ */
+        function main() {
+               $this->out('[I]nitialize Media Directory');
+               $this->out('[P]rotect Transfer Directory');
+               $this->out('[S]ynchronize');
+               $this->out('[M]ake');
+               $this->out('[C]ollect');
+               $this->out('[H]elp');
+               $this->out('[Q]uit');
+
+               $action = strtoupper($this->in(__('What would you like to do?', true),
+                                                                               array('I', 'P', 'S', 'M', 'C', 'H', 'Q'),'q'));
+
+               $this->out();
+
+               switch ($action) {
+                       case 'I':
+                               $this->init();
+                               break;
+                       case 'P':
+                               $this->protect();
+                               break;
+                       case 'S':
+                               $this->Sync->execute();
+                               break;
+                       case 'M':
+                               $this->Make->execute();
+                               break;
+                       case 'C':
+                               $this->Collect->execute();
+                               break;
+                       case 'H':
+                               $this->help();
+                               break;
+                       case 'Q':
+                               $this->_stop();
+               }
+               $this->main();
+       }
+/**
+ * Initializes directory structure
+ *
+ * @access public
+ * @return void
+ */
+       function init() {
+               $message = 'Do you want to create missing media directories now?';
+
+               if ($this->in($message, 'y,n', 'n') == 'n') {
+                       return false;
+               }
+
+               $dirs = array(
+                       MEDIA => array(),
+                       MEDIA_STATIC => Medium::short(),
+                       MEDIA_TRANSFER => Medium::short(),
+                       MEDIA_FILTER => array(),
+               );
+
+               foreach ($dirs as $dir => $subDirs) {
+                       if (is_dir($dir)) {
+                               $result = 'SKIP';
+                       } else {
+                               new Folder($dir, true);
+
+                               if (is_dir($dir)) {
+                                       $result = 'OK';
+                               } else {
+                                       $result = 'FAIL';
+                               }
+                       }
+                       $this->out(sprintf('%-50s [%-4s]', $this->shortPath($dir), $result));
+
+                       foreach ($subDirs as $subDir) {
+                               if (is_dir($dir . $subDir)) {
+                                       $result = 'SKIP';
+                               } else {
+                                       new Folder($dir . $subDir, true);
+
+                                       if (is_dir($dir . $subDir)) {
+                                               $result = 'OK';
+                                       } else {
+                                               $result = 'FAIL';
+                                       }
+                               }
+                               $this->out(sprintf('%-50s [%-4s]', $this->shortPath($dir . $subDir), $result));
+                       }
+               }
+
+               $this->out();
+               $this->protect();
+               $this->out('Remember to set the correct permissions on transfer and filter directory.');
+       }
+/**
+ * Protects the transfer directory
+ *
+ * @access public
+ * @return void
+ */
+       function protect() {
+               if (MEDIA_TRANSFER_URL === false) {
+                       $this->out('The content of the transfer directory is not served.');
+                       return true;
+               }
+
+               $file = MEDIA_TRANSFER . '.htaccess';
+
+               if (is_file($file)) {
+                       $this->err($this->shortPath($file) . ' is already present.');
+                       return true;
+               }
+               $this->out('Your transfer directory is missing a htaccess file to block requests.');
+
+               if ($this->in('Do you want to create it now?', 'y,n', 'n') == 'n') {
+                       return false;
+               }
+
+               $File = new File($file);
+               $File->append("Order deny,allow\n");
+               $File->append("Deny from all\n");
+               $File->close();
+
+               $this->out($this->shortPath($File->pwd()) . ' created.');
+               $this->out();
+               return true;
+       }
+/**
+ * Displays help contents
+ *
+ * @access public
+ */
+       function help() {
+               // 63 chars ===============================================================
+               $this->out("NAME");
+               $this->out("\tmedia -- the 23rd shell");
+               $this->out();
+               $this->out("SYNOPSIS");
+               $this->out("\tcake media <params> <command> <args>");
+               $this->out();
+               $this->out("COMMANDS");
+               $this->out("\tinit");
+               $this->out("\t\tInitializes the media directory structure.");
+               $this->out();
+               $this->out("\tprotect");
+               $this->out("\t\tCreates a htaccess file to protect the transfer dir.");
+               $this->out();
+               $this->out("\tcollect [-link] [-exclude name] [sourcedir]");
+               $this->out("\t\tCollects files and copies them to the media dir.");
+               $this->out();
+               $this->out("\t\t-link Use symlinks instead of copying.");
+               $this->out("\t\t-exclude Comma separated list of names to exclude.");
+               $this->out();
+               $this->out("\tsync [-auto] [model] [searchdir]");
+               $this->out("\t\tChecks if records are in sync with files and vice versa.");
+               $this->out();
+               $this->out("\t\t-auto Automatically repair without asking for confirmation.");
+               $this->out();
+               $this->out("\tmake [-force] [-version name] [sourcefile/sourcedir] [destinationdir]");
+               $this->out("\t\tProcess a file or directory according to filters.");
+               $this->out();
+               $this->out("\t\t-version name Restrict command to a specfic filter version (e.g. xxl).");
+               $this->out("\t\t-force Overwrite files if they exist.");
+               $this->out();
+               $this->out("\thelp");
+               $this->out("\t\tShows this help message.");
+               $this->out();
+               $this->out("OPTIONS");
+               $this->out("\t-verbose");
+               $this->out("\t-quiet");
+               $this->out();
+       }
+
+       /* Useful display methods */
+
+/**
+ * Outputs to the stdout filehandle.
+ *
+ * Overridden to enable quiet mode
+ *
+ * @param string $string String to output.
+ * @param boolean $newline If true, the outputs gets an added newline.
+ * @access public
+ */
+       function out($string = '', $newline = true) {
+               if ($this->quiet) {
+                       return null;
+               }
+               $this->Dispatch->stdout($string, $newline);
+       }
+/**
+ * clear
+ *
+ * @access public
+ * @return void
+ */
+       function clear() {
+               $this->out(chr(27).'[H'.chr(27).'[2J');
+       }
+/**
+ * heading
+ *
+ * @param mixed $string
+ * @param mixed $width
+ * @param string $character
+ * @access public
+ * @return void
+ */
+       function heading($string, $width = null, $character = '=') {
+               if (is_string($width)) {
+                       $character = $width;
+                       $width = null;
+               }
+               if ($width === null) {
+                       $width = $this->width;
+               }
+               $this->out($this->pad($string . ' ', $width, $character));
+               $this->out();
+       }
+/**
+ * Overridden
+ *
+ * @param string $character
+ * @param mixed $width
+ * @access public
+ * @return void
+ */
+       function hr($character = '-', $width = null) {
+               $this->out(str_repeat($character, $width === null ? $this->width : $width));
+       }
+/**
+ * info
+ *
+ * @param mixed $message
+ * @access public
+ * @return void
+ */
+       function info($message) {
+               if (!$this->verbose) {
+                       return null;
+               }
+               $this->out(sprintf(__('Notice: %s', true), $message), true);
+       }
+/**
+ * warn
+ *
+ * @param mixed $message
+ * @access public
+ * @return void
+ * @link /usr/lib/portage/bin/isolated-functions.sh
+ */
+       function warn($message) {
+               /* Until Dispatcher does not prepend Error: */
+               fwrite($this->Dispatch->stderr, sprintf(__('Warning: %s', true), $message)."\n");
+       }
+/**
+ * Overridden
+ *
+ * Needed because ShellDispatcher prepends "Error:"
+ *
+ * @param mixed $message
+ * @access public
+ * @return void
+ */
+       function err($message)  {
+               fwrite($this->Dispatch->stderr, sprintf(__('Error: %s', true), $message)."\n");
+               $this->_stop(1);
+       }
+/**
+ * begin
+ *
+ * @param mixed $message
+ * @access public
+ * @return void
+ */
+       function begin($message) {
+               $this->out(sprintf('%s ... ', $message), false);
+       }
+/**
+ * end
+ *
+ * @param mixed $result
+ * @access public
+ * @return void
+ */
+       function end($result = null) {
+               if ($result == true) {
+                       $message =  __('ok', true);
+               } elseif (empty($result)) {
+                       $message = __('unknown', true);
+               } else {
+                       $message = __('failed', true);
+               }
+               $this->out(sprintf('%s', $message));
+               return $result;
+       }
+/**
+ * progress
+ *
+ * Start with progress(target value)
+ * Update with progress(current value, text)
+ *
+ * @param mixed $value
+ * @param mixed $text
+ * @access public
+ * @return void
+ */
+       function progress($value, $text = null) {
+               static $target = 0;
+
+               if ($this->quiet) {
+                       return null;
+               }
+
+               if ($text === null) {
+                       $target = $value;
+               } else {
+                       $out = sprintf('%\' 6.2f%% %s', ($value * 100) / $target, $text);
+                       $this->out($out);
+               }
+       }
+/**
+ * Overridden to allow Stop messages
+ *
+ * @param integer $status
+ * @access protected
+ * @return void
+ */
+       function _stop($status = 0) {
+               $this->out($status === 0 ? __('Quitting.', true) : __('Aborting.', true));
+               parent::_stop($status);
+       }
+}
+?>
diff --git a/app/plugins/media/vendors/shells/tasks/collect.php b/app/plugins/media/vendors/shells/tasks/collect.php
new file mode 100644 (file)
index 0000000..6cd2ab6
--- /dev/null
@@ -0,0 +1,277 @@
+<?php
+/**
+ * Collect Task File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.shells.tasks
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+class CollectTask extends MediaShell {
+/**
+ * Holds mapped files
+ *
+ * @var array
+ * @access protected
+ */
+       var $_map;
+/**
+ * Holds search paths
+ *
+ * @var array
+ * @access protected
+ */
+       var $_paths;
+/**
+ * Indicates if copy or link method should be used
+ *
+ * @var boolean
+ * @access protected
+ */
+       var $_link;
+/**
+ * Patterns to use for exlcuding files
+ *
+ * @var array
+ * @access protected
+ */
+       var $_exclude;
+/**
+ * Main task method
+ *
+ * @access public
+ * @return boolean
+ */
+       function execute() {
+               $this->_map = array();
+               $this->_paths = array();
+               $this->_link = null;
+
+               if (isset($this->params['link'])) {
+                       $this->_link = true;
+               }
+               if (empty($this->args)) {
+                       $this->_paths = $this->_paths();
+               } else {
+                       $this->_paths = $this->args;
+               }
+               if (isset($this->params['exclude'])) {
+                       $this->_exclude += array_map('trim', explode(',', $this->params['exclude']));
+               }
+
+               foreach ($this->_paths as $path) {
+                       $this->_map($path);
+               }
+               if (empty($this->_map)) {
+                       $this->err('No files selected.');
+                       return false;
+               }
+
+               if (DS == '/' && !isset($this->link)) {
+                       $answer = $this->in('Would you like to link (instead of copy) the files?', 'y,n', 'n');
+                       $this->_link = $answer == 'y';
+               }
+               $this->out();
+               $this->out('Mapping');
+               $this->hr();
+
+               foreach ($this->_map as $old => $new) {
+                       $message = sprintf(
+                               '%-38s %s %38s',
+                               $this->shortPath($old),
+                               $this->_link ? '<-' : '->',
+                               $this->shortPath($new)
+                       );
+                       $this->out($message);
+               }
+
+               $this->out();
+
+               if ($this->in('Looks OK?', 'y,n', 'y') == 'n') {
+                       return false;
+               }
+
+               $this->out();
+               $this->out('Collecting');
+               $this->hr();
+
+               return $this->_perform();
+       }
+/**
+ * Returns all common paths where media files are stored
+ *
+ * @access protected
+ * @return array
+ */
+       function _paths() {
+               $plugins = array_map('strtolower', Configure::listObjects('plugin'));
+
+               foreach ($plugins as $plugin) {
+                       foreach (Configure::read('pluginPaths') as $pluginPath) {
+                               if (is_dir($pluginPath . $plugin)) {
+                                       $pluginVendorPaths[] = $pluginPath . $plugin .  DS . 'vendors' . DS;
+                               }
+                       }
+               }
+
+               $paths = array_merge(
+                       Configure::read('vendorPaths'),
+                       array(WWW_ROOT),
+                       $pluginVendorPaths
+               );
+
+               foreach ($paths as $key => $path) {
+                       $message = sprintf('Would you like to collect files from %s?', $this->shortPath($path));
+
+                       if ($this->in($message, 'y,n', 'y') == 'n') {
+                               unset($paths[$key]);
+                       }
+               }
+
+               $answer = 'y';
+
+               while ($answer == 'y') {
+                       if ($answer = $this->in('Would you like to add another path?', 'y,n', 'n') == 'y') {
+                               $path = $this->in('Path:');
+
+                               if (!is_dir($path)) {
+                                       $this->out('Directory does not exist!');
+                               } else {
+                                       $paths[] = $path;
+                               }
+                       }
+               }
+               return $paths;
+       }
+/**
+ * (Interactively) maps source files to destinations
+ *
+ * @param string $path Path to search for source files
+ * @access protected
+ * @return array
+ */
+       function _map($path) {
+               $include  = '.*[\/\\].*\.[a-z0-9]{2,3}$';
+
+               $directories = array('.htaccess', '.DS_Store', 'media', '.git', '.svn', 'simpletest', 'empty');
+               $extensions = array('db', 'htm', 'html', 'txt', 'php', 'ctp');
+
+               $exclude  = '.*[/\\\](' . implode('|', $directories) . ').*$';
+               $exclude .= '|.*[/\\\].*\.(' . implode('|', $extensions) . ')$';
+
+               if (!empty($this->_exclude)) {
+                       $exclude = '|.*[/\\\](' . implode('|', $this->_exclude) . ').*$';
+               }
+
+               $Folder = new Folder($path);
+               $files = $Folder->findRecursive($include);
+
+               foreach ($files as $file) {
+                       if (preg_match('#' . $exclude . '#', $file)) {
+                               continue;
+                       }
+                       $search[] = '/' . preg_quote($Folder->pwd(), '/') . '/';
+                       $search[] = '/(' . implode('|', Medium::short()) . ')' . preg_quote(DS, '/') . '/';
+                       $fragment = preg_replace($search, null, $file);
+
+                       $mapped = array(
+                               $file => MEDIA_STATIC . Medium::short($file) . DS . $fragment
+                       );
+
+                       while (in_array(current($mapped), $this->_map) && $mapped) {
+                               $mapped = $this->_handleCollision($mapped);
+                       }
+                       while (file_exists(current($mapped)) && $mapped) {
+                               $this->out($this->shortPath(current($mapped)) . ' already exists.');
+                               $answer = $this->in('Would you like to [r]ename or [s]kip?', 'r,s', 's');
+
+                               if ($answer == 's') {
+                                       $mapped = array();
+                               } else {
+                                       $mapped = array(key($mapped) => $this->_rename(current($mapped)));
+                               }
+                       }
+                       if ($mapped) {
+                               $this->_map[key($mapped)] = current($mapped);
+                       }
+               }
+       }
+/**
+ * Deals with collisions of destination files
+ *
+ * @param array $mapped An array where the key is the source and the value the destination file
+ * @access protected
+ * @return array
+ */
+       function _handleCollision($mapped) {
+               $Left = new File(array_search(current($mapped), $this->_map));
+               $Right = new File(key($mapped));
+
+               $this->out('Collision:');
+               $this->out();
+               $this->out(sprintf('%s', $this->shortPath($Left->pwd())));
+               $this->out(sprintf('|  %s', $this->shortPath($Right->pwd())));
+               $this->out(sprintf('|  | '));
+               $this->out(sprintf('V  V '));
+               $this->out(sprintf('%s', $this->shortPath(current($mapped))));
+               $this->out();
+
+               if ($Left->md5() == $Right->md5()) {
+                       $this->out('Both files have the same checksum.');
+               }
+
+               $answer = $this->in('Would you like to [r]ename or [s]kip?', 'r,s', 's');
+
+               if ($answer == 's') {
+                       return array();
+               }
+               return array($Right->pwd() => $this->_rename($Right->pwd()));
+       }
+/**
+ * Prompts for renaming a file's basename
+ *
+ * @param string $file
+ * @access protected
+ * @return string Absolute path to the new file
+ */
+       function _rename($file) {
+               $message = sprintf('Rename %s to:', basename($file));
+               $basename = $this->in($message, null, basename($file));
+               return dirname($file) . DS . $basename;
+       }
+/**
+ * Performs the copying/linking of mapped files
+ *
+ * @access protected
+ * @return boolean
+ */
+       function _perform() {
+               $this->progress(count($this->_map));
+               $i = 0;
+
+               foreach ($this->_map as $old => $new)  {
+                       $Folder = new Folder(dirname($new) . DS, true);
+
+                       if ($this->_link) {
+                               $result = symlink($old, $new);
+                       } else {
+                               $result = copy($old, $new);
+                       }
+
+                       $message = sprintf('[%-6s] %s',         $result ? 'OK' : 'FAILED',      $this->shortPath($old));
+                       $this->progress(++$i, $message);
+               }
+               $this->out();
+               return true;
+       }
+}
+?>
diff --git a/app/plugins/media/vendors/shells/tasks/make.php b/app/plugins/media/vendors/shells/tasks/make.php
new file mode 100644 (file)
index 0000000..50aaf67
--- /dev/null
@@ -0,0 +1,172 @@
+<?php
+/**
+ * Make Task File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.shells.tasks
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.Medium');
+/**
+ * Make Task Class
+ *
+ * @package    media
+ * @subpackage media.shells.tasks
+ */
+class MakeTask extends MediaShell {
+/**
+ * An absolute path to a file or directory
+ *
+ * @var string
+ * @access public
+ */
+       var $source;
+/**
+ * An absolute path to a directory
+ *
+ * @var string
+ * @access public
+ */
+       var $destination;
+/**
+ * Optionally holds the version string
+ *
+ * @var string
+ * @access public
+ */
+       var $version;
+/**
+ * Force switch
+ *
+ * @var boolean
+ * @access public
+ */
+       var $force;
+/**
+ * Overwrite existing files
+ *
+ * @var boolean
+ * @access protected
+ */
+       var $_overwrite = false;
+/**
+ * Enable/disable creation of misssing directories
+ *
+ * @var boolean
+ * @access protected
+ */
+       var $_createDirectories = false;
+/**
+ * Main execution methpd
+ *
+ * @access public
+ * @return void
+ */
+       function execute() {
+               $this->interactive = count($this->args) != 2;
+               $this->force = isset($this->params['force']);
+               $this->source = array_shift($this->args);
+               $this->destination = array_shift($this->args);
+
+               if (!isset($this->source)) {
+                       $this->source = $this->in('Source File/Directory', null, MEDIA . 'static' . DS);
+               }
+               if (is_dir($this->source)) {
+                       $this->source = Folder::slashTerm($this->source);
+               }
+               if (!isset($this->destination)) {
+                       $this->destination = $this->in('Destination Directory', null, MEDIA . 'filter' . DS);
+               }
+               $this->destination = Folder::slashTerm($this->destination);
+
+               if ($this->force) {
+                       $this->_overwrite = $this->_createDirectories = true;
+               }
+               if (isset($this->params['version'])) {
+                       $this->version = $this->params['version'];
+               }
+
+               $this->out();
+               $this->out(sprintf('%-25s: %s', 'Source', $this->shortPath($this->source)));
+               $this->out(sprintf('%-25s: %s', 'Destination', $this->shortPath($this->destination)));
+               $this->out(sprintf('%-25s: %s', 'Overwrite existing', $this->_overwrite ? 'yes' : 'no'));
+               $this->out(sprintf('%-25s: %s', 'Create directories', $this->_createDirectories ? 'yes' : 'no'));
+
+               if ($this->in('Looks OK?', 'y,n', 'y') == 'n') {
+                       return false;
+               }
+               $this->out();
+               $this->out('Making');
+               $this->hr();
+
+               if (is_file($this->source)) {
+                       $files = array($this->source);
+               } else {
+                       $Folder = new Folder($this->source);
+                       $files = $Folder->findRecursive();
+               }
+
+               $this->progress(count($files));
+
+               foreach ($files as $key => $file) {
+                       $this->progress($key, $this->shortPath($file));
+                       $this->_make($file);
+               }
+               $this->out();
+       }
+/**
+ * "makes" a file
+ *
+ * @param string $file Absolute path to a file
+ * @access protected
+ * @return boolean
+ */
+       function _make($file) {
+               $File = new File($file);
+               $name = Medium::name($file);
+               $subdir = array_pop(explode(DS, dirname($this->source)));
+
+               if ($name === 'Icon' || strpos($file, 'ico' . DS) !== false) {
+                       return true;
+               }
+
+               if ($this->version) {
+                       $configString = 'Media.filter.' . strtolower($name) . '.' . $this->version;
+                       $filter = array(Configure::read($configString));
+               } else {
+                       $configString = 'Media.filter.' . strtolower($name);
+                       $filter = Configure::read($configString);
+               }
+
+               foreach ($filter as $version => $instructions) {
+                       $directory = Folder::slashTerm(rtrim($this->destination . $version . DS . $subdir, '.'));
+                       $Folder = new Folder($directory, $this->_createDirectories);
+
+                       if (!$Folder->pwd()) {
+                               $this->err($directory . ' could not be created or is not writable.');
+                               $this->err('Please check your permissions.');
+                               return false;
+                       }
+
+                       $Medium = Medium::make($File->pwd(), $instructions);
+
+                       if (!$Medium) {
+                               $this->err('Failed to make version ' . $version . ' of medium.');
+                               return false;
+                       }
+                       $Medium->store($Folder->pwd() . $File->name, $this->overwrite);
+               }
+               return true;
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/shells/tasks/sync.php b/app/plugins/media/vendors/shells/tasks/sync.php
new file mode 100644 (file)
index 0000000..6fe173c
--- /dev/null
@@ -0,0 +1,434 @@
+<?php
+/**
+ * Sync Task File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.shells.tasks
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+/**
+ * Sync Task Class
+ *
+ * @package    media
+ * @subpackage media.shells.tasks
+ */
+class SyncTask extends MediaShell {
+/**
+ * model
+ *
+ * @var string
+ * @access public
+ */
+       var $model;
+/**
+ * Directory
+ *
+ * @var string
+ * @access public
+ */
+       var $directory;
+/**
+ * Default answer to use if prompted for input
+ *
+ * @var string
+ * @access protected
+ */
+       var $_answer = 'n';
+/**
+ * Model
+ *
+ * @var Model
+ * @access protected
+ */
+       var $_Model;
+/**
+ * baseDirectory from the model's media behavior settings
+ *
+ * @var string
+ * @access protected
+ */
+       var $_baseDirectory;
+/**
+ * Folder to search
+ *
+ * @var Folder
+ * @access protected
+ */
+       var $_Folder;
+/**
+ * Current item retrieved from the model
+ *
+ * @var array
+ * @access private
+ */
+       var $__dbItem;
+/**
+ * Current item retrieved from the filesystem
+ *
+ * @var array
+ * @access private
+ */
+       var $__fsItem;
+/**
+ * Current set of items retrieved from the model
+ *
+ * @var array
+ * @access private
+ */
+       var $__dbMap;
+/**
+ * Current set of items retrieved from the filesystem
+ *
+ * @var array
+ * @access private
+ */
+       var $__fsMap;
+/**
+ * Current file object
+ *
+ * @var File
+ * @access private
+ */
+       var $__File;
+/**
+ * An alternative for the current file
+ *
+ * @var mixed
+ * @access private
+ */
+       var $__alternativeFile;
+/**
+ * Main execution method
+ *
+ * @access public
+ * @return boolean
+ */
+       function execute() {
+               $this->_answer = isset($this->params['auto']) ? 'y' : 'n';
+               $this->model = array_shift($this->args);
+               $this->directory = array_shift($this->args);
+
+               if (!isset($this->model)) {
+                       $this->model = $this->in('Name of model:', null, 'Media.Attachment');
+               }
+               if (!isset($this->directory)) {
+                       $this->directory = $this->in('Directory to search:', null, MEDIA_TRANSFER);
+               }
+
+               $this->_Model = ClassRegistry::init($this->model);
+
+               if (!isset($this->_Model->Behaviors->Media)) {
+                       $this->err('MediaBehavior is not attached to Model');
+                       return false;
+               }
+               $this->_baseDirectory = $this->_Model->Behaviors->Media->settings[$this->_Model->alias]['baseDirectory'];
+               $this->_Folder = new Folder($this->directory);
+               $this->interactive = isset($this->model, $this->directory);
+
+               if ($this->interactive) {
+                       $input = $this->in('Interactive?', 'y/n', 'y');
+
+                       if ($input == 'n') {
+                               $this->interactive = false;
+                       }
+               }
+
+               $this->out();
+               $this->out(sprintf('%-25s: %s', 'Model', $this->_Model->name));
+               $this->out(sprintf('%-25s: %s', 'Search directory', $this->shortPath($this->_Folder->pwd())));
+               $this->out(sprintf('%-25s: %s', 'Automatic repair', $this->_answer == 'y' ? 'yes' : 'no'));
+
+               if ($this->in('Looks OK?', 'y,n', 'y') == 'n') {
+                       return false;
+               }
+               $this->_Model->Behaviors->disable('Media');
+               $this->_checkFilesWithRecords();
+               $this->_checkRecordsWithFiles();
+               $this->_Model->Behaviors->enable('Media');
+               $this->out();
+               return true;
+       }
+/**
+ * Checks if files are in sync with records
+ *
+ * @access protected
+ * @return void
+ */
+       function _checkFilesWithRecords() {
+               $this->out();
+               $this->out('Checking if files are in sync with records');
+               $this->hr();
+
+               list($this->__fsMap, $this->__dbMap) = $this->_generateMaps();
+
+               foreach ($this->__dbMap as $dbItem) {
+                       $message = sprintf(
+                               '%-60s -> %s/%s',
+                               $this->shortPath($dbItem['file']),
+                               $this->_Model->name, $dbItem['id']
+                       );
+                       $this->out();
+                       $this->out($message);
+
+                       $this->__dbItem = $dbItem;
+                       $this->__File = new File($dbItem['file']);
+                       $this->__alternativeFile = $this->_findByChecksum($dbItem['checksum'], $this->__fsMap);
+
+                       if ($this->_findByFile($this->__alternativeFile, $this->__dbMap)) {
+                               $this->__alternativeFile = false;
+                       }
+
+                       if ($this->_handleNotReadable()) {
+                               continue;
+                       }
+                       if ($this->_handleOrphanedRecord()) {
+                               continue;
+                       }
+                       if ($this->_handleChecksumMismatch()) {
+                               continue;
+                       }
+               }
+       }
+/**
+ * Checks if records are in sync with files
+ *
+ * @access protected
+ * @return void
+ */
+       function _checkRecordsWithFiles() {
+               $this->out();
+               $this->out('Checking if records are in sync with files');
+               $this->hr();
+
+               list($this->__fsMap, $this->__dbMap) = $this->_generateMaps();
+
+               foreach ($this->__fsMap as $fsItem) {
+                       $message = sprintf(
+                               '%-60s <- %s/%s',
+                               $this->shortPath($fsItem['file']),
+                               $this->_Model->name,
+                               '?'
+                       );
+                       $this->out();
+                       $this->out($message);
+
+                       $this->__File = new File($fsItem['file']);
+                       $this->__fsItem = $fsItem;
+
+                       if ($this->_handleOrphanedFile()) {
+                               continue;
+                       }
+               }
+       }
+
+       /* handle methods */
+
+/**
+ * Handles existent but not readable files
+ *
+ * @access protected
+ * @return mixed
+ */
+       function _handleNotReadable() {
+               if (!$this->__File->readable() && $this->__File->exists()) {
+                       $this->out('File exists but is not readable');
+                       return true;
+               }
+       }
+/**
+ * Handles orphaned records
+ *
+ * @access protected
+ * @return mixed
+ */
+       function _handleOrphanedRecord() {
+               if ($this->__File->exists()) {
+                       return;
+               }
+               $this->out('Orphaned');
+
+               if ($this->_fixWithAlternative()) {
+                       return true;
+               }
+               if ($this->_fixDeleteRecord()) {
+                       return true;
+               }
+               return false;
+       }
+/**
+ * Handles mismatching checksums
+ *
+ * @access protected
+ * @return mixed
+ */
+       function _handleChecksumMismatch() {
+               if ($this->__dbItem['checksum'] == $this->__File->md5(true)) {
+                       return;
+               }
+               $this->out('Checksums mismatch');
+
+               if ($this->_fixWithAlternative()) {
+                       return true;
+               }
+               $input = $this->in('Correct the checksum of the record?', 'y,n', $this->_answer);
+
+               if ($input == 'y') {
+                       $data = array(
+                               'id' => $this->__dbItem['id'],
+                               'checksum' => $this->__File->md5(true),
+                       );
+                       $this->_Model->save($data);
+                       $this->out('Corrected checksum');
+                       return true;
+               }
+
+               if ($this->_fixDeleteRecord()) {
+                       return true;
+               }
+       }
+/**
+ * Handles orphaned files
+ *
+ * @access protected
+ * @return mixed
+ */
+       function _handleOrphanedFile() {
+               if ($this->_findByFile($this->__fsItem['file'], $this->__dbMap)) {
+                       return;
+               }
+               $this->out('Orphaned');
+
+               $input = $this->in('Delete file?', 'y,n', $this->_answer);
+
+               if ($input == 'y') {
+                       $File->delete();
+                       $this->out('File deleted');
+                       return true;
+               }
+       }
+
+       /* fix methods */
+
+/**
+ * Updates a record with an alternative file
+ *
+ * @access protected
+ * @return boolean
+ */
+       function _fixWithAlternative() {
+               if (!$this->__alternativeFile) {
+                       return false;
+               }
+               $message = sprintf(
+                       'This file has an identical checksum: %s',
+                       $this->shortPath($this->__alternativeFile)
+               );
+               $this->out($message);
+               $input = $this->in('Select this file and update record?', 'y,n', $this->_answer);
+
+               if ($input == 'n') {
+                       return false;
+               }
+
+               $data = array(
+                       'id' => $this->__dbItem['id'],
+                       'dirname' => dirname(str_replace($this->_baseDirectory, '', $this->__alternativeFile)),
+                       'basename' => basename($this->__alternativeFile),
+               );
+               $this->_Model->save($data);
+               $this->out('Corrected dirname and basename');
+               return true;
+       }
+/**
+ * Deletes current record
+ *
+ * @access protected
+ * @return booelan
+ */
+       function _fixDeleteRecord() {
+               $input = $this->in('Delete record?', 'y,n', $this->_answer);
+
+               if ($input == 'y') {
+                       $this->_Model->delete($this->__dbItem['id']);
+                       $this->out('Record deleted');
+                       return true;
+               }
+               return false;
+       }
+
+       /* map related methods */
+
+/**
+ * Generates filesystem and model maps
+ *
+ * @access protected
+ * @return void
+ */
+       function _generateMaps() {
+               $fsFiles = $this->_Folder->findRecursive();
+               $results = $this->_Model->find('all');
+               $fsMap = array();
+               $dbMap = array();
+
+               foreach ($fsFiles as $value) {
+                       $File = new File($value);
+                       $fsMap[] = array(
+                               'file' => $File->pwd(),
+                               'checksum' => $File->md5(true)
+                       );
+               }
+               foreach ($results as $result) {
+                       $dbMap[] = array(
+                               'id' => $result[$this->_Model->name]['id'],
+                               'file' => $this->_baseDirectory
+                                               . $result[$this->_Model->name]['dirname']
+                                               . DS . $result[$this->_Model->name]['basename'],
+                               'checksum' => $result[$this->_Model->name]['checksum'],
+                       );
+               }
+               return array($fsMap, $dbMap);
+       }
+/**
+ * Finds an item's file by it's checksum
+ *
+ * @param string $checksum
+ * @param array $map Map to use as a haystack
+ * @access protected
+ * @return mixed
+ */
+       function _findByChecksum($checksum, $map) {
+               foreach ($map as $item) {
+                       if ($checksum == $item['checksum']) {
+                               return $item['file'];
+                       }
+               }
+               return false;
+       }
+/**
+ * Finds an item's file by it's name
+ *
+ * @param string $file
+ * @param array $map Map to use as a haystack
+ * @access protected
+ * @return mixed
+ */
+       function _findByFile($file, $map) {
+               foreach ($map as $item) {
+                       if ($file == $item['file']) {
+                               return $item['file'];
+                       }
+               }
+               return false;
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/vendors/transfer_validation.php b/app/plugins/media/vendors/transfer_validation.php
new file mode 100644 (file)
index 0000000..4112cd5
--- /dev/null
@@ -0,0 +1,106 @@
+<?php
+/**
+ * Transfer Validation File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.libs
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Core', 'Validation');
+App::import('Vendor', 'Media.MediaValidation');
+/**
+ * Transfer Validation Class
+ *
+ * @package    media
+ * @subpackage media.libs
+ */
+class TransferValidation extends MediaValidation {
+/**
+ * Checks if subject is transferable
+ *
+ * @param mixed $check Path to file in local FS, URL or file-upload array
+ * @return boolean
+ */
+       function resource($check) {
+               if (TransferValidation::fileUpload($check)
+                || TransferValidation::uploadedFile($check) /* This must appear above file */
+                || MediaValidation::file($check)
+                || TransferValidation::url($check)) {
+                       return !TransferValidation::blank($check);
+               }
+               return false;
+       }
+/**
+ * Checks if resource is not blank or empty
+ *
+ * @param mixed $check Array or string
+ * @return boolean
+ */
+       function blank($check) {
+               if (empty($check)) {
+                       return true;
+               }
+               if (TransferValidation::fileUpload($check) && $check['error'] == UPLOAD_ERR_NO_FILE) {
+                       return true;
+               }
+               if (is_string($check) && Validation::blank($check)) {
+                       return true;
+               }
+               return false;
+       }
+/**
+ * Identifies a file upload array
+ *
+ * @param mixed $check
+ * @return boolean
+ */
+       function fileUpload($check) {
+               if (!is_array($check)) {
+                       return false;
+               }
+               if (!array_key_exists('name',$check)
+                || !array_key_exists('type',$check)
+                || !array_key_exists('tmp_name',$check)
+                || !array_key_exists('error',$check)
+                || !array_key_exists('size',$check)) {
+                       return false;
+               }
+               return true;
+       }
+/**
+ * Checks if subject is an uploaded file
+ *
+ * @param mixed $check
+ */
+       function uploadedFile($check) {
+               return MediaValidation::file($check) && is_uploaded_file($check);
+       }
+/**
+ * Validates url
+ *
+ * @param string string to check
+ * @param array options for allowing different url parts currently only scheme is supported
+ */
+       function url($check, $options = array()) {
+               if (!is_string($check)) {
+                       return false;
+               }
+               if (isset($options['scheme'])) {
+                       if (!preg_match('/^(' . implode('|', (array) $options['scheme']) . ':)+/', $check)) {
+                               return false;
+                       }
+               }
+               return Validation::url($check);
+       }
+}
+?>
\ No newline at end of file
diff --git a/app/plugins/media/views/elements/attachments.ctp b/app/plugins/media/views/elements/attachments.ctp
new file mode 100644 (file)
index 0000000..7c09dd5
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+/**
+ * Attachments Element File
+ *
+ * Element listing associated attachments of the view's model
+ * Add, delete (detach) an Attachment
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.views.elements
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+
+if (!isset($previewVersion)) {
+       $previewVersion = 'xxs';
+}
+
+/* Set $assocAlias and $model if you're using this element multiple times in one form */
+
+if (!isset($assocAlias)) {
+       $assocAlias = 'Attachment';
+} else {
+       $assocAlias = Inflector::singularize($assocAlias);
+}
+
+if (!isset($model)) {
+       $model = $form->model();
+}
+
+$modelId = $form->value($form->model().'.id');
+
+if (isset($this->data[$assocAlias][0]['basename'])) {
+       array_unshift($this->data[$assocAlias],array());
+}
+?>
+<div class="attachments element">
+       <?php printf(__('%s', true), Inflector::pluralize($assocAlias)) ?>
+       <!-- New Attachment -->
+       <div class="new">
+       <?php
+               echo $form->hidden($assocAlias . '.0.model', array('value' => $model));
+               echo $form->hidden($assocAlias . '.0.group', array('value' => strtolower($assocAlias)));
+               echo $form->input($assocAlias . '.0.file', array(
+                       'label' => __('File', true),
+                       'type'  => 'file',
+                       'error' => array(
+                               'error'      => __('An error occured while transferring the file.', true),
+                               'resource'   => __('The file is invalid.', true),
+                               'access'     => __('The file cannot be processed.', true),
+                               'location'   => __('The file cannot be transferred from or to location.', true),
+                               'permission' => __('Executable files cannot be uploaded.', true),
+                               'size'       => __('The file is too large.', true),
+                               'pixels'     => __('The file is too large.', true),
+                               'extension'  => __('The file has the wrong extension.', true),
+                               'mimeType'   => __('The file has the wrong MIME type.', true),
+               )));
+               echo $form->input($assocAlias . '.0.alternative', array(
+                       'label' => __('Textual replacement', true),
+                       'value' => '',
+                       'error' => __('A textual replacement must be provided.', true)
+               ));
+       ?>
+       </div>
+       <!-- Existing Attachments -->
+       <div class="existing">
+       <?php if (isset($this->data[$assocAlias])): ?>
+               <?php for($i = 1; $i < count($this->data[$assocAlias]); $i++): ?>
+               <div>
+               <?php
+                       $item = $this->data[$assocAlias][$i];
+
+                       echo $form->hidden($assocAlias . '.' . $i . '.id', array('value' => $item['id']));
+                       echo $form->hidden($assocAlias . '.' . $i . '.model', array('value' => $model));
+                       echo $form->hidden($assocAlias . '.' . $i . '.group', array('value' => $item['group']));
+                       echo $form->hidden($assocAlias . '.' . $i . '.dirname', array('value' => $item['dirname']));
+                       echo $form->hidden($assocAlias . '.' . $i . '.basename', array('value' => $item['basename']));
+                       echo $form->hidden($assocAlias . '.' . $i . '.alternative', array('value' => $item['alternative']));
+
+                       if ($file = $medium->file($item)) {
+                               $url = $medium->url($file);
+
+                               echo $medium->embed($medium->file($previewVersion . '/', $item), array(
+                                       'restrict' => array('image')
+                               ));
+
+                               $Medium = Medium::factory($file);
+                               $size = $medium->size($file);
+
+                               if (isset($number)) {
+                                       $size = $number->toReadableSize($size);
+                               } else {
+                                       $size .= ' Bytes';
+                               }
+
+                               printf('<span>%s&nbsp;(%s/%s) <em>%s</em></span>',
+                                               $url ? $html->link($item['basename'], $url) : $item['basename'],
+                                               strtolower($Medium->name), $size, $item['alternative']);
+                       }
+
+                       echo $form->input($assocAlias . '.' . $i . '.delete', array(
+                               'label' => __('Release', true),
+                               'type' => 'checkbox',
+                               'value' => 0
+                       ));
+               ?>
+               </div>
+               <?php endfor ?>
+       <?php endif ?>
+       </div>
+</div>
\ No newline at end of file
diff --git a/app/plugins/media/views/helpers/medium.php b/app/plugins/media/views/helpers/medium.php
new file mode 100644 (file)
index 0000000..e8e1dab
--- /dev/null
@@ -0,0 +1,636 @@
+<?php
+/**
+ * Medium Helper File
+ *
+ * Copyright (c) 2007-2010 David Persson
+ *
+ * Distributed under the terms of the MIT License.
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * PHP version 5
+ * CakePHP version 1.2
+ *
+ * @package    media
+ * @subpackage media.views.helpers
+ * @copyright  2007-2010 David Persson <davidpersson@gmx.de>
+ * @license    http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link       http://github.com/davidpersson/media
+ */
+App::import('Vendor', 'Media.MimeType');
+App::import('Vendor', 'Media.Medium');
+/**
+ * Medium Helper Class
+ *
+ * @package    media
+ * @subpackage media.views.helpers
+ */
+class MediumHelper extends AppHelper {
+/**
+ * Helpers
+ *
+ * @var array
+ */
+       var $helpers = array('Html');
+/**
+ * Tags
+ *
+ * @var array
+ */
+       var $tags = array(
+               'object'         => '<object%s>%s%s</object>',
+               'param'          => '<param%s/>',
+               'csslink'        => '<link type="text/css" rel="stylesheet" href="%s" %s/>',
+               'javascriptlink' => '<script type="text/javascript" src="%s"></script>',
+               'rsslink'        => '<link type="application/rss+xml" rel="alternate" href="%s" title="%s"/>', /* v2 */
+       );
+/**
+ * Maps absolute paths to url paths
+ *
+ * @var array
+ */
+       var $_map = array(
+               'static'   => array(MEDIA_STATIC => MEDIA_STATIC_URL),
+               'transfer' => array(MEDIA_TRANSFER => MEDIA_TRANSFER_URL),
+               'filter'   => array(MEDIA_FILTER => MEDIA_FILTER_URL)
+       );
+/**
+ * Maps basenames of directories to absoulte paths
+ *
+ * @var array
+ */
+       var $_directories = array();
+/**
+ * Holds an indexed array of version names
+ *
+ * @var array
+ */
+       var $_versions = array();
+/**
+ * Maps short medium types to extensions
+ *
+ * @var array
+ */
+       var $_extensions = array(
+               'aud' => array('mp3', 'ogg', 'aif', 'wma', 'wav'),
+               'css' => array('css'),
+               'doc' => array('odt', 'rtf', 'pdf', 'doc', 'png', 'jpg', 'jpeg'),
+               'gen' => array(),
+               'ico' => array('ico', 'png', 'gif', 'jpg', 'jpeg'),
+               'img' => array('png', 'jpg', 'jpeg' , 'gif'),
+               'js'  => array('js'),
+               'txt' => array('txt'),
+               'vid' => array(
+                       'avi', 'mpg', 'qt', 'mov', 'ogg', 'wmv',
+                       'png', 'jpg', 'jpeg', 'gif', 'mp3', 'ogg',
+                       'aif', 'wma', 'wav', 'flv'
+       ));
+/**
+ * Holds cached resolved paths
+ *
+ * @var array
+ */
+       var $__cached;
+/**
+ * Constructor
+ *
+ * Sets up cache and merges user supplied map settings with default map
+ *
+ * @param array $settings The map settings to add
+ * @return void
+ */
+       function __construct($settings = array()) {
+               $this->_map = array_merge($this->_map, $settings);
+
+               foreach ($this->_map as $key => $value) {
+                       $this->_directories[basename(key($value))] = key($value);
+               }
+
+               foreach (Configure::read('Media.filter') as $type) {
+                       $this->_versions += $type;
+               }
+               $this->_versions = array_keys($this->_versions);
+
+               if (!$this->__cached = Cache::read('media_found', '_cake_core_')) {
+                       $this->__cached = array();
+               }
+       }
+/**
+ * Destructor
+ *
+ * Updates cache
+ *
+ * @return void
+ */
+       function __destruct() {
+               Cache::write('media_found', $this->__cached, '_cake_core_');
+       }
+/**
+ * Output filtering
+ *
+ * @param string $content
+ * @param boolean $inline True to return content, false to add content to `scripts_for_layout`
+ * @return mixed String if inline is true or null
+ */
+       function output($content, $inline = true) {
+               if ($inline) {
+                       return $content;
+               }
+
+               $View =& ClassRegistry::getObject('view');
+               $View->addScript($content);
+       }
+/**
+ * Turns a file path into a (routed) URL
+ *
+ * Reimplemented method from Helper
+ *
+ * @param string $path Absolute or partial path to a file
+ * @param boolean $full
+ * @return string
+ */
+       function url($path = null, $full = false) {
+               if (is_array($path) || strpos($path, '://') !== false) {
+                       return parent::url($path, $full);
+               }
+               if (!$path = $this->webroot($path)) {
+                       return null;
+               }
+               return $full ? FULL_BASE_URL . $path : $path;
+       }
+/**
+ * Webroot
+ *
+ * Reimplemented method from Helper
+ *
+ * @param string $path Absolute or partial path to a file
+ * @return mixed
+ */
+       function webroot($path) {
+               if (!$file = $this->file($path)) {
+                       return null;
+               }
+
+               foreach ($this->_map as $value) {
+                       $directory = key($value);
+                       $url = current($value);
+
+                       if (strpos($file, $directory) !== false) {
+                               if ($url === false) {
+                                       return null;
+                               }
+                               $path = str_replace($directory, $url, $file);
+                               break;
+                       }
+               }
+               $path = str_replace('\\', '/', $path);
+
+               if (strpos($path, '://') !== false) {
+                       return $path;
+               }
+               return $this->webroot . $path;
+       }
+/**
+ * Generates markup to render a file inline
+ *
+ * @param string $path Absolute or partial path to a file
+ * @param array $options restrict: embed to display certain medium types only
+ * @return string
+ */
+       function embed($path, $options = array()) {
+               $default = array(
+                       'restrict' => array(),
+                       'background' => '#000000',
+                       'autoplay' => false, /* aka `autostart` */
+                       'controls' => false, /* aka `controller` */
+                       'branding' => false,
+                       'alt' => null,
+                       'width' => null,
+                       'height' => null,
+               );
+               $additionalAttributes = array(
+                       'id' => null,
+                       'class' => null,
+                       'usemap' => null,
+               );
+
+               $options = array_merge($default, $options);
+               $attributes = array_intersect_key($options, $additionalAttributes);
+
+               if (is_array($path)) {
+                       $out = null;
+                       foreach ($path as $pathItem) {
+                               $out .= "\t" . $this->embed($pathItem, $options) . "\n";
+                       }
+                       return $out;
+               }
+
+               if (isset($options['url'])) {
+                       $link = $options['url'];
+                       unset($options['url']);
+
+                       $out = $this->embed($path, $options);
+                       return $this->Html->link($out, $link, array(), false, false);
+               }
+
+               if (!$url = $this->url($path)) {
+                       return null;
+               }
+
+               if (strpos('://', $path) !== false) {
+                       $file = parse_url($url, PHP_URL_PATH);
+               } else {
+                       $file = $this->file($path);
+               }
+
+               $mimeType = MimeType::guessType($file);
+               $Medium = Medium::factory($file, $mimeType);
+
+               if (!isset($options['width'])) {
+                       $options['width'] = $Medium->width();
+               }
+               if (!isset($options['height'])) {
+                       $options['height'] = $Medium->height();
+               }
+
+               extract($options, EXTR_SKIP);
+
+               if (!empty($restrict) && !in_array(strtolower($Medium->name), (array) $restrict)) {
+                       return null;
+               }
+
+               switch ($mimeType) {
+                       /* Images */
+                       case 'image/gif':
+                       case 'image/jpeg':
+                       case 'image/png':
+                               $attributes = array_merge($attributes, array(
+                                       'alt' => $alt,
+                                       'width' => $width,
+                                       'height' => $height,
+                               ));
+                               if (strpos($path, 'ico/') !== false) {
+                                       $attributes = $this->addClass($attributes, 'icon');
+                               }
+                               return sprintf(
+                                       $this->Html->tags['image'],
+                                       $url,
+                                       $this->_parseAttributes($attributes)
+                               );
+                       /* Windows Media */
+                       case 'video/x-ms-wmv': /* official */
+                       case 'video/x-ms-asx':
+                       case 'video/x-msvideo':
+                               $attributes = array_merge($attributes, array(
+                                       'type' => $mimeType,
+                                       'width' => $width,
+                                       'height' => $height,
+                                       'data' => $url,
+                                       'classid' => 'clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6',
+                               ));
+                               $parameters = array(
+                                       'src' => $url,
+                                       'autostart' => $autoplay,
+                                       'controller' => $controls,
+                                       'pluginspage' => 'http://www.microsoft.com/Windows/MediaPlayer/',
+                               );
+                               break;
+                       /* RealVideo */
+                       case 'application/vnd.rn-realmedia':
+                       case 'video/vnd.rn-realvideo':
+                       case 'audio/vnd.rn-realaudio':
+                               $attributes = array_merge($attributes, array(
+                                       'type' => $mimeType,
+                                       'width' => $width,
+                                       'height' => $height,
+                                       'data' => $url,
+                                       'classid' => 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',
+                               ));
+                               $parameters = array(
+                                       'src' => $url,
+                                       'autostart' => $autoplay,
+                                       'controls' => isset($controls) ? 'ControlPanel' : null,
+                                       'console' => 'video' . uniqid(),
+                                       'loop' => $loop,
+                                       'bgcolor' => $background,
+                                       'nologo' => $branding ? false : true,
+                                       'nojava' => true,
+                                       'center' => true,
+                                       'backgroundcolor' => $background,
+                                       'pluginspage' => 'http://www.real.com/player/',
+                               );
+                               break;
+                       /* QuickTime */
+                       case 'video/quicktime':
+                               $attributes = array_merge($attributes, array(
+                                       'type' => $mimeType,
+                                       'width' => $width,
+                                       'height' => $height,
+                                       'data' => $url,
+                                       'classid' => 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
+                                       'codebase' => 'http://www.apple.com/qtactivex/qtplugin.cab',
+                               ));
+                               $parameters = array(
+                                       'src' => $url,
+                                       'autoplay' => $autoplay,
+                                       'controller' => $controls,
+                                       'bgcolor' => substr($background, 1),
+                                       'showlogo' => $branding,
+                                       'pluginspage' => 'http://www.apple.com/quicktime/download/',
+                               );
+                               break;
+                       /* Mpeg */
+                       case 'video/mpeg':
+                               $attributes = array_merge($attributes, array(
+                                       'type' => $mimeType,
+                                       'width' => $width,
+                                       'height' => $height,
+                                       'data' => $url,
+                               ));
+                               $parameters = array(
+                                       'src' => $url,
+                                       'autostart' => $autoplay,
+                               );
+                               break;
+                       /* Flashy Flash */
+                       case 'application/x-shockwave-flash':
+                               $attributes = array_merge($attributes, array(
+                                       'type' => $mimeType,
+                                       'width' => $width,
+                                       'height' => $height,
+                                       'data' => $url,
+                                       'classid' => 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000',
+                                       'codebase' => 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab',
+                               ));
+                               $parameters = array(
+                                       'movie' => $url,
+                                       'wmode' => 'transparent',
+                                       'bgcolor' => $background,
+                                       'FlashVars' => 'playerMode=embedded',
+                                       'quality' => 'best',
+                                       'scale' => 'noScale',
+                                       'salign' => 'TL',
+                                       'pluginspage' => 'http://www.adobe.com/go/getflashplayer',
+                               );
+                               break;
+                       case 'application/pdf':
+                               $attributes = array_merge($attributes, array(
+                                       'type' => $mimeType,
+                                       'width' => $width,
+                                       'height' => $height,
+                                       'data' => $url,
+                               ));
+                               $parameters = array(
+                                       'src' => $url,
+                                       'toolbar' => $controls, /* 1 or 0 */
+                                       'scrollbar' => $controls, /* 1 or 0 */
+                                       'navpanes' => $controls,
+                               );
+                               break;
+                       case 'audio/x-wav':
+                       case 'audio/mpeg':
+                       case 'audio/ogg': /* must use application/ogg instead? */
+                       case 'audio/x-midi':
+                               $attributes = array_merge($attributes, array(
+                                       'type' => $mimeType,
+                                       'width' => $width,
+                                       'height' => $height,
+                                       'data' => $url,
+                               ));
+                               $parameters = array(
+                                       'src' => $url,
+                                       'autoplay' => $autoplay,
+                               );
+                               break;
+                       default:
+                               $attributes = array_merge($attributes, array(
+                                       'type' => $mimeType,
+                                       'width' => $width,
+                                       'height' => $height,
+                                       'data' => $url,
+                               ));
+                               $parameters = array(
+                                       'src' => $url,
+                               );
+                               break;
+               }
+               return sprintf(
+                       $this->tags['object'],
+                       $this->_parseAttributes($attributes),
+                       $this->_parseParameters($parameters),
+                       $alt
+               );
+       }
+/**
+ * Generates markup to link to file
+ *
+ * @param string $path Absolute or partial path to a file
+ * @param array $options
+ * @return mixed
+ */
+       function link($path, $options = array()) {
+               $default = array(
+                       'inline' => true,
+                       'restrict' => array(),
+               );
+               $defaultRss = array(
+                       'title' => 'RSS Feed',
+               );
+
+               if (is_bool($options)) {
+                       $options = array('inline' => $options);
+               }
+               $options = array_merge($default, $options);
+
+               if (is_array($path) && !array_key_exists('controller', $path)) {
+                       $out = null;
+                       foreach ($path as $i) {
+                               $out .= $this->link($i, $options);
+                       }
+                       if (empty($out)) {
+                               return null;
+                       }
+                       return $out;
+               }
+
+               $inline = $options['inline'];
+               unset($options['inline']);
+
+               if (!$url = $this->url($path)) {
+                       return null;
+               }
+
+               if (strpos('://', $path) !== false) {
+                       $file = parse_url($url, PHP_URL_PATH);
+               } else {
+                       $file = $this->file($path);
+               }
+
+               $mimeType = MimeType::guessType($file);
+               $Medium = Medium::factory($file, $mimeType);
+
+               if (!empty($options['restrict'])
+               && !in_array(strtolower($Medium->name), (array) $options['restrict'])) {
+                       return null;
+               }
+               unset($options['restrict']);
+
+               switch ($mimeType) {
+                       case 'text/css':
+                               $out = sprintf(
+                                       $this->tags['csslink'],
+                                       $url,
+                                       $this->_parseAttributes($options, null, '', ' ')
+                               );
+                               return $this->output($out, $inline);
+                       case 'application/javascript':
+                       case 'application/x-javascript':
+                               $out = sprintf($this->tags['javascriptlink'], $url);
+                               return $this->output($out, $inline);
+                       case 'application/rss+xml':
+                               $options = array_merge($defaultRss,$options);
+                               $out = sprintf($this->tags['rsslink'], $url, $options['title']);
+                               return $this->output($out, $inline);
+                       default:
+                               return $this->Html->link(basename($file), $url);
+               }
+       }
+/**
+ * Get MIME type for a path
+ *
+ * @param string|array $path Absolute or partial path to a file
+ * @return string|boolean
+ */
+       function mimeType($path) {
+               if ($file = $this->file($path)) {
+                       return MimeType::guessType($file);
+               }
+               return false;
+       }
+/**
+ * Get size of file
+ *
+ * @param string|array $path Absolute or partial path to a file
+ * @return integer|boolean False on error or integer
+ */
+       function size($path)    {
+               if ($file = $this->file($path)) {
+                       return filesize($file);
+               }
+               return false;
+       }
+/**
+ * Resolves partial path
+ *
+ * Examples:
+ *     css/cake.generic         >>> MEDIA_STATIC/css/cake.generic.css
+ *  transfer/img/image.jpg   >>> MEDIA_TRANSFER/img/image.jpg
+ *     s/img/image.jpg          >>> MEDIA_FILTER/s/static/img/image.jpg
+ *
+ * @param string|array $path Either a string or an array with dirname and basename keys
+ * @return string|boolean False on error or if path couldn't be resolbed otherwise
+ *                                                     an absolute path to the file
+ */
+       function file($path) {
+               $path = array();
+
+               foreach (func_get_args() as $arg) {
+                       if (is_array($arg)) {
+                               if (isset($arg['dirname'])) {
+                                       $path[] = rtrim($arg['dirname'], '/\\');
+                               }
+                               if (isset($arg['basename'])) {
+                                       $path[] = $arg['basename'];
+                               }
+                       } else {
+                               $path[] = rtrim($arg, '/\\');
+                       }
+               }
+               $path = implode(DS, $path);
+               $path = str_replace(array('/', '\\'), DS, $path);
+
+               if (isset($this->__cached[$path])) {
+                       return $this->__cached[$path];
+               }
+               if (Folder::isAbsolute($path)) {
+                       return file_exists($path) ? $path : false;
+               }
+
+               $parts = explode(DS, $path);
+
+               if (in_array($parts[0], $this->_versions)) {
+                       array_unshift($parts, basename(key($this->_map['filter'])));
+               }
+               if (!in_array($parts[0], array_keys($this->_directories))) {
+                       array_unshift($parts, basename(key($this->_map['static'])));
+               }
+               if (in_array($parts[1], $this->_versions)
+               && !in_array($parts[2], array_keys($this->_directories))) {
+                       array_splice($parts, 2, 0, basename(key($this->_map['static'])));
+               }
+
+               $path = implode(DS, $parts);
+
+               if (isset($this->__cached[$path])) {
+                       return $this->__cached[$path];
+               }
+
+               $file = $this->_directories[array_shift($parts)] . implode(DS, $parts);
+
+               if (file_exists($file)) {
+                       return $this->__cached[$path] = $file;
+               }
+
+               $short = current(array_intersect(Medium::short(), $parts));
+
+               if (!$short) {
+                       $message  = "MediumHelper::file - ";
+                       $message .= "You've provided a partial path without a medium directory (e.g. img) ";
+                       $message .= "which is required to resolve the path.";
+                       trigger_error($message, E_USER_NOTICE);
+                       return false;
+               }
+
+               $extension = null;
+               extract(pathinfo($file), EXTR_OVERWRITE);
+
+               if (!isset($filename)) { /* PHP < 5.2.0 */
+                       $filename = substr($basename, 0, isset($extension) ? - (strlen($extension) + 1) : 0);
+               }
+
+               for ($i = 0; $i < 2; $i++) {
+                       $file = $i ? $dirname . DS . $filename : $dirname . DS . $basename;
+
+                       foreach ($this->_extensions[$short] as $extension) {
+                               $try = $file . '.' . $extension;
+                               if (file_exists($try)) {
+                                       return $this->__cached[$path] = $try;
+                               }
+                       }
+               }
+               return false;
+       }
+/**
+ * Generates `param` tags
+ *
+ * @param array $options
+ * @return string
+ */
+       function _parseParameters($options) {
+               $parameters = array();
+               $options = Set::filter($options);
+
+               foreach ($options as $key => $value) {
+                       if ($value === true) {
+                               $value = 'true';
+                       } elseif ($value === false) {
+                               $value = 'false';
+                       }
+                       $parameters[] = sprintf(
+                               $this->tags['param'],
+                               $this->_parseAttributes(array('name' => $key, 'value' => $value))
+                       );
+               }
+               return implode("\n", $parameters);
+       }
+}
+?>
\ No newline at end of file
index 32514c6..92847a1 100644 (file)
@@ -87,6 +87,7 @@
 if ($this->params["controller"] == 'users') {
        switch ($this->params["action"]) {
                case 'edit':
+               case 'edit_image':
                case 'change_password':
                case 'delete':
                        echo $this->renderElement('config_sidenav', array());
diff --git a/app/views/users/edit_image.ctp b/app/views/users/edit_image.ctp
new file mode 100644 (file)
index 0000000..74a1f9c
--- /dev/null
@@ -0,0 +1,31 @@
+<div class="users form">
+<?php echo $form->create('User', array(
+       'url' => array(
+               'controller' => 'users',
+               'action' => 'edit_image',
+       ),
+       'type' => 'file',
+));?>
+<fieldset>
+<legend><?php __('Edit Image');?></legend>
+<?php
+       echo $this->element('attachments', array('plugin' => 'media'));
+
+       echo $token->create();
+?>
+</fieldset>
+<?php echo $form->end('Submit');?>
+</div>
+
+<div class="backButton">
+<?php
+echo $form->create('', array('url' => array(
+       'action' => 'view', $this->data['User']['id']),
+       'type' => 'GET',
+));
+echo $form->end('Cancel');
+?>
+</div>
+
+<div class="actions">
+</div>
diff --git a/app/webroot/media/filter/l/transfer/img/toomuch.png b/app/webroot/media/filter/l/transfer/img/toomuch.png
new file mode 100644 (file)
index 0000000..b1c13e2
Binary files /dev/null and b/app/webroot/media/filter/l/transfer/img/toomuch.png differ
diff --git a/app/webroot/media/filter/m/transfer/img/toomuch.png b/app/webroot/media/filter/m/transfer/img/toomuch.png
new file mode 100644 (file)
index 0000000..1a45de1
Binary files /dev/null and b/app/webroot/media/filter/m/transfer/img/toomuch.png differ
diff --git a/app/webroot/media/filter/s/transfer/img/toomuch.png b/app/webroot/media/filter/s/transfer/img/toomuch.png
new file mode 100644 (file)
index 0000000..cbfb35c
Binary files /dev/null and b/app/webroot/media/filter/s/transfer/img/toomuch.png differ
diff --git a/app/webroot/media/filter/xl/transfer/img/toomuch.png b/app/webroot/media/filter/xl/transfer/img/toomuch.png
new file mode 100644 (file)
index 0000000..929c4d8
Binary files /dev/null and b/app/webroot/media/filter/xl/transfer/img/toomuch.png differ
diff --git a/app/webroot/media/filter/xs/transfer/img/toomuch.png b/app/webroot/media/filter/xs/transfer/img/toomuch.png
new file mode 100644 (file)
index 0000000..3330358
Binary files /dev/null and b/app/webroot/media/filter/xs/transfer/img/toomuch.png differ
diff --git a/app/webroot/media/filter/xxs/transfer/img/toomuch.png b/app/webroot/media/filter/xxs/transfer/img/toomuch.png
new file mode 100644 (file)
index 0000000..ef15a49
Binary files /dev/null and b/app/webroot/media/filter/xxs/transfer/img/toomuch.png differ
diff --git a/app/webroot/media/static/css/base.css b/app/webroot/media/static/css/base.css
new file mode 100644 (file)
index 0000000..afa3e03
--- /dev/null
@@ -0,0 +1,641 @@
+@charset "UTF-8";
+<?php 
+/* copyright */
+ ?>
+
+* {
+       margin: 0;
+       padding: 0;
+       border: 0;
+       vertical-align: baseline;
+       background: transparent
+}
+
+/* General Style Info */
+body {
+       background: #fff;
+       color: #333333;
+       font-family:'lucida grande',verdana,helvetica,arial,sans-serif;
+       font-size: 12px;
+       margin: 0;
+       padding: 0;
+}
+a {
+       color: #003d4c;
+       text-decoration: none;
+       font-weight: bold;
+}
+a:visited {
+       color: #003d4c;
+}
+a:hover {
+       color: #003d4c;
+       text-decoration: underline;
+}
+a img {
+       border:none;
+}
+
+h1, h2, h3 {
+       font-weight: normal;
+       line-height: 1em;
+       padding: 0;
+       margin: 0;
+}
+h1 {
+       font-size: 200%;
+}
+h2 {
+       font-size: 150%;
+}
+h3 {
+       font-size: 125%;
+}
+h4 {
+       font-weight: bold;
+}
+
+ol,ul {
+       list-style:none
+}
+
+li {
+       display: inline;
+}
+
+table{
+       border-collapse: collapse;
+       border-spacing: 0;
+       empty-cells: show;
+}
+
+/* Layout */
+#container {
+       width: 100%;
+       text-align: left;
+}
+#container ul {
+       margin: 0;
+       padding: 0;
+}
+
+#header {
+       width: 100%;
+       font-weight: bold;
+       background-color: #000;
+       color: #FFF;
+}
+#header li {
+       margin: 0;
+       float: left;
+}
+
+#header a {
+       text-decoration: none;
+}
+#header a:visited {
+       text-decoration: none;
+}
+#header a:hover {
+       text-decoration: none;
+}
+
+#intro {
+       clear: both;
+       color: #fff;
+       min-height: 3em;
+}
+
+#intro ul li {
+}
+
+#siteName a {
+       display: block;
+       padding: 5px 5px 3px 10px;
+       color: #fff;
+}
+#siteName a:visited {
+       color: #fff;
+       text-decoration: none;
+}
+#siteName a:hover {
+       color: #fff;
+       text-decoration: none;
+}
+
+#siteDescription {
+       padding: 7px 5px 5px 10px;
+}
+#breadCrumb {
+       padding: 10px;
+       vertical-align: middle;
+}
+#breadCrumb a {
+       color: #fff;
+       text-decoration: none;
+}
+#breadCrumb a:visited {
+       color: #fff;
+       text-decoration: none;
+}
+#breadCrumb a:hover {
+       color: #ffff99;
+       text-decoration: underline;
+}
+
+.mainNavi {
+       background-color: #616161;
+       font-size: 110%;
+       height: 27px;
+       padding-left: 5px;
+       clear: both;
+}
+#nav {
+       position: relative;
+       display: block;
+       margin: 0;
+       padding: 0;
+       background-color: transparent;
+       height: 27px;
+}
+#nav li {
+       position: relative;
+       display: block;
+       list-style: none;
+       margin: 0;
+       padding: 0;
+       float: left;
+}
+#nav *:hover {
+       background-color: none;
+}
+#nav li a {
+       display: block;
+       color: #fff;
+       padding: 5px;
+}
+#nav li a:visited {
+       color: #fff;
+}
+#nav li a:hover {
+       color: #FFFF44;
+}
+#nav ul {
+       position: absolute;
+       display: none;
+       margin: 0;
+       padding: 0;
+       width: 145px;
+       top: 25px;
+}
+* html #nav ul { line-height: 0; } /* IE6 "fix" */
+#nav ul a { zoom: 1; } /* IE6/7 fix */
+#nav ul li {
+       float: none;
+}
+#nav ul ul {
+       top: 0;
+       left: 146px;
+       font-size: 100%;
+}
+
+#nav ul li a {
+       border-right: 2px ridge #eee;
+       border-left: 2px ridge #eee;
+       background-color: #222;
+}
+#nav ul a.hover {
+       background-color: #222;
+}
+#nav ul a {
+       border-bottom: 2px groove #eee;
+       border-right: none;
+}
+* html #nav ul li  { margin-bottom: -3px; } /* IE6ハック */
+*:first-child+html #nav ul li  { margin-bottom: -4px; }/*IE7ハック */
+
+#subNavi {
+       background-color: #FFFFFF;
+       color: #333333;
+       font-size: 90%;
+       width: 100%;
+       height: 20px;
+       clear: both;
+}
+#subNavi ul {
+}
+#subNavi ul li {
+       padding-right: 5px;
+}
+#subNavi ul li a {
+       color: #003399;
+}
+#subNavi ul li a:visited {
+       color: #003399;
+}
+#subNavi ul li a:hover {
+       color: #0033cc;
+       text-decoration: underline;
+}
+
+#content {
+       clear: both;
+       width: 100%;
+       padding: 10px 10px 20px 10px;
+}
+
+#sideMenu {
+       padding: 5px 5px 5px 0;
+       display: block;
+       width: 100px;
+       float: left;
+}
+#sideMenu li {
+       display: block;
+}
+#mainBody {
+       padding: 5px 0 5px 10px;
+       display: block;
+}
+
+
+#footer {
+       width: 100%;
+       clear: both;
+       padding: 6px 10px;
+}
+
+/* Tables */
+table {
+       border-right:0;
+       clear: both;
+       margin-bottom: 10px;
+       width: 100%;
+}
+th {
+       font-weight: bold;
+       text-align: center;
+}
+th a {
+       background:#f2f2f2;
+       display: block;
+       padding: 2px 4px;
+       text-decoration: none;
+}
+th a:hover {
+       background: #ccc;
+       color: #333;
+       text-decoration: none;
+}
+table tr td {
+       text-align: center;
+       vertical-align: middle;
+}
+table tr.altrow td {
+       background: #f5f5f5;
+}
+td.actions {
+       text-align: left;
+       white-space: nowrap;
+}
+td.actions a {
+       padding-right: 5px;
+}
+div.actions a {
+       padding-right: 5px;
+}
+
+/* Paging */
+div.paging {
+       color: #ccc;
+       margin-bottom: 2em;
+}
+div.paging div.disabled {
+       color: #ddd;
+       display: inline;
+}
+div.paging span {
+}
+div.paging span.current {
+       color: #000;
+}
+div.paging span a {
+}
+
+/* Scaffold View */
+dl {
+       line-height: 2em;
+       margin: 0em 0em;
+       width: 60%;
+}
+dl.altrow {
+       background: #f5f5f5;
+}
+dt {
+       font-weight: bold;
+       padding-left: 4px;
+       vertical-align: top;
+}
+dd {
+       margin-left: 10em;
+       margin-top: -2em;
+       vertical-align: top;
+}
+
+/* Forms */
+form {
+       clear: both;
+       margin-right: 20px;
+       padding: 0;
+       width: 80%;
+}
+fieldset {
+       border: 1px solid #ccc;
+       padding: 16px 20px;
+}
+fieldset legend {
+       background:#fff;
+       color: #e32;
+       font-size: 160%;
+       font-weight: bold;
+}
+fieldset fieldset {
+       margin-top: 0px;
+       margin-bottom: 20px;
+       padding: 16px 10px;
+}
+fieldset fieldset legend {
+       font-size: 120%;
+       font-weight: normal;
+}
+fieldset fieldset div {
+       clear: left;
+       margin: 0 20px;
+}
+form div {
+       clear: both;
+       margin-bottom: 0.1em;
+       padding: 0.2em;
+       vertical-align: text-top;
+}
+form div.input {
+       color: #444;
+}
+.caption
+form .required {
+       color: #ff3300;
+       font-weight: bold;
+}
+form div.submit {
+       border: 0;
+       clear: both;
+       margin-top: 10px;
+       margin-left: 35px;
+}
+label {
+       display: block;
+       font-size: 110%;
+       padding-right: 5px;
+}
+input, textarea {
+       clear: both;
+/*     font-size: 140% */;
+       font-family: "frutiger linotype", "lucida grande", "verdana", sans-serif;
+       padding: 1px;
+}
+select {
+       clear: both;
+       font-size: 120%;
+       vertical-align: text-bottom;
+}
+select[multiple=multiple] {
+       width: 100%;
+}
+option {
+       font-size: 120%;
+       padding: 0 3px;
+}
+input[type=checkbox] {
+       clear: left;
+       float: left;
+       margin: 0px 6px 7px 2px;
+       width: auto;
+}
+input[type=radio] {
+       float:left;
+       width:auto;
+       margin: 0 3px 7px 0;
+}
+div.radio label {
+       margin: 0 0 6px 20px;
+}
+input[type=submit] {
+       display: inline;
+       font-size: 110%;
+       padding: 2px 5px;
+       width: auto;
+       vertical-align: bottom;
+}
+
+/* Notices and Errors */
+div.message {
+       clear: both;
+       color: #900;
+       font-size: 140%;
+       font-weight: bold;
+       margin: 1em 0;
+}
+div.error-message {
+       clear: both;
+       color: #900;
+       font-weight: bold;
+}
+p.error {
+       background-color: #e32;
+       color: #fff;
+       font-family: Courier, monospace;
+       font-size: 120%;
+       line-height: 140%;
+       padding: 0.8em;
+       margin: 1em 0;
+}
+p.error em {
+       color: #000;
+       font-weight: normal;
+       line-height: 140%;
+}
+.notice {
+       background: #ffcc00;
+       color: #000;
+       display: block;
+       font-family: Courier, monospace;
+       font-size: 120%;
+       line-height: 140%;
+       padding: 0.8em;
+       margin: 1em 0;
+}
+.success {
+       background: green;
+       color: #fff;
+}
+
+/* Related */
+div.related {
+       clear: both;
+       display: block;
+}
+
+
+/* パーツ */
+/* Backボタン */
+.backButton {
+       position: relative;
+       top: -43px;
+       left: 120px;
+       display: inline;
+}
+.backButton form {
+       display: inline;
+}
+
+/* テーブル表示 */
+table {
+       width: auto;
+       border-right: 1px solid #ccc;
+       border-bottom: 1px solid #ccc;
+}
+th, td {
+       border: 1px solid #ccc;
+       border-right: 0 none;
+       border-bottom: 0 none;
+       padding: 4px;
+}
+th {
+       background-color: #ddd;
+}
+table tr td {
+       text-align: left;
+}
+td.table {
+       padding: 0;
+       margin: 0;
+}
+td.table table {
+       padding: 0;
+       margin: 0;
+       border-top: 0 none;
+       background: #fff;
+}
+td.table th,
+td.table td
+{
+       overflow: hidden;
+}
+td.table td
+{
+       background: #fff;
+}
+td.table tr td input
+{
+       width: auto;
+}
+
+.blank {
+       min-height: 1em;
+}
+
+/* フォーム関連 */
+div.view .select {
+       display: inline;
+       padding-right: 5px;
+}
+div.inline {
+       display: inline;
+}
+div.inline div.checkbox {
+       display: inline;
+}
+div.inline input[type="radio"],
+div.inline input[type="checkbox"]  {
+       float: none;
+       margin: 2px 5px 2px 2px;
+}
+div.inline label {
+       display: inline;
+       padding-right: 5px;
+}
+
+input.sortOrder {
+       width: 2.5em;
+}
+
+/* キャラシ */
+table.right {
+       margin-left : auto;
+       margin-right : 0;
+}
+table.inner {
+       border: 0px none;
+       padding: 0;
+       margin: 0;
+}
+td.SystemRow {
+       padding: 0;
+}
+table.System {
+       border: 0px none;
+       text-align: left;
+       margin: 0;
+}
+table.System th,
+table.System td {
+       border: 0px none;
+}
+table.Character {
+       width: 780px;
+}
+
+table.Character th.CharacterName {
+       width: 100px;
+}
+.editLink {
+       padding: 4px;
+}
+
+/* キャラ画像 */
+td.image {
+       width: 160px;
+}
+div.imagefile {
+       border: 1px solid #ccc;
+       width: 150px;
+       height: 150px;
+       padding: 0;
+       margin: 5px;
+       overflow: hidden;
+}
+div.editImageLink {
+       text-align: center;
+}
+
+/* 管理画面:サイト設定 */
+div.siteConfigs table
+{
+       width: 100%;
+}
+div.siteConfigs table th
+{
+       width: 150px;
+}
+div.siteConfigs table td input[type=text]
+{
+       width: 98%;
+}
+div.siteConfigs table td.sizeInput input[type=text]
+{
+       width: 48px;
+}
+div.siteConfigs div.submit
+{
+       padding-left: 45px;
+}
diff --git a/app/webroot/media/static/css/jquery-jquery-ui.css b/app/webroot/media/static/css/jquery-jquery-ui.css
new file mode 100644 (file)
index 0000000..3d1d123
--- /dev/null
@@ -0,0 +1,405 @@
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+*/
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=ece8da&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=100&borderColorHeader=d4ccb0&fcHeader=433f38&iconColorHeader=847e71&bgColorContent=f5f3e5&bgTextureContent=04_highlight_hard.png&bgImgOpacityContent=100&borderColorContent=dfd9c3&fcContent=312e25&iconColorContent=808080&bgColorDefault=459e00&bgTextureDefault=04_highlight_hard.png&bgImgOpacityDefault=15&borderColorDefault=327E04&fcDefault=ffffff&iconColorDefault=eeeeee&bgColorHover=67b021&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=25&borderColorHover=327E04&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=fafaf4&bgTextureActive=04_highlight_hard.png&bgImgOpacityActive=100&borderColorActive=d4ccb0&fcActive=459e00&iconColorActive=8DC262&bgColorHighlight=fcf0ba&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=e8e1b5&fcHighlight=363636&iconColorHighlight=8DC262&bgColorError=ffedad&bgTextureError=03_highlight_soft.png&bgImgOpacityError=95&borderColorError=e3a345&fcError=cd5c0a&iconColorError=cd0a0a&bgColorOverlay=2b2922&bgTextureOverlay=05_inset_soft.png&bgImgOpacityOverlay=15&opacityOverlay=90&bgColorShadow=cccccc&bgTextureShadow=04_highlight_hard.png&bgImgOpacityShadow=95&opacityShadow=20&thicknessShadow=12px&offsetTopShadow=-12px&offsetLeftShadow=-12px&cornerRadiusShadow=10px
+*/
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: segoe ui, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: segoe ui, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #dfd9c3; background: #f5f3e5 url(images/ui-bg_highlight-hard_100_f5f3e5_1x100.png) 50% top repeat-x; color: #312e25; }
+.ui-widget-content a { color: #312e25; }
+.ui-widget-header { border: 1px solid #d4ccb0; background: #ece8da url(images/ui-bg_gloss-wave_100_ece8da_500x100.png) 50% 50% repeat-x; color: #433f38; font-weight: bold; }
+.ui-widget-header a { color: #433f38; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #327E04; background: #459e00 url(images/ui-bg_highlight-hard_15_459e00_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; outline: none; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; outline: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #327E04; background: #67b021 url(images/ui-bg_highlight-soft_25_67b021_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; outline: none; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; outline: none; }
+.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #d4ccb0; background: #fafaf4 url(images/ui-bg_highlight-hard_100_fafaf4_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #459e00; outline: none; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #459e00; outline: none; text-decoration: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #e8e1b5; background: #fcf0ba url(images/ui-bg_glass_55_fcf0ba_1x400.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #e3a345; background: #ffedad url(images/ui-bg_highlight-soft_95_ffedad_1x100.png) 50% top repeat-x; color: #cd5c0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd5c0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd5c0a; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_808080_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_808080_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_847e71_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_eeeeee_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_8DC262_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_8DC262_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; }
+.ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; }
+.ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; }
+.ui-corner-top { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; }
+.ui-corner-right {  -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; }
+.ui-corner-left { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; }
+.ui-corner-all { -moz-border-radius: 6px; -webkit-border-radius: 6px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #2b2922 url(images/ui-bg_inset-soft_15_2b2922_1x100.png) 50% bottom repeat-x; opacity: .90;filter:Alpha(Opacity=90); }
+.ui-widget-shadow { margin: -12px 0 0 -12px; padding: 12px; background: #cccccc url(images/ui-bg_highlight-hard_95_cccccc_1x100.png) 50% top repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 10px; -webkit-border-radius: 10px; }/* Accordion
+----------------------------------*/
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
+.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
+----------------------------------*/
+.ui-datepicker { width: 17em; padding: .2em .2em 0; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month, 
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+    display: none; /*sorry for IE5*/
+    display/**/: block; /*sorry for IE5*/
+    position: absolute; /*must have*/
+    z-index: -1; /*must have*/
+    filter: mask(); /*must have*/
+    top: -4px; /*must have*/
+    left: -4px; /*must have*/
+    width: 200px; /*must have*/
+    height: 200px; /*must have*/
+}/* Dialog
+----------------------------------*/
+.ui-dialog { position: relative; padding: .2em; width: 300px; }
+.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative;  }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } 
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/* Progressbar
+----------------------------------*/
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
+----------------------------------*/
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
+----------------------------------*/
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
+----------------------------------*/
+.ui-tabs { padding: .2em; zoom: 1; }
+.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
+.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/app/webroot/media/static/css/jquery-ui.accordion.css b/app/webroot/media/static/css/jquery-ui.accordion.css
new file mode 100644 (file)
index 0000000..ee1b1b6
--- /dev/null
@@ -0,0 +1,9 @@
+/* Accordion
+----------------------------------*/
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
+.ui-accordion .ui-accordion-content-active { display: block; }
\ No newline at end of file
diff --git a/app/webroot/media/static/css/jquery-ui.all.css b/app/webroot/media/static/css/jquery-ui.all.css
new file mode 100644 (file)
index 0000000..543e4c3
--- /dev/null
@@ -0,0 +1,2 @@
+@import "ui.base.css";
+@import "ui.theme.css";
diff --git a/app/webroot/media/static/css/jquery-ui.base.css b/app/webroot/media/static/css/jquery-ui.base.css
new file mode 100644 (file)
index 0000000..499e9b0
--- /dev/null
@@ -0,0 +1,9 @@
+@import url("ui.core.css");\r
+\r
+@import url("ui.accordion.css");\r
+@import url("ui.datepicker.css");\r
+@import url("ui.dialog.css");\r
+@import url("ui.progressbar.css");\r
+@import url("ui.resizable.css");\r
+@import url("ui.slider.css");\r
+@import url("ui.tabs.css");\r
diff --git a/app/webroot/media/static/css/jquery-ui.core.css b/app/webroot/media/static/css/jquery-ui.core.css
new file mode 100644 (file)
index 0000000..c2f18f2
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+*/
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
\ No newline at end of file
diff --git a/app/webroot/media/static/css/jquery-ui.datepicker.css b/app/webroot/media/static/css/jquery-ui.datepicker.css
new file mode 100644 (file)
index 0000000..567f8c9
--- /dev/null
@@ -0,0 +1,62 @@
+/* Datepicker
+----------------------------------*/
+.ui-datepicker { width: 17em; padding: .2em .2em 0; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month, 
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+    display: none; /*sorry for IE5*/
+    display/**/: block; /*sorry for IE5*/
+    position: absolute; /*must have*/
+    z-index: -1; /*must have*/
+    filter: mask(); /*must have*/
+    top: -4px; /*must have*/
+    left: -4px; /*must have*/
+    width: 200px; /*must have*/
+    height: 200px; /*must have*/
+}
\ No newline at end of file
diff --git a/app/webroot/media/static/css/jquery-ui.dialog.css b/app/webroot/media/static/css/jquery-ui.dialog.css
new file mode 100644 (file)
index 0000000..2997595
--- /dev/null
@@ -0,0 +1,13 @@
+/* Dialog
+----------------------------------*/
+.ui-dialog { position: relative; padding: .2em; width: 300px; }
+.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative;  }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } 
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
diff --git a/app/webroot/media/static/css/jquery-ui.progressbar.css b/app/webroot/media/static/css/jquery-ui.progressbar.css
new file mode 100644 (file)
index 0000000..bc0939e
--- /dev/null
@@ -0,0 +1,4 @@
+/* Progressbar
+----------------------------------*/
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/app/webroot/media/static/css/jquery-ui.resizable.css b/app/webroot/media/static/css/jquery-ui.resizable.css
new file mode 100644 (file)
index 0000000..44efeb2
--- /dev/null
@@ -0,0 +1,13 @@
+/* Resizable
+----------------------------------*/
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
\ No newline at end of file
diff --git a/app/webroot/media/static/css/jquery-ui.slider.css b/app/webroot/media/static/css/jquery-ui.slider.css
new file mode 100644 (file)
index 0000000..4c56218
--- /dev/null
@@ -0,0 +1,17 @@
+/* Slider
+----------------------------------*/
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }
\ No newline at end of file
diff --git a/app/webroot/media/static/css/jquery-ui.tabs.css b/app/webroot/media/static/css/jquery-ui.tabs.css
new file mode 100644 (file)
index 0000000..3ca6b9a
--- /dev/null
@@ -0,0 +1,11 @@
+/* Tabs
+----------------------------------*/
+.ui-tabs { padding: .2em; zoom: 1; }
+.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
+.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/app/webroot/media/static/css/jquery-ui.theme.css b/app/webroot/media/static/css/jquery-ui.theme.css
new file mode 100644 (file)
index 0000000..925319a
--- /dev/null
@@ -0,0 +1,246 @@
+
+
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=ece8da&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=100&borderColorHeader=d4ccb0&fcHeader=433f38&iconColorHeader=847e71&bgColorContent=f5f3e5&bgTextureContent=04_highlight_hard.png&bgImgOpacityContent=100&borderColorContent=dfd9c3&fcContent=312e25&iconColorContent=808080&bgColorDefault=459e00&bgTextureDefault=04_highlight_hard.png&bgImgOpacityDefault=15&borderColorDefault=327E04&fcDefault=ffffff&iconColorDefault=eeeeee&bgColorHover=67b021&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=25&borderColorHover=327E04&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=fafaf4&bgTextureActive=04_highlight_hard.png&bgImgOpacityActive=100&borderColorActive=d4ccb0&fcActive=459e00&iconColorActive=8DC262&bgColorHighlight=fcf0ba&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=e8e1b5&fcHighlight=363636&iconColorHighlight=8DC262&bgColorError=ffedad&bgTextureError=03_highlight_soft.png&bgImgOpacityError=95&borderColorError=e3a345&fcError=cd5c0a&iconColorError=cd0a0a&bgColorOverlay=2b2922&bgTextureOverlay=05_inset_soft.png&bgImgOpacityOverlay=15&opacityOverlay=90&bgColorShadow=cccccc&bgTextureShadow=04_highlight_hard.png&bgImgOpacityShadow=95&opacityShadow=20&thicknessShadow=12px&offsetTopShadow=-12px&offsetLeftShadow=-12px&cornerRadiusShadow=10px
+*/
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: segoe ui, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: segoe ui, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #dfd9c3; background: #f5f3e5 url(images/ui-bg_highlight-hard_100_f5f3e5_1x100.png) 50% top repeat-x; color: #312e25; }
+.ui-widget-content a { color: #312e25; }
+.ui-widget-header { border: 1px solid #d4ccb0; background: #ece8da url(images/ui-bg_gloss-wave_100_ece8da_500x100.png) 50% 50% repeat-x; color: #433f38; font-weight: bold; }
+.ui-widget-header a { color: #433f38; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #327E04; background: #459e00 url(images/ui-bg_highlight-hard_15_459e00_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; outline: none; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; outline: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #327E04; background: #67b021 url(images/ui-bg_highlight-soft_25_67b021_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; outline: none; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; outline: none; }
+.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #d4ccb0; background: #fafaf4 url(images/ui-bg_highlight-hard_100_fafaf4_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #459e00; outline: none; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #459e00; outline: none; text-decoration: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #e8e1b5; background: #fcf0ba url(images/ui-bg_glass_55_fcf0ba_1x400.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #e3a345; background: #ffedad url(images/ui-bg_highlight-soft_95_ffedad_1x100.png) 50% top repeat-x; color: #cd5c0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd5c0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd5c0a; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_808080_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_808080_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_847e71_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_eeeeee_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_8DC262_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_8DC262_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; }
+.ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; }
+.ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; }
+.ui-corner-top { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; }
+.ui-corner-right {  -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; }
+.ui-corner-left { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; }
+.ui-corner-all { -moz-border-radius: 6px; -webkit-border-radius: 6px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #2b2922 url(images/ui-bg_inset-soft_15_2b2922_1x100.png) 50% bottom repeat-x; opacity: .90;filter:Alpha(Opacity=90); }
+.ui-widget-shadow { margin: -12px 0 0 -12px; padding: 12px; background: #cccccc url(images/ui-bg_highlight-hard_95_cccccc_1x100.png) 50% top repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 10px; -webkit-border-radius: 10px; }
\ No newline at end of file
diff --git a/app/webroot/media/static/gen/jquery-1.3.2.min.js b/app/webroot/media/static/gen/jquery-1.3.2.min.js
new file mode 100644 (file)
index 0000000..b1ae21d
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,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\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<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>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
\ No newline at end of file
diff --git a/app/webroot/media/static/gen/jquery-ui-1.7.2.custom.min.js b/app/webroot/media/static/gen/jquery-ui-1.7.2.custom.min.js
new file mode 100644 (file)
index 0000000..cf19f30
--- /dev/null
@@ -0,0 +1,298 @@
+/*
+ * jQuery UI 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
+jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/*
+ * jQuery UI Draggable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ *     ui.core.js
+ */
+(function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,offset:this.positionAbs}}}));a.extend(a.ui.draggable,{version:"1.7.2",eventPrefix:"drag",defaults:{addClasses:true,appendTo:"parent",axis:false,cancel:":input,option",connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false}});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(b,c){var e=a(this).data("draggable").options;var d=a.makeArray(a(e.stack.group)).sort(function(g,f){return(parseInt(a(g).css("zIndex"),10)||e.stack.min)-(parseInt(a(f).css("zIndex"),10)||e.stack.min)});a(d).each(function(f){this.style.zIndex=e.stack.min+f});this[0].style.zIndex=e.stack.min+d.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
+ * jQuery UI Droppable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ *     ui.core.js
+ *     ui.draggable.js
+ */
+(function(a){a.widget("ui.droppable",{_init:function(){var c=this.options,b=c.accept;this.isover=0;this.isout=1;this.options.accept=this.options.accept&&a.isFunction(this.options.accept)?this.options.accept:function(e){return e.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[this.options.scope]=a.ui.ddmanager.droppables[this.options.scope]||[];a.ui.ddmanager.droppables[this.options.scope].push(this);(this.options.addClasses&&this.element.addClass("ui-droppable"))},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++){if(b[c]==this){b.splice(c,1)}}this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable")},_setData:function(b,c){if(b=="accept"){this.options.accept=c&&a.isFunction(c)?c:function(e){return e.is(c)}}else{a.widget.prototype._setData.apply(this,arguments)}},_activate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.addClass(this.options.activeClass)}(b&&this._trigger("activate",c,this.ui(b)))},_deactivate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}(b&&this._trigger("deactivate",c,this.ui(b)))},_over:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.addClass(this.options.hoverClass)}this._trigger("over",c,this.ui(b))}},_out:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("out",c,this.ui(b))}},_drop:function(c,d){var b=d||a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return false}var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var f=a.data(this,"droppable");if(f.options.greedy&&a.ui.intersect(b,a.extend(f,{offset:f.element.offset()}),f.options.tolerance)){e=true;return false}});if(e){return false}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("drop",c,this.ui(b));return this.element}return false},ui:function(b){return{draggable:(b.currentItem||b.element),helper:b.helper,position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs}}});a.extend(a.ui.droppable,{version:"1.7.2",eventPrefix:"drop",defaults:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"}});a.ui.intersect=function(q,j,o){if(!j.offset){return false}var e=(q.positionAbs||q.position.absolute).left,d=e+q.helperProportions.width,n=(q.positionAbs||q.position.absolute).top,m=n+q.helperProportions.height;var g=j.offset.left,c=g+j.proportions.width,p=j.offset.top,k=p+j.proportions.height;switch(o){case"fit":return(g<e&&d<c&&p<n&&m<k);break;case"intersect":return(g<e+(q.helperProportions.width/2)&&d-(q.helperProportions.width/2)<c&&p<n+(q.helperProportions.height/2)&&m-(q.helperProportions.height/2)<k);break;case"pointer":var h=((q.positionAbs||q.position.absolute).left+(q.clickOffset||q.offset.click).left),i=((q.positionAbs||q.position.absolute).top+(q.clickOffset||q.offset.click).top),f=a.ui.isOver(i,h,p,g,j.proportions.height,j.proportions.width);return f;break;case"touch":return((n>=p&&n<=k)||(m>=p&&m<=k)||(n<p&&m>k))&&((e>=g&&e<=c)||(d>=g&&d<=c)||(e<g&&d>c));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,g){var b=a.ui.ddmanager.droppables[e.options.scope];var f=g?g.type:null;var h=(e.currentItem||e.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d<b.length;d++){if(b[d].options.disabled||(e&&!b[d].options.accept.call(b[d].element[0],(e.currentItem||e.element)))){continue}for(var c=0;c<h.length;c++){if(h[c]==b[d].element[0]){b[d].proportions.height=0;continue droppablesLoop}}b[d].visible=b[d].element.css("display")!="none";if(!b[d].visible){continue}b[d].offset=b[d].element.offset();b[d].proportions={width:b[d].element[0].offsetWidth,height:b[d].element[0].offsetHeight};if(f=="mousedown"){b[d]._activate.call(b[d],g)}}},drop:function(b,c){var d=false;a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(!this.options){return}if(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)){d=this._drop.call(this,c)}if(!this.options.disabled&&this.visible&&this.options.accept.call(this.element[0],(b.currentItem||b.element))){this.isout=1;this.isover=0;this._deactivate.call(this,c)}});return d},drag:function(b,c){if(b.options.refreshPositions){a.ui.ddmanager.prepareOffsets(b,c)}a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(this.options.disabled||this.greedyChild||!this.visible){return}var e=a.ui.intersect(b,this,this.options.tolerance);var g=!e&&this.isover==1?"isout":(e&&this.isover==0?"isover":null);if(!g){return}var f;if(this.options.greedy){var d=this.element.parents(":data(droppable):eq(0)");if(d.length){f=a.data(d[0],"droppable");f.greedyChild=(g=="isover"?1:0)}}if(f&&g=="isover"){f.isover=0;f.isout=1;f._out.call(f,c)}this[g]=1;this[g=="isout"?"isover":"isout"]=0;this[g=="isover"?"_over":"_out"].call(this,c);if(f&&g=="isout"){f.isout=0;f.isover=1;f._over.call(f,c)}})}}})(jQuery);;/*
+ * jQuery UI Resizable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ *     ui.core.js
+ */
+(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/*
+ * jQuery UI Selectable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Selectables
+ *
+ * Depends:
+ *     ui.core.js
+ */
+(function(a){a.widget("ui.selectable",a.extend({},a.ui.mouse,{_init:function(){var b=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]);c.each(function(){var d=a(this);var e=d.offset();a.data(this,"selectable-item",{element:this,$element:d,left:e.left,top:e.top,right:e.left+d.outerWidth(),bottom:e.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy()},_mouseStart:function(d){var b=this;this.opos=[d.pageX,d.pageY];if(this.options.disabled){return}var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",d);a(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});if(c.autoRefresh){this.refresh()}this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!d.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=true;b._trigger("unselecting",d,{unselecting:e.element})}});a(d.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){e.$element.removeClass("ui-unselecting").addClass("ui-selecting");e.unselecting=false;e.selecting=true;e.selected=true;b._trigger("selecting",d,{selecting:e.element});return false}})},_mouseDrag:function(i){var c=this;this.dragged=true;if(this.options.disabled){return}var e=this.options;var d=this.opos[0],h=this.opos[1],b=i.pageX,g=i.pageY;if(d>b){var f=b;b=d;d=f}if(h>g){var f=g;g=h;h=f}this.helper.css({left:d,top:h,width:b-d,height:g-h});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!j||j.element==c.element[0]){return}var k=false;if(e.tolerance=="touch"){k=(!(j.left>b||j.right<d||j.top>g||j.bottom<h))}else{if(e.tolerance=="fit"){k=(j.left>d&&j.right<b&&j.top>h&&j.bottom<g)}}if(k){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;c._trigger("selecting",i,{selecting:j.element})}}else{if(j.selecting){if(i.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}c._trigger("unselecting",i,{unselecting:j.element})}}if(j.selected){if(!i.metaKey&&!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;c._trigger("unselecting",i,{unselecting:j.element})}}}});return false},_mouseStop:function(d){var b=this;this.dragged=false;var c=this.options;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;b._trigger("unselected",d,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;b._trigger("selected",d,{selected:e.element})});this._trigger("stop",d);this.helper.remove();return false}}));a.extend(a.ui.selectable,{version:"1.7.2",defaults:{appendTo:"body",autoRefresh:true,cancel:":input,option",delay:0,distance:0,filter:"*",tolerance:"touch"}})})(jQuery);;/*
+ * jQuery UI Sortable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ *     ui.core.js
+ */
+(function(a){a.widget("ui.sortable",a.extend({},a.ui.mouse,{_init:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?(/left|right/).test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop+g.scrollSpeed}else{if(f.pageY-this.overflowOffset.top<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop-g.scrollSpeed}}if((this.overflowOffset.left+this.scrollParent[0].offsetWidth)-f.pageX<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft+g.scrollSpeed}else{if(f.pageX-this.overflowOffset.left<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft-g.scrollSpeed}}}else{if(f.pageY-a(document).scrollTop()<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-g.scrollSpeed)}else{if(a(window).height()-(f.pageY-a(document).scrollTop())<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+g.scrollSpeed)}}if(f.pageX-a(document).scrollLeft()<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-g.scrollSpeed)}else{if(a(window).width()-(f.pageX-a(document).scrollLeft())<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+g.scrollSpeed)}}}if(b!==false&&a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,f)}}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)<i&&(e+h)>f&&(e+h)<c;if(this.options.tolerance=="pointer"||this.options.forcePointerForContainers||(this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>m[this.floating?"width":"height"])){return g}else{return(f<e+(this.helperProportions.width/2)&&d-(this.helperProportions.width/2)<c&&n<k+(this.helperProportions.height/2)&&j-(this.helperProportions.height/2)<i)}},_intersectsWithPointer:function(d){var e=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height),c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width),g=e&&c,b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(!g){return false}return this.floating?(((f&&f=="right")||b=="down")?2:1):(b&&(b=="down"?2:1))},_intersectsWithSides:function(e){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+(e.height/2),e.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+(e.width/2),e.width),b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(this.floating&&f){return((f=="right"&&d)||(f=="left"&&!d))}else{return b&&((b=="down"&&c)||(b=="up"&&!c))}},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return b!=0&&(b>0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c<this.items.length;c++){for(var b=0;b<d.length;b++){if(d[b]==this.items[c].item[0]){this.items.splice(c,1)}}}},_refreshItems:function(b){this.items=[];this.containers=[this];var h=this.items;var p=this;var f=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]];var l=this._connectWith();if(l){for(var e=l.length-1;e>=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d<n;d++){var o=a(c[d]);o.data("sortable-item",k);h.push({item:o,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){if(this.offsetParent&&this.helper){this.offset.parent=this._getParentOffset()}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)<h){h=Math.abs(f-e);g=this.items[b]}}if(!g&&!this.options.dropOnEmpty){continue}this.currentContainer=this.containers[c];g?this._rearrange(d,g,null,true):this._rearrange(d,null,this.containers[c].element,true);this._trigger("change",d,this._uiHash());this.containers[c]._trigger("change",d,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder)}this.containers[c]._trigger("over",d,this._uiHash(this));this.containers[c].containerCache.over=1}}else{if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",d,this._uiHash(this));this.containers[c].containerCache.over=0}}}},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):(d.helper=="clone"?this.currentItem.clone():this.currentItem);if(!b.parents("body").length){a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(b[0])}if(b[0]==this.currentItem[0]){this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}}if(b[0].style.width==""||d.forceHelperSize){b.width(this.currentItem.width())}if(b[0].style.height==""||d.forceHelperSize){b.height(this.currentItem.height())}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.currentItem.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.currentItem.css("marginLeft"),10)||0),top:(parseInt(this.currentItem.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)){var c=a(e.containment)[0];var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_rearrange:function(g,f,c,e){c?c[0].appendChild(this.placeholder[0]):f.item[0].parentNode.insertBefore(this.placeholder[0],(this.direction=="down"?f.item[0]:f.item[0].nextSibling));this.counter=this.counter?++this.counter:1;var d=this,b=this.counter;window.setTimeout(function(){if(b==d.counter){d.refreshPositions(!e)}},0)},_clear:function(d,e){this.reverting=false;var f=[],b=this;if(!this._noFinalSort&&this.currentItem[0].parentNode){this.placeholder.before(this.currentItem)}this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var c in this._storedCSS){if(this._storedCSS[c]=="auto"||this._storedCSS[c]=="static"){this._storedCSS[c]=""}}this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}if(this.fromOutside&&!e){f.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))})}if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!e){f.push(function(g){this._trigger("update",g,this._uiHash())})}if(!a.ui.contains(this.element[0],this.currentItem[0])){if(!e){f.push(function(g){this._trigger("remove",g,this._uiHash())})}for(var c=this.containers.length-1;c>=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}return false}if(!e){this._trigger("beforeStop",d,this._uiHash())}this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(this.helper[0]!=this.currentItem[0]){this.helper.remove()}this.helper=null;if(!e){for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){if(a.widget.prototype._trigger.apply(this,arguments)===false){this.cancel()}},_uiHash:function(c){var b=c||this;return{helper:b.helper,placeholder:b.placeholder||a([]),position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs,item:b.currentItem,sender:c?c.element:null}}}));a.extend(a.ui.sortable,{getter:"serialize toArray",version:"1.7.2",eventPrefix:"sort",defaults:{appendTo:"parent",axis:false,cancel:":input,option",connectWith:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}})})(jQuery);;/*
+ * jQuery UI Accordion 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Accordion
+ *
+ * Depends:
+ *     ui.core.js
+ */
+(function(a){a.widget("ui.accordion",{_init:function(){var d=this.options,b=this;this.running=0;if(d.collapsible==a.ui.accordion.defaults.collapsible&&d.alwaysOpen!=a.ui.accordion.defaults.alwaysOpen){d.collapsible=!d.alwaysOpen}if(d.navigation){var c=this.element.find("a").filter(d.navigationFilter);if(c.length){if(c.filter(d.header).length){this.active=c}else{this.active=c.parent().parent().prev();c.addClass("ui-accordion-content-active")}}}this.element.addClass("ui-accordion ui-widget ui-helper-reset");if(this.element[0].nodeName=="UL"){this.element.children("li").addClass("ui-accordion-li-fix")}this.headers=this.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){a(this).removeClass("ui-state-focus")});this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");this.active=this._findActive(this.active||d.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");a("<span/>").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);if(a.browser.msie){this.element.find("a").css("zoom","1")}this.resize();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown",function(e){return b._keydown(e)}).next().attr("role","tabpanel");this.headers.not(this.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();if(!this.active.length){this.headers.eq(0).attr("tabIndex","0")}else{this.active.attr("aria-expanded","true").attr("tabIndex","0")}if(!a.browser.safari){this.headers.find("a").attr("tabIndex","-1")}if(d.event){this.headers.bind((d.event)+".accordion",function(e){return b._clickHandler.call(b,e,this)})}},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind(".accordion").removeData("accordion");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");this.headers.find("a").removeAttr("tabindex");this.headers.children(".ui-icon").remove();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");if(c.autoHeight||c.fillHeight){b.css("height","")}},_setData:function(b,c){if(b=="alwaysOpen"){b="collapsible";c=!c}a.widget.prototype._setData.apply(this,arguments)},_keydown:function(e){var g=this.options,f=a.ui.keyCode;if(g.disabled||e.altKey||e.ctrlKey){return}var d=this.headers.length;var b=this.headers.index(e.target);var c=false;switch(e.keyCode){case f.RIGHT:case f.DOWN:c=this.headers[(b+1)%d];break;case f.LEFT:case f.UP:c=this.headers[(b-1+d)%d];break;case f.SPACE:case f.ENTER:return this._clickHandler({target:e.target},e.target)}if(c){a(e.target).attr("tabIndex","-1");a(c).attr("tabIndex","0");c.focus();return false}return true},resize:function(){var e=this.options,d;if(e.fillSpace){if(a.browser.msie){var b=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();if(a.browser.msie){this.element.parent().css("overflow",b)}this.headers.each(function(){d-=a(this).outerHeight()});var c=0;this.headers.next().each(function(){c=Math.max(c,a(this).innerHeight()-a(this).height())}).height(Math.max(0,d-c)).css("overflow","auto")}else{if(e.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).outerHeight())}).height(d)}}},activate:function(b){var c=this._findActive(b)[0];this._clickHandler({target:c},c)},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,f){var d=this.options;if(d.disabled){return false}if(!b.target&&d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var h=this.active.next(),e={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:h},c=(this.active=a([]));this._toggle(c,h,e);return false}var g=a(b.currentTarget||f);var i=g[0]==this.active[0];if(this.running||(!d.collapsible&&i)){return false}this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");if(!i){g.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);g.next().addClass("ui-accordion-content-active")}var c=g.next(),h=this.active.next(),e={options:d,newHeader:i&&d.collapsible?a([]):g,oldHeader:this.active,newContent:i&&d.collapsible?a([]):c.find("> *"),oldContent:h.find("> *")},j=this.headers.index(this.active[0])>this.headers.index(g[0]);this.active=i?a([]):g;this._toggle(c,h,e,i,j);return false},_toggle:function(b,i,g,j,k){var d=this.options,m=this;this.toShow=b;this.toHide=i;this.data=g;var c=function(){if(!m){return}return m._completed.apply(m,arguments)};this._trigger("changestart",null,this.data);this.running=i.size()===0?b.size():i.size();if(d.animated){var f={};if(d.collapsible&&j){f={toShow:a([]),toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}else{f={toShow:b,toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}if(!d.proxied){d.proxied=d.animated}if(!d.proxiedDuration){d.proxiedDuration=d.duration}d.animated=a.isFunction(d.proxied)?d.proxied(f):d.proxied;d.duration=a.isFunction(d.proxiedDuration)?d.proxiedDuration(f):d.proxiedDuration;var l=a.ui.accordion.animations,e=d.duration,h=d.animated;if(!l[h]){l[h]=function(n){this.slide(n,{easing:h,duration:e||700})}}l[h](f)}else{if(d.collapsible&&j){b.toggle()}else{i.hide();b.show()}c(true)}i.prev().attr("aria-expanded","false").attr("tabIndex","-1").blur();b.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()},_completed:function(b){var c=this.options;this.running=b?0:--this.running;if(this.running){return}if(c.clearStyle){this.toShow.add(this.toHide).css({height:"",overflow:""})}this._trigger("change",null,this.data)}});a.extend(a.ui.accordion,{version:"1.7.2",defaults:{active:null,alwaysOpen:true,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase()}},animations:{slide:function(j,h){j=a.extend({easing:"swing",duration:300},j,h);if(!j.toHide.size()){j.toShow.animate({height:"show"},j);return}if(!j.toShow.size()){j.toHide.animate({height:"hide"},j);return}var c=j.toShow.css("overflow"),g,d={},f={},e=["height","paddingTop","paddingBottom"],b;var i=j.toShow;b=i[0].style.width;i.width(parseInt(i.parent().width(),10)-parseInt(i.css("paddingLeft"),10)-parseInt(i.css("paddingRight"),10)-(parseInt(i.css("borderLeftWidth"),10)||0)-(parseInt(i.css("borderRightWidth"),10)||0));a.each(e,function(k,m){f[m]="hide";var l=(""+a.css(j.toShow[0],m)).match(/^([\d+-.]+)(.*)$/);d[m]={value:l[1],unit:l[2]||"px"}});j.toShow.css({height:0,overflow:"hidden"}).show();j.toHide.filter(":hidden").each(j.complete).end().filter(":visible").animate(f,{step:function(k,l){if(l.prop=="height"){g=(l.now-l.start)/(l.end-l.start)}j.toShow[0].style[l.prop]=(g*d[l.prop].value)+d[l.prop].unit},duration:j.duration,easing:j.easing,complete:function(){if(!j.autoHeight){j.toShow.css("height","")}j.toShow.css("width",b);j.toShow.css({overflow:c});j.complete()}})},bounceslide:function(b){this.slide(b,{easing:b.down?"easeOutBounce":"swing",duration:b.down?1000:200})},easeslide:function(b){this.slide(b,{easing:"easeinout",duration:700})}}})})(jQuery);;/*
+ * jQuery UI Dialog 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ *     ui.core.js
+ *     ui.draggable.js
+ *     ui.resizable.js
+ */
+(function(c){var b={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},a="ui-dialog ui-widget ui-widget-content ui-corner-all ";c.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr("title");var l=this,m=this.options,j=m.title||this.originalTitle||"&nbsp;",e=c.ui.dialog.getTitleId(this.element),k=(this.uiDialog=c("<div/>")).appendTo(document.body).hide().addClass(a+m.dialogClass).css({position:"absolute",overflow:"hidden",zIndex:m.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){(m.closeOnEscape&&n.keyCode&&n.keyCode==c.ui.keyCode.ESCAPE&&l.close(n))}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(n){l.moveToTop(false,n)}),g=this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(k),f=(this.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(k),i=c('<a href="#"/>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){i.addClass("ui-state-hover")},function(){i.removeClass("ui-state-hover")}).focus(function(){i.addClass("ui-state-focus")}).blur(function(){i.removeClass("ui-state-focus")}).mousedown(function(n){n.stopPropagation()}).click(function(n){l.close(n);return false}).appendTo(f),h=(this.uiDialogTitlebarCloseText=c("<span/>")).addClass("ui-icon ui-icon-closethick").text(m.closeText).appendTo(i),d=c("<span/>").addClass("ui-dialog-title").attr("id",e).html(j).prependTo(f);f.find("*").add(f).disableSelection();(m.draggable&&c.fn.draggable&&this._makeDraggable());(m.resizable&&c.fn.resizable&&this._makeResizable());this._createButtons(m.buttons);this._isOpen=false;(m.bgiframe&&c.fn.bgiframe&&k.bgiframe());(m.autoOpen&&this.open())},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();(this.originalTitle&&this.element.attr("title",this.originalTitle))},close:function(f){var d=this;if(false===d._trigger("beforeclose",f)){return}(d.overlay&&d.overlay.destroy());d.uiDialog.unbind("keypress.ui-dialog");(d.options.hide?d.uiDialog.hide(d.options.hide,function(){d._trigger("close",f)}):d.uiDialog.hide()&&d._trigger("close",f));c.ui.dialog.overlay.resize();d._isOpen=false;if(d.options.modal){var e=0;c(".ui-dialog").each(function(){if(this!=d.uiDialog[0]){e=Math.max(e,c(this).css("z-index"))}});c.ui.dialog.maxZ=e}},isOpen:function(){return this._isOpen},moveToTop:function(f,e){if((this.options.modal&&!f)||(!this.options.stack&&!this.options.modal)){return this._trigger("focus",e)}if(this.options.zIndex>c.ui.dialog.maxZ){c.ui.dialog.maxZ=this.options.zIndex}(this.overlay&&this.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=++c.ui.dialog.maxZ));var d={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};this.uiDialog.css("z-index",++c.ui.dialog.maxZ);this.element.attr(d);this._trigger("focus",e)},open:function(){if(this._isOpen){return}var e=this.options,d=this.uiDialog;this.overlay=e.modal?new c.ui.dialog.overlay(this):null;(d.next().length&&d.appendTo("body"));this._size();this._position(e.position);d.show(e.show);this.moveToTop(true);(e.modal&&d.bind("keypress.ui-dialog",function(h){if(h.keyCode!=c.ui.keyCode.TAB){return}var g=c(":tabbable",this),i=g.filter(":first")[0],f=g.filter(":last")[0];if(h.target==f&&!h.shiftKey){setTimeout(function(){i.focus()},1)}else{if(h.target==i&&h.shiftKey){setTimeout(function(){f.focus()},1)}}}));c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();this._trigger("open");this._isOpen=true},_createButtons:function(g){var f=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");this.uiDialog.find(".ui-dialog-buttonpane").remove();(typeof g=="object"&&g!==null&&c.each(g,function(){return !(d=true)}));if(d){c.each(g,function(h,i){c('<button type="button"></button>').addClass("ui-state-default ui-corner-all").text(h).click(function(){i.apply(f.element[0],arguments)}).hover(function(){c(this).addClass("ui-state-hover")},function(){c(this).removeClass("ui-state-hover")}).focus(function(){c(this).addClass("ui-state-focus")}).blur(function(){c(this).removeClass("ui-state-focus")}).appendTo(e)});e.appendTo(this.uiDialog)}},_makeDraggable:function(){var d=this,f=this.options,e;this.uiDialog.draggable({cancel:".ui-dialog-content",handle:".ui-dialog-titlebar",containment:"document",start:function(){e=f.height;c(this).height(c(this).height()).addClass("ui-dialog-dragging");(f.dragStart&&f.dragStart.apply(d.element[0],arguments))},drag:function(){(f.drag&&f.drag.apply(d.element[0],arguments))},stop:function(){c(this).removeClass("ui-dialog-dragging").height(e);(f.dragStop&&f.dragStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}})},_makeResizable:function(g){g=(g===undefined?this.options.resizable:g);var d=this,f=this.options,e=typeof g=="string"?g:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",alsoResize:this.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:f.minHeight,start:function(){c(this).addClass("ui-dialog-resizing");(f.resizeStart&&f.resizeStart.apply(d.element[0],arguments))},resize:function(){(f.resize&&f.resize.apply(d.element[0],arguments))},handles:e,stop:function(){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();(f.resizeStop&&f.resizeStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}}).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_position:function(i){var e=c(window),f=c(document),g=f.scrollTop(),d=f.scrollLeft(),h=g;if(c.inArray(i,["center","top","right","bottom","left"])>=0){i=[i=="right"||i=="left"?i:"center",i=="top"||i=="bottom"?i:"middle"]}if(i.constructor!=Array){i=["center","middle"]}if(i[0].constructor==Number){d+=i[0]}else{switch(i[0]){case"left":d+=0;break;case"right":d+=e.width()-this.uiDialog.outerWidth();break;default:case"center":d+=(e.width()-this.uiDialog.outerWidth())/2}}if(i[1].constructor==Number){g+=i[1]}else{switch(i[1]){case"top":g+=0;break;case"bottom":g+=e.height()-this.uiDialog.outerHeight();break;default:case"middle":g+=(e.height()-this.uiDialog.outerHeight())/2}}g=Math.max(g,h);this.uiDialog.css({top:g,left:d})},_setData:function(e,f){(b[e]&&this.uiDialog.data(b[e],f));switch(e){case"buttons":this._createButtons(f);break;case"closeText":this.uiDialogTitlebarCloseText.text(f);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(a+f);break;case"draggable":(f?this._makeDraggable():this.uiDialog.draggable("destroy"));break;case"height":this.uiDialog.height(f);break;case"position":this._position(f);break;case"resizable":var d=this.uiDialog,g=this.uiDialog.is(":data(resizable)");(g&&!f&&d.resizable("destroy"));(g&&typeof f=="string"&&d.resizable("option","handles",f));(g||this._makeResizable(f));break;case"title":c(".ui-dialog-title",this.uiDialogTitlebar).html(f||"&nbsp;");break;case"width":this.uiDialog.width(f);break}c.widget.prototype._setData.apply(this,arguments)},_size:function(){var e=this.options;this.element.css({height:0,minHeight:0,width:"auto"});var d=this.uiDialog.css({height:"auto",width:e.width}).height();this.element.css({minHeight:Math.max(e.minHeight-d,0),height:e.height=="auto"?"auto":Math.max(e.height-d,0)})}});c.extend(c.ui.dialog,{version:"1.7.2",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1000},getter:"isOpen",uuid:0,maxZ:0,getTitleId:function(d){return"ui-dialog-title-"+(d.attr("id")||++this.uuid)},overlay:function(d){this.$el=c.ui.dialog.overlay.create(d)}});c.extend(c.ui.dialog.overlay,{instances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(d){return d+".dialog-overlay"}).join(" "),create:function(e){if(this.instances.length===0){setTimeout(function(){if(c.ui.dialog.overlay.instances.length){c(document).bind(c.ui.dialog.overlay.events,function(f){var g=c(f.target).parents(".ui-dialog").css("zIndex")||0;return(g>c.ui.dialog.overlay.maxZ)})}},1);c(document).bind("keydown.dialog-overlay",function(f){(e.options.closeOnEscape&&f.keyCode&&f.keyCode==c.ui.keyCode.ESCAPE&&e.close(f))});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var d=c("<div></div>").appendTo(document.body).addClass("ui-widget-overlay").css({width:this.width(),height:this.height()});(e.options.bgiframe&&c.fn.bgiframe&&d.bgiframe());this.instances.push(d);return d},destroy:function(d){this.instances.splice(c.inArray(this.instances,d),1);if(this.instances.length===0){c([document,window]).unbind(".dialog-overlay")}d.remove();var e=0;c.each(this.instances,function(){e=Math.max(e,this.css("z-index"))});this.maxZ=e},height:function(){if(c.browser.msie&&c.browser.version<7){var e=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var d=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(e<d){return c(window).height()+"px"}else{return e+"px"}}else{return c(document).height()+"px"}},width:function(){if(c.browser.msie&&c.browser.version<7){var d=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);var e=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);if(d<e){return c(window).width()+"px"}else{return d+"px"}}else{return c(document).width()+"px"}},resize:function(){var d=c([]);c.each(c.ui.dialog.overlay.instances,function(){d=d.add(this)});d.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);;/*
+ * jQuery UI Slider 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ *     ui.core.js
+ */
+(function(a){a.widget("ui.slider",a.extend({},a.ui.mouse,{_init:function(){var b=this,c=this.options;this._keySliding=false;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");this.range=a([]);if(c.range){if(c.range===true){this.range=a("<div></div>");if(!c.values){c.values=[this._valueMin(),this._valueMin()]}if(c.values.length&&c.values.length!=2){c.values=[c.values[0],c.values[0]]}}else{this.range=a("<div></div>")}this.range.appendTo(this.element).addClass("ui-slider-range");if(c.range=="min"||c.range=="max"){this.range.addClass("ui-slider-range-"+c.range)}this.range.addClass("ui-widget-header")}if(a(".ui-slider-handle",this.element).length==0){a('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}if(c.values&&c.values.length){while(a(".ui-slider-handle",this.element).length<c.values.length){a('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=a(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(d){d.preventDefault()}).hover(function(){if(!c.disabled){a(this).addClass("ui-state-hover")}},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(!c.disabled){a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}else{a(this).blur()}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(d){a(this).data("index.ui-slider-handle",d)});this.handles.keydown(function(i){var f=true;var e=a(this).data("index.ui-slider-handle");if(b.options.disabled){return}switch(i.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!b._keySliding){b._keySliding=true;a(this).addClass("ui-state-active");b._start(i,e)}break}var g,d,h=b._step();if(b.options.values&&b.options.values.length){g=d=b.values(e)}else{g=d=b.value()}switch(i.keyCode){case a.ui.keyCode.HOME:d=b._valueMin();break;case a.ui.keyCode.END:d=b._valueMax();break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g==b._valueMax()){return}d=g+h;break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g==b._valueMin()){return}d=g-h;break}b._slide(i,e,d);return f}).keyup(function(e){var d=a(this).data("index.ui-slider-handle");if(b._keySliding){b._stop(e,d);b._change(e,d);b._keySliding=false;a(this).removeClass("ui-state-active")}});this._refreshValue()},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy()},_mouseCapture:function(d){var e=this.options;if(e.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var h={x:d.pageX,y:d.pageY};var j=this._normValueFromMouse(h);var c=this._valueMax()-this._valueMin()+1,f;var k=this,i;this.handles.each(function(l){var m=Math.abs(j-k.values(l));if(c>m){c=m;f=a(this);i=l}});if(e.range==true&&this.values(1)==e.min){f=a(this.handles[++i])}this._start(d,i);k._handleIndex=i;f.addClass("ui-state-active").focus();var g=f.offset();var b=!a(d.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=b?{left:0,top:0}:{left:d.pageX-g.left-(f.width()/2),top:d.pageY-g.top-(f.height()/2)-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};j=this._normValueFromMouse(h);this._slide(d,i,j);return true},_mouseStart:function(b){return true},_mouseDrag:function(d){var b={x:d.pageX,y:d.pageY};var c=this._normValueFromMouse(b);this._slide(d,this._handleIndex,c);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._handleIndex=null;this._clickOffset=null;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c,h;if("horizontal"==this.orientation){c=this.elementSize.width;h=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;h=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var f=(h/c);if(f>1){f=1}if(f<0){f=0}if("vertical"==this.orientation){f=1-f}var e=this._valueMax()-this._valueMin(),i=f*e,b=i%this.options.step,g=this._valueMin()+i-b;if(b>(this.options.step/2)){g+=this.options.step}return parseFloat(g.toFixed(5))},_start:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("start",d,b)},_slide:function(f,e,d){var g=this.handles[e];if(this.options.values&&this.options.values.length){var b=this.values(e?0:1);if((this.options.values.length==2&&this.options.range===true)&&((e==0&&d>b)||(e==1&&d<b))){d=b}if(d!=this.values(e)){var c=this.values();c[e]=d;var h=this._trigger("slide",f,{handle:this.handles[e],value:d,values:c});var b=this.values(e?0:1);if(h!==false){this.values(e,d,(f.type=="mousedown"&&this.options.animate),true)}}}else{if(d!=this.value()){var h=this._trigger("slide",f,{handle:this.handles[e],value:d});if(h!==false){this._setData("value",d,(f.type=="mousedown"&&this.options.animate))}}}},_stop:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("stop",d,b)},_change:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("change",d,b)},value:function(b){if(arguments.length){this._setData("value",b);this._change(null,0)}return this._value()},values:function(b,e,c,d){if(arguments.length>1){this.options.values[b]=e;this._refreshValue(c);if(!d){this._change(null,b)}}if(arguments.length){if(this.options.values&&this.options.values.length){return this._values(b)}else{return this.value()}}else{return this._values()}},_setData:function(b,d,c){a.widget.prototype._setData.apply(this,arguments);switch(b){case"disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled")}else{this.handles.removeAttr("disabled")}case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue(c);break;case"value":this._refreshValue(c);break}},_step:function(){var b=this.options.step;return b},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_values:function(b){if(arguments.length){var c=this.options.values[b];if(c<this._valueMin()){c=this._valueMin()}if(c>this._valueMax()){c=this._valueMax()}return c}else{return this.options.values}},_valueMin:function(){var b=this.options.min;return b},_valueMax:function(){var b=this.options.max;return b},_refreshValue:function(c){var f=this.options.range,d=this.options,l=this;if(this.options.values&&this.options.values.length){var i,h;this.handles.each(function(p,n){var o=(l.values(p)-l._valueMin())/(l._valueMax()-l._valueMin())*100;var m={};m[l.orientation=="horizontal"?"left":"bottom"]=o+"%";a(this).stop(1,1)[c?"animate":"css"](m,d.animate);if(l.options.range===true){if(l.orientation=="horizontal"){(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({left:o+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({width:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}else{(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({bottom:(o)+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({height:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}}lastValPercent=o})}else{var j=this.value(),g=this._valueMin(),k=this._valueMax(),e=k!=g?(j-g)/(k-g)*100:0;var b={};b[l.orientation=="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[c?"animate":"css"](b,d.animate);(f=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[c?"animate":"css"]({width:e+"%"},d.animate);(f=="max")&&(this.orientation=="horizontal")&&this.range[c?"animate":"css"]({width:(100-e)+"%"},{queue:false,duration:d.animate});(f=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[c?"animate":"css"]({height:e+"%"},d.animate);(f=="max")&&(this.orientation=="vertical")&&this.range[c?"animate":"css"]({height:(100-e)+"%"},{queue:false,duration:d.animate})}}}));a.extend(a.ui.slider,{getter:"value values",version:"1.7.2",eventPrefix:"slide",defaults:{animate:false,delay:0,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null}})})(jQuery);;/*
+ * jQuery UI Tabs 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ *     ui.core.js
+ */
+(function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1<this.anchors.length?1:-1))}d.disabled=a.map(a.grep(d.disabled,function(g,f){return g!=b}),function(g,f){return g>=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7.2",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"<div></div>",spinner:"<em>Loading&#8230;</em>",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i<b.anchors.length?i:0)},d);if(h){h.stopPropagation()}});var e=b._unrotate||(b._unrotate=!f?function(h){if(h.clientX){b.rotate(null)}}:function(h){t=g.selected;c()});if(d){this.element.bind("tabsshow",c);this.anchors.bind(g.event+".tabs",e);c()}else{clearTimeout(b.rotation);this.element.unbind("tabsshow",c);this.anchors.unbind(g.event+".tabs",e);delete this._rotate;delete this._unrotate}}})})(jQuery);;/*
+ * jQuery UI Datepicker 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ *     ui.core.js
+ */
+(function($){$.extend($.ui,{datepicker:{version:"1.7.2"}});var PROP_NAME="datepicker";function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass="ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],dateFormat:"mm/dd/yy",firstDay:0,isRTL:false};this._defaults={showOn:"focus",showAnim:"show",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,showMonthAfterYear:false,yearRange:"-10:+10",showOtherMonths:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"normal",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false};$.extend(this._defaults,this.regional[""]);this.dpDiv=$('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){inst.append=$('<span class="'+this._appendClass+'">'+appendText+"</span>");input[isRTL?"before":"after"](inst.append)}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("<img/>").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('<input type="text" id="'+id+'" size="1" style="position: absolute; top: -100px;"/>');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i<this._disabledInputs.length;i++){if(this._disabledInputs[i]==target){return true}}return false},_getInst:function(target){try{return $.data(target,PROP_NAME)}catch(err){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(target,name,value){var inst=this._getInst(target);if(arguments.length==2&&typeof name=="string"){return(name=="defaults"?$.extend({},$.datepicker._defaults):(inst?(name=="all"?$.extend({},inst.settings):this._get(inst,name)):null))}var settings=name||{};if(typeof name=="string"){settings={};settings[name]=value}if(inst){if(this._curInst==inst){this._hideDatepicker(null)}var date=this._getDateDatepicker(target);extendRemove(inst.settings,settings);this._setDateDatepicker(target,date);this._updateDatepicker(inst)}},_changeDatepicker:function(target,name,value){this._optionDatepicker(target,name,value)},_refreshDatepicker:function(target){var inst=this._getInst(target);if(inst){this._updateDatepicker(inst)}},_setDateDatepicker:function(target,date,endDate){var inst=this._getInst(target);if(inst){this._setDate(inst,date,endDate);this._updateDatepicker(inst);this._updateAlternate(inst)}},_getDateDatepicker:function(target){var inst=this._getInst(target);if(inst&&!inst.inline){this._setDateFromField(inst)}return(inst?this._getDate(inst):null)},_doKeyDown:function(event){var inst=$.datepicker._getInst(event.target);var handled=true;var isRTL=inst.dpDiv.is(".ui-datepicker-rtl");inst._keyEvent=true;if($.datepicker._datepickerShowing){switch(event.keyCode){case 9:$.datepicker._hideDatepicker(null,"");break;case 13:var sel=$("td."+$.datepicker._dayOverClass+", td."+$.datepicker._currentClass,inst.dpDiv);if(sel[0]){$.datepicker._selectDay(event.target,inst.selectedMonth,inst.selectedYear,sel[0])}else{$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"))}return false;break;case 27:$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"));break;case 33:$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M");break;case 34:$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M");break;case 35:if(event.ctrlKey||event.metaKey){$.datepicker._clearDate(event.target)}handled=event.ctrlKey||event.metaKey;break;case 36:if(event.ctrlKey||event.metaKey){$.datepicker._gotoToday(event.target)}handled=event.ctrlKey||event.metaKey;break;case 37:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?+1:-1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M")}break;case 38:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,-7,"D")}handled=event.ctrlKey||event.metaKey;break;case 39:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?-1:+1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M")}break;case 40:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,+7,"D")}handled=event.ctrlKey||event.metaKey;break;default:handled=false}}else{if(event.keyCode==36&&event.ctrlKey){$.datepicker._showDatepicker(this)}else{handled=false}}if(handled){event.preventDefault();event.stopPropagation()}},_doKeyPress:function(event){var inst=$.datepicker._getInst(event.target);if($.datepicker._get(inst,"constrainInput")){var chars=$.datepicker._possibleChars($.datepicker._get(inst,"dateFormat"));var chr=String.fromCharCode(event.charCode==undefined?event.keyCode:event.charCode);return event.ctrlKey||(chr<" "||!chars||chars.indexOf(chr)>-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDate<firstMon){checkDate.setDate(checkDate.getDate()-3);return $.datepicker.iso8601Week(checkDate)}else{if(checkDate>new Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)<firstDay-3){return 1}}}return Math.floor(((checkDate-firstMon)/86400000)/7)+1},parseDate:function(format,value,settings){if(format==null||value==null){throw"Invalid arguments"}value=(typeof value=="object"?value.toString():value+"");if(value==""){return null}var shortYearCutoff=(settings?settings.shortYearCutoff:null)||this._defaults.shortYearCutoff;var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var year=-1;var month=-1;var day=-1;var doy=-1;var literal=false;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var getNumber=function(match){lookAhead(match);var origSize=(match=="@"?14:(match=="y"?4:(match=="o"?3:2)));var size=origSize;var num=0;while(size>0&&iValue<value.length&&value.charAt(iValue)>="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j<names.length;j++){size=Math.max(size,names[j].length)}var name="";var iInit=iValue;while(size>0&&iValue<value.length){name+=value.charAt(iValue++);for(var i=0;i<names.length;i++){if(name==names[i]){return i+1}}size--}throw"Unknown name at position "+iInit};var checkLiteral=function(){if(value.charAt(iValue)!=format.charAt(iFormat)){throw"Unexpected literal at position "+iValue}iValue++};var iValue=0;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{checkLiteral()}}else{switch(format.charAt(iFormat)){case"d":day=getNumber("d");break;case"D":getName("D",dayNamesShort,dayNames);break;case"o":doy=getNumber("o");break;case"m":month=getNumber("m");break;case"M":month=getName("M",monthNamesShort,monthNames);break;case"y":year=getNumber("y");break;case"@":var date=new Date(getNumber("@"));year=date.getFullYear();month=date.getMonth()+1;day=date.getDate();break;case"'":if(lookAhead("'")){checkLiteral()}else{literal=true}break;default:checkLiteral()}}}if(year==-1){year=new Date().getFullYear()}else{if(year<100){year+=new Date().getFullYear()-new Date().getFullYear()%100+(year<=shortYearCutoff?0:-100)}}if(doy>-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var formatNumber=function(match,value,len){var num=""+value;if(lookAhead(match)){while(num.length<len){num="0"+num}}return num};var formatName=function(match,value,shortNames,longNames){return(lookAhead(match)?longNames[value]:shortNames[value])};var output="";var literal=false;if(date){for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{output+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":output+=formatNumber("d",date.getDate(),2);break;case"D":output+=formatName("D",date.getDay(),dayNamesShort,dayNames);break;case"o":var doy=date.getDate();for(var m=date.getMonth()-1;m>=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{chars+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":case"m":case"y":case"@":chars+="0123456789";break;case"D":case"M":return null;case"'":if(lookAhead("'")){chars+="'"}else{literal=true}break;default:chars+=format.charAt(iFormat)}}}return chars},_get:function(inst,name){return inst.settings[name]!==undefined?inst.settings[name]:this._defaults[name]},_setDateFromField:function(inst){var dateFormat=this._get(inst,"dateFormat");var dates=inst.input?inst.input.val():null;inst.endDay=inst.endMonth=inst.endYear=null;var date=defaultDate=this._getDefaultDate(inst);var settings=this._getFormatConfig(inst);try{date=this.parseDate(dateFormat,dates,settings)||defaultDate}catch(event){this.log(event);date=defaultDate}inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates?date.getDate():0);inst.currentMonth=(dates?date.getMonth():0);inst.currentYear=(dates?date.getFullYear():0);this._adjustInstDate(inst)},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,"defaultDate"),new Date());var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDraw<minDate?minDate:maxDraw);while(this._daylightSavingAdjust(new Date(drawYear,drawMonth,1))>maxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+"', -"+stepMonths+", 'M');\" title=\""+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>"));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+"', +"+stepMonths+", 'M');\" title=\""+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>"));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery.datepicker._hideDatepicker();">'+this._get(inst,"closeText")+"</button>":"");var buttonPanel=(showButtonPanel)?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery.datepicker._gotoToday(\'#'+inst.id+"');\">"+currentText+"</button>":"")+(isRTL?"":controls)+"</div>":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row<numMonths[0];row++){var group="";for(var col=0;col<numMonths[1];col++){var selectedDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,inst.selectedDay));var cornerClass=" ui-corner-all";var calender="";if(isMultiMonth){calender+='<div class="ui-datepicker-group ui-datepicker-group-';switch(col){case 0:calender+="first";cornerClass=" ui-corner-"+(isRTL?"right":"left");break;case numMonths[1]-1:calender+="last";cornerClass=" ui-corner-"+(isRTL?"left":"right");break;default:calender+="middle";cornerClass="";break}calender+='">'}calender+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+cornerClass+'">'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="<th"+((dow+firstDay+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+dayNames[day]+'">'+dayNamesMin[day]+"</span></th>"}calender+=thead+"</tr></thead><tbody>";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow<numRows;dRow++){calender+="<tr>";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDate<minDate)||(maxDate&&printDate>maxDate);tbody+='<td class="'+((dow+firstDay+6)%7>=5?" ui-datepicker-week-end":"")+(otherMonth?" ui-datepicker-other-month":"")+((printDate.getTime()==selectedDate.getTime()&&drawMonth==inst.selectedMonth&&inst._keyEvent)||(defaultDate.getTime()==printDate.getTime()&&defaultDate.getTime()==selectedDate.getTime())?" "+this._dayOverClass:"")+(unselectable?" "+this._unselectableClass+" ui-state-disabled":"")+(otherMonth&&!showOtherMonths?"":" "+daySettings[1]+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():"&#xa0;"):(unselectable?'<span class="ui-state-default">'+printDate.getDate()+"</span>":'<a class="ui-state-default'+(printDate.getTime()==today.getTime()?" ui-state-highlight":"")+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+"</a>"))+"</td>";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+"</tr>"}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="</tbody></table>"+(isMultiMonth?"</div>"+((numMonths[0]>0&&col==numMonths[1]-1)?'<div class="ui-datepicker-row-break"></div>':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate<minDate?selectedDate:minDate);var changeMonth=this._get(inst,"changeMonth");var changeYear=this._get(inst,"changeYear");var showMonthAfterYear=this._get(inst,"showMonthAfterYear");var html='<div class="ui-datepicker-title">';var monthHtml="";if(secondary||!changeMonth){monthHtml+='<span class="ui-datepicker-month">'+monthNames[drawMonth]+"</span> "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='<select class="ui-datepicker-month" onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'M');\" onclick=\"DP_jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())){monthHtml+='<option value="'+month+'"'+(month==drawMonth?' selected="selected"':"")+">"+monthNamesShort[month]+"</option>"}}monthHtml+="</select>"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?"&#xa0;":"")}if(secondary||!changeYear){html+='<span class="ui-datepicker-year">'+drawYear+"</span>"}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='<select class="ui-datepicker-year" onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'Y');\" onclick=\"DP_jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(;year<=endYear;year++){html+='<option value="'+year+'"'+(year==drawYear?' selected="selected"':"")+">"+year+"</option>"}html+="</select>"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?"&#xa0;":"")+monthHtml}html+="</div>";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart<newMinDate?inst.rangeStart:newMinDate);var minDate=newMinDate||this._getMinMaxDate(inst,"min");var maxDate=this._getMinMaxDate(inst,"max");return((!minDate||date>=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}if(options=="option"&&arguments.length==2&&typeof arguments[1]=="string"){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.2";window.DP_jQuery=$})(jQuery);;/*
+ * jQuery UI Progressbar 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ *   ui.core.js
+ */
+(function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('<div class="ui-progressbar-value ui-widget-header ui-corner-left"></div>').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setData("value",b);return this},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.2",defaults:{value:0}})})(jQuery);;/*
+ * jQuery UI Effects 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */
+jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.data("ec.storage."+h[f],g[0].style[h[f]])}}},restore:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.css(h[f],g.data("ec.storage."+h[f]))}}},setMode:function(f,g){if(g=="toggle"){g=f.is(":hidden")?"show":"hide"}return g},getBaseline:function(g,h){var i,f;switch(g[0]){case"top":i=0;break;case"middle":i=0.5;break;case"bottom":i=1;break;default:i=g[0]/h.height}switch(g[1]){case"left":f=0;break;case"center":f=0.5;break;case"right":f=1;break;default:f=g[1]/h.width}return{x:f,y:i}},createWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent()}var g={width:f.outerWidth(true),height:f.outerHeight(true),"float":f.css("float")};f.wrap('<div class="ui-effects-wrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');var j=f.parent();if(f.css("position")=="static"){j.css({position:"relative"});f.css({position:"relative"})}else{var i=f.css("top");if(isNaN(parseInt(i,10))){i="auto"}var h=f.css("left");if(isNaN(parseInt(h,10))){h="auto"}j.css({position:f.css("position"),top:i,left:h,zIndex:f.css("z-index")}).show();f.css({position:"relative",top:0,left:0})}j.css(g);return j},removeWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent().replaceWith(f)}return f},setTransition:function(g,i,f,h){h=h||{};d.each(i,function(k,j){unit=g.cssUnit(j);if(unit[0]>0){h[j]=unit[0]*f+unit[1]}});return h},animateClass:function(h,i,k,j){var f=(typeof k=="function"?k:(j?j:null));var g=(typeof k=="string"?k:null);return this.each(function(){var q={};var o=d(this);var p=o.attr("style")||"";if(typeof p=="object"){p=p.cssText}if(h.toggle){o.hasClass(h.toggle)?h.remove=h.toggle:h.add=h.toggle}var l=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.addClass(h.add)}if(h.remove){o.removeClass(h.remove)}var m=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.removeClass(h.add)}if(h.remove){o.addClass(h.remove)}for(var r in m){if(typeof m[r]!="function"&&m[r]&&r.indexOf("Moz")==-1&&r.indexOf("length")==-1&&m[r]!=l[r]&&(r.match(/color/i)||(!r.match(/color/i)&&!isNaN(parseInt(m[r],10))))&&(l.position!="static"||(l.position=="static"&&!r.match(/left|top|bottom|right/)))){q[r]=m[r]}}o.animate(q,i,g,function(){if(typeof d(this).attr("style")=="object"){d(this).attr("style")["cssText"]="";d(this).attr("style")["cssText"]=p}else{d(this).attr("style",p)}if(h.add){d(this).addClass(h.add)}if(h.remove){d(this).removeClass(h.remove)}if(f){f.apply(this,arguments)}})})}};function c(g,f){var i=g[1]&&g[1].constructor==Object?g[1]:{};if(f){i.mode=f}var h=g[1]&&g[1].constructor!=Object?g[1]:(i.duration?i.duration:g[2]);h=d.fx.off?0:typeof h==="number"?h:d.fx.speeds[h]||d.fx.speeds._default;var j=i.callback||(d.isFunction(g[1])&&g[1])||(d.isFunction(g[2])&&g[2])||(d.isFunction(g[3])&&g[3]);return[g[0],i,h,j]}d.fn.extend({_show:d.fn.show,_hide:d.fn.hide,__toggle:d.fn.toggle,_addClass:d.fn.addClass,_removeClass:d.fn.removeClass,_toggleClass:d.fn.toggleClass,effect:function(g,f,h,i){return d.effects[g]?d.effects[g].call(this,{method:g,options:f||{},duration:h,callback:i}):null},show:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._show.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"show"))}},hide:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._hide.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"hide"))}},toggle:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))||(d.isFunction(arguments[0])||typeof arguments[0]=="boolean")){return this.__toggle.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"toggle"))}},addClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{add:g},f,i,h]):this._addClass(g)},removeClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{remove:g},f,i,h]):this._removeClass(g)},toggleClass:function(g,f,i,h){return((typeof f!=="boolean")&&f)?d.effects.animateClass.apply(this,[{toggle:g},f,i,h]):this._toggleClass(g,f)},morph:function(f,h,g,j,i){return d.effects.animateClass.apply(this,[{add:h,remove:f},g,j,i])},switchClass:function(){return this.morph.apply(this,arguments)},cssUnit:function(f){var g=this.css(f),h=[];d.each(["em","px","%","pt"],function(j,k){if(g.indexOf(k)>0){h=[parseFloat(g),k]}});return h}});d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(g,f){d.fx.step[f]=function(h){if(h.state==0){h.start=e(h.elem,f);h.end=b(h.end)}h.elem.style[f]="rgb("+[Math.max(Math.min(parseInt((h.pos*(h.end[0]-h.start[0]))+h.start[0],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[1]-h.start[1]))+h.start[1],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[2]-h.start[2]))+h.start[2],10),255),0)].join(",")+")"}});function b(g){var f;if(g&&g.constructor==Array&&g.length==3){return g}if(f=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(g)){return[parseInt(f[1],10),parseInt(f[2],10),parseInt(f[3],10)]}if(f=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(g)){return[parseFloat(f[1])*2.55,parseFloat(f[2])*2.55,parseFloat(f[3])*2.55]}if(f=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(g)){return[parseInt(f[1],16),parseInt(f[2],16),parseInt(f[3],16)]}if(f=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(g)){return[parseInt(f[1]+f[1],16),parseInt(f[2]+f[2],16),parseInt(f[3]+f[3],16)]}if(f=/rgba\(0, 0, 0, 0\)/.exec(g)){return a.transparent}return a[d.trim(g).toLowerCase()]}function e(h,f){var g;do{g=d.curCSS(h,f);if(g!=""&&g!="transparent"||d.nodeName(h,"body")){break}f="backgroundColor"}while(h=h.parentNode);return b(g)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};d.easing.jswing=d.easing.swing;d.extend(d.easing,{def:"easeOutQuad",swing:function(g,h,f,j,i){return d.easing[d.easing.def](g,h,f,j,i)},easeInQuad:function(g,h,f,j,i){return j*(h/=i)*h+f},easeOutQuad:function(g,h,f,j,i){return -j*(h/=i)*(h-2)+f},easeInOutQuad:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h+f}return -j/2*((--h)*(h-2)-1)+f},easeInCubic:function(g,h,f,j,i){return j*(h/=i)*h*h+f},easeOutCubic:function(g,h,f,j,i){return j*((h=h/i-1)*h*h+1)+f},easeInOutCubic:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h+f}return j/2*((h-=2)*h*h+2)+f},easeInQuart:function(g,h,f,j,i){return j*(h/=i)*h*h*h+f},easeOutQuart:function(g,h,f,j,i){return -j*((h=h/i-1)*h*h*h-1)+f},easeInOutQuart:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h+f}return -j/2*((h-=2)*h*h*h-2)+f},easeInQuint:function(g,h,f,j,i){return j*(h/=i)*h*h*h*h+f},easeOutQuint:function(g,h,f,j,i){return j*((h=h/i-1)*h*h*h*h+1)+f},easeInOutQuint:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h*h+f}return j/2*((h-=2)*h*h*h*h+2)+f},easeInSine:function(g,h,f,j,i){return -j*Math.cos(h/i*(Math.PI/2))+j+f},easeOutSine:function(g,h,f,j,i){return j*Math.sin(h/i*(Math.PI/2))+f},easeInOutSine:function(g,h,f,j,i){return -j/2*(Math.cos(Math.PI*h/i)-1)+f},easeInExpo:function(g,h,f,j,i){return(h==0)?f:j*Math.pow(2,10*(h/i-1))+f},easeOutExpo:function(g,h,f,j,i){return(h==i)?f+j:j*(-Math.pow(2,-10*h/i)+1)+f},easeInOutExpo:function(g,h,f,j,i){if(h==0){return f}if(h==i){return f+j}if((h/=i/2)<1){return j/2*Math.pow(2,10*(h-1))+f}return j/2*(-Math.pow(2,-10*--h)+2)+f},easeInCirc:function(g,h,f,j,i){return -j*(Math.sqrt(1-(h/=i)*h)-1)+f},easeOutCirc:function(g,h,f,j,i){return j*Math.sqrt(1-(h=h/i-1)*h)+f},easeInOutCirc:function(g,h,f,j,i){if((h/=i/2)<1){return -j/2*(Math.sqrt(1-h*h)-1)+f}return j/2*(Math.sqrt(1-(h-=2)*h)+1)+f},easeInElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return -(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f},easeOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return h*Math.pow(2,-10*i)*Math.sin((i*l-j)*(2*Math.PI)/k)+m+f},easeInOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l/2)==2){return f+m}if(!k){k=l*(0.3*1.5)}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}if(i<1){return -0.5*(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f}return h*Math.pow(2,-10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k)*0.5+m+f},easeInBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*(h/=j)*h*((i+1)*h-i)+f},easeOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*((h=h/j-1)*h*((i+1)*h+i)+1)+f},easeInOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}if((h/=j/2)<1){return k/2*(h*h*(((i*=(1.525))+1)*h-i))+f}return k/2*((h-=2)*h*(((i*=(1.525))+1)*h+i)+2)+f},easeInBounce:function(g,h,f,j,i){return j-d.easing.easeOutBounce(g,i-h,0,j,i)+f},easeOutBounce:function(g,h,f,j,i){if((h/=i)<(1/2.75)){return j*(7.5625*h*h)+f}else{if(h<(2/2.75)){return j*(7.5625*(h-=(1.5/2.75))*h+0.75)+f}else{if(h<(2.5/2.75)){return j*(7.5625*(h-=(2.25/2.75))*h+0.9375)+f}else{return j*(7.5625*(h-=(2.625/2.75))*h+0.984375)+f}}}},easeInOutBounce:function(g,h,f,j,i){if(h<i/2){return d.easing.easeInBounce(g,h*2,0,j,i)*0.5+f}return d.easing.easeOutBounce(g,h*2-i,0,j,i)*0.5+j*0.5+f}})})(jQuery);;/*
+ * jQuery UI Effects Blind 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Blind
+ *
+ * Depends:
+ *     effects.core.js
+ */
+(function(a){a.effects.blind=function(b){return this.queue(function(){var d=a(this),c=["position","top","left"];var h=a.effects.setMode(d,b.options.mode||"hide");var g=b.options.direction||"vertical";a.effects.save(d,c);d.show();var j=a.effects.createWrapper(d).css({overflow:"hidden"});var e=(g=="vertical")?"height":"width";var i=(g=="vertical")?j.height():j.width();if(h=="show"){j.css(e,0)}var f={};f[e]=h=="show"?i:0;j.animate(f,b.duration,b.options.easing,function(){if(h=="hide"){d.hide()}a.effects.restore(d,c);a.effects.removeWrapper(d);if(b.callback){b.callback.apply(d[0],arguments)}d.dequeue()})})}})(jQuery);;/*
+ * jQuery UI Effects Bounce 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Bounce
+ *
+ * Depends:
+ *     effects.core.js
+ */
+(function(a){a.effects.bounce=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"up";var c=b.options.distance||20;var d=b.options.times||5;var g=b.duration||250;if(/show|hide/.test(k)){l.push("opacity")}a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var c=b.options.distance||(f=="top"?e.outerHeight({margin:true})/3:e.outerWidth({margin:true})/3);if(k=="show"){e.css("opacity",0).css(f,p=="pos"?-c:c)}if(k=="hide"){c=c/(d*2)}if(k!="hide"){d--}if(k=="show"){var h={opacity:1};h[f]=(p=="pos"?"+=":"-=")+c;e.animate(h,g/2,b.options.easing);c=c/2;d--}for(var j=0;j<d;j++){var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing);c=(k=="hide")?c*2:c/2}if(k=="hide"){var h={opacity:0};h[f]=(p=="pos"?"-=":"+=")+c;e.animate(h,g/2,b.options.easing,function(){e.hide();a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}else{var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
+ * jQuery UI Effects Clip 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Clip
+ *
+ * Depends:
+ *     effects.core.js
+ */
+(function(a){a.effects.clip=function(b){return this.queue(function(){var f=a(this),j=["position","top","left","height","width"];var i=a.effects.setMode(f,b.options.mode||"hide");var k=b.options.direction||"vertical";a.effects.save(f,j);f.show();var c=a.effects.createWrapper(f).css({overflow:"hidden"});var e=f[0].tagName=="IMG"?c:f;var g={size:(k=="vertical")?"height":"width",position:(k=="vertical")?"top":"left"};var d=(k=="vertical")?e.height():e.width();if(i=="show"){e.css(g.size,0);e.css(g.position,d/2)}var h={};h[g.size]=i=="show"?d:0;h[g.position]=i=="show"?0:d/2;e.animate(h,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){f.hide()}a.effects.restore(f,j);a.effects.removeWrapper(f);if(b.callback){b.callback.apply(f[0],arguments)}f.dequeue()}})})}})(jQuery);;/*
+ * jQuery UI Effects Drop 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Drop
+ *
+ * Depends:
+ *     effects.core.js
+ */
+(function(a){a.effects.drop=function(b){return this.queue(function(){var e=a(this),d=["position","top","left","opacity"];var i=a.effects.setMode(e,b.options.mode||"hide");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e);var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true})/2:e.outerWidth({margin:true})/2);if(i=="show"){e.css("opacity",0).css(f,c=="pos"?-j:j)}var g={opacity:i=="show"?1:0};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
+ * jQuery UI Effects Explode 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Explode
+ *
+ * Depends:
+ *     effects.core.js
+ */
+(function(a){a.effects.explode=function(b){return this.queue(function(){var k=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;var e=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?(a(this).is(":visible")?"hide":"show"):b.options.mode;var h=a(this).show().css("visibility","hidden");var l=h.offset();l.top-=parseInt(h.css("marginTop"),10)||0;l.left-=parseInt(h.css("marginLeft"),10)||0;var g=h.outerWidth(true);var c=h.outerHeight(true);for(var f=0;f<k;f++){for(var d=0;d<e;d++){h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-d*(g/e),top:-f*(c/k)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/e,height:c/k,left:l.left+d*(g/e)+(b.options.mode=="show"?(d-Math.floor(e/2))*(g/e):0),top:l.top+f*(c/k)+(b.options.mode=="show"?(f-Math.floor(k/2))*(c/k):0),opacity:b.options.mode=="show"?0:1}).animate({left:l.left+d*(g/e)+(b.options.mode=="show"?0:(d-Math.floor(e/2))*(g/e)),top:l.top+f*(c/k)+(b.options.mode=="show"?0:(f-Math.floor(k/2))*(c/k)),opacity:b.options.mode=="show"?1:0},b.duration||500)}}setTimeout(function(){b.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();if(b.callback){b.callback.apply(h[0])}h.dequeue();a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/*
+ * jQuery UI Effects Fold 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Fold
+ *
+ * Depends:
+ *     effects.core.js
+ */
+(function(a){a.effects.fold=function(b){return this.queue(function(){var e=a(this),k=["position","top","left"];var h=a.effects.setMode(e,b.options.mode||"hide");var o=b.options.size||15;var n=!(!b.options.horizFirst);var g=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(e,k);e.show();var d=a.effects.createWrapper(e).css({overflow:"hidden"});var i=((h=="show")!=n);var f=i?["width","height"]:["height","width"];var c=i?[d.width(),d.height()]:[d.height(),d.width()];var j=/([0-9]+)%/.exec(o);if(j){o=parseInt(j[1],10)/100*c[h=="hide"?0:1]}if(h=="show"){d.css(n?{height:0,width:o}:{height:o,width:0})}var m={},l={};m[f[0]]=h=="show"?c[0]:o;l[f[1]]=h=="show"?c[1]:0;d.animate(m,g,b.options.easing).animate(l,g,b.options.easing,function(){if(h=="hide"){e.hide()}a.effects.restore(e,k);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(e[0],arguments)}e.dequeue()})})}})(jQuery);;/*
+ * jQuery UI Effects Highlight 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Highlight
+ *
+ * Depends:
+ *     effects.core.js
+ */
+(function(a){a.effects.highlight=function(b){return this.queue(function(){var e=a(this),d=["backgroundImage","backgroundColor","opacity"];var h=a.effects.setMode(e,b.options.mode||"show");var c=b.options.color||"#ffff99";var g=e.css("backgroundColor");a.effects.save(e,d);e.show();e.css({backgroundImage:"none",backgroundColor:c});var f={backgroundColor:g};if(h=="hide"){f.opacity=0}e.animate(f,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(h=="hide"){e.hide()}a.effects.restore(e,d);if(h=="show"&&a.browser.msie){this.style.removeAttribute("filter")}if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
+ * jQuery UI Effects Pulsate 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Pulsate
+ *
+ * Depends:
+ *     effects.core.js
+ */
+(function(a){a.effects.pulsate=function(b){return this.queue(function(){var d=a(this);var g=a.effects.setMode(d,b.options.mode||"show");var f=b.options.times||5;var e=b.duration?b.duration/2:a.fx.speeds._default/2;if(g=="hide"){f--}if(d.is(":hidden")){d.css("opacity",0);d.show();d.animate({opacity:1},e,b.options.easing);f=f-2}for(var c=0;c<f;c++){d.animate({opacity:0},e,b.options.easing).animate({opacity:1},e,b.options.easing)}if(g=="hide"){d.animate({opacity:0},e,b.options.easing,function(){d.hide();if(b.callback){b.callback.apply(this,arguments)}})}else{d.animate({opacity:0},e,b.options.easing).animate({opacity:1},e,b.options.easing,function(){if(b.callback){b.callback.apply(this,arguments)}})}d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);;/*
+ * jQuery UI Effects Scale 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Scale
+ *
+ * Depends:
+ *     effects.core.js
+ */
+(function(a){a.effects.puff=function(b){return this.queue(function(){var f=a(this);var c=a.extend(true,{},b.options);var h=a.effects.setMode(f,b.options.mode||"hide");var g=parseInt(b.options.percent,10)||150;c.fade=true;var e={height:f.height(),width:f.width()};var d=g/100;f.from=(h=="hide")?e:{height:e.height*d,width:e.width*d};c.from=f.from;c.percent=(h=="hide")?g:100;c.mode=h;f.effect("scale",c,b.duration,b.callback);f.dequeue()})};a.effects.scale=function(b){return this.queue(function(){var g=a(this);var d=a.extend(true,{},b.options);var j=a.effects.setMode(g,b.options.mode||"effect");var h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:(j=="hide"?0:100));var i=b.options.direction||"both";var c=b.options.origin;if(j!="effect"){d.origin=c||["middle","center"];d.restore=true}var f={height:g.height(),width:g.width()};g.from=b.options.from||(j=="show"?{height:0,width:0}:f);var e={y:i!="horizontal"?(h/100):1,x:i!="vertical"?(h/100):1};g.to={height:f.height*e.y,width:f.width*e.x};if(b.options.fade){if(j=="show"){g.from.opacity=0;g.to.opacity=1}if(j=="hide"){g.from.opacity=1;g.to.opacity=0}}d.from=g.from;d.to=g.to;d.mode=j;g.effect("size",d,b.duration,b.callback);g.dequeue()})};a.effects.size=function(b){return this.queue(function(){var c=a(this),n=["position","top","left","width","height","overflow","opacity"];var m=["position","top","left","overflow","opacity"];var j=["width","height","overflow"];var p=["fontSize"];var k=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"];var f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"];var g=a.effects.setMode(c,b.options.mode||"effect");var i=b.options.restore||false;var e=b.options.scale||"both";var o=b.options.origin;var d={height:c.height(),width:c.width()};c.from=b.options.from||d;c.to=b.options.to||d;if(o){var h=a.effects.getBaseline(o,d);c.from.top=(d.height-c.from.height)*h.y;c.from.left=(d.width-c.from.width)*h.x;c.to.top=(d.height-c.to.height)*h.y;c.to.left=(d.width-c.to.width)*h.x}var l={from:{y:c.from.height/d.height,x:c.from.width/d.width},to:{y:c.to.height/d.height,x:c.to.width/d.width}};if(e=="box"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(k);c.from=a.effects.setTransition(c,k,l.from.y,c.from);c.to=a.effects.setTransition(c,k,l.to.y,c.to)}if(l.from.x!=l.to.x){n=n.concat(f);c.from=a.effects.setTransition(c,f,l.from.x,c.from);c.to=a.effects.setTransition(c,f,l.to.x,c.to)}}if(e=="content"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(p);c.from=a.effects.setTransition(c,p,l.from.y,c.from);c.to=a.effects.setTransition(c,p,l.to.y,c.to)}}a.effects.save(c,i?n:m);c.show();a.effects.createWrapper(c);c.css("overflow","hidden").css(c.from);if(e=="content"||e=="both"){k=k.concat(["marginTop","marginBottom"]).concat(p);f=f.concat(["marginLeft","marginRight"]);j=n.concat(k).concat(f);c.find("*[width]").each(function(){child=a(this);if(i){a.effects.save(child,j)}var q={height:child.height(),width:child.width()};child.from={height:q.height*l.from.y,width:q.width*l.from.x};child.to={height:q.height*l.to.y,width:q.width*l.to.x};if(l.from.y!=l.to.y){child.from=a.effects.setTransition(child,k,l.from.y,child.from);child.to=a.effects.setTransition(child,k,l.to.y,child.to)}if(l.from.x!=l.to.x){child.from=a.effects.setTransition(child,f,l.from.x,child.from);child.to=a.effects.setTransition(child,f,l.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){if(i){a.effects.restore(child,j)}})})}c.animate(c.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(g=="hide"){c.hide()}a.effects.restore(c,i?n:m);a.effects.removeWrapper(c);if(b.callback){b.callback.apply(this,arguments)}c.dequeue()}})})}})(jQuery);;/*
+ * jQuery UI Effects Shake 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Shake
+ *
+ * Depends:
+ *     effects.core.js
+ */
+(function(a){a.effects.shake=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"left";var c=b.options.distance||20;var d=b.options.times||3;var g=b.duration||b.options.duration||140;a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var h={},o={},m={};h[f]=(p=="pos"?"-=":"+=")+c;o[f]=(p=="pos"?"+=":"-=")+c*2;m[f]=(p=="pos"?"-=":"+=")+c*2;e.animate(h,g,b.options.easing);for(var j=1;j<d;j++){e.animate(o,g,b.options.easing).animate(m,g,b.options.easing)}e.animate(o,g,b.options.easing).animate(h,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}});e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
+ * jQuery UI Effects Slide 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Slide
+ *
+ * Depends:
+ *     effects.core.js
+ */
+(function(a){a.effects.slide=function(b){return this.queue(function(){var e=a(this),d=["position","top","left"];var i=a.effects.setMode(e,b.options.mode||"show");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e).css({overflow:"hidden"});var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true}):e.outerWidth({margin:true}));if(i=="show"){e.css(f,c=="pos"?-j:j)}var g={};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
+ * jQuery UI Effects Transfer 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Transfer
+ *
+ * Depends:
+ *     effects.core.js
+ */
+(function(a){a.effects.transfer=function(b){return this.queue(function(){var f=a(this),h=a(b.options.to),e=h.offset(),g={top:e.top,left:e.left,height:h.innerHeight(),width:h.innerWidth()},d=f.offset(),c=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:d.top,left:d.left,height:f.innerHeight(),width:f.innerWidth(),position:"absolute"}).animate(g,b.duration,b.options.easing,function(){c.remove();(b.callback&&b.callback.apply(f[0],arguments));f.dequeue()})})}})(jQuery);;
\ No newline at end of file
diff --git a/app/webroot/media/static/gen/jquery.droppy.js b/app/webroot/media/static/gen/jquery.droppy.js
new file mode 100644 (file)
index 0000000..7e1f9e1
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Droppy 0.1.2
+ * (c) 2008 Jason Frame (jason@onehackoranother.com)
+ */
+(function($) {
+  
+  $.fn.droppy = function(options) {
+
+    options = $.extend({speed: 250, className: 'droppy'}, options || {});
+
+    this.each(function() {
+
+      var root = this, zIndex = 1000;
+
+      $(root).addClass(options.className);
+                       $(root).find('li:has(> ul) > a').addClass('has-subnav');
+
+      function getSubnav(ele) {
+        if (ele.nodeName.toLowerCase() == 'li') {
+          var subnav = $('> ul', ele);
+          return subnav.length ? subnav[0] : null;
+        } else {
+          return ele;
+        }
+      };
+
+      function getActuator(ele) {
+        if (ele.nodeName.toLowerCase() == 'ul') {
+          return $(ele).parents('li')[0];
+        } else {
+          return ele;
+        }
+      };
+
+      function hide() {
+        var subnav = getSubnav(this);
+        if (!subnav) return;
+        $.data(subnav, 'cancelHide', false);
+        setTimeout(function() {
+          if (!$.data(subnav, 'cancelHide')) {
+            $(subnav).slideUp(options.speed);
+          }
+        }, 500);
+      };
+
+      function show() {
+        var subnav = getSubnav(this);
+        if (!subnav) return;
+        $.data(subnav, 'cancelHide', true);
+        $(subnav).css({zIndex: zIndex++}).slideDown(options.speed);
+        if (this.nodeName.toLowerCase() == 'ul') {
+          var li = getActuator(this);
+          $(li).addClass('hover');
+          $('> a', li).addClass('hover');
+        }
+      };
+      
+      if (typeof $.fn.hoverIntent == 'function') {
+          $('ul, li', this).hoverIntent($.extend({
+              sensitivity: 2, interval: 50, timeout: 100
+          }, options.hoverIntent || {}, {over: show, out: hide}));
+      } else {
+          $('ul, li', this).hover(show, hide);
+      }
+      
+        $('li', this).hover(
+        function() { $(this).addClass('hover'); $('> a', this).addClass('hover'); },
+        function() { $(this).removeClass('hover'); $('> a', this).removeClass('hover'); }
+      );
+
+    });
+
+  };
+
+})(jQuery);
diff --git a/app/webroot/media/static/img/cake.icon.gif b/app/webroot/media/static/img/cake.icon.gif
new file mode 100644 (file)
index 0000000..f29f72e
Binary files /dev/null and b/app/webroot/media/static/img/cake.icon.gif differ
diff --git a/app/webroot/media/static/img/cake.power.gif b/app/webroot/media/static/img/cake.power.gif
new file mode 100644 (file)
index 0000000..8f8d570
Binary files /dev/null and b/app/webroot/media/static/img/cake.power.gif differ
diff --git a/app/webroot/media/static/img/favicon.ico b/app/webroot/media/static/img/favicon.ico
new file mode 100644 (file)
index 0000000..b36e81f
Binary files /dev/null and b/app/webroot/media/static/img/favicon.ico differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-bg_glass_55_fcf0ba_1x400.png b/app/webroot/media/static/img/jquery-images/ui-bg_glass_55_fcf0ba_1x400.png
new file mode 100644 (file)
index 0000000..a95fa33
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-bg_glass_55_fcf0ba_1x400.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-bg_gloss-wave_100_ece8da_500x100.png b/app/webroot/media/static/img/jquery-images/ui-bg_gloss-wave_100_ece8da_500x100.png
new file mode 100644 (file)
index 0000000..709b5ab
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-bg_gloss-wave_100_ece8da_500x100.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_100_f5f3e5_1x100.png b/app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_100_f5f3e5_1x100.png
new file mode 100644 (file)
index 0000000..6045f63
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_100_f5f3e5_1x100.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_100_fafaf4_1x100.png b/app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_100_fafaf4_1x100.png
new file mode 100644 (file)
index 0000000..bfc39c6
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_100_fafaf4_1x100.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_15_459e00_1x100.png b/app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_15_459e00_1x100.png
new file mode 100644 (file)
index 0000000..5f60925
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_15_459e00_1x100.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_95_cccccc_1x100.png b/app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_95_cccccc_1x100.png
new file mode 100644 (file)
index 0000000..ca80bff
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-bg_highlight-hard_95_cccccc_1x100.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-bg_highlight-soft_25_67b021_1x100.png b/app/webroot/media/static/img/jquery-images/ui-bg_highlight-soft_25_67b021_1x100.png
new file mode 100644 (file)
index 0000000..5177335
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-bg_highlight-soft_25_67b021_1x100.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-bg_highlight-soft_95_ffedad_1x100.png b/app/webroot/media/static/img/jquery-images/ui-bg_highlight-soft_95_ffedad_1x100.png
new file mode 100644 (file)
index 0000000..12686a5
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-bg_highlight-soft_95_ffedad_1x100.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-bg_inset-soft_15_2b2922_1x100.png b/app/webroot/media/static/img/jquery-images/ui-bg_inset-soft_15_2b2922_1x100.png
new file mode 100644 (file)
index 0000000..8568394
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-bg_inset-soft_15_2b2922_1x100.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-icons_808080_256x240.png b/app/webroot/media/static/img/jquery-images/ui-icons_808080_256x240.png
new file mode 100644 (file)
index 0000000..a89974f
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-icons_808080_256x240.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-icons_847e71_256x240.png b/app/webroot/media/static/img/jquery-images/ui-icons_847e71_256x240.png
new file mode 100644 (file)
index 0000000..d7c689a
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-icons_847e71_256x240.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-icons_8DC262_256x240.png b/app/webroot/media/static/img/jquery-images/ui-icons_8DC262_256x240.png
new file mode 100644 (file)
index 0000000..f087a16
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-icons_8DC262_256x240.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-icons_cd0a0a_256x240.png b/app/webroot/media/static/img/jquery-images/ui-icons_cd0a0a_256x240.png
new file mode 100644 (file)
index 0000000..7930a55
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-icons_cd0a0a_256x240.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-icons_eeeeee_256x240.png b/app/webroot/media/static/img/jquery-images/ui-icons_eeeeee_256x240.png
new file mode 100644 (file)
index 0000000..0f60311
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-icons_eeeeee_256x240.png differ
diff --git a/app/webroot/media/static/img/jquery-images/ui-icons_ffffff_256x240.png b/app/webroot/media/static/img/jquery-images/ui-icons_ffffff_256x240.png
new file mode 100644 (file)
index 0000000..bef5178
Binary files /dev/null and b/app/webroot/media/static/img/jquery-images/ui-icons_ffffff_256x240.png differ
diff --git a/app/webroot/media/transfer/.htaccess b/app/webroot/media/transfer/.htaccess
new file mode 100755 (executable)
index 0000000..93169e4
--- /dev/null
@@ -0,0 +1,2 @@
+Order deny,allow
+Deny from all